From 677dc19dc52428cd8f64bc35efaf014f1ffc64cc Mon Sep 17 00:00:00 2001 From: Mick de Graaf Date: Mon, 27 Apr 2020 12:06:55 +0200 Subject: [PATCH] Removed recipes from this repository --- contracts/recipes/PUniswapKyberPoolRecipe.sol | 82 ---- contracts/recipes/PUniswapPoolRecipe.sol | 141 ------- test/pUniswapKyberPoolRecipe.ts | 192 --------- test/pUniswapPoolRecipe.ts | 178 --------- typechain/PBasicSmartPoolFactory.ts | 2 +- typechain/PCappedSmartPoolFactory.ts | 2 +- typechain/PProxiedFactoryFactory.ts | 2 +- typechain/PUniswapKyberPoolRecipe.d.ts | 312 --------------- typechain/PUniswapKyberPoolRecipeFactory.ts | 367 ------------------ typechain/PUniswapPoolRecipe.d.ts | 203 ---------- typechain/PUniswapPoolRecipeFactory.ts | 241 ------------ typechain/PUnsiwapPoolRecipe.d.ts | 185 --------- typechain/PUnsiwapPoolRecipeFactory.ts | 242 ------------ 13 files changed, 3 insertions(+), 2146 deletions(-) delete mode 100644 contracts/recipes/PUniswapKyberPoolRecipe.sol delete mode 100644 contracts/recipes/PUniswapPoolRecipe.sol delete mode 100644 test/pUniswapKyberPoolRecipe.ts delete mode 100644 test/pUniswapPoolRecipe.ts delete mode 100644 typechain/PUniswapKyberPoolRecipe.d.ts delete mode 100644 typechain/PUniswapKyberPoolRecipeFactory.ts delete mode 100644 typechain/PUniswapPoolRecipe.d.ts delete mode 100644 typechain/PUniswapPoolRecipeFactory.ts delete mode 100644 typechain/PUnsiwapPoolRecipe.d.ts delete mode 100644 typechain/PUnsiwapPoolRecipeFactory.ts diff --git a/contracts/recipes/PUniswapKyberPoolRecipe.sol b/contracts/recipes/PUniswapKyberPoolRecipe.sol deleted file mode 100644 index f175e12..0000000 --- a/contracts/recipes/PUniswapKyberPoolRecipe.sol +++ /dev/null @@ -1,82 +0,0 @@ -pragma solidity 0.6.4; - -import "./PUniswapPoolRecipe.sol"; -import "../Ownable.sol"; -import "../interfaces/IKyberNetwork.sol"; - -contract PUniswapKyberPoolRecipe is PUniswapPoolRecipe, Ownable { - - bytes32 constant public ukprSlot = keccak256("PUniswapKyberPoolRecipe.storage.location"); - - // Uniswap pool recipe struct - struct ukprs { - mapping(address => bool) swapOnKyber; - IKyberNetwork kyber; - address feeReceiver; - } - - address public constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; - - function init(address, address) public override { - require(false, "not enabled"); - } - - // Use seperate init function - function initUK(address _pool, address _uniswapFactory, address _kyber, address[] memory _swapOnKyber, address _feeReciever) public { - // UnsiwapRecipe enforces that init can only be called once - ukprs storage s = lukprs(); - - PUniswapPoolRecipe.init(_pool, _uniswapFactory); - s.kyber = IKyberNetwork(_kyber); - s.feeReceiver = _feeReciever; - - _setOwner(msg.sender); - - for(uint256 i = 0; i < _swapOnKyber.length; i ++) { - s.swapOnKyber[_swapOnKyber[i]] = true; - } - } - - function setKyberSwap(address _token, bool _value) external onlyOwner { - ukprs storage s = lukprs(); - s.swapOnKyber[_token] = _value; - } - - function _ethToToken(address _token, uint256 _tokens_bought) internal override returns (uint256) { - ukprs storage s = lukprs(); - if(!s.swapOnKyber[_token]) { - return super._ethToToken(_token, _tokens_bought); - } - - uint256 ethBefore = address(this).balance; - s.kyber.trade{value: address(this).balance}(ETH, address(this).balance, _token, address(this), _tokens_bought, 1, s.feeReceiver); - uint256 ethAfter = address(this).balance; - - // return amount of ETH spend - return ethBefore - ethAfter; - } - - function _tokenToEth(IERC20 _token, uint256 _tokens_sold, address _recipient) internal override returns (uint256 eth_bought) { - ukprs storage s = lukprs(); - if(!s.swapOnKyber[address(_token)]) { - return super._tokenToEth(_token, _tokens_sold, _recipient); - } - - uint256 ethBefore = address(this).balance; - _token.approve(address(s.kyber), uint256(-1)); - s.kyber.trade(address(_token), _tokens_sold, ETH, address(this), uint256(-1), 1, s.feeReceiver); - uint256 ethAfter = address(this).balance; - - // return amount of ETH received - return ethAfter - ethBefore; - } - - // Load uniswap pool recipe - function lukprs() internal pure returns (ukprs storage s) { - bytes32 loc = ukprSlot; - assembly { - s_slot := loc - } - } - -} \ No newline at end of file diff --git a/contracts/recipes/PUniswapPoolRecipe.sol b/contracts/recipes/PUniswapPoolRecipe.sol deleted file mode 100644 index 8054642..0000000 --- a/contracts/recipes/PUniswapPoolRecipe.sol +++ /dev/null @@ -1,141 +0,0 @@ -pragma solidity 0.6.4; - -import "../interfaces/IERC20.sol"; -import "../interfaces/IPSmartPool.sol"; -import "../interfaces/IUniswapFactory.sol"; -import "../interfaces/IUniswapExchange.sol"; - -// Takes ETH and mints smart pool tokens -contract PUniswapPoolRecipe { - - bytes32 constant public uprSlot = keccak256("PUniswapPoolRecipe.storage.location"); - - // Uniswap pool recipe struct - struct uprs { - IPSmartPool pool; - IUniswapFactory uniswapFactory; - } - - function init(address _pool, address _uniswapFactory) public virtual { - uprs storage s = luprs(); - require(address(s.pool) == address(0), "already initialised"); - s.pool = IPSmartPool(_pool); - s.uniswapFactory = IUniswapFactory(_uniswapFactory); - } - - // Using same interface as Uniswap for compatibility - function ethToTokenTransferOutput(uint256 _tokens_bought, uint256 _deadline, address _recipient) public payable returns (uint256 eth_sold) { - uprs storage s = luprs(); - require(_deadline >= block.timestamp); - (address[] memory tokens, uint256[] memory amounts) = s.pool.calcTokensForAmount(_tokens_bought); - - eth_sold = 0; - // Buy and approve tokens - for(uint256 i = 0; i < tokens.length; i ++) { - eth_sold += _ethToToken(tokens[i], amounts[i]); - IERC20(tokens[i]).approve(address(s.pool), uint256(-1)); - } - - // Calculate amount of eth sold - eth_sold = msg.value - address(this).balance; - // Send back excess eth - msg.sender.transfer(address(this).balance); - - // Join pool - s.pool.joinPool(_tokens_bought); - - // Send pool tokens to receiver - s.pool.transfer(_recipient, s.pool.balanceOf(address(this))); - return eth_sold; - } - - function ethToTokenSwapOutput(uint256 _tokens_bought, uint256 _deadline) external payable returns (uint256 eth_sold) { - return ethToTokenTransferOutput(_tokens_bought, _deadline, msg.sender); - } - - function _ethToToken(address _token, uint256 _tokens_bought) internal virtual returns (uint256) { - uprs storage s = luprs(); - IUniswapExchange exchange = IUniswapExchange(s.uniswapFactory.getExchange(_token)); - return exchange.ethToTokenSwapOutput{value: address(this).balance}(_tokens_bought, uint256(-1)); - } - - function getEthToTokenOutputPrice(uint256 _tokens_bought) external view virtual returns (uint256 eth_sold) { - uprs storage s = luprs(); - (address[] memory tokens, uint256[] memory amounts) = s.pool.calcTokensForAmount(_tokens_bought); - - eth_sold = 0; - - for(uint256 i = 0; i < tokens.length; i ++) { - IUniswapExchange exchange = IUniswapExchange(s.uniswapFactory.getExchange(tokens[i])); - eth_sold += exchange.getEthToTokenOutputPrice(amounts[i]); - } - - return eth_sold; - } - - function tokenToEthTransferInput(uint256 _tokens_sold, uint256 _min_eth, uint256 _deadline, address _recipient) public returns (uint256 eth_bought) { - uprs storage s = luprs(); - require(_deadline >= block.timestamp); - require(s.pool.transferFrom(msg.sender, address(this), _tokens_sold), "PUniswapPoolRecipe.tokenToEthTransferInput: transferFrom failed"); - - s.pool.exitPool(_tokens_sold); - - address[] memory tokens = s.pool.getTokens(); - - uint256 ethAmount = 0; - - for(uint256 i = 0; i < tokens.length; i ++) { - IERC20 token = IERC20(tokens[i]); - - uint256 balance = token.balanceOf(address(this)); - - // Exchange for ETH - ethAmount += _tokenToEth(token, balance, _recipient); - } - - require(ethAmount > _min_eth, "PUniswapPoolRecipe.tokenToEthTransferInput: not enough ETH"); - return ethAmount; - } - - function tokenToEthSwapInput(uint256 _tokens_sold, uint256 _min_eth, uint256 _deadline) external returns (uint256 eth_bought) { - return tokenToEthTransferInput(_tokens_sold, _min_eth, _deadline, msg.sender); - } - - function _tokenToEth(IERC20 _token, uint256 _tokens_sold, address _recipient) internal virtual returns (uint256 eth_bought) { - uprs storage s = luprs(); - IUniswapExchange exchange = IUniswapExchange(s.uniswapFactory.getExchange(address(_token))); - _token.approve(address(exchange), _tokens_sold); - // Exchange for ETH - return exchange.tokenToEthTransferInput(_tokens_sold, 1, uint256(-1), _recipient); - } - - function getTokenToEthInputPrice(uint256 _tokens_sold) external view virtual returns (uint256 eth_bought) { - uprs storage s = luprs(); - (address[] memory tokens, uint256[] memory amounts) = s.pool.calcTokensForAmount(_tokens_sold); - - eth_bought = 0; - - for(uint256 i = 0; i < tokens.length; i ++) { - IUniswapExchange exchange = IUniswapExchange(s.uniswapFactory.getExchange(address(tokens[i]))); - eth_bought += exchange.getTokenToEthInputPrice(amounts[i]); - } - - return eth_bought; - } - - function pool() external view returns (address) { - return address(luprs().pool); - } - - receive() external payable { - - } - - // Load uniswap pool recipe - function luprs() internal pure returns (uprs storage s) { - bytes32 loc = uprSlot; - assembly { - s_slot := loc - } - } -} \ No newline at end of file diff --git a/test/pUniswapKyberPoolRecipe.ts b/test/pUniswapKyberPoolRecipe.ts deleted file mode 100644 index fd894b1..0000000 --- a/test/pUniswapKyberPoolRecipe.ts +++ /dev/null @@ -1,192 +0,0 @@ -// This way of importing is a bit funky. We should fix this in the Mock Contracts package -import { MockTokenFactory } from "@pie-dao/mock-contracts/dist/typechain/MockTokenFactory"; -import { MockKyberNetworkFactory } from "@pie-dao/mock-contracts/dist/typechain/MockKyberNetworkFactory"; -import { MockToken } from "@pie-dao/mock-contracts/typechain/MockToken"; -import { MockKyberNetwork } from "@pie-dao/mock-contracts/typechain/MockKyberNetwork"; -import { ethers } from "@nomiclabs/buidler"; -import { Signer, Wallet, utils, constants } from "ethers"; -import { BigNumber } from "ethers/utils"; -import chai from "chai"; -import { deployContract, solidity } from "ethereum-waffle"; - -import { deployBalancerPool, deployUniswapFactory, deployAndAddLiquidityUniswapExchange } from "../utils"; -import { IBPool } from "../typechain/IBPool"; -import { IBPoolFactory } from "../typechain/IBPoolFactory"; -import { PBasicSmartPool } from "../typechain/PBasicSmartPool"; -import PBasicSmartPoolArtifact from "../artifacts/PBasicSmartPool.json"; -import { PUniswapKyberPoolRecipe } from "../typechain/PUniswapKyberPoolRecipe"; -import PUniswapKyberPoolRecipeArtifact from "../artifacts/PUniswapKyberPoolRecipe.json"; -import { IUniswapFactory } from "../typechain/IUniswapFactory"; -import { WeiPerEther } from "ethers/constants"; - - -chai.use(solidity); -const { expect } = chai; - -const PLACE_HOLDER_ADDRESS = "0x1200000000000000000000000000000000000001"; -const ETH = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; -const NAME = "TEST POOL"; -const SYMBOL = "TPL"; -const INITIAL_SUPPLY = constants.WeiPerEther; - -describe("PUniswapKyberPoolRecipe", function() { - this.timeout(300000); - let signers: Signer[]; - let account: string; - let account2: string; - let tokens: MockToken[]; - let pool: IBPool; - let smartpool: PBasicSmartPool; - let recipe: PUniswapKyberPoolRecipe; - let uniswapFactory: IUniswapFactory; - - beforeEach(async() => { - signers = await ethers.signers(); - account = await signers[0].getAddress(); - account2 = PLACE_HOLDER_ADDRESS; - - pool = IBPoolFactory.connect((await deployBalancerPool(signers[0])), signers[0]); - - uniswapFactory = await deployUniswapFactory(signers[0]); - - const tokenFactory = new MockTokenFactory(signers[0]); - const kyber: MockKyberNetwork = await (new MockKyberNetworkFactory(signers[0]).deploy()); - tokens = []; - - for(let i = 0; i < 3; i ++) { - const token: MockToken = (await tokenFactory.deploy(`Mock ${i}`, `M${i}`, 18)); - await token.mint(account, constants.WeiPerEther.mul(1000000)); - // await token.mint(await signers[1].getAddress(), constants.WeiPerEther.mul(1000000)); - await token.approve(pool.address, constants.MaxUint256); - await pool.bind(token.address, constants.WeiPerEther, constants.WeiPerEther.mul(1)); - tokens.push(token); - - // Deploy Uniswap pool and approve - const liquidityAmount = constants.WeiPerEther.mul(10) - const uniswapExchange = await deployAndAddLiquidityUniswapExchange(uniswapFactory, token, liquidityAmount, liquidityAmount); - - await kyber.setPairRate(ETH, token.address, WeiPerEther); - await kyber.setPairRate(token.address, ETH, WeiPerEther); - } - - // Send some eth to the mock kyber contract - await signers[0].sendTransaction({to: kyber.address, value: WeiPerEther.mul(10)}); - - // Deploy this way to get the coverage provider to pick it up - smartpool = await deployContract(signers[0] as Wallet, PBasicSmartPoolArtifact, [], {gasLimit: 8000000}) as PBasicSmartPool - await smartpool.init(pool.address, NAME, SYMBOL, INITIAL_SUPPLY); - await smartpool.approveTokens(); - await pool.setController(smartpool.address); - - for(const token of tokens) { - await token.approve(smartpool.address, constants.MaxUint256); - } - - recipe = await deployContract(signers[0] as Wallet, PUniswapKyberPoolRecipeArtifact, []) as PUniswapKyberPoolRecipe; - await recipe.initUK(smartpool.address, uniswapFactory.address, kyber.address, [tokens[1].address], PLACE_HOLDER_ADDRESS); - - // console.log(await recipe.pool()); - // process.exit(); - - // approve contract - await smartpool.approve(recipe.address, constants.MaxUint256); - }); - - describe("TokenToEth", async() => { - it("TokenToEthTransferInput should work", async() => { - // Exit with half the amount - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getTokenToEthInputPrice(amount); - - await recipe.tokenToEthTransferInput(amount, 1, constants.MaxUint256, account2); - - const sPBalance = await smartpool.balanceOf(account); - expect(sPBalance, "Smart pool token balance should have decreased by the amount").to.eq(INITIAL_SUPPLY.sub(amount)); - - const ethBalance = await signers[0].provider.getBalance(account2); - // expect(ethBalance).to.eq(expectedEth); - }); - - it("Calling TokenToEthTransferInput when the dealine passed should fail", async() => { - // Exit with half the amount - const amount = INITIAL_SUPPLY.div(2); - await expect(recipe.tokenToEthTransferInput(amount, 1, 1, account2)).to.be.reverted; - }); - - it("Calling TokenToEthTransferInput when the recipe is not approved should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - - // Reset approval for this test - await smartpool.approve(recipe.address, 0); - await expect(recipe.tokenToEthTransferInput(amount, 1, constants.MaxUint256, account2)).to.be.reverted; - }); - - it("Calling TokenToEthTransferInput and receiving less than min eth amount should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - await expect(recipe.tokenToEthTransferInput(amount, constants.MaxUint256, constants.MaxUint256, account2)).to.be.reverted; - }); - - it("TokenToEthSwapInput should work", async() => { - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getTokenToEthInputPrice(amount); - - const ethBalanceBefore = await signers[0].provider.getBalance(account); - - await recipe.tokenToEthSwapInput(amount, 1, constants.MaxUint256); - - const sPBalance = await smartpool.balanceOf(account); - expect(sPBalance, "Smart pool token balance should have decreased by the amount").to.eq(INITIAL_SUPPLY.sub(amount)); - - const ethBalance = await signers[0].provider.getBalance(account); - // expect(ethBalance).to.eq(ethBalanceBefore.add(expectedEth)); - }); - }); - - describe("ethToToken", async() => { - it("EthToTokenTransferOutput should work", async() => { - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - const ethBalanceBefore = await signers[0].provider.getBalance(account); - - await recipe.ethToTokenTransferOutput(amount, constants.MaxUint256, account2, {value: expectedEth.mul(10)}); - - const sPBalance = await smartpool.balanceOf(account2); - expect(sPBalance).to.eq(amount); - - const ethBalance = await signers[0].provider.getBalance(account); - // expect(ethBalance).to.eq(ethBalanceBefore.sub(expectedEth)); - }); - - it("Calling EthToTokenTransferOutput when the dealine has passed should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - - await expect(recipe.ethToTokenTransferOutput(amount, 1, account2, {value: expectedEth.mul(10)})).to.be.reverted; - }); - - it("Calling EthToTokenTransferOutput when not sending enough eth should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - - await expect(recipe.ethToTokenTransferOutput(amount, 1, account2, {value: expectedEth.sub(1)})).to.be.reverted; - }) - - it("EthToTokenSwapOutput should work", async() => { - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - const ethBalanceBefore = await signers[0].provider.getBalance(account); - - await recipe.ethToTokenSwapOutput(amount, constants.MaxUint256, {value: expectedEth.mul(2)}); - - const sPBalance = await smartpool.balanceOf(account); - expect(sPBalance).to.eq(amount.add(INITIAL_SUPPLY)); - - const ethBalance = await signers[0].provider.getBalance(account); - // expect(ethBalance).to.eq(ethBalanceBefore.sub(expectedEth)); - }) - }) -}); \ No newline at end of file diff --git a/test/pUniswapPoolRecipe.ts b/test/pUniswapPoolRecipe.ts deleted file mode 100644 index c1b0d2e..0000000 --- a/test/pUniswapPoolRecipe.ts +++ /dev/null @@ -1,178 +0,0 @@ -// This way of importing is a bit funky. We should fix this in the Mock Contracts package -import { MockTokenFactory } from "@pie-dao/mock-contracts/dist/typechain/MockTokenFactory"; -import { MockToken } from "@pie-dao/mock-contracts/typechain/MockToken"; -import { ethers } from "@nomiclabs/buidler"; -import { Signer, Wallet, utils, constants } from "ethers"; -import { BigNumber } from "ethers/utils"; -import chai from "chai"; -import { deployContract, solidity } from "ethereum-waffle"; - -import { deployBalancerPool, deployUniswapFactory, deployAndAddLiquidityUniswapExchange } from "../utils"; -import { IBPool } from "../typechain/IBPool"; -import { IBPoolFactory } from "../typechain/IBPoolFactory"; -import { PBasicSmartPool } from "../typechain/PBasicSmartPool"; -import PBasicSmartPoolArtifact from "../artifacts/PBasicSmartPool.json"; -import { PUniswapPoolRecipe } from "../typechain/PUniswapPoolRecipe"; -import PUniswapPoolRecipeArtifact from "../artifacts/PUniswapPoolRecipe.json"; -import { IUniswapFactory } from "../typechain/IUniswapFactory"; - - -chai.use(solidity); -const { expect } = chai; - -const PLACE_HOLDER_ADDRESS = "0x1200000000000000000000000000000000000001"; -const NAME = "TEST POOL"; -const SYMBOL = "TPL"; -const INITIAL_SUPPLY = constants.WeiPerEther; - -describe("PUniswapPoolRecipe", function() { - this.timeout(300000); - let signers: Signer[]; - let account: string; - let account2: string; - let tokens: MockToken[]; - let pool: IBPool; - let smartpool: PBasicSmartPool; - let recipe: PUniswapPoolRecipe; - let uniswapFactory: IUniswapFactory; - - beforeEach(async() => { - signers = await ethers.signers(); - account = await signers[0].getAddress(); - account2 = PLACE_HOLDER_ADDRESS; - - pool = IBPoolFactory.connect((await deployBalancerPool(signers[0])), signers[0]); - - uniswapFactory = await deployUniswapFactory(signers[0]); - - const tokenFactory = new MockTokenFactory(signers[0]); - tokens = []; - - for(let i = 0; i < 3; i ++) { - const token: MockToken = (await tokenFactory.deploy(`Mock ${i}`, `M${i}`, 18)); - await token.mint(account, constants.WeiPerEther.mul(1000000)); - // await token.mint(await signers[1].getAddress(), constants.WeiPerEther.mul(1000000)); - await token.approve(pool.address, constants.MaxUint256); - await pool.bind(token.address, constants.WeiPerEther, constants.WeiPerEther.mul(1)); - tokens.push(token); - - // Deploy Uniswap pool and approve - const liquidityAmount = constants.WeiPerEther.mul(10) - const uniswapExchange = await deployAndAddLiquidityUniswapExchange(uniswapFactory, token, liquidityAmount, liquidityAmount); - } - - // Deploy this way to get the coverage provider to pick it up - smartpool = await deployContract(signers[0] as Wallet, PBasicSmartPoolArtifact, [], {gasLimit: 8000000}) as PBasicSmartPool - await smartpool.init(pool.address, NAME, SYMBOL, INITIAL_SUPPLY) - await smartpool.approveTokens(); - await pool.setController(smartpool.address); - - for(const token of tokens) { - await token.approve(smartpool.address, constants.MaxUint256); - } - - recipe = await deployContract(signers[0] as Wallet, PUniswapPoolRecipeArtifact, []) as PUniswapPoolRecipe; - await recipe.init(smartpool.address, uniswapFactory.address); - // approve contract - await smartpool.approve(recipe.address, constants.MaxUint256); - }); - - describe("TokenToEth", async() => { - it("TokenToEthTransferInput should work", async() => { - // Exit with half the amount - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getTokenToEthInputPrice(amount); - - const ethBalanceBefore = await signers[0].provider.getBalance(account2); - await recipe.tokenToEthTransferInput(amount, 1, constants.MaxUint256, account2); - - const sPBalance = await smartpool.balanceOf(account); - expect(sPBalance, "Smart pool token balance should have decreased by the amount").to.eq(INITIAL_SUPPLY.sub(amount)); - - const ethBalance = await signers[0].provider.getBalance(account2); - expect(ethBalance).to.eq(ethBalanceBefore.add(expectedEth)); - }); - - it("Calling TokenToEthTransferInput when the dealine passed should fail", async() => { - // Exit with half the amount - const amount = INITIAL_SUPPLY.div(2); - await expect(recipe.tokenToEthTransferInput(amount, 1, 1, account2)).to.be.reverted; - }); - - it("Calling TokenToEthTransferInput when the recipe is not approved should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - - // Reset approval for this test - await smartpool.approve(recipe.address, 0); - await expect(recipe.tokenToEthTransferInput(amount, 1, constants.MaxUint256, account2)).to.be.reverted; - }); - - it("Calling TokenToEthTransferInput and receiving less than min eth amount should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - await expect(recipe.tokenToEthTransferInput(amount, constants.MaxUint256, constants.MaxUint256, account2)).to.be.reverted; - }); - - it("TokenToEthSwapInput should work", async() => { - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getTokenToEthInputPrice(amount); - - const ethBalanceBefore = await signers[0].provider.getBalance(account); - - await recipe.tokenToEthSwapInput(amount, 1, constants.MaxUint256); - - const sPBalance = await smartpool.balanceOf(account); - expect(sPBalance, "Smart pool token balance should have decreased by the amount").to.eq(INITIAL_SUPPLY.sub(amount)); - - const ethBalance = await signers[0].provider.getBalance(account); - expect(ethBalance).to.eq(ethBalanceBefore.add(expectedEth)); - }); - }); - - describe("ethToToken", async() => { - it("EthToTokenTransferOutput should work", async() => { - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - const ethBalanceBefore = await signers[0].provider.getBalance(account); - - await recipe.ethToTokenTransferOutput(amount, constants.MaxUint256, account2, {value: expectedEth.mul(2)}); - - const sPBalance = await smartpool.balanceOf(account2); - expect(sPBalance).to.eq(amount); - - const ethBalance = await signers[0].provider.getBalance(account); - expect(ethBalance).to.eq(ethBalanceBefore.sub(expectedEth)); - }); - - it("Calling EthToTokenTransferOutput when the dealine has passed should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - - await expect(recipe.ethToTokenTransferOutput(amount, 1, account2, {value: expectedEth.mul(2)})).to.be.reverted; - }); - - it("Calling EthToTokenTransferOutput when not sending enough eth should fail", async() => { - const amount = INITIAL_SUPPLY.div(2); - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - - await expect(recipe.ethToTokenTransferOutput(amount, 1, account2, {value: expectedEth.sub(1)})).to.be.reverted; - }) - - it("EthToTokenSwapOutput should work", async() => { - const amount = INITIAL_SUPPLY.div(2); - - const expectedEth = await recipe.getEthToTokenOutputPrice(amount); - const ethBalanceBefore = await signers[0].provider.getBalance(account); - - await recipe.ethToTokenSwapOutput(amount, constants.MaxUint256, {value: expectedEth.mul(2)}); - - const sPBalance = await smartpool.balanceOf(account); - expect(sPBalance).to.eq(amount.add(INITIAL_SUPPLY)); - - const ethBalance = await signers[0].provider.getBalance(account); - expect(ethBalance).to.eq(ethBalanceBefore.sub(expectedEth)); - }) - }) -}); \ No newline at end of file diff --git a/typechain/PBasicSmartPoolFactory.ts b/typechain/PBasicSmartPoolFactory.ts index c67f639..e4b9fef 100644 --- a/typechain/PBasicSmartPoolFactory.ts +++ b/typechain/PBasicSmartPoolFactory.ts @@ -877,4 +877,4 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50613c6f806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80636618846311610125578063cf5e7bd3116100ad578063dd62ed3e1161007c578063dd62ed3e146107da578063e4e1e53814610808578063ec565ffe1461083a578063fd68f22314610842578063fde924f71461084a57610211565b8063cf5e7bd3146106b2578063d2209ad9146106d8578063d4cadf68146107a6578063d73dd623146107ae57610211565b806395d89b41116100f457806395d89b41146105e3578063a9059cbb146105eb578063aa6ca80814610617578063bd5437e81461066f578063be1d24ad1461069557610211565b8063661884631461056357806370a082311461058f578063830df852146105b557806392eefe9b146105bd57610211565b8063313ce567116101a85780633fdddaa2116101775780633fdddaa2146104dc57806344b250521461050e57806349b59552146105165780634cde1618146105355780634eee8d151461053d57610211565b8063313ce567146103ce57806334e19907146103ec57806334e7a19f14610409578063371babdc1461042657610211565b806323b872dd116101e457806323b872dd146102f55780632c500bc81461032b5780632fecc5291461034f5780633018205f146103c657610211565b806306fdde0314610216578063095ea7b314610293578063099e9e2a146102d357806318160ddd146102ed575b600080fd5b61021e610852565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610258578181015183820152602001610240565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf600480360360408110156102a957600080fd5b506001600160a01b0381351690602001356108eb565b604080519115158252519081900360200190f35b6102db610951565b60408051918252519081900360200190f35b6102db610986565b6102bf6004803603606081101561030b57600080fd5b506001600160a01b03813581169160208101359091169060400135610999565b610333610b0e565b604080516001600160a01b039092168252519081900360200190f35b6103c46004803603604081101561036557600080fd5b81359190810190604081016020820135600160201b81111561038657600080fd5b82018360208201111561039857600080fd5b803590602001918460208302840111600160201b831117156103b957600080fd5b509092509050610b27565b005b610333610f3c565b6103d6610f58565b6040805160ff9092168252519081900360200190f35b6103c46004803603602081101561040257600080fd5b5035610f5d565b6103c46004803603602081101561041f57600080fd5b50356110b6565b6104436004803603602081101561043c57600080fd5b50356110e3565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561048757818101518382015260200161046f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104c65781810151838201526020016104ae565b5050505090500194505050505060405180910390f35b6103c4600480360360608110156104f257600080fd5b506001600160a01b038135169060208101359060400135611329565b6103336117bb565b6103c46004803603602081101561052c57600080fd5b503515156117d7565b6103336118c9565b6103c46004803603602081101561055357600080fd5b50356001600160a01b03166118e5565b6102bf6004803603604081101561057957600080fd5b506001600160a01b0381351690602001356119d0565b6102db600480360360208110156105a557600080fd5b50356001600160a01b0316611ac5565b6102db611af1565b6103c4600480360360208110156105d357600080fd5b50356001600160a01b0316611b0c565b61021e611bf7565b6102bf6004803603604081101561060157600080fd5b506001600160a01b038135169060200135611c5d565b61061f611c73565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561065b578181015183820152602001610643565b505050509050019250505060405180910390f35b6103c46004803603602081101561068557600080fd5b50356001600160a01b0316611d8c565b6103c4600480360360208110156106ab57600080fd5b5035611e77565b6103c4600480360360208110156106c857600080fd5b50356001600160a01b03166121ae565b6103c4600480360360808110156106ee57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460018302840111600160201b8311171561074b57600080fd5b919390929091602081019035600160201b81111561076857600080fd5b82018360208201111561077a57600080fd5b803590602001918460018302840111600160201b8311171561079b57600080fd5b9193509150356123cf565b6102db612533565b6102bf600480360360408110156107c457600080fd5b506001600160a01b0381351690602001356125b1565b6102db600480360360408110156107f057600080fd5b506001600160a01b038135811691602001351661264b565b6103c46004803603606081101561081e57600080fd5b506001600160a01b038135169060208101359060400135612685565b6102db6128bc565b6103c46128ec565b6102bf612b50565b606061085c612b9d565b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b505050505090505b90565b6000816108f6612b9d565b336000818152600492909201602090815260408084206001600160a01b03891680865290835293819020949094558351868152935192939192600080516020613b258339815191529281900390910190a35060015b92915050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902081565b6000610990612b9d565b60020154905090565b6000806109a4612b9d565b9050336001600160a01b03861614806109e257506001600160a01b038516600090815260048201602090815260408083203384529091529020548311155b610a2c576040805162461bcd60e51b815260206004820152601660248201527522a9292fa821aa27a5a2a72fa120a22fa1a0a62622a960511b604482015290519081900360640190fd5b610a37858585612bcd565b336001600160a01b03861614801590610a7757506001600160a01b0385166000908152600482016020908152604080832033845290915290205460001914155b15610b03576001600160a01b03851660009081526004820160209081526040808320338452909152902054610ab2908463ffffffff612d0116565b6001600160a01b03868116600090815260048401602090815260408083203380855290835292819020859055805194855251928816939192600080516020613b258339815191529281900390910190a35b506001949350505050565b6000610b18612d63565b546001600160a01b0316905090565b6000610b31612d63565b546001600160a01b03161415610b8e576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b610b96612d98565b805460010190556000610ba7612d98565b5490506000610bb4612d63565b546001600160a01b031690506000610bca610986565b90506000610bde878363ffffffff612dba16565b905080610bea57600080fd5b610bf43388612ecd565b610bfd87612ed7565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015610c3857600080fd5b505afa158015610c4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610c7557600080fd5b8101908080516040519392919084600160201b821115610c9457600080fd5b908301906020820185811115610ca957600080fd5b82518660208202830111600160201b82111715610cc557600080fd5b82525081516020918201928201910280838360005b83811015610cf2578181015183820152602001610cda565b50505050905001604052505050905060008090505b8151811015610e7657610d60828281518110610d1f57fe5b6020026020010151898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ee092505050565b15610d6a57610e6e565b6000828281518110610d7857fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610dda57600080fd5b505afa158015610dee573d6000803e3d6000fd5b505050506040513d6020811015610e0457600080fd5b505190506000610e1a868363ffffffff612f3616565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a3610e6a83338385612ff8565b5050505b600101610d07565b50336001600160a01b03167fe27d877155575efc81398b13b114bbbbfd49b156eb72e9f6c691f3b72b8adf9489898960405180848152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a250505050610ef8612d98565b548114610f365760405162461bcd60e51b815260040180806020018281038252602d815260200180613a50602d913960400191505060405180910390fd5b50505050565b6000610f46612d63565b600101546001600160a01b0316905090565b601281565b610f65612d63565b600101546001600160a01b03163314610faf5760405162461bcd60e51b815260040180806020018281038252602e815260200180613b9e602e913960400191505060405180910390fd5b610fb7612d98565b805460010190556000610fc8612d98565b5460408051848152905191925033917f44ef267e747417ef6614a0ab5bee304ba1a35d76759d34170d1b74a850a9d0339181900360200190a2611009612d63565b54604080516334e1990760e01b81526004810185905290516001600160a01b03909216916334e199079160248082019260009290919082900301818387803b15801561105457600080fd5b505af1158015611068573d6000803e3d6000fd5b50505050611074612d98565b5481146110b25760405162461bcd60e51b815260040180806020018281038252602d815260200180613a50602d913960400191505060405180910390fd5b5050565b6110be612d98565b8054600101905560006110cf612d98565b5490506110db826131e0565b611074612d98565b6060806110ee612d63565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b15801561113157600080fd5b505afa158015611145573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561116e57600080fd5b8101908080516040519392919084600160201b82111561118d57600080fd5b9083019060208201858111156111a257600080fd5b82518660208202830111600160201b821117156111be57600080fd5b82525081516020918201928201910280838360005b838110156111eb5781810151838201526020016111d3565b5050505090500160405250505091508151604051908082528060200260200182016040528015611225578160200160208202803683370190505b5090506000611242611235610986565b859063ffffffff612dba16565b905060005b835181101561132257600084828151811061125e57fe5b602002602001015190506000611272612d63565b546040805163f8b2cb4f60e01b81526001600160a01b0385811660048301529151919092169163f8b2cb4f916024808301926020929190829003018186803b1580156112bd57600080fd5b505afa1580156112d1573d6000803e3d6000fd5b505050506040513d60208110156112e757600080fd5b5051905060006112fd858363ffffffff612f3616565b90508086858151811061130c57fe5b6020908102919091010152505050600101611247565b5050915091565b611331612d63565b600301546001600160a01b0316331461137b5760405162461bcd60e51b81526004018080602001828103825260318152602001806139c76031913960400191505060405180910390fd5b611383612d98565b805460010190556000611394612d98565b54905060006113a1612d63565b5460408051631185197d60e31b81526001600160a01b038881166004830152915191909216925086918391638c28cbe89160248082019260009290919082900301818387803b1580156113f357600080fd5b505af1158015611407573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146357600080fd5b505afa158015611477573d6000803e3d6000fd5b505050506040513d602081101561148d57600080fd5b505190508086111561160a576001600160a01b0382166323b872dd33306114ba8a8663ffffffff612d0116565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561152257600080fd5b505af1158015611536573d6000803e3d6000fd5b505050506040513d602081101561154c57600080fd5b50516115895760405162461bcd60e51b815260040180806020018281038252602b815260200180613a7d602b913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038581166004830152600019602483015291519184169163095ea7b3916044808201926020929091908290030181600087803b1580156115dd57600080fd5b505af11580156115f1573d6000803e3d6000fd5b505050506040513d602081101561160757600080fd5b50505b60408051631feeed5160e11b81526001600160a01b0389811660048301526024820189905260448201889052915191851691633fdddaa29160648082019260009290919082900301818387803b15801561166357600080fd5b505af1158015611677573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03861692506370a0823191602480820192602092909190829003018186803b1580156116c557600080fd5b505afa1580156116d9573d6000803e3d6000fd5b505050506040513d60208110156116ef57600080fd5b5051905080156117af576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050506040513d602081101561177257600080fd5b50516117af5760405162461bcd60e51b8152600401808060200182810382526027815260200180613adc6027913960400191505060405180910390fd5b50505050610ef8612d98565b60006117c5612d63565b600301546001600160a01b0316905090565b6117df612d63565b600201546001600160a01b031633146118295760405162461bcd60e51b815260040180806020018281038252603c815260200180613bfe603c913960400191505060405180910390fd5b611831612d98565b805460010190556000611842612d98565b546040519091508215159033907feda6fce4059a79def1a5550dd645183dbd84a324dde2aba020658eb3d7f84a8790600090a361187d612d63565b54604080516324dacaa960e11b8152841515600482015290516001600160a01b03909216916349b595529160248082019260009290919082900301818387803b15801561105457600080fd5b60006118d3612d63565b600201546001600160a01b0316905090565b6118ed612d63565b600101546001600160a01b031633146119375760405162461bcd60e51b815260040180806020018281038252602e815260200180613b9e602e913960400191505060405180910390fd5b61193f612d98565b805460010190556000611950612d98565b5490506001600160a01b038216611965612d63565b600201546040516001600160a01b03909116907fc2f50b6bc4bd45505f1557a7d4b19c5177d334181ae1179d335020424d3736c490600090a3816119a7612d63565b60020180546001600160a01b0319166001600160a01b0392909216919091179055611074612d98565b6000806119db612b9d565b33600090815260048201602090815260408083206001600160a01b038916845290915290205490915080841115611a375733600090815260048301602090815260408083206001600160a01b0389168452909152812055611a6e565b611a47818563ffffffff612d0116565b33600090815260048401602090815260408083206001600160a01b038a1684529091529020555b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190205481519081529051929392600080516020613b25833981519152929181900390910190a3506001949350505050565b6000611acf612b9d565b6001600160a01b03929092166000908152600390920160205250604090205490565b604051806022613b0382396022019050604051809103902081565b611b14612d63565b600101546001600160a01b03163314611b5e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613b9e602e913960400191505060405180910390fd5b611b66612d98565b805460010190556000611b77612d98565b5490506001600160a01b038216611b8c612d63565b600101546040516001600160a01b03909116907f6aef1fb5b23d0e109fc7f2b0601019e1edbacd177e31a441ec8548e8dd14f0f790600090a381611bce612d63565b60010180546001600160a01b0319166001600160a01b0392909216919091179055611074612d98565b6060611c01612b9d565b60019081018054604080516020600295841615610100026000190190931694909404601f8101839004830285018301909152808452908301828280156108e05780601f106108b5576101008083540402835291602001916108e0565b6000611c6a338484612bcd565b50600192915050565b6060611c7d612d63565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b158015611cc057600080fd5b505afa158015611cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611cfd57600080fd5b8101908080516040519392919084600160201b821115611d1c57600080fd5b908301906020820185811115611d3157600080fd5b82518660208202830111600160201b82111715611d4d57600080fd5b82525081516020918201928201910280838360005b83811015611d7a578181015183820152602001611d62565b50505050905001604052505050905090565b611d94612d63565b600101546001600160a01b03163314611dde5760405162461bcd60e51b815260040180806020018281038252602e815260200180613b9e602e913960400191505060405180910390fd5b611de6612d98565b805460010190556000611df7612d98565b5490506001600160a01b038216611e0c612d63565b600301546040516001600160a01b03909116907fcbca212b561161352cbd1ef8956a916a93bee0f84bb6a3af9118af675266a96390600090a381611e4e612d63565b60030180546001600160a01b0319166001600160a01b0392909216919091179055611074612d98565b6000611e81612d63565b546001600160a01b03161415611ede576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b611ee6612d98565b805460010190556000611ef7612d98565b5490506000611f04612d63565b546001600160a01b031690506000611f1a610986565b90506000611f2e858363ffffffff612dba16565b905080611f3a57600080fd5b611f443386612ecd565b611f4d85612ed7565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015611f8857600080fd5b505afa158015611f9c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611fc557600080fd5b8101908080516040519392919084600160201b821115611fe457600080fd5b908301906020820185811115611ff957600080fd5b82518660208202830111600160201b8211171561201557600080fd5b82525081516020918201928201910280838360005b8381101561204257818101518382015260200161202a565b50505050905001604052505050905060008090505b815181101561216b57600082828151811061206e57fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156120d057600080fd5b505afa1580156120e4573d6000803e3d6000fd5b505050506040513d60208110156120fa57600080fd5b505190506000612110868363ffffffff612f3616565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a361216083338385612ff8565b505050600101612057565b5060408051878152905133917fbc865856a1e9f1dfe2abde98edc2eefe87b6c391a47032388ef36d8c2474aad3919081900360200190a250505050611074612d98565b6121b6612d63565b600301546001600160a01b031633146122005760405162461bcd60e51b81526004018080602001828103825260318152602001806139c76031913960400191505060405180910390fd5b612208612d98565b805460010190556000612219612d98565b5490506000612226612d63565b546040805163cf5e7bd360e01b81526001600160a01b03868116600483015291519190921692508491839163cf5e7bd39160248082019260009290919082900301818387803b15801561227857600080fd5b505af115801561228c573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03851692506370a0823191602480820192602092909190829003018186803b1580156122da57600080fd5b505afa1580156122ee573d6000803e3d6000fd5b505050506040513d602081101561230457600080fd5b5051905080156123c4576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561235d57600080fd5b505af1158015612371573d6000803e3d6000fd5b505050506040513d602081101561238757600080fd5b50516123c45760405162461bcd60e51b8152600401808060200182810382526027815260200180613a296027913960400191505060405180910390fd5b505050611074612d98565b60006123d9612d63565b80549091506001600160a01b0316156124235760405162461bcd60e51b8152600401808060200182810382526029815260200180613b456029913960400191505060405180910390fd5b6001600160a01b0387166124685760405162461bcd60e51b8152600401808060200182810382526032815260200180613bcc6032913960400191505060405180910390fd5b816124a45760405162461bcd60e51b81526004018080602001828103825260318152602001806139f86031913960400191505060405180910390fd5b80546001600160a01b0388166001600160a01b031991821617825560018201805482163390811790915560028301805483168217905560038301805490921617905585856124f0612b9d565b6124fb929091613905565b508383612506612b9d565b6001019190612516929190613905565b50612520826134f6565b61252a33836134ff565b50505050505050565b600061253d612d63565b5460408051631a995bed60e31b815290516001600160a01b039092169163d4cadf6891600480820192602092909190829003018186803b15801561258057600080fd5b505afa158015612594573d6000803e3d6000fd5b505050506040513d60208110156125aa57600080fd5b5051905090565b6000806125bc612b9d565b33600090815260048201602090815260408083206001600160a01b03891684529091529020549091506125f5908463ffffffff61350916565b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190208590558051948552519193600080516020613b25833981519152929081900390910190a35060019392505050565b6000612655612b9d565b6001600160a01b039384166000908152600491909101602090815260408083209490951682529290925250205490565b61268d612d63565b600301546001600160a01b031633146126d75760405162461bcd60e51b81526004018080602001828103825260318152602001806139c76031913960400191505060405180910390fd5b6126df612d98565b8054600101905560006126f0612d98565b54905060006126fd612d63565b54604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03928316935087928316916323b872dd9160648083019260209291908290030181600087803b15801561275a57600080fd5b505af115801561276e573d6000803e3d6000fd5b505050506040513d602081101561278457600080fd5b50516127c15760405162461bcd60e51b815260040180806020018281038252602981526020018061399e6029913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038481166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b15801561281557600080fd5b505af1158015612829573d6000803e3d6000fd5b505050506040513d602081101561283f57600080fd5b505060408051631c9c3ca760e31b81526001600160a01b038881166004830152602482018890526044820187905291519184169163e4e1e5389160648082019260009290919082900301818387803b15801561289a57600080fd5b505af11580156128ae573d6000803e3d6000fd5b505050505050610ef8612d98565b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b6128f4612d98565b805460010190556000612905612d98565b5490506000612912612d63565b546040805163cc77828d60e01b815290516001600160a01b039092169250606091839163cc77828d916004808301926000929190829003018186803b15801561295a57600080fd5b505afa15801561296e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561299757600080fd5b8101908080516040519392919084600160201b8211156129b657600080fd5b9083019060208201858111156129cb57600080fd5b82518660208202830111600160201b821117156129e757600080fd5b82525081516020918201928201910280838360005b83811015612a145781810151838201526020016129fc565b50505050905001604052505050905060008090505b8151811015612adb57818181518110612a3e57fe5b60200260200101516001600160a01b031663095ea7b3846000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b505050506040513d6020811015612ad157600080fd5b5050600101612a29565b506040517f198f462153295cccb18f8ac2ae01bf2fc81f948daad29b15c5a9ad53370b07e590600090a15050612b0f612d98565b548114612b4d5760405162461bcd60e51b815260040180806020018281038252602d815260200180613a50602d913960400191505060405180910390fd5b50565b6000612b5a612d63565b546040805163fde924f760e01b815290516001600160a01b039092169163fde924f791600480820192602092909190829003018186803b15801561258057600080fd5b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b6000612bd7612b9d565b6001600160a01b0385166000908152600382016020526040902054909150821115612c40576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b6001600160a01b0384166000908152600382016020526040902054612c6b908363ffffffff612d0116565b6001600160a01b0380861660009081526003840160205260408082209390935590851681522054612ca2908363ffffffff61350916565b6001600160a01b03808516600081815260038501602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050565b6000806000612d10858561355d565b915091508015612d5b576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902090565b6000806040518080613b03602291396040519081900360220190209392505050565b600081612dfd576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580612e255750670de0b6b3a7640000848281612e2257fe5b04145b612e69576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015612eb7576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6000848281612ec257fe5b049695505050505050565b6110b28282613582565b612b4d8161358d565b6000805b8251811015612f2c57836001600160a01b0316838281518110612f0357fe5b60200260200101516001600160a01b03161415612f2457600191505061094b565b600101612ee4565b5060009392505050565b6000828202831580612f50575082848281612f4d57fe5b04145b612f94576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015612fe7576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082612ec2565b6000613002612d63565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b15801561305457600080fd5b505afa158015613068573d6000803e3d6000fd5b505050506040513d602081101561307e57600080fd5b505190506001600160a01b038216633fdddaa2876130a2868863ffffffff612d0116565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b1580156130f957600080fd5b505af115801561310d573d6000803e3d6000fd5b50505050856001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b505050506040513d602081101561319b57600080fd5b50516131d85760405162461bcd60e51b8152600401808060200182810382526030815260200180613b6e6030913960400191505060405180910390fd5b505050505050565b60006131ea612d63565b546001600160a01b03161415613247576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6000613251612d63565b546001600160a01b031690506000613267610986565b9050600061327b848363ffffffff612dba16565b90508061328757600080fd5b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156132c257600080fd5b505afa1580156132d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156132ff57600080fd5b8101908080516040519392919084600160201b82111561331e57600080fd5b90830190602082018581111561333357600080fd5b82518660208202830111600160201b8211171561334f57600080fd5b82525081516020918201928201910280838360005b8381101561337c578181015183820152602001613364565b50505050905001604052505050905060008090505b81518110156134a55760008282815181106133a857fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561340a57600080fd5b505afa15801561341e573d6000803e3d6000fd5b505050506040513d602081101561343457600080fd5b50519050600061344a868363ffffffff612f3616565b6040805182815290519192506001600160a01b0385169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a919081900360200190a361349a83338385613681565b505050600101613391565b506134af856134f6565b6134b933866134ff565b60408051868152905133917f7a011ddbb8da163de89faccb018bb75c616e6ac270738b8bf1785f08ae1b2d6f919081900360200190a25050505050565b612b4d81613863565b6110b282826138fa565b600082820183811015613556576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b600080828410613573575050808203600061357b565b505081810360015b9250929050565b6110b2823083612bcd565b6000613597612b9d565b3060009081526003820160205260409020549091508211156135f7576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b306000908152600382016020526040902054613619908363ffffffff612d0116565b3060009081526003830160205260409020556002810154613640908363ffffffff612d0116565b600282015560408051838152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061368b612d63565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b1580156136dd57600080fd5b505afa1580156136f1573d6000803e3d6000fd5b505050506040513d602081101561370757600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908816916323b872dd916064808201926020929091908290030181600087803b15801561376557600080fd5b505af1158015613779573d6000803e3d6000fd5b505050506040513d602081101561378f57600080fd5b50516137cc5760405162461bcd60e51b8152600401808060200182810382526034815260200180613aa86034913960400191505060405180910390fd5b6001600160a01b038216633fdddaa2876137ec868863ffffffff61350916565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561384357600080fd5b505af1158015613857573d6000803e3d6000fd5b50505050505050505050565b600061386d612b9d565b306000908152600382016020526040902054909150613892908363ffffffff61350916565b30600090815260038301602052604090205560028101546138b9908363ffffffff61350916565b600282015560408051838152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6110b2308383612bcd565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139465782800160ff19823516178555613973565b82800160010185558215613973579182015b82811115613973578235825591602001919060010190613958565b5061397f929150613983565b5090565b6108e891905b8082111561397f576000815560010161398956fe504261736963536d617274506f6f6c2e62696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e6f6e6c79546f6b656e42696e6465723a206e6f7420746f6b656e2062696e646572504261736963536d617274506f6f6c2e696e69743a205f696e697469616c537570706c792063616e206e6f74207a65726f504261736963536d617274506f6f6c2e756e62696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e6e6f5265656e7472793a207265656e747279206465746563746564504261736963536d617274506f6f6c2e726562696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e5f70756c6c556e6465726c79696e673a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e726562696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e73746f726167652e6c6f636174696f6e8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925504261736963536d617274506f6f6c2e696e69743a20616c726561647920696e697469616c69736564504261736963536d617274506f6f6c2e5f70757368556e6465726c79696e673a207472616e73666572206661696c6564504261736963536d617274506f6f6c2e6f6e6c79436f6e74726f6c6c65723a206e6f7420636f6e74726f6c6c6572504261736963536d617274506f6f6c2e696e69743a205f62506f6f6c2063616e6e6f7420626520307830302e2e2e2e303030504261736963536d617274506f6f6c2e6f6e6c795075626c6963537761705365747465723a206e6f74207075626c6963207377617020736574746572a2646970667358221220abcf3754035de8824888ac008cff35b914e6756e1c56c3c7667810e00455afb864736f6c63430006040033"; + "0x608060405234801561001057600080fd5b50613cae806100206000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80636618846311610125578063cf5e7bd3116100ad578063dd62ed3e1161007c578063dd62ed3e146107da578063e4e1e53814610808578063ec565ffe1461083a578063fd68f22314610842578063fde924f71461084a57610211565b8063cf5e7bd3146106b2578063d2209ad9146106d8578063d4cadf68146107a6578063d73dd623146107ae57610211565b806395d89b41116100f457806395d89b41146105e3578063a9059cbb146105eb578063aa6ca80814610617578063bd5437e81461066f578063be1d24ad1461069557610211565b8063661884631461056357806370a082311461058f578063830df852146105b557806392eefe9b146105bd57610211565b8063313ce567116101a85780633fdddaa2116101775780633fdddaa2146104dc57806344b250521461050e57806349b59552146105165780634cde1618146105355780634eee8d151461053d57610211565b8063313ce567146103ce57806334e19907146103ec57806334e7a19f14610409578063371babdc1461042657610211565b806323b872dd116101e457806323b872dd146102f55780632c500bc81461032b5780632fecc5291461034f5780633018205f146103c657610211565b806306fdde0314610216578063095ea7b314610293578063099e9e2a146102d357806318160ddd146102ed575b600080fd5b61021e610852565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610258578181015183820152602001610240565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf600480360360408110156102a957600080fd5b506001600160a01b0381351690602001356108eb565b604080519115158252519081900360200190f35b6102db610951565b60408051918252519081900360200190f35b6102db610986565b6102bf6004803603606081101561030b57600080fd5b506001600160a01b03813581169160208101359091169060400135610999565b610333610b0e565b604080516001600160a01b039092168252519081900360200190f35b6103c46004803603604081101561036557600080fd5b81359190810190604081016020820135600160201b81111561038657600080fd5b82018360208201111561039857600080fd5b803590602001918460208302840111600160201b831117156103b957600080fd5b509092509050610b27565b005b610333610f2a565b6103d6610f46565b6040805160ff9092168252519081900360200190f35b6103c46004803603602081101561040257600080fd5b5035610f4b565b6103c46004803603602081101561041f57600080fd5b50356110a4565b6104436004803603602081101561043c57600080fd5b5035611126565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561048757818101518382015260200161046f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104c65781810151838201526020016104ae565b5050505090500194505050505060405180910390f35b6103c4600480360360608110156104f257600080fd5b506001600160a01b03813516906020810135906040013561136c565b6103336117fe565b6103c46004803603602081101561052c57600080fd5b5035151561181a565b61033361190c565b6103c46004803603602081101561055357600080fd5b50356001600160a01b0316611928565b6102bf6004803603604081101561057957600080fd5b506001600160a01b038135169060200135611a13565b6102db600480360360208110156105a557600080fd5b50356001600160a01b0316611b08565b6102db611b34565b6103c4600480360360208110156105d357600080fd5b50356001600160a01b0316611b4f565b61021e611c3a565b6102bf6004803603604081101561060157600080fd5b506001600160a01b038135169060200135611ca0565b61061f611cb6565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561065b578181015183820152602001610643565b505050509050019250505060405180910390f35b6103c46004803603602081101561068557600080fd5b50356001600160a01b0316611dcf565b6103c4600480360360208110156106ab57600080fd5b5035611eba565b6103c4600480360360208110156106c857600080fd5b50356001600160a01b03166121df565b6103c4600480360360808110156106ee57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460018302840111600160201b8311171561074b57600080fd5b919390929091602081019035600160201b81111561076857600080fd5b82018360208201111561077a57600080fd5b803590602001918460018302840111600160201b8311171561079b57600080fd5b919350915035612400565b6102db612564565b6102bf600480360360408110156107c457600080fd5b506001600160a01b0381351690602001356125e2565b6102db600480360360408110156107f057600080fd5b506001600160a01b038135811691602001351661267c565b6103c46004803603606081101561081e57600080fd5b506001600160a01b0381351690602081013590604001356126b6565b6102db6128ed565b6103c461291d565b6102bf612b81565b606061085c612bce565b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b505050505090505b90565b6000816108f6612bce565b336000818152600492909201602090815260408084206001600160a01b03891680865290835293819020949094558351868152935192939192600080516020613b448339815191529281900390910190a35060015b92915050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902081565b6000610990612bce565b60020154905090565b6000806109a4612bce565b9050336001600160a01b03861614806109e257506001600160a01b038516600090815260048201602090815260408083203384529091529020548311155b610a2c576040805162461bcd60e51b815260206004820152601660248201527522a9292fa821aa27a5a2a72fa120a22fa1a0a62622a960511b604482015290519081900360640190fd5b610a37858585612bfe565b336001600160a01b03861614801590610a7757506001600160a01b0385166000908152600482016020908152604080832033845290915290205460001914155b15610b03576001600160a01b03851660009081526004820160209081526040808320338452909152902054610ab2908463ffffffff612d3216565b6001600160a01b03868116600090815260048401602090815260408083203380855290835292819020859055805194855251928816939192600080516020613b448339815191529281900390910190a35b506001949350505050565b6000610b18612d94565b546001600160a01b0316905090565b6000610b31612d94565b546001600160a01b03161415610b7c576040805162461bcd60e51b81526020600482018190526024820152600080516020613b8d833981519152604482015290519081900360640190fd5b610b84612dc9565b805460010190556000610b95612dc9565b5490506000610ba2612d94565b546001600160a01b031690506000610bb8610986565b90506000610bcc878363ffffffff612deb16565b905080610bd857600080fd5b610be23388612efe565b610beb87612f08565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610c6357600080fd5b8101908080516040519392919084600160201b821115610c8257600080fd5b908301906020820185811115610c9757600080fd5b82518660208202830111600160201b82111715610cb357600080fd5b82525081516020918201928201910280838360005b83811015610ce0578181015183820152602001610cc8565b50505050905001604052505050905060008090505b8151811015610e6457610d4e828281518110610d0d57fe5b6020026020010151898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612f1192505050565b15610d5857610e5c565b6000828281518110610d6657fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610dc857600080fd5b505afa158015610ddc573d6000803e3d6000fd5b505050506040513d6020811015610df257600080fd5b505190506000610e08868363ffffffff612f6716565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a3610e5883338385613029565b5050505b600101610cf5565b50336001600160a01b03167fe27d877155575efc81398b13b114bbbbfd49b156eb72e9f6c691f3b72b8adf9489898960405180848152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a250505050610ee6612dc9565b548114610f245760405162461bcd60e51b815260040180806020018281038252602d815260200180613a6f602d913960400191505060405180910390fd5b50505050565b6000610f34612d94565b600101546001600160a01b0316905090565b601281565b610f53612d94565b600101546001600160a01b03163314610f9d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613bdd602e913960400191505060405180910390fd5b610fa5612dc9565b805460010190556000610fb6612dc9565b5460408051848152905191925033917f44ef267e747417ef6614a0ab5bee304ba1a35d76759d34170d1b74a850a9d0339181900360200190a2610ff7612d94565b54604080516334e1990760e01b81526004810185905290516001600160a01b03909216916334e199079160248082019260009290919082900301818387803b15801561104257600080fd5b505af1158015611056573d6000803e3d6000fd5b50505050611062612dc9565b5481146110a05760405162461bcd60e51b815260040180806020018281038252602d815260200180613a6f602d913960400191505060405180910390fd5b5050565b60006110ae612d94565b546001600160a01b031614156110f9576040805162461bcd60e51b81526020600482018190526024820152600080516020613b8d833981519152604482015290519081900360640190fd5b611101612dc9565b805460010190556000611112612dc9565b54905061111e82613211565b611062612dc9565b606080611131612d94565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b15801561117457600080fd5b505afa158015611188573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111b157600080fd5b8101908080516040519392919084600160201b8211156111d057600080fd5b9083019060208201858111156111e557600080fd5b82518660208202830111600160201b8211171561120157600080fd5b82525081516020918201928201910280838360005b8381101561122e578181015183820152602001611216565b5050505090500160405250505091508151604051908082528060200260200182016040528015611268578160200160208202803683370190505b5090506000611285611278610986565b859063ffffffff612deb16565b905060005b83518110156113655760008482815181106112a157fe5b6020026020010151905060006112b5612d94565b546040805163f8b2cb4f60e01b81526001600160a01b0385811660048301529151919092169163f8b2cb4f916024808301926020929190829003018186803b15801561130057600080fd5b505afa158015611314573d6000803e3d6000fd5b505050506040513d602081101561132a57600080fd5b505190506000611340858363ffffffff612f6716565b90508086858151811061134f57fe5b602090810291909101015250505060010161128a565b5050915091565b611374612d94565b600301546001600160a01b031633146113be5760405162461bcd60e51b81526004018080602001828103825260318152602001806139e66031913960400191505060405180910390fd5b6113c6612dc9565b8054600101905560006113d7612dc9565b54905060006113e4612d94565b5460408051631185197d60e31b81526001600160a01b038881166004830152915191909216925086918391638c28cbe89160248082019260009290919082900301818387803b15801561143657600080fd5b505af115801561144a573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156114a657600080fd5b505afa1580156114ba573d6000803e3d6000fd5b505050506040513d60208110156114d057600080fd5b505190508086111561164d576001600160a01b0382166323b872dd33306114fd8a8663ffffffff612d3216565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561156557600080fd5b505af1158015611579573d6000803e3d6000fd5b505050506040513d602081101561158f57600080fd5b50516115cc5760405162461bcd60e51b815260040180806020018281038252602b815260200180613a9c602b913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038581166004830152600019602483015291519184169163095ea7b3916044808201926020929091908290030181600087803b15801561162057600080fd5b505af1158015611634573d6000803e3d6000fd5b505050506040513d602081101561164a57600080fd5b50505b60408051631feeed5160e11b81526001600160a01b0389811660048301526024820189905260448201889052915191851691633fdddaa29160648082019260009290919082900301818387803b1580156116a657600080fd5b505af11580156116ba573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03861692506370a0823191602480820192602092909190829003018186803b15801561170857600080fd5b505afa15801561171c573d6000803e3d6000fd5b505050506040513d602081101561173257600080fd5b5051905080156117f2576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b505050506040513d60208110156117b557600080fd5b50516117f25760405162461bcd60e51b8152600401808060200182810382526027815260200180613afb6027913960400191505060405180910390fd5b50505050610ee6612dc9565b6000611808612d94565b600301546001600160a01b0316905090565b611822612d94565b600201546001600160a01b0316331461186c5760405162461bcd60e51b815260040180806020018281038252603c815260200180613c3d603c913960400191505060405180910390fd5b611874612dc9565b805460010190556000611885612dc9565b546040519091508215159033907feda6fce4059a79def1a5550dd645183dbd84a324dde2aba020658eb3d7f84a8790600090a36118c0612d94565b54604080516324dacaa960e11b8152841515600482015290516001600160a01b03909216916349b595529160248082019260009290919082900301818387803b15801561104257600080fd5b6000611916612d94565b600201546001600160a01b0316905090565b611930612d94565b600101546001600160a01b0316331461197a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613bdd602e913960400191505060405180910390fd5b611982612dc9565b805460010190556000611993612dc9565b5490506001600160a01b0382166119a8612d94565b600201546040516001600160a01b03909116907fc2f50b6bc4bd45505f1557a7d4b19c5177d334181ae1179d335020424d3736c490600090a3816119ea612d94565b60020180546001600160a01b0319166001600160a01b0392909216919091179055611062612dc9565b600080611a1e612bce565b33600090815260048201602090815260408083206001600160a01b038916845290915290205490915080841115611a7a5733600090815260048301602090815260408083206001600160a01b0389168452909152812055611ab1565b611a8a818563ffffffff612d3216565b33600090815260048401602090815260408083206001600160a01b038a1684529091529020555b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190205481519081529051929392600080516020613b44833981519152929181900390910190a3506001949350505050565b6000611b12612bce565b6001600160a01b03929092166000908152600390920160205250604090205490565b604051806022613b2282396022019050604051809103902081565b611b57612d94565b600101546001600160a01b03163314611ba15760405162461bcd60e51b815260040180806020018281038252602e815260200180613bdd602e913960400191505060405180910390fd5b611ba9612dc9565b805460010190556000611bba612dc9565b5490506001600160a01b038216611bcf612d94565b600101546040516001600160a01b03909116907f6aef1fb5b23d0e109fc7f2b0601019e1edbacd177e31a441ec8548e8dd14f0f790600090a381611c11612d94565b60010180546001600160a01b0319166001600160a01b0392909216919091179055611062612dc9565b6060611c44612bce565b60019081018054604080516020600295841615610100026000190190931694909404601f8101839004830285018301909152808452908301828280156108e05780601f106108b5576101008083540402835291602001916108e0565b6000611cad338484612bfe565b50600192915050565b6060611cc0612d94565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b158015611d0357600080fd5b505afa158015611d17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611d4057600080fd5b8101908080516040519392919084600160201b821115611d5f57600080fd5b908301906020820185811115611d7457600080fd5b82518660208202830111600160201b82111715611d9057600080fd5b82525081516020918201928201910280838360005b83811015611dbd578181015183820152602001611da5565b50505050905001604052505050905090565b611dd7612d94565b600101546001600160a01b03163314611e215760405162461bcd60e51b815260040180806020018281038252602e815260200180613bdd602e913960400191505060405180910390fd5b611e29612dc9565b805460010190556000611e3a612dc9565b5490506001600160a01b038216611e4f612d94565b600301546040516001600160a01b03909116907fcbca212b561161352cbd1ef8956a916a93bee0f84bb6a3af9118af675266a96390600090a381611e91612d94565b60030180546001600160a01b0319166001600160a01b0392909216919091179055611062612dc9565b6000611ec4612d94565b546001600160a01b03161415611f0f576040805162461bcd60e51b81526020600482018190526024820152600080516020613b8d833981519152604482015290519081900360640190fd5b611f17612dc9565b805460010190556000611f28612dc9565b5490506000611f35612d94565b546001600160a01b031690506000611f4b610986565b90506000611f5f858363ffffffff612deb16565b905080611f6b57600080fd5b611f753386612efe565b611f7e85612f08565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015611fb957600080fd5b505afa158015611fcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ff657600080fd5b8101908080516040519392919084600160201b82111561201557600080fd5b90830190602082018581111561202a57600080fd5b82518660208202830111600160201b8211171561204657600080fd5b82525081516020918201928201910280838360005b8381101561207357818101518382015260200161205b565b50505050905001604052505050905060008090505b815181101561219c57600082828151811061209f57fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561210157600080fd5b505afa158015612115573d6000803e3d6000fd5b505050506040513d602081101561212b57600080fd5b505190506000612141868363ffffffff612f6716565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a361219183338385613029565b505050600101612088565b5060408051878152905133917fbc865856a1e9f1dfe2abde98edc2eefe87b6c391a47032388ef36d8c2474aad3919081900360200190a250505050611062612dc9565b6121e7612d94565b600301546001600160a01b031633146122315760405162461bcd60e51b81526004018080602001828103825260318152602001806139e66031913960400191505060405180910390fd5b612239612dc9565b80546001019055600061224a612dc9565b5490506000612257612d94565b546040805163cf5e7bd360e01b81526001600160a01b03868116600483015291519190921692508491839163cf5e7bd39160248082019260009290919082900301818387803b1580156122a957600080fd5b505af11580156122bd573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03851692506370a0823191602480820192602092909190829003018186803b15801561230b57600080fd5b505afa15801561231f573d6000803e3d6000fd5b505050506040513d602081101561233557600080fd5b5051905080156123f5576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b505050506040513d60208110156123b857600080fd5b50516123f55760405162461bcd60e51b8152600401808060200182810382526027815260200180613a486027913960400191505060405180910390fd5b505050611062612dc9565b600061240a612d94565b80549091506001600160a01b0316156124545760405162461bcd60e51b8152600401808060200182810382526029815260200180613b646029913960400191505060405180910390fd5b6001600160a01b0387166124995760405162461bcd60e51b8152600401808060200182810382526032815260200180613c0b6032913960400191505060405180910390fd5b816124d55760405162461bcd60e51b8152600401808060200182810382526031815260200180613a176031913960400191505060405180910390fd5b80546001600160a01b0388166001600160a01b03199182161782556001820180548216339081179091556002830180548316821790556003830180549092161790558585612521612bce565b61252c929091613924565b508383612537612bce565b6001019190612547929190613924565b5061255182613515565b61255b338361351e565b50505050505050565b600061256e612d94565b5460408051631a995bed60e31b815290516001600160a01b039092169163d4cadf6891600480820192602092909190829003018186803b1580156125b157600080fd5b505afa1580156125c5573d6000803e3d6000fd5b505050506040513d60208110156125db57600080fd5b5051905090565b6000806125ed612bce565b33600090815260048201602090815260408083206001600160a01b0389168452909152902054909150612626908463ffffffff61352816565b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190208590558051948552519193600080516020613b44833981519152929081900390910190a35060019392505050565b6000612686612bce565b6001600160a01b039384166000908152600491909101602090815260408083209490951682529290925250205490565b6126be612d94565b600301546001600160a01b031633146127085760405162461bcd60e51b81526004018080602001828103825260318152602001806139e66031913960400191505060405180910390fd5b612710612dc9565b805460010190556000612721612dc9565b549050600061272e612d94565b54604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03928316935087928316916323b872dd9160648083019260209291908290030181600087803b15801561278b57600080fd5b505af115801561279f573d6000803e3d6000fd5b505050506040513d60208110156127b557600080fd5b50516127f25760405162461bcd60e51b81526004018080602001828103825260298152602001806139bd6029913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038481166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b15801561284657600080fd5b505af115801561285a573d6000803e3d6000fd5b505050506040513d602081101561287057600080fd5b505060408051631c9c3ca760e31b81526001600160a01b038881166004830152602482018890526044820187905291519184169163e4e1e5389160648082019260009290919082900301818387803b1580156128cb57600080fd5b505af11580156128df573d6000803e3d6000fd5b505050505050610ee6612dc9565b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b612925612dc9565b805460010190556000612936612dc9565b5490506000612943612d94565b546040805163cc77828d60e01b815290516001600160a01b039092169250606091839163cc77828d916004808301926000929190829003018186803b15801561298b57600080fd5b505afa15801561299f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156129c857600080fd5b8101908080516040519392919084600160201b8211156129e757600080fd5b9083019060208201858111156129fc57600080fd5b82518660208202830111600160201b82111715612a1857600080fd5b82525081516020918201928201910280838360005b83811015612a45578181015183820152602001612a2d565b50505050905001604052505050905060008090505b8151811015612b0c57818181518110612a6f57fe5b60200260200101516001600160a01b031663095ea7b3846000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ad857600080fd5b505af1158015612aec573d6000803e3d6000fd5b505050506040513d6020811015612b0257600080fd5b5050600101612a5a565b506040517f198f462153295cccb18f8ac2ae01bf2fc81f948daad29b15c5a9ad53370b07e590600090a15050612b40612dc9565b548114612b7e5760405162461bcd60e51b815260040180806020018281038252602d815260200180613a6f602d913960400191505060405180910390fd5b50565b6000612b8b612d94565b546040805163fde924f760e01b815290516001600160a01b039092169163fde924f791600480820192602092909190829003018186803b1580156125b157600080fd5b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b6000612c08612bce565b6001600160a01b0385166000908152600382016020526040902054909150821115612c71576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b6001600160a01b0384166000908152600382016020526040902054612c9c908363ffffffff612d3216565b6001600160a01b0380861660009081526003840160205260408082209390935590851681522054612cd3908363ffffffff61352816565b6001600160a01b03808516600081815260038501602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050565b6000806000612d41858561357c565b915091508015612d8c576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902090565b6000806040518080613b22602291396040519081900360220190209392505050565b600081612e2e576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580612e565750670de0b6b3a7640000848281612e5357fe5b04145b612e9a576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015612ee8576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6000848281612ef357fe5b049695505050505050565b6110a082826135a1565b612b7e816135ac565b6000805b8251811015612f5d57836001600160a01b0316838281518110612f3457fe5b60200260200101516001600160a01b03161415612f5557600191505061094b565b600101612f15565b5060009392505050565b6000828202831580612f81575082848281612f7e57fe5b04145b612fc5576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015613018576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082612ef3565b6000613033612d94565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b15801561308557600080fd5b505afa158015613099573d6000803e3d6000fd5b505050506040513d60208110156130af57600080fd5b505190506001600160a01b038216633fdddaa2876130d3868863ffffffff612d3216565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561312a57600080fd5b505af115801561313e573d6000803e3d6000fd5b50505050856001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156131a257600080fd5b505af11580156131b6573d6000803e3d6000fd5b505050506040513d60208110156131cc57600080fd5b50516132095760405162461bcd60e51b8152600401808060200182810382526030815260200180613bad6030913960400191505060405180910390fd5b505050505050565b600061321b612d94565b546001600160a01b03161415613266576040805162461bcd60e51b81526020600482018190526024820152600080516020613b8d833981519152604482015290519081900360640190fd5b6000613270612d94565b546001600160a01b031690506000613286610986565b9050600061329a848363ffffffff612deb16565b9050806132a657600080fd5b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156132e157600080fd5b505afa1580156132f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561331e57600080fd5b8101908080516040519392919084600160201b82111561333d57600080fd5b90830190602082018581111561335257600080fd5b82518660208202830111600160201b8211171561336e57600080fd5b82525081516020918201928201910280838360005b8381101561339b578181015183820152602001613383565b50505050905001604052505050905060008090505b81518110156134c45760008282815181106133c757fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561342957600080fd5b505afa15801561343d573d6000803e3d6000fd5b505050506040513d602081101561345357600080fd5b505190506000613469868363ffffffff612f6716565b6040805182815290519192506001600160a01b0385169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a919081900360200190a36134b9833383856136a0565b5050506001016133b0565b506134ce85613515565b6134d8338661351e565b60408051868152905133917f7a011ddbb8da163de89faccb018bb75c616e6ac270738b8bf1785f08ae1b2d6f919081900360200190a25050505050565b612b7e81613882565b6110a08282613919565b600082820183811015613575576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b600080828410613592575050808203600061359a565b505081810360015b9250929050565b6110a0823083612bfe565b60006135b6612bce565b306000908152600382016020526040902054909150821115613616576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b306000908152600382016020526040902054613638908363ffffffff612d3216565b306000908152600383016020526040902055600281015461365f908363ffffffff612d3216565b600282015560408051838152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006136aa612d94565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b1580156136fc57600080fd5b505afa158015613710573d6000803e3d6000fd5b505050506040513d602081101561372657600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908816916323b872dd916064808201926020929091908290030181600087803b15801561378457600080fd5b505af1158015613798573d6000803e3d6000fd5b505050506040513d60208110156137ae57600080fd5b50516137eb5760405162461bcd60e51b8152600401808060200182810382526034815260200180613ac76034913960400191505060405180910390fd5b6001600160a01b038216633fdddaa28761380b868863ffffffff61352816565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561386257600080fd5b505af1158015613876573d6000803e3d6000fd5b50505050505050505050565b600061388c612bce565b3060009081526003820160205260409020549091506138b1908363ffffffff61352816565b30600090815260038301602052604090205560028101546138d8908363ffffffff61352816565b600282015560408051838152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6110a0308383612bfe565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139655782800160ff19823516178555613992565b82800160010185558215613992579182015b82811115613992578235825591602001919060010190613977565b5061399e9291506139a2565b5090565b6108e891905b8082111561399e57600081556001016139a856fe504261736963536d617274506f6f6c2e62696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e6f6e6c79546f6b656e42696e6465723a206e6f7420746f6b656e2062696e646572504261736963536d617274506f6f6c2e696e69743a205f696e697469616c537570706c792063616e206e6f74207a65726f504261736963536d617274506f6f6c2e756e62696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e6e6f5265656e7472793a207265656e747279206465746563746564504261736963536d617274506f6f6c2e726562696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e5f70756c6c556e6465726c79696e673a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e726562696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e73746f726167652e6c6f636174696f6e8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925504261736963536d617274506f6f6c2e696e69743a20616c726561647920696e697469616c69736564504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479504261736963536d617274506f6f6c2e5f70757368556e6465726c79696e673a207472616e73666572206661696c6564504261736963536d617274506f6f6c2e6f6e6c79436f6e74726f6c6c65723a206e6f7420636f6e74726f6c6c6572504261736963536d617274506f6f6c2e696e69743a205f62506f6f6c2063616e6e6f7420626520307830302e2e2e2e303030504261736963536d617274506f6f6c2e6f6e6c795075626c6963537761705365747465723a206e6f74207075626c6963207377617020736574746572a2646970667358221220a0ea95b083e9a743a56a51071a3bd81de5fc5a588a05841ec12b36be2fc427d664736f6c63430006040033"; diff --git a/typechain/PCappedSmartPoolFactory.ts b/typechain/PCappedSmartPoolFactory.ts index 5bcb49b..7e2d799 100644 --- a/typechain/PCappedSmartPoolFactory.ts +++ b/typechain/PCappedSmartPoolFactory.ts @@ -941,4 +941,4 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50613ea6806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063652062c511610130578063be1d24ad116100b8578063dd62ed3e1161007c578063dd62ed3e14610828578063e4e1e53814610856578063ec565ffe14610888578063fd68f22314610890578063fde924f71461089857610232565b8063be1d24ad146106e3578063cf5e7bd314610700578063d2209ad914610726578063d4cadf68146107f4578063d73dd623146107fc57610232565b806392eefe9b116100ff57806392eefe9b1461060b57806395d89b4114610631578063a9059cbb14610639578063aa6ca80814610665578063bd5437e8146106bd57610232565b8063652062c5146105a957806366188463146105b157806370a08231146105dd578063830df8521461060357610232565b806334e19907116101be57806347786d371161018257806347786d371461053757806349b59552146105545780634cde1618146105735780634eee8d151461057b578063554d578d146105a157610232565b806334e199071461040d57806334e7a19f1461042a578063371babdc146104475780633fdddaa2146104fd57806344b250521461052f57610232565b806323b872dd1161020557806323b872dd146103165780632c500bc81461034c5780632fecc529146103705780633018205f146103e7578063313ce567146103ef57610232565b806306fdde0314610237578063095ea7b3146102b4578063099e9e2a146102f457806318160ddd1461030e575b600080fd5b61023f6108a0565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b038135169060200135610939565b604080519115158252519081900360200190f35b6102fc61099f565b60408051918252519081900360200190f35b6102fc6109d4565b6102e06004803603606081101561032c57600080fd5b506001600160a01b038135811691602081013590911690604001356109e7565b610354610b5c565b604080516001600160a01b039092168252519081900360200190f35b6103e56004803603604081101561038657600080fd5b81359190810190604081016020820135600160201b8111156103a757600080fd5b8201836020820111156103b957600080fd5b803590602001918460208302840111600160201b831117156103da57600080fd5b509092509050610b75565b005b610354610f8a565b6103f7610fa6565b6040805160ff9092168252519081900360200190f35b6103e56004803603602081101561042357600080fd5b5035610fab565b6103e56004803603602081101561044057600080fd5b5035611104565b6104646004803603602081101561045d57600080fd5b50356111c0565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104a8578181015183820152602001610490565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104e75781810151838201526020016104cf565b5050505090500194505050505060405180910390f35b6103e56004803603606081101561051357600080fd5b506001600160a01b038135169060208101359060400135611406565b610354611898565b6103e56004803603602081101561054d57600080fd5b50356118b4565b6103e56004803603602081101561056a57600080fd5b50351515611976565b610354611a68565b6103e56004803603602081101561059157600080fd5b50356001600160a01b0316611a84565b6102fc611b6f565b6102fc611b7f565b6102e0600480360360408110156105c757600080fd5b506001600160a01b038135169060200135611b9a565b6102fc600480360360208110156105f357600080fd5b50356001600160a01b0316611c8f565b6102fc611cbb565b6103e56004803603602081101561062157600080fd5b50356001600160a01b0316611cd6565b61023f611dc1565b6102e06004803603604081101561064f57600080fd5b506001600160a01b038135169060200135611e27565b61066d611e3d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a9578181015183820152602001610691565b505050509050019250505060405180910390f35b6103e5600480360360208110156106d357600080fd5b50356001600160a01b0316611f56565b6103e5600480360360208110156106f957600080fd5b5035612041565b6103e56004803603602081101561071657600080fd5b50356001600160a01b0316612378565b6103e56004803603608081101561073c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561076657600080fd5b82018360208201111561077857600080fd5b803590602001918460018302840111600160201b8311171561079957600080fd5b919390929091602081019035600160201b8111156107b657600080fd5b8201836020820111156107c857600080fd5b803590602001918460018302840111600160201b831117156107e957600080fd5b919350915035612599565b6102fc6126fd565b6102e06004803603604081101561081257600080fd5b506001600160a01b03813516906020013561277b565b6102fc6004803603604081101561083e57600080fd5b506001600160a01b0381358116916020013516612815565b6103e56004803603606081101561086c57600080fd5b506001600160a01b03813516906020810135906040013561284f565b6102fc612a86565b6103e5612ab6565b6102e0612d17565b60606108aa612d64565b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561092e5780601f106109035761010080835404028352916020019161092e565b820191906000526020600020905b81548152906001019060200180831161091157829003601f168201915b505050505090505b90565b600081610944612d64565b336000818152600492909201602090815260408084206001600160a01b03891680865290835293819020949094558351868152935192939192600080516020613d5c8339815191529281900390910190a35060015b92915050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902081565b60006109de612d64565b60020154905090565b6000806109f2612d64565b9050336001600160a01b0386161480610a3057506001600160a01b038516600090815260048201602090815260408083203384529091529020548311155b610a7a576040805162461bcd60e51b815260206004820152601660248201527522a9292fa821aa27a5a2a72fa120a22fa1a0a62622a960511b604482015290519081900360640190fd5b610a85858585612d94565b336001600160a01b03861614801590610ac557506001600160a01b0385166000908152600482016020908152604080832033845290915290205460001914155b15610b51576001600160a01b03851660009081526004820160209081526040808320338452909152902054610b00908463ffffffff612ec816565b6001600160a01b03868116600090815260048401602090815260408083203380855290835292819020859055805194855251928816939192600080516020613d5c8339815191529281900390910190a35b506001949350505050565b6000610b66612f2a565b546001600160a01b0316905090565b6000610b7f612f2a565b546001600160a01b03161415610bdc576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b610be4612f5f565b805460010190556000610bf5612f5f565b5490506000610c02612f2a565b546001600160a01b031690506000610c186109d4565b90506000610c2c878363ffffffff612f8116565b905080610c3857600080fd5b610c423388613094565b610c4b8761309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610cc357600080fd5b8101908080516040519392919084600160201b821115610ce257600080fd5b908301906020820185811115610cf757600080fd5b82518660208202830111600160201b82111715610d1357600080fd5b82525081516020918201928201910280838360005b83811015610d40578181015183820152602001610d28565b50505050905001604052505050905060008090505b8151811015610ec457610dae828281518110610d6d57fe5b60200260200101518989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130a792505050565b15610db857610ebc565b6000828281518110610dc657fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b505190506000610e68868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a3610eb8833383856131bf565b5050505b600101610d55565b50336001600160a01b03167fe27d877155575efc81398b13b114bbbbfd49b156eb72e9f6c691f3b72b8adf9489898960405180848152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a250505050610f46612f5f565b548114610f845760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b50505050565b6000610f94612f2a565b600101546001600160a01b0316905090565b601281565b610fb3612f2a565b600101546001600160a01b03163314610ffd5760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611005612f5f565b805460010190556000611016612f5f565b5460408051848152905191925033917f44ef267e747417ef6614a0ab5bee304ba1a35d76759d34170d1b74a850a9d0339181900360200190a2611057612f2a565b54604080516334e1990760e01b81526004810185905290516001600160a01b03909216916334e199079160248082019260009290919082900301818387803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506110c2612f5f565b5481146111005760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b5050565b61110c612f5f565b80546001019055600061111d612f5f565b549050611129826133a7565b611131612f5f565b54811461116f5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b506111786136bd565b546111816109d4565b106111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c5a602d913960400191505060405180910390fd5b50565b6060806111cb612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b15801561120e57600080fd5b505afa158015611222573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561124b57600080fd5b8101908080516040519392919084600160201b82111561126a57600080fd5b90830190602082018581111561127f57600080fd5b82518660208202830111600160201b8211171561129b57600080fd5b82525081516020918201928201910280838360005b838110156112c85781810151838201526020016112b0565b5050505090500160405250505091508151604051908082528060200260200182016040528015611302578160200160208202803683370190505b509050600061131f6113126109d4565b859063ffffffff612f8116565b905060005b83518110156113ff57600084828151811061133b57fe5b60200260200101519050600061134f612f2a565b546040805163f8b2cb4f60e01b81526001600160a01b0385811660048301529151919092169163f8b2cb4f916024808301926020929190829003018186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d60208110156113c457600080fd5b5051905060006113da858363ffffffff6130fd16565b9050808685815181106113e957fe5b6020908102919091010152505050600101611324565b5050915091565b61140e612f2a565b600301546001600160a01b031633146114585760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b611460612f5f565b805460010190556000611471612f5f565b549050600061147e612f2a565b5460408051631185197d60e31b81526001600160a01b038881166004830152915191909216925086918391638c28cbe89160248082019260009290919082900301818387803b1580156114d057600080fd5b505af11580156114e4573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561154057600080fd5b505afa158015611554573d6000803e3d6000fd5b505050506040513d602081101561156a57600080fd5b50519050808611156116e7576001600160a01b0382166323b872dd33306115978a8663ffffffff612ec816565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506040513d602081101561162957600080fd5b50516116665760405162461bcd60e51b815260040180806020018281038252602b815260200180613cb4602b913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038581166004830152600019602483015291519184169163095ea7b3916044808201926020929091908290030181600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b505050506040513d60208110156116e457600080fd5b50505b60408051631feeed5160e11b81526001600160a01b0389811660048301526024820189905260448201889052915191851691633fdddaa29160648082019260009290919082900301818387803b15801561174057600080fd5b505af1158015611754573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03861692506370a0823191602480820192602092909190829003018186803b1580156117a257600080fd5b505afa1580156117b6573d6000803e3d6000fd5b505050506040513d60208110156117cc57600080fd5b50519050801561188c576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b505161188c5760405162461bcd60e51b8152600401808060200182810382526027815260200180613d136027913960400191505060405180910390fd5b50505050610f46612f5f565b60006118a2612f2a565b600301546001600160a01b0316905090565b6118bc612f2a565b600101546001600160a01b031633146119065760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b61190e612f5f565b80546001019055600061191f612f5f565b549050337f6bc200110c7794738d401810b22ef824a2044a8ccb022d4ad8769840370331f561194c6136bd565b5460408051918252602082018690528051918290030190a28161196d6136bd565b556110c2612f5f565b61197e612f2a565b600201546001600160a01b031633146119c85760405162461bcd60e51b815260040180806020018281038252603c815260200180613e35603c913960400191505060405180910390fd5b6119d0612f5f565b8054600101905560006119e1612f5f565b546040519091508215159033907feda6fce4059a79def1a5550dd645183dbd84a324dde2aba020658eb3d7f84a8790600090a3611a1c612f2a565b54604080516324dacaa960e11b8152841515600482015290516001600160a01b03909216916349b595529160248082019260009290919082900301818387803b1580156110a257600080fd5b6000611a72612f2a565b600201546001600160a01b0316905090565b611a8c612f2a565b600101546001600160a01b03163314611ad65760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611ade612f5f565b805460010190556000611aef612f5f565b5490506001600160a01b038216611b04612f2a565b600201546040516001600160a01b03909116907fc2f50b6bc4bd45505f1557a7d4b19c5177d334181ae1179d335020424d3736c490600090a381611b46612f2a565b60020180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6000611b796136bd565b54905090565b604051806021613c3982396021019050604051809103902081565b600080611ba5612d64565b33600090815260048201602090815260408083206001600160a01b038916845290915290205490915080841115611c015733600090815260048301602090815260408083206001600160a01b0389168452909152812055611c38565b611c11818563ffffffff612ec816565b33600090815260048401602090815260408083206001600160a01b038a1684529091529020555b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190205481519081529051929392600080516020613d5c833981519152929181900390910190a3506001949350505050565b6000611c99612d64565b6001600160a01b03929092166000908152600390920160205250604090205490565b604051806022613d3a82396022019050604051809103902081565b611cde612f2a565b600101546001600160a01b03163314611d285760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611d30612f5f565b805460010190556000611d41612f5f565b5490506001600160a01b038216611d56612f2a565b600101546040516001600160a01b03909116907f6aef1fb5b23d0e109fc7f2b0601019e1edbacd177e31a441ec8548e8dd14f0f790600090a381611d98612f2a565b60010180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6060611dcb612d64565b60019081018054604080516020600295841615610100026000190190931694909404601f81018390048302850183019091528084529083018282801561092e5780601f106109035761010080835404028352916020019161092e565b6000611e34338484612d94565b50600192915050565b6060611e47612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ec757600080fd5b8101908080516040519392919084600160201b821115611ee657600080fd5b908301906020820185811115611efb57600080fd5b82518660208202830111600160201b82111715611f1757600080fd5b82525081516020918201928201910280838360005b83811015611f44578181015183820152602001611f2c565b50505050905001604052505050905090565b611f5e612f2a565b600101546001600160a01b03163314611fa85760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611fb0612f5f565b805460010190556000611fc1612f5f565b5490506001600160a01b038216611fd6612f2a565b600301546040516001600160a01b03909116907fcbca212b561161352cbd1ef8956a916a93bee0f84bb6a3af9118af675266a96390600090a381612018612f2a565b60030180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b600061204b612f2a565b546001600160a01b031614156120a8576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6120b0612f5f565b8054600101905560006120c1612f5f565b54905060006120ce612f2a565b546001600160a01b0316905060006120e46109d4565b905060006120f8858363ffffffff612f8116565b90508061210457600080fd5b61210e3386613094565b6121178561309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561218f57600080fd5b8101908080516040519392919084600160201b8211156121ae57600080fd5b9083019060208201858111156121c357600080fd5b82518660208202830111600160201b821117156121df57600080fd5b82525081516020918201928201910280838360005b8381101561220c5781810151838201526020016121f4565b50505050905001604052505050905060008090505b815181101561233557600082828151811061223857fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561229a57600080fd5b505afa1580156122ae573d6000803e3d6000fd5b505050506040513d60208110156122c457600080fd5b5051905060006122da868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a361232a833383856131bf565b505050600101612221565b5060408051878152905133917fbc865856a1e9f1dfe2abde98edc2eefe87b6c391a47032388ef36d8c2474aad3919081900360200190a2505050506110c2612f5f565b612380612f2a565b600301546001600160a01b031633146123ca5760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6123d2612f5f565b8054600101905560006123e3612f5f565b54905060006123f0612f2a565b546040805163cf5e7bd360e01b81526001600160a01b03868116600483015291519190921692508491839163cf5e7bd39160248082019260009290919082900301818387803b15801561244257600080fd5b505af1158015612456573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03851692506370a0823191602480820192602092909190829003018186803b1580156124a457600080fd5b505afa1580156124b8573d6000803e3d6000fd5b505050506040513d60208110156124ce57600080fd5b50519050801561258e576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561252757600080fd5b505af115801561253b573d6000803e3d6000fd5b505050506040513d602081101561255157600080fd5b505161258e5760405162461bcd60e51b8152600401808060200182810382526027815260200180613c126027913960400191505060405180910390fd5b5050506110c2612f5f565b60006125a3612f2a565b80549091506001600160a01b0316156125ed5760405162461bcd60e51b8152600401808060200182810382526029815260200180613d7c6029913960400191505060405180910390fd5b6001600160a01b0387166126325760405162461bcd60e51b8152600401808060200182810382526032815260200180613e036032913960400191505060405180910390fd5b8161266e5760405162461bcd60e51b8152600401808060200182810382526031815260200180613be16031913960400191505060405180910390fd5b80546001600160a01b0388166001600160a01b031991821617825560018201805482163390811790915560028301805483168217905560038301805490921617905585856126ba612d64565b6126c5929091613aee565b5083836126d0612d64565b60010191906126e0929190613aee565b506126ea826136df565b6126f433836136e8565b50505050505050565b6000612707612f2a565b5460408051631a995bed60e31b815290516001600160a01b039092169163d4cadf6891600480820192602092909190829003018186803b15801561274a57600080fd5b505afa15801561275e573d6000803e3d6000fd5b505050506040513d602081101561277457600080fd5b5051905090565b600080612786612d64565b33600090815260048201602090815260408083206001600160a01b03891684529091529020549091506127bf908463ffffffff6136f216565b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190208590558051948552519193600080516020613d5c833981519152929081900390910190a35060019392505050565b600061281f612d64565b6001600160a01b039384166000908152600491909101602090815260408083209490951682529290925250205490565b612857612f2a565b600301546001600160a01b031633146128a15760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6128a9612f5f565b8054600101905560006128ba612f5f565b54905060006128c7612f2a565b54604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03928316935087928316916323b872dd9160648083019260209291908290030181600087803b15801561292457600080fd5b505af1158015612938573d6000803e3d6000fd5b505050506040513d602081101561294e57600080fd5b505161298b5760405162461bcd60e51b8152600401808060200182810382526029815260200180613b876029913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038481166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b505050506040513d6020811015612a0957600080fd5b505060408051631c9c3ca760e31b81526001600160a01b038881166004830152602482018890526044820187905291519184169163e4e1e5389160648082019260009290919082900301818387803b158015612a6457600080fd5b505af1158015612a78573d6000803e3d6000fd5b505050505050610f46612f5f565b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b612abe612f5f565b805460010190556000612acf612f5f565b5490506000612adc612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169250606091839163cc77828d916004808301926000929190829003018186803b158015612b2457600080fd5b505afa158015612b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b6157600080fd5b8101908080516040519392919084600160201b821115612b8057600080fd5b908301906020820185811115612b9557600080fd5b82518660208202830111600160201b82111715612bb157600080fd5b82525081516020918201928201910280838360005b83811015612bde578181015183820152602001612bc6565b50505050905001604052505050905060008090505b8151811015612ca557818181518110612c0857fe5b60200260200101516001600160a01b031663095ea7b3846000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c7157600080fd5b505af1158015612c85573d6000803e3d6000fd5b505050506040513d6020811015612c9b57600080fd5b5050600101612bf3565b506040517f198f462153295cccb18f8ac2ae01bf2fc81f948daad29b15c5a9ad53370b07e590600090a15050612cd9612f5f565b5481146111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b6000612d21612f2a565b546040805163fde924f760e01b815290516001600160a01b039092169163fde924f791600480820192602092909190829003018186803b15801561274a57600080fd5b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b6000612d9e612d64565b6001600160a01b0385166000908152600382016020526040902054909150821115612e07576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b6001600160a01b0384166000908152600382016020526040902054612e32908363ffffffff612ec816565b6001600160a01b0380861660009081526003840160205260408082209390935590851681522054612e69908363ffffffff6136f216565b6001600160a01b03808516600081815260038501602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050565b6000806000612ed78585613746565b915091508015612f22576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902090565b6000806040518080613d3a602291396040519081900360220190209392505050565b600081612fc4576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580612fec5750670de0b6b3a7640000848281612fe957fe5b04145b613030576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561307e576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161308957fe5b049695505050505050565b611100828261376b565b6111bd81613776565b6000805b82518110156130f357836001600160a01b03168382815181106130ca57fe5b60200260200101516001600160a01b031614156130eb576001915050610999565b6001016130ab565b5060009392505050565b600082820283158061311757508284828161311457fe5b04145b61315b576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b200008101818110156131ae576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082613089565b60006131c9612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b15801561321b57600080fd5b505afa15801561322f573d6000803e3d6000fd5b505050506040513d602081101561324557600080fd5b505190506001600160a01b038216633fdddaa287613269868863ffffffff612ec816565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b1580156132c057600080fd5b505af11580156132d4573d6000803e3d6000fd5b50505050856001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b505050506040513d602081101561336257600080fd5b505161339f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613da56030913960400191505060405180910390fd5b505050505050565b60006133b1612f2a565b546001600160a01b0316141561340e576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6000613418612f2a565b546001600160a01b03169050600061342e6109d4565b90506000613442848363ffffffff612f8116565b90508061344e57600080fd5b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561348957600080fd5b505afa15801561349d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156134c657600080fd5b8101908080516040519392919084600160201b8211156134e557600080fd5b9083019060208201858111156134fa57600080fd5b82518660208202830111600160201b8211171561351657600080fd5b82525081516020918201928201910280838360005b8381101561354357818101518382015260200161352b565b50505050905001604052505050905060008090505b815181101561366c57600082828151811061356f57fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156135d157600080fd5b505afa1580156135e5573d6000803e3d6000fd5b505050506040513d60208110156135fb57600080fd5b505190506000613611868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a919081900360200190a36136618333838561386a565b505050600101613558565b50613676856136df565b61368033866136e8565b60408051868152905133917f7a011ddbb8da163de89faccb018bb75c616e6ac270738b8bf1785f08ae1b2d6f919081900360200190a25050505050565b6000806040518080613c39602191396040519081900360210190209392505050565b6111bd81613a4c565b6111008282613ae3565b60008282018381101561373f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b60008082841061375c5750508082036000613764565b505081810360015b9250929050565b611100823083612d94565b6000613780612d64565b3060009081526003820160205260409020549091508211156137e0576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b306000908152600382016020526040902054613802908363ffffffff612ec816565b3060009081526003830160205260409020556002810154613829908363ffffffff612ec816565b600282015560408051838152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000613874612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b1580156138c657600080fd5b505afa1580156138da573d6000803e3d6000fd5b505050506040513d60208110156138f057600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908816916323b872dd916064808201926020929091908290030181600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505050506040513d602081101561397857600080fd5b50516139b55760405162461bcd60e51b8152600401808060200182810382526034815260200180613cdf6034913960400191505060405180910390fd5b6001600160a01b038216633fdddaa2876139d5868863ffffffff6136f216565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015613a2c57600080fd5b505af1158015613a40573d6000803e3d6000fd5b50505050505050505050565b6000613a56612d64565b306000908152600382016020526040902054909150613a7b908363ffffffff6136f216565b3060009081526003830160205260409020556002810154613aa2908363ffffffff6136f216565b600282015560408051838152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611100308383612d94565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b2f5782800160ff19823516178555613b5c565b82800160010185558215613b5c579182015b82811115613b5c578235825591602001919060010190613b41565b50613b68929150613b6c565b5090565b61093691905b80821115613b685760008155600101613b7256fe504261736963536d617274506f6f6c2e62696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e6f6e6c79546f6b656e42696e6465723a206e6f7420746f6b656e2062696e646572504261736963536d617274506f6f6c2e696e69743a205f696e697469616c537570706c792063616e206e6f74207a65726f504261736963536d617274506f6f6c2e756e62696e643a207472616e73666572206661696c656450436170706564536d617274506f6f6c2e73746f726167652e6c6f636174696f6e50436170706564536d617274506f6f6c2e77697468696e4361703a20436170206c696d697420726561636865645265656e74727950726f74656374696f6e2e6e6f5265656e7472793a207265656e747279206465746563746564504261736963536d617274506f6f6c2e726562696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e5f70756c6c556e6465726c79696e673a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e726562696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e73746f726167652e6c6f636174696f6e8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925504261736963536d617274506f6f6c2e696e69743a20616c726561647920696e697469616c69736564504261736963536d617274506f6f6c2e5f70757368556e6465726c79696e673a207472616e73666572206661696c6564504261736963536d617274506f6f6c2e6f6e6c79436f6e74726f6c6c65723a206e6f7420636f6e74726f6c6c6572504261736963536d617274506f6f6c2e696e69743a205f62506f6f6c2063616e6e6f7420626520307830302e2e2e2e303030504261736963536d617274506f6f6c2e6f6e6c795075626c6963537761705365747465723a206e6f74207075626c6963207377617020736574746572a264697066735822122097353c2b77f474d12784c4dd829bc457b9c67438c8e4aa541639241d1a12b87e64736f6c63430006040033"; + "0x608060405234801561001057600080fd5b50613ea6806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063652062c511610130578063be1d24ad116100b8578063dd62ed3e1161007c578063dd62ed3e14610828578063e4e1e53814610856578063ec565ffe14610888578063fd68f22314610890578063fde924f71461089857610232565b8063be1d24ad146106e3578063cf5e7bd314610700578063d2209ad914610726578063d4cadf68146107f4578063d73dd623146107fc57610232565b806392eefe9b116100ff57806392eefe9b1461060b57806395d89b4114610631578063a9059cbb14610639578063aa6ca80814610665578063bd5437e8146106bd57610232565b8063652062c5146105a957806366188463146105b157806370a08231146105dd578063830df8521461060357610232565b806334e19907116101be57806347786d371161018257806347786d371461053757806349b59552146105545780634cde1618146105735780634eee8d151461057b578063554d578d146105a157610232565b806334e199071461040d57806334e7a19f1461042a578063371babdc146104475780633fdddaa2146104fd57806344b250521461052f57610232565b806323b872dd1161020557806323b872dd146103165780632c500bc81461034c5780632fecc529146103705780633018205f146103e7578063313ce567146103ef57610232565b806306fdde0314610237578063095ea7b3146102b4578063099e9e2a146102f457806318160ddd1461030e575b600080fd5b61023f6108a0565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b038135169060200135610939565b604080519115158252519081900360200190f35b6102fc61099f565b60408051918252519081900360200190f35b6102fc6109d4565b6102e06004803603606081101561032c57600080fd5b506001600160a01b038135811691602081013590911690604001356109e7565b610354610b5c565b604080516001600160a01b039092168252519081900360200190f35b6103e56004803603604081101561038657600080fd5b81359190810190604081016020820135600160201b8111156103a757600080fd5b8201836020820111156103b957600080fd5b803590602001918460208302840111600160201b831117156103da57600080fd5b509092509050610b75565b005b610354610f8a565b6103f7610fa6565b6040805160ff9092168252519081900360200190f35b6103e56004803603602081101561042357600080fd5b5035610fab565b6103e56004803603602081101561044057600080fd5b5035611104565b6104646004803603602081101561045d57600080fd5b50356111c0565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104a8578181015183820152602001610490565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104e75781810151838201526020016104cf565b5050505090500194505050505060405180910390f35b6103e56004803603606081101561051357600080fd5b506001600160a01b038135169060208101359060400135611406565b610354611898565b6103e56004803603602081101561054d57600080fd5b50356118b4565b6103e56004803603602081101561056a57600080fd5b50351515611976565b610354611a68565b6103e56004803603602081101561059157600080fd5b50356001600160a01b0316611a84565b6102fc611b6f565b6102fc611b7f565b6102e0600480360360408110156105c757600080fd5b506001600160a01b038135169060200135611b9a565b6102fc600480360360208110156105f357600080fd5b50356001600160a01b0316611c8f565b6102fc611cbb565b6103e56004803603602081101561062157600080fd5b50356001600160a01b0316611cd6565b61023f611dc1565b6102e06004803603604081101561064f57600080fd5b506001600160a01b038135169060200135611e27565b61066d611e3d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a9578181015183820152602001610691565b505050509050019250505060405180910390f35b6103e5600480360360208110156106d357600080fd5b50356001600160a01b0316611f56565b6103e5600480360360208110156106f957600080fd5b5035612041565b6103e56004803603602081101561071657600080fd5b50356001600160a01b0316612378565b6103e56004803603608081101561073c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561076657600080fd5b82018360208201111561077857600080fd5b803590602001918460018302840111600160201b8311171561079957600080fd5b919390929091602081019035600160201b8111156107b657600080fd5b8201836020820111156107c857600080fd5b803590602001918460018302840111600160201b831117156107e957600080fd5b919350915035612599565b6102fc6126fd565b6102e06004803603604081101561081257600080fd5b506001600160a01b03813516906020013561277b565b6102fc6004803603604081101561083e57600080fd5b506001600160a01b0381358116916020013516612815565b6103e56004803603606081101561086c57600080fd5b506001600160a01b03813516906020810135906040013561284f565b6102fc612a86565b6103e5612ab6565b6102e0612d17565b60606108aa612d64565b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561092e5780601f106109035761010080835404028352916020019161092e565b820191906000526020600020905b81548152906001019060200180831161091157829003601f168201915b505050505090505b90565b600081610944612d64565b336000818152600492909201602090815260408084206001600160a01b03891680865290835293819020949094558351868152935192939192600080516020613d5c8339815191529281900390910190a35060015b92915050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902081565b60006109de612d64565b60020154905090565b6000806109f2612d64565b9050336001600160a01b0386161480610a3057506001600160a01b038516600090815260048201602090815260408083203384529091529020548311155b610a7a576040805162461bcd60e51b815260206004820152601660248201527522a9292fa821aa27a5a2a72fa120a22fa1a0a62622a960511b604482015290519081900360640190fd5b610a85858585612d94565b336001600160a01b03861614801590610ac557506001600160a01b0385166000908152600482016020908152604080832033845290915290205460001914155b15610b51576001600160a01b03851660009081526004820160209081526040808320338452909152902054610b00908463ffffffff612ec816565b6001600160a01b03868116600090815260048401602090815260408083203380855290835292819020859055805194855251928816939192600080516020613d5c8339815191529281900390910190a35b506001949350505050565b6000610b66612f2a565b546001600160a01b0316905090565b6000610b7f612f2a565b546001600160a01b03161415610bdc576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b610be4612f5f565b805460010190556000610bf5612f5f565b5490506000610c02612f2a565b546001600160a01b031690506000610c186109d4565b90506000610c2c878363ffffffff612f8116565b905080610c3857600080fd5b610c423388613094565b610c4b8761309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610cc357600080fd5b8101908080516040519392919084600160201b821115610ce257600080fd5b908301906020820185811115610cf757600080fd5b82518660208202830111600160201b82111715610d1357600080fd5b82525081516020918201928201910280838360005b83811015610d40578181015183820152602001610d28565b50505050905001604052505050905060008090505b8151811015610ec457610dae828281518110610d6d57fe5b60200260200101518989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130a792505050565b15610db857610ebc565b6000828281518110610dc657fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b505190506000610e68868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a3610eb8833383856131bf565b5050505b600101610d55565b50336001600160a01b03167fe27d877155575efc81398b13b114bbbbfd49b156eb72e9f6c691f3b72b8adf9489898960405180848152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a250505050610f46612f5f565b548114610f845760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b50505050565b6000610f94612f2a565b600101546001600160a01b0316905090565b601281565b610fb3612f2a565b600101546001600160a01b03163314610ffd5760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611005612f5f565b805460010190556000611016612f5f565b5460408051848152905191925033917f44ef267e747417ef6614a0ab5bee304ba1a35d76759d34170d1b74a850a9d0339181900360200190a2611057612f2a565b54604080516334e1990760e01b81526004810185905290516001600160a01b03909216916334e199079160248082019260009290919082900301818387803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506110c2612f5f565b5481146111005760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b5050565b61110c612f5f565b80546001019055600061111d612f5f565b549050611129826133a7565b611131612f5f565b54811461116f5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b506111786136bd565b546111816109d4565b106111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c5a602d913960400191505060405180910390fd5b50565b6060806111cb612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b15801561120e57600080fd5b505afa158015611222573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561124b57600080fd5b8101908080516040519392919084600160201b82111561126a57600080fd5b90830190602082018581111561127f57600080fd5b82518660208202830111600160201b8211171561129b57600080fd5b82525081516020918201928201910280838360005b838110156112c85781810151838201526020016112b0565b5050505090500160405250505091508151604051908082528060200260200182016040528015611302578160200160208202803683370190505b509050600061131f6113126109d4565b859063ffffffff612f8116565b905060005b83518110156113ff57600084828151811061133b57fe5b60200260200101519050600061134f612f2a565b546040805163f8b2cb4f60e01b81526001600160a01b0385811660048301529151919092169163f8b2cb4f916024808301926020929190829003018186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d60208110156113c457600080fd5b5051905060006113da858363ffffffff6130fd16565b9050808685815181106113e957fe5b6020908102919091010152505050600101611324565b5050915091565b61140e612f2a565b600301546001600160a01b031633146114585760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b611460612f5f565b805460010190556000611471612f5f565b549050600061147e612f2a565b5460408051631185197d60e31b81526001600160a01b038881166004830152915191909216925086918391638c28cbe89160248082019260009290919082900301818387803b1580156114d057600080fd5b505af11580156114e4573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561154057600080fd5b505afa158015611554573d6000803e3d6000fd5b505050506040513d602081101561156a57600080fd5b50519050808611156116e7576001600160a01b0382166323b872dd33306115978a8663ffffffff612ec816565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506040513d602081101561162957600080fd5b50516116665760405162461bcd60e51b815260040180806020018281038252602b815260200180613cb4602b913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038581166004830152600019602483015291519184169163095ea7b3916044808201926020929091908290030181600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b505050506040513d60208110156116e457600080fd5b50505b60408051631feeed5160e11b81526001600160a01b0389811660048301526024820189905260448201889052915191851691633fdddaa29160648082019260009290919082900301818387803b15801561174057600080fd5b505af1158015611754573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03861692506370a0823191602480820192602092909190829003018186803b1580156117a257600080fd5b505afa1580156117b6573d6000803e3d6000fd5b505050506040513d60208110156117cc57600080fd5b50519050801561188c576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b505161188c5760405162461bcd60e51b8152600401808060200182810382526027815260200180613d136027913960400191505060405180910390fd5b50505050610f46612f5f565b60006118a2612f2a565b600301546001600160a01b0316905090565b6118bc612f2a565b600101546001600160a01b031633146119065760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b61190e612f5f565b80546001019055600061191f612f5f565b549050337f6bc200110c7794738d401810b22ef824a2044a8ccb022d4ad8769840370331f561194c6136bd565b5460408051918252602082018690528051918290030190a28161196d6136bd565b556110c2612f5f565b61197e612f2a565b600201546001600160a01b031633146119c85760405162461bcd60e51b815260040180806020018281038252603c815260200180613e35603c913960400191505060405180910390fd5b6119d0612f5f565b8054600101905560006119e1612f5f565b546040519091508215159033907feda6fce4059a79def1a5550dd645183dbd84a324dde2aba020658eb3d7f84a8790600090a3611a1c612f2a565b54604080516324dacaa960e11b8152841515600482015290516001600160a01b03909216916349b595529160248082019260009290919082900301818387803b1580156110a257600080fd5b6000611a72612f2a565b600201546001600160a01b0316905090565b611a8c612f2a565b600101546001600160a01b03163314611ad65760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611ade612f5f565b805460010190556000611aef612f5f565b5490506001600160a01b038216611b04612f2a565b600201546040516001600160a01b03909116907fc2f50b6bc4bd45505f1557a7d4b19c5177d334181ae1179d335020424d3736c490600090a381611b46612f2a565b60020180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6000611b796136bd565b54905090565b604051806021613c3982396021019050604051809103902081565b600080611ba5612d64565b33600090815260048201602090815260408083206001600160a01b038916845290915290205490915080841115611c015733600090815260048301602090815260408083206001600160a01b0389168452909152812055611c38565b611c11818563ffffffff612ec816565b33600090815260048401602090815260408083206001600160a01b038a1684529091529020555b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190205481519081529051929392600080516020613d5c833981519152929181900390910190a3506001949350505050565b6000611c99612d64565b6001600160a01b03929092166000908152600390920160205250604090205490565b604051806022613d3a82396022019050604051809103902081565b611cde612f2a565b600101546001600160a01b03163314611d285760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611d30612f5f565b805460010190556000611d41612f5f565b5490506001600160a01b038216611d56612f2a565b600101546040516001600160a01b03909116907f6aef1fb5b23d0e109fc7f2b0601019e1edbacd177e31a441ec8548e8dd14f0f790600090a381611d98612f2a565b60010180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6060611dcb612d64565b60019081018054604080516020600295841615610100026000190190931694909404601f81018390048302850183019091528084529083018282801561092e5780601f106109035761010080835404028352916020019161092e565b6000611e34338484612d94565b50600192915050565b6060611e47612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ec757600080fd5b8101908080516040519392919084600160201b821115611ee657600080fd5b908301906020820185811115611efb57600080fd5b82518660208202830111600160201b82111715611f1757600080fd5b82525081516020918201928201910280838360005b83811015611f44578181015183820152602001611f2c565b50505050905001604052505050905090565b611f5e612f2a565b600101546001600160a01b03163314611fa85760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611fb0612f5f565b805460010190556000611fc1612f5f565b5490506001600160a01b038216611fd6612f2a565b600301546040516001600160a01b03909116907fcbca212b561161352cbd1ef8956a916a93bee0f84bb6a3af9118af675266a96390600090a381612018612f2a565b60030180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b600061204b612f2a565b546001600160a01b031614156120a8576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6120b0612f5f565b8054600101905560006120c1612f5f565b54905060006120ce612f2a565b546001600160a01b0316905060006120e46109d4565b905060006120f8858363ffffffff612f8116565b90508061210457600080fd5b61210e3386613094565b6121178561309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561218f57600080fd5b8101908080516040519392919084600160201b8211156121ae57600080fd5b9083019060208201858111156121c357600080fd5b82518660208202830111600160201b821117156121df57600080fd5b82525081516020918201928201910280838360005b8381101561220c5781810151838201526020016121f4565b50505050905001604052505050905060008090505b815181101561233557600082828151811061223857fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561229a57600080fd5b505afa1580156122ae573d6000803e3d6000fd5b505050506040513d60208110156122c457600080fd5b5051905060006122da868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a361232a833383856131bf565b505050600101612221565b5060408051878152905133917fbc865856a1e9f1dfe2abde98edc2eefe87b6c391a47032388ef36d8c2474aad3919081900360200190a2505050506110c2612f5f565b612380612f2a565b600301546001600160a01b031633146123ca5760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6123d2612f5f565b8054600101905560006123e3612f5f565b54905060006123f0612f2a565b546040805163cf5e7bd360e01b81526001600160a01b03868116600483015291519190921692508491839163cf5e7bd39160248082019260009290919082900301818387803b15801561244257600080fd5b505af1158015612456573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03851692506370a0823191602480820192602092909190829003018186803b1580156124a457600080fd5b505afa1580156124b8573d6000803e3d6000fd5b505050506040513d60208110156124ce57600080fd5b50519050801561258e576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561252757600080fd5b505af115801561253b573d6000803e3d6000fd5b505050506040513d602081101561255157600080fd5b505161258e5760405162461bcd60e51b8152600401808060200182810382526027815260200180613c126027913960400191505060405180910390fd5b5050506110c2612f5f565b60006125a3612f2a565b80549091506001600160a01b0316156125ed5760405162461bcd60e51b8152600401808060200182810382526029815260200180613d7c6029913960400191505060405180910390fd5b6001600160a01b0387166126325760405162461bcd60e51b8152600401808060200182810382526032815260200180613e036032913960400191505060405180910390fd5b8161266e5760405162461bcd60e51b8152600401808060200182810382526031815260200180613be16031913960400191505060405180910390fd5b80546001600160a01b0388166001600160a01b031991821617825560018201805482163390811790915560028301805483168217905560038301805490921617905585856126ba612d64565b6126c5929091613aee565b5083836126d0612d64565b60010191906126e0929190613aee565b506126ea826136df565b6126f433836136e8565b50505050505050565b6000612707612f2a565b5460408051631a995bed60e31b815290516001600160a01b039092169163d4cadf6891600480820192602092909190829003018186803b15801561274a57600080fd5b505afa15801561275e573d6000803e3d6000fd5b505050506040513d602081101561277457600080fd5b5051905090565b600080612786612d64565b33600090815260048201602090815260408083206001600160a01b03891684529091529020549091506127bf908463ffffffff6136f216565b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190208590558051948552519193600080516020613d5c833981519152929081900390910190a35060019392505050565b600061281f612d64565b6001600160a01b039384166000908152600491909101602090815260408083209490951682529290925250205490565b612857612f2a565b600301546001600160a01b031633146128a15760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6128a9612f5f565b8054600101905560006128ba612f5f565b54905060006128c7612f2a565b54604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03928316935087928316916323b872dd9160648083019260209291908290030181600087803b15801561292457600080fd5b505af1158015612938573d6000803e3d6000fd5b505050506040513d602081101561294e57600080fd5b505161298b5760405162461bcd60e51b8152600401808060200182810382526029815260200180613b876029913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038481166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b505050506040513d6020811015612a0957600080fd5b505060408051631c9c3ca760e31b81526001600160a01b038881166004830152602482018890526044820187905291519184169163e4e1e5389160648082019260009290919082900301818387803b158015612a6457600080fd5b505af1158015612a78573d6000803e3d6000fd5b505050505050610f46612f5f565b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b612abe612f5f565b805460010190556000612acf612f5f565b5490506000612adc612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169250606091839163cc77828d916004808301926000929190829003018186803b158015612b2457600080fd5b505afa158015612b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b6157600080fd5b8101908080516040519392919084600160201b821115612b8057600080fd5b908301906020820185811115612b9557600080fd5b82518660208202830111600160201b82111715612bb157600080fd5b82525081516020918201928201910280838360005b83811015612bde578181015183820152602001612bc6565b50505050905001604052505050905060008090505b8151811015612ca557818181518110612c0857fe5b60200260200101516001600160a01b031663095ea7b3846000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c7157600080fd5b505af1158015612c85573d6000803e3d6000fd5b505050506040513d6020811015612c9b57600080fd5b5050600101612bf3565b506040517f198f462153295cccb18f8ac2ae01bf2fc81f948daad29b15c5a9ad53370b07e590600090a15050612cd9612f5f565b5481146111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b6000612d21612f2a565b546040805163fde924f760e01b815290516001600160a01b039092169163fde924f791600480820192602092909190829003018186803b15801561274a57600080fd5b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b6000612d9e612d64565b6001600160a01b0385166000908152600382016020526040902054909150821115612e07576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b6001600160a01b0384166000908152600382016020526040902054612e32908363ffffffff612ec816565b6001600160a01b0380861660009081526003840160205260408082209390935590851681522054612e69908363ffffffff6136f216565b6001600160a01b03808516600081815260038501602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050565b6000806000612ed78585613746565b915091508015612f22576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902090565b6000806040518080613d3a602291396040519081900360220190209392505050565b600081612fc4576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580612fec5750670de0b6b3a7640000848281612fe957fe5b04145b613030576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561307e576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161308957fe5b049695505050505050565b611100828261376b565b6111bd81613776565b6000805b82518110156130f357836001600160a01b03168382815181106130ca57fe5b60200260200101516001600160a01b031614156130eb576001915050610999565b6001016130ab565b5060009392505050565b600082820283158061311757508284828161311457fe5b04145b61315b576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b200008101818110156131ae576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082613089565b60006131c9612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b15801561321b57600080fd5b505afa15801561322f573d6000803e3d6000fd5b505050506040513d602081101561324557600080fd5b505190506001600160a01b038216633fdddaa287613269868863ffffffff612ec816565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b1580156132c057600080fd5b505af11580156132d4573d6000803e3d6000fd5b50505050856001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b505050506040513d602081101561336257600080fd5b505161339f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613da56030913960400191505060405180910390fd5b505050505050565b60006133b1612f2a565b546001600160a01b0316141561340e576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6000613418612f2a565b546001600160a01b03169050600061342e6109d4565b90506000613442848363ffffffff612f8116565b90508061344e57600080fd5b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561348957600080fd5b505afa15801561349d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156134c657600080fd5b8101908080516040519392919084600160201b8211156134e557600080fd5b9083019060208201858111156134fa57600080fd5b82518660208202830111600160201b8211171561351657600080fd5b82525081516020918201928201910280838360005b8381101561354357818101518382015260200161352b565b50505050905001604052505050905060008090505b815181101561366c57600082828151811061356f57fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156135d157600080fd5b505afa1580156135e5573d6000803e3d6000fd5b505050506040513d60208110156135fb57600080fd5b505190506000613611868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a919081900360200190a36136618333838561386a565b505050600101613558565b50613676856136df565b61368033866136e8565b60408051868152905133917f7a011ddbb8da163de89faccb018bb75c616e6ac270738b8bf1785f08ae1b2d6f919081900360200190a25050505050565b6000806040518080613c39602191396040519081900360210190209392505050565b6111bd81613a4c565b6111008282613ae3565b60008282018381101561373f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b60008082841061375c5750508082036000613764565b505081810360015b9250929050565b611100823083612d94565b6000613780612d64565b3060009081526003820160205260409020549091508211156137e0576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b306000908152600382016020526040902054613802908363ffffffff612ec816565b3060009081526003830160205260409020556002810154613829908363ffffffff612ec816565b600282015560408051838152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000613874612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b1580156138c657600080fd5b505afa1580156138da573d6000803e3d6000fd5b505050506040513d60208110156138f057600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908816916323b872dd916064808201926020929091908290030181600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505050506040513d602081101561397857600080fd5b50516139b55760405162461bcd60e51b8152600401808060200182810382526034815260200180613cdf6034913960400191505060405180910390fd5b6001600160a01b038216633fdddaa2876139d5868863ffffffff6136f216565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015613a2c57600080fd5b505af1158015613a40573d6000803e3d6000fd5b50505050505050505050565b6000613a56612d64565b306000908152600382016020526040902054909150613a7b908363ffffffff6136f216565b3060009081526003830160205260409020556002810154613aa2908363ffffffff6136f216565b600282015560408051838152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611100308383612d94565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b2f5782800160ff19823516178555613b5c565b82800160010185558215613b5c579182015b82811115613b5c578235825591602001919060010190613b41565b50613b68929150613b6c565b5090565b61093691905b80821115613b685760008155600101613b7256fe504261736963536d617274506f6f6c2e62696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e6f6e6c79546f6b656e42696e6465723a206e6f7420746f6b656e2062696e646572504261736963536d617274506f6f6c2e696e69743a205f696e697469616c537570706c792063616e206e6f74207a65726f504261736963536d617274506f6f6c2e756e62696e643a207472616e73666572206661696c656450436170706564536d617274506f6f6c2e73746f726167652e6c6f636174696f6e50436170706564536d617274506f6f6c2e77697468696e4361703a20436170206c696d697420726561636865645265656e74727950726f74656374696f6e2e6e6f5265656e7472793a207265656e747279206465746563746564504261736963536d617274506f6f6c2e726562696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e5f70756c6c556e6465726c79696e673a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e726562696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e73746f726167652e6c6f636174696f6e8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925504261736963536d617274506f6f6c2e696e69743a20616c726561647920696e697469616c69736564504261736963536d617274506f6f6c2e5f70757368556e6465726c79696e673a207472616e73666572206661696c6564504261736963536d617274506f6f6c2e6f6e6c79436f6e74726f6c6c65723a206e6f7420636f6e74726f6c6c6572504261736963536d617274506f6f6c2e696e69743a205f62506f6f6c2063616e6e6f7420626520307830302e2e2e2e303030504261736963536d617274506f6f6c2e6f6e6c795075626c6963537761705365747465723a206e6f74207075626c6963207377617020736574746572a2646970667358221220921f99f5ce710bff49f531f343876943c17e23402c0aabbc85e67784411cf5e564736f6c63430006040033"; diff --git a/typechain/PProxiedFactoryFactory.ts b/typechain/PProxiedFactoryFactory.ts index 4b14f92..a469b5d 100644 --- a/typechain/PProxiedFactoryFactory.ts +++ b/typechain/PProxiedFactoryFactory.ts @@ -232,4 +232,4 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50615e66806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063ac4afa381161005b578063ac4afa381461011b578063afc8cc7114610138578063f0907843146103f1578063f2fde38b1461040b57610088565b806319ab453c1461008d5780635b16ebb7146100b557806372d6e87d146100ef57806382c84bfd14610113575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610431565b005b6100db600480360360208110156100cb57600080fd5b50356001600160a01b031661059e565b604080519115158252519081900360200190f35b6100f76105b3565b604080516001600160a01b039092168252519081900360200190f35b6100f76105c2565b6100f76004803603602081101561013157600080fd5b50356105d1565b6100f7600480360360e081101561014e57600080fd5b810190602081018135600160201b81111561016857600080fd5b82018360208201111561017a57600080fd5b803590602001918460018302840111600160201b8311171561019b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460018302840111600160201b8311171561022057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561027a57600080fd5b82018360208201111561028c57600080fd5b803590602001918460208302840111600160201b831117156102ad57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102fc57600080fd5b82018360208201111561030e57600080fd5b803590602001918460208302840111600160201b8311171561032f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561037e57600080fd5b82018360208201111561039057600080fd5b803590602001918460208302840111600160201b831117156103b157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506105f8915050565b6103f9610feb565b60408051918252519081900360200190f35b6100b36004803603602081101561042157600080fd5b50356001600160a01b031661101b565b6001546001600160a01b031615610485576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5cd959606a1b604482015290519081900360640190fd5b61048e33611076565b600080546001600160a01b0319166001600160a01b0383161781556040516104b590611118565b604051809103906000f0801580156104d1573d6000803e3d6000fd5b506040805163d2209ad960e01b81526001600480830191909152670de0b6b3a764000060648301526080602483015260848201819052631253541360e21b60a4830181905260c0604484015260c483019190915260e482015290519192506001600160a01b0383169163d2209ad9916101048082019260009290919082900301818387803b15801561056257600080fd5b505af1158015610576573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b039490941693909317909255505050565b60026020526000908152604090205460ff1681565b6000546001600160a01b031681565b6001546001600160a01b031681565b600381815481106105de57fe5b6000918252602090912001546001600160a01b0316905081565b60006106026110e8565b546001600160a01b031633146106495760405162461bcd60e51b8152600401808060200182810382526027815260200180615e0a6027913960400191505060405180910390fd5b600060405161065790611125565b604051809103906000f080158015610673573d6000803e3d6000fd5b5060015460408051636bc26a1360e11b81526001600160a01b03928316600482015290519293509083169163d784d4269160248082019260009290919082900301818387803b1580156106c557600080fd5b505af11580156106d9573d6000803e3d6000fd5b5050604080516347a76ff160e11b815233600482015290516001600160a01b0385169350638f4edfe29250602480830192600092919082900301818387803b15801561072457600080fd5b505af1158015610738573d6000803e3d6000fd5b5050604080516332abba4760e21b815233600482015290516001600160a01b038516935063caaee91c9250602480830192600092919082900301818387803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050505060008060009054906101000a90046001600160a01b03166001600160a01b031663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107ec57600080fd5b505af1158015610800573d6000803e3d6000fd5b505050506040513d602081101561081657600080fd5b505190508060005b8851811015610a4257600089828151811061083557fe5b60200260200101519050806001600160a01b03166323b872dd33308c868151811061085c57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156108cc57600080fd5b505af11580156108e0573d6000803e3d6000fd5b505050506040513d60208110156108f657600080fd5b50506040805163095ea7b360e01b81526001600160a01b038681166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b15801561094c57600080fd5b505af1158015610960573d6000803e3d6000fd5b505050506040513d602081101561097657600080fd5b505089516001600160a01b0384169063e4e1e538908c908590811061099757fe5b60200260200101518b85815181106109ab57fe5b60200260200101518b86815181106109bf57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015610a1d57600080fd5b505af1158015610a31573d6000803e3d6000fd5b50506001909301925061081e915050565b50806001600160a01b03166392eefe9b846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015610a9b57600080fd5b505af1158015610aaf573d6000803e3d6000fd5b505050506000839050806001600160a01b031663d2209ad9848e8e8e6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b031681526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610b39578181015183820152602001610b21565b50505050905090810190601f168015610b665780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610b99578181015183820152602001610b81565b50505050905090810190601f168015610bc65780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b50505050806001600160a01b03166347786d37876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b505060408051634eee8d1560e01b815233600482015290516001600160a01b0385169350634eee8d159250602480830192600092919082900301818387803b158015610ca657600080fd5b505af1158015610cba573d6000803e3d6000fd5b5050604080516317aa86fd60e31b815233600482015290516001600160a01b038516935063bd5437e89250602480830192600092919082900301818387803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b5050604080516392eefe9b60e01b815233600482015290516001600160a01b03851693506392eefe9b9250602480830192600092919082900301818387803b158015610d6457600080fd5b505af1158015610d78573d6000803e3d6000fd5b50505050806001600160a01b031663fd68f2236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610db757600080fd5b505af1158015610dcb573d6000803e3d6000fd5b50505050600160026000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b03167feb1965569092c5cbc1e8b48dc38da8683f75399acee8d74d4d4e99f6f2731a978d8d604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610ec4578181015183820152602001610eac565b50505050905090810190601f168015610ef15780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610f24578181015183820152602001610f0c565b50505050905090810190601f168015610f515780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26040805163a9059cbb60e01b8152336004820152602481018c905290516001600160a01b0383169163a9059cbb9160448083019260209291908290030181600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b505050506040513d6020811015610fd957600080fd5b50909c9b505050505050505050505050565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b6110236110e8565b546001600160a01b0316331461106a5760405162461bcd60e51b8152600401808060200182810382526027815260200180615e0a6027913960400191505060405180910390fd5b61107381611076565b50565b806001600160a01b03166110886110e8565b546040516001600160a01b03909116907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3806110c76110e8565b80546001600160a01b0319166001600160a01b039290921691909117905550565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b613ec68061113383390190565b610e1180614ff98339019056fe608060405234801561001057600080fd5b50613ea6806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063652062c511610130578063be1d24ad116100b8578063dd62ed3e1161007c578063dd62ed3e14610828578063e4e1e53814610856578063ec565ffe14610888578063fd68f22314610890578063fde924f71461089857610232565b8063be1d24ad146106e3578063cf5e7bd314610700578063d2209ad914610726578063d4cadf68146107f4578063d73dd623146107fc57610232565b806392eefe9b116100ff57806392eefe9b1461060b57806395d89b4114610631578063a9059cbb14610639578063aa6ca80814610665578063bd5437e8146106bd57610232565b8063652062c5146105a957806366188463146105b157806370a08231146105dd578063830df8521461060357610232565b806334e19907116101be57806347786d371161018257806347786d371461053757806349b59552146105545780634cde1618146105735780634eee8d151461057b578063554d578d146105a157610232565b806334e199071461040d57806334e7a19f1461042a578063371babdc146104475780633fdddaa2146104fd57806344b250521461052f57610232565b806323b872dd1161020557806323b872dd146103165780632c500bc81461034c5780632fecc529146103705780633018205f146103e7578063313ce567146103ef57610232565b806306fdde0314610237578063095ea7b3146102b4578063099e9e2a146102f457806318160ddd1461030e575b600080fd5b61023f6108a0565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b038135169060200135610939565b604080519115158252519081900360200190f35b6102fc61099f565b60408051918252519081900360200190f35b6102fc6109d4565b6102e06004803603606081101561032c57600080fd5b506001600160a01b038135811691602081013590911690604001356109e7565b610354610b5c565b604080516001600160a01b039092168252519081900360200190f35b6103e56004803603604081101561038657600080fd5b81359190810190604081016020820135600160201b8111156103a757600080fd5b8201836020820111156103b957600080fd5b803590602001918460208302840111600160201b831117156103da57600080fd5b509092509050610b75565b005b610354610f8a565b6103f7610fa6565b6040805160ff9092168252519081900360200190f35b6103e56004803603602081101561042357600080fd5b5035610fab565b6103e56004803603602081101561044057600080fd5b5035611104565b6104646004803603602081101561045d57600080fd5b50356111c0565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104a8578181015183820152602001610490565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104e75781810151838201526020016104cf565b5050505090500194505050505060405180910390f35b6103e56004803603606081101561051357600080fd5b506001600160a01b038135169060208101359060400135611406565b610354611898565b6103e56004803603602081101561054d57600080fd5b50356118b4565b6103e56004803603602081101561056a57600080fd5b50351515611976565b610354611a68565b6103e56004803603602081101561059157600080fd5b50356001600160a01b0316611a84565b6102fc611b6f565b6102fc611b7f565b6102e0600480360360408110156105c757600080fd5b506001600160a01b038135169060200135611b9a565b6102fc600480360360208110156105f357600080fd5b50356001600160a01b0316611c8f565b6102fc611cbb565b6103e56004803603602081101561062157600080fd5b50356001600160a01b0316611cd6565b61023f611dc1565b6102e06004803603604081101561064f57600080fd5b506001600160a01b038135169060200135611e27565b61066d611e3d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a9578181015183820152602001610691565b505050509050019250505060405180910390f35b6103e5600480360360208110156106d357600080fd5b50356001600160a01b0316611f56565b6103e5600480360360208110156106f957600080fd5b5035612041565b6103e56004803603602081101561071657600080fd5b50356001600160a01b0316612378565b6103e56004803603608081101561073c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561076657600080fd5b82018360208201111561077857600080fd5b803590602001918460018302840111600160201b8311171561079957600080fd5b919390929091602081019035600160201b8111156107b657600080fd5b8201836020820111156107c857600080fd5b803590602001918460018302840111600160201b831117156107e957600080fd5b919350915035612599565b6102fc6126fd565b6102e06004803603604081101561081257600080fd5b506001600160a01b03813516906020013561277b565b6102fc6004803603604081101561083e57600080fd5b506001600160a01b0381358116916020013516612815565b6103e56004803603606081101561086c57600080fd5b506001600160a01b03813516906020810135906040013561284f565b6102fc612a86565b6103e5612ab6565b6102e0612d17565b60606108aa612d64565b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561092e5780601f106109035761010080835404028352916020019161092e565b820191906000526020600020905b81548152906001019060200180831161091157829003601f168201915b505050505090505b90565b600081610944612d64565b336000818152600492909201602090815260408084206001600160a01b03891680865290835293819020949094558351868152935192939192600080516020613d5c8339815191529281900390910190a35060015b92915050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902081565b60006109de612d64565b60020154905090565b6000806109f2612d64565b9050336001600160a01b0386161480610a3057506001600160a01b038516600090815260048201602090815260408083203384529091529020548311155b610a7a576040805162461bcd60e51b815260206004820152601660248201527522a9292fa821aa27a5a2a72fa120a22fa1a0a62622a960511b604482015290519081900360640190fd5b610a85858585612d94565b336001600160a01b03861614801590610ac557506001600160a01b0385166000908152600482016020908152604080832033845290915290205460001914155b15610b51576001600160a01b03851660009081526004820160209081526040808320338452909152902054610b00908463ffffffff612ec816565b6001600160a01b03868116600090815260048401602090815260408083203380855290835292819020859055805194855251928816939192600080516020613d5c8339815191529281900390910190a35b506001949350505050565b6000610b66612f2a565b546001600160a01b0316905090565b6000610b7f612f2a565b546001600160a01b03161415610bdc576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b610be4612f5f565b805460010190556000610bf5612f5f565b5490506000610c02612f2a565b546001600160a01b031690506000610c186109d4565b90506000610c2c878363ffffffff612f8116565b905080610c3857600080fd5b610c423388613094565b610c4b8761309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610cc357600080fd5b8101908080516040519392919084600160201b821115610ce257600080fd5b908301906020820185811115610cf757600080fd5b82518660208202830111600160201b82111715610d1357600080fd5b82525081516020918201928201910280838360005b83811015610d40578181015183820152602001610d28565b50505050905001604052505050905060008090505b8151811015610ec457610dae828281518110610d6d57fe5b60200260200101518989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130a792505050565b15610db857610ebc565b6000828281518110610dc657fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b505190506000610e68868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a3610eb8833383856131bf565b5050505b600101610d55565b50336001600160a01b03167fe27d877155575efc81398b13b114bbbbfd49b156eb72e9f6c691f3b72b8adf9489898960405180848152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a250505050610f46612f5f565b548114610f845760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b50505050565b6000610f94612f2a565b600101546001600160a01b0316905090565b601281565b610fb3612f2a565b600101546001600160a01b03163314610ffd5760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611005612f5f565b805460010190556000611016612f5f565b5460408051848152905191925033917f44ef267e747417ef6614a0ab5bee304ba1a35d76759d34170d1b74a850a9d0339181900360200190a2611057612f2a565b54604080516334e1990760e01b81526004810185905290516001600160a01b03909216916334e199079160248082019260009290919082900301818387803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506110c2612f5f565b5481146111005760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b5050565b61110c612f5f565b80546001019055600061111d612f5f565b549050611129826133a7565b611131612f5f565b54811461116f5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b506111786136bd565b546111816109d4565b106111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c5a602d913960400191505060405180910390fd5b50565b6060806111cb612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b15801561120e57600080fd5b505afa158015611222573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561124b57600080fd5b8101908080516040519392919084600160201b82111561126a57600080fd5b90830190602082018581111561127f57600080fd5b82518660208202830111600160201b8211171561129b57600080fd5b82525081516020918201928201910280838360005b838110156112c85781810151838201526020016112b0565b5050505090500160405250505091508151604051908082528060200260200182016040528015611302578160200160208202803683370190505b509050600061131f6113126109d4565b859063ffffffff612f8116565b905060005b83518110156113ff57600084828151811061133b57fe5b60200260200101519050600061134f612f2a565b546040805163f8b2cb4f60e01b81526001600160a01b0385811660048301529151919092169163f8b2cb4f916024808301926020929190829003018186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d60208110156113c457600080fd5b5051905060006113da858363ffffffff6130fd16565b9050808685815181106113e957fe5b6020908102919091010152505050600101611324565b5050915091565b61140e612f2a565b600301546001600160a01b031633146114585760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b611460612f5f565b805460010190556000611471612f5f565b549050600061147e612f2a565b5460408051631185197d60e31b81526001600160a01b038881166004830152915191909216925086918391638c28cbe89160248082019260009290919082900301818387803b1580156114d057600080fd5b505af11580156114e4573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561154057600080fd5b505afa158015611554573d6000803e3d6000fd5b505050506040513d602081101561156a57600080fd5b50519050808611156116e7576001600160a01b0382166323b872dd33306115978a8663ffffffff612ec816565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506040513d602081101561162957600080fd5b50516116665760405162461bcd60e51b815260040180806020018281038252602b815260200180613cb4602b913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038581166004830152600019602483015291519184169163095ea7b3916044808201926020929091908290030181600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b505050506040513d60208110156116e457600080fd5b50505b60408051631feeed5160e11b81526001600160a01b0389811660048301526024820189905260448201889052915191851691633fdddaa29160648082019260009290919082900301818387803b15801561174057600080fd5b505af1158015611754573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03861692506370a0823191602480820192602092909190829003018186803b1580156117a257600080fd5b505afa1580156117b6573d6000803e3d6000fd5b505050506040513d60208110156117cc57600080fd5b50519050801561188c576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b505161188c5760405162461bcd60e51b8152600401808060200182810382526027815260200180613d136027913960400191505060405180910390fd5b50505050610f46612f5f565b60006118a2612f2a565b600301546001600160a01b0316905090565b6118bc612f2a565b600101546001600160a01b031633146119065760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b61190e612f5f565b80546001019055600061191f612f5f565b549050337f6bc200110c7794738d401810b22ef824a2044a8ccb022d4ad8769840370331f561194c6136bd565b5460408051918252602082018690528051918290030190a28161196d6136bd565b556110c2612f5f565b61197e612f2a565b600201546001600160a01b031633146119c85760405162461bcd60e51b815260040180806020018281038252603c815260200180613e35603c913960400191505060405180910390fd5b6119d0612f5f565b8054600101905560006119e1612f5f565b546040519091508215159033907feda6fce4059a79def1a5550dd645183dbd84a324dde2aba020658eb3d7f84a8790600090a3611a1c612f2a565b54604080516324dacaa960e11b8152841515600482015290516001600160a01b03909216916349b595529160248082019260009290919082900301818387803b1580156110a257600080fd5b6000611a72612f2a565b600201546001600160a01b0316905090565b611a8c612f2a565b600101546001600160a01b03163314611ad65760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611ade612f5f565b805460010190556000611aef612f5f565b5490506001600160a01b038216611b04612f2a565b600201546040516001600160a01b03909116907fc2f50b6bc4bd45505f1557a7d4b19c5177d334181ae1179d335020424d3736c490600090a381611b46612f2a565b60020180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6000611b796136bd565b54905090565b604051806021613c3982396021019050604051809103902081565b600080611ba5612d64565b33600090815260048201602090815260408083206001600160a01b038916845290915290205490915080841115611c015733600090815260048301602090815260408083206001600160a01b0389168452909152812055611c38565b611c11818563ffffffff612ec816565b33600090815260048401602090815260408083206001600160a01b038a1684529091529020555b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190205481519081529051929392600080516020613d5c833981519152929181900390910190a3506001949350505050565b6000611c99612d64565b6001600160a01b03929092166000908152600390920160205250604090205490565b604051806022613d3a82396022019050604051809103902081565b611cde612f2a565b600101546001600160a01b03163314611d285760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611d30612f5f565b805460010190556000611d41612f5f565b5490506001600160a01b038216611d56612f2a565b600101546040516001600160a01b03909116907f6aef1fb5b23d0e109fc7f2b0601019e1edbacd177e31a441ec8548e8dd14f0f790600090a381611d98612f2a565b60010180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6060611dcb612d64565b60019081018054604080516020600295841615610100026000190190931694909404601f81018390048302850183019091528084529083018282801561092e5780601f106109035761010080835404028352916020019161092e565b6000611e34338484612d94565b50600192915050565b6060611e47612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ec757600080fd5b8101908080516040519392919084600160201b821115611ee657600080fd5b908301906020820185811115611efb57600080fd5b82518660208202830111600160201b82111715611f1757600080fd5b82525081516020918201928201910280838360005b83811015611f44578181015183820152602001611f2c565b50505050905001604052505050905090565b611f5e612f2a565b600101546001600160a01b03163314611fa85760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611fb0612f5f565b805460010190556000611fc1612f5f565b5490506001600160a01b038216611fd6612f2a565b600301546040516001600160a01b03909116907fcbca212b561161352cbd1ef8956a916a93bee0f84bb6a3af9118af675266a96390600090a381612018612f2a565b60030180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b600061204b612f2a565b546001600160a01b031614156120a8576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6120b0612f5f565b8054600101905560006120c1612f5f565b54905060006120ce612f2a565b546001600160a01b0316905060006120e46109d4565b905060006120f8858363ffffffff612f8116565b90508061210457600080fd5b61210e3386613094565b6121178561309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561218f57600080fd5b8101908080516040519392919084600160201b8211156121ae57600080fd5b9083019060208201858111156121c357600080fd5b82518660208202830111600160201b821117156121df57600080fd5b82525081516020918201928201910280838360005b8381101561220c5781810151838201526020016121f4565b50505050905001604052505050905060008090505b815181101561233557600082828151811061223857fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561229a57600080fd5b505afa1580156122ae573d6000803e3d6000fd5b505050506040513d60208110156122c457600080fd5b5051905060006122da868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a361232a833383856131bf565b505050600101612221565b5060408051878152905133917fbc865856a1e9f1dfe2abde98edc2eefe87b6c391a47032388ef36d8c2474aad3919081900360200190a2505050506110c2612f5f565b612380612f2a565b600301546001600160a01b031633146123ca5760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6123d2612f5f565b8054600101905560006123e3612f5f565b54905060006123f0612f2a565b546040805163cf5e7bd360e01b81526001600160a01b03868116600483015291519190921692508491839163cf5e7bd39160248082019260009290919082900301818387803b15801561244257600080fd5b505af1158015612456573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03851692506370a0823191602480820192602092909190829003018186803b1580156124a457600080fd5b505afa1580156124b8573d6000803e3d6000fd5b505050506040513d60208110156124ce57600080fd5b50519050801561258e576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561252757600080fd5b505af115801561253b573d6000803e3d6000fd5b505050506040513d602081101561255157600080fd5b505161258e5760405162461bcd60e51b8152600401808060200182810382526027815260200180613c126027913960400191505060405180910390fd5b5050506110c2612f5f565b60006125a3612f2a565b80549091506001600160a01b0316156125ed5760405162461bcd60e51b8152600401808060200182810382526029815260200180613d7c6029913960400191505060405180910390fd5b6001600160a01b0387166126325760405162461bcd60e51b8152600401808060200182810382526032815260200180613e036032913960400191505060405180910390fd5b8161266e5760405162461bcd60e51b8152600401808060200182810382526031815260200180613be16031913960400191505060405180910390fd5b80546001600160a01b0388166001600160a01b031991821617825560018201805482163390811790915560028301805483168217905560038301805490921617905585856126ba612d64565b6126c5929091613aee565b5083836126d0612d64565b60010191906126e0929190613aee565b506126ea826136df565b6126f433836136e8565b50505050505050565b6000612707612f2a565b5460408051631a995bed60e31b815290516001600160a01b039092169163d4cadf6891600480820192602092909190829003018186803b15801561274a57600080fd5b505afa15801561275e573d6000803e3d6000fd5b505050506040513d602081101561277457600080fd5b5051905090565b600080612786612d64565b33600090815260048201602090815260408083206001600160a01b03891684529091529020549091506127bf908463ffffffff6136f216565b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190208590558051948552519193600080516020613d5c833981519152929081900390910190a35060019392505050565b600061281f612d64565b6001600160a01b039384166000908152600491909101602090815260408083209490951682529290925250205490565b612857612f2a565b600301546001600160a01b031633146128a15760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6128a9612f5f565b8054600101905560006128ba612f5f565b54905060006128c7612f2a565b54604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03928316935087928316916323b872dd9160648083019260209291908290030181600087803b15801561292457600080fd5b505af1158015612938573d6000803e3d6000fd5b505050506040513d602081101561294e57600080fd5b505161298b5760405162461bcd60e51b8152600401808060200182810382526029815260200180613b876029913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038481166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b505050506040513d6020811015612a0957600080fd5b505060408051631c9c3ca760e31b81526001600160a01b038881166004830152602482018890526044820187905291519184169163e4e1e5389160648082019260009290919082900301818387803b158015612a6457600080fd5b505af1158015612a78573d6000803e3d6000fd5b505050505050610f46612f5f565b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b612abe612f5f565b805460010190556000612acf612f5f565b5490506000612adc612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169250606091839163cc77828d916004808301926000929190829003018186803b158015612b2457600080fd5b505afa158015612b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b6157600080fd5b8101908080516040519392919084600160201b821115612b8057600080fd5b908301906020820185811115612b9557600080fd5b82518660208202830111600160201b82111715612bb157600080fd5b82525081516020918201928201910280838360005b83811015612bde578181015183820152602001612bc6565b50505050905001604052505050905060008090505b8151811015612ca557818181518110612c0857fe5b60200260200101516001600160a01b031663095ea7b3846000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c7157600080fd5b505af1158015612c85573d6000803e3d6000fd5b505050506040513d6020811015612c9b57600080fd5b5050600101612bf3565b506040517f198f462153295cccb18f8ac2ae01bf2fc81f948daad29b15c5a9ad53370b07e590600090a15050612cd9612f5f565b5481146111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b6000612d21612f2a565b546040805163fde924f760e01b815290516001600160a01b039092169163fde924f791600480820192602092909190829003018186803b15801561274a57600080fd5b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b6000612d9e612d64565b6001600160a01b0385166000908152600382016020526040902054909150821115612e07576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b6001600160a01b0384166000908152600382016020526040902054612e32908363ffffffff612ec816565b6001600160a01b0380861660009081526003840160205260408082209390935590851681522054612e69908363ffffffff6136f216565b6001600160a01b03808516600081815260038501602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050565b6000806000612ed78585613746565b915091508015612f22576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902090565b6000806040518080613d3a602291396040519081900360220190209392505050565b600081612fc4576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580612fec5750670de0b6b3a7640000848281612fe957fe5b04145b613030576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561307e576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161308957fe5b049695505050505050565b611100828261376b565b6111bd81613776565b6000805b82518110156130f357836001600160a01b03168382815181106130ca57fe5b60200260200101516001600160a01b031614156130eb576001915050610999565b6001016130ab565b5060009392505050565b600082820283158061311757508284828161311457fe5b04145b61315b576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b200008101818110156131ae576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082613089565b60006131c9612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b15801561321b57600080fd5b505afa15801561322f573d6000803e3d6000fd5b505050506040513d602081101561324557600080fd5b505190506001600160a01b038216633fdddaa287613269868863ffffffff612ec816565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b1580156132c057600080fd5b505af11580156132d4573d6000803e3d6000fd5b50505050856001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b505050506040513d602081101561336257600080fd5b505161339f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613da56030913960400191505060405180910390fd5b505050505050565b60006133b1612f2a565b546001600160a01b0316141561340e576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6000613418612f2a565b546001600160a01b03169050600061342e6109d4565b90506000613442848363ffffffff612f8116565b90508061344e57600080fd5b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561348957600080fd5b505afa15801561349d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156134c657600080fd5b8101908080516040519392919084600160201b8211156134e557600080fd5b9083019060208201858111156134fa57600080fd5b82518660208202830111600160201b8211171561351657600080fd5b82525081516020918201928201910280838360005b8381101561354357818101518382015260200161352b565b50505050905001604052505050905060008090505b815181101561366c57600082828151811061356f57fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156135d157600080fd5b505afa1580156135e5573d6000803e3d6000fd5b505050506040513d60208110156135fb57600080fd5b505190506000613611868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a919081900360200190a36136618333838561386a565b505050600101613558565b50613676856136df565b61368033866136e8565b60408051868152905133917f7a011ddbb8da163de89faccb018bb75c616e6ac270738b8bf1785f08ae1b2d6f919081900360200190a25050505050565b6000806040518080613c39602191396040519081900360210190209392505050565b6111bd81613a4c565b6111008282613ae3565b60008282018381101561373f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b60008082841061375c5750508082036000613764565b505081810360015b9250929050565b611100823083612d94565b6000613780612d64565b3060009081526003820160205260409020549091508211156137e0576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b306000908152600382016020526040902054613802908363ffffffff612ec816565b3060009081526003830160205260409020556002810154613829908363ffffffff612ec816565b600282015560408051838152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000613874612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b1580156138c657600080fd5b505afa1580156138da573d6000803e3d6000fd5b505050506040513d60208110156138f057600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908816916323b872dd916064808201926020929091908290030181600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505050506040513d602081101561397857600080fd5b50516139b55760405162461bcd60e51b8152600401808060200182810382526034815260200180613cdf6034913960400191505060405180910390fd5b6001600160a01b038216633fdddaa2876139d5868863ffffffff6136f216565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015613a2c57600080fd5b505af1158015613a40573d6000803e3d6000fd5b50505050505050505050565b6000613a56612d64565b306000908152600382016020526040902054909150613a7b908363ffffffff6136f216565b3060009081526003830160205260409020556002810154613aa2908363ffffffff6136f216565b600282015560408051838152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611100308383612d94565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b2f5782800160ff19823516178555613b5c565b82800160010185558215613b5c579182015b82811115613b5c578235825591602001919060010190613b41565b50613b68929150613b6c565b5090565b61093691905b80821115613b685760008155600101613b7256fe504261736963536d617274506f6f6c2e62696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e6f6e6c79546f6b656e42696e6465723a206e6f7420746f6b656e2062696e646572504261736963536d617274506f6f6c2e696e69743a205f696e697469616c537570706c792063616e206e6f74207a65726f504261736963536d617274506f6f6c2e756e62696e643a207472616e73666572206661696c656450436170706564536d617274506f6f6c2e73746f726167652e6c6f636174696f6e50436170706564536d617274506f6f6c2e77697468696e4361703a20436170206c696d697420726561636865645265656e74727950726f74656374696f6e2e6e6f5265656e7472793a207265656e747279206465746563746564504261736963536d617274506f6f6c2e726562696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e5f70756c6c556e6465726c79696e673a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e726562696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e73746f726167652e6c6f636174696f6e8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925504261736963536d617274506f6f6c2e696e69743a20616c726561647920696e697469616c69736564504261736963536d617274506f6f6c2e5f70757368556e6465726c79696e673a207472616e73666572206661696c6564504261736963536d617274506f6f6c2e6f6e6c79436f6e74726f6c6c65723a206e6f7420636f6e74726f6c6c6572504261736963536d617274506f6f6c2e696e69743a205f62506f6f6c2063616e6e6f7420626520307830302e2e2e2e303030504261736963536d617274506f6f6c2e6f6e6c795075626c6963537761705365747465723a206e6f74207075626c6963207377617020736574746572a264697066735822122097353c2b77f474d12784c4dd829bc457b9c67438c8e4aa541639241d1a12b87e64736f6c63430006040033608060405234801561001057600080fd5b5061005460405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001203361009d60201b60201c565b61009860405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001203361009d60201b60201c565b6100d5565b6100c1826100b3836001600160e01b036100c516565b6001600160e01b036100d116565b5050565b6001600160a01b031690565b9055565b610d2d806100e46000396000f3fe6080604052600436106100fe5760003560e01c806382c947b711610095578063aaf10f4211610064578063aaf10f4214610377578063bb15ac8e1461038c578063caaee91c146103b6578063cfb51928146103e9578063d784d4261461049c576100fe565b806382c947b7146102bd5780638f4edfe2146102f05780639201de55146103235780639d84ae691461034d576100fe565b806337a440e6116100d157806337a440e6146102195780634bde4b2e146102555780635ced058e1461026a5780636805b84b14610294576100fe565b806316c38b3c1461010857806317b857dd146101345780631ab7710d146101495780631bc289601461017a575b6101066104cf565b005b34801561011457600080fd5b506101066004803603602081101561012b57600080fd5b50351515610552565b34801561014057600080fd5b5061010661061f565b34801561015557600080fd5b5061015e6106ea565b604080516001600160a01b039092168252519081900360200190f35b34801561018657600080fd5b506101a46004803603602081101561019d57600080fd5b503561072d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101de5781810151838201526020016101c6565b50505050905090810190601f16801561020b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022557600080fd5b506102436004803603602081101561023c57600080fd5b5035610748565b60408051918252519081900360200190f35b34801561026157600080fd5b5061015e61074c565b34801561027657600080fd5b5061015e6004803603602081101561028d57600080fd5b503561078b565b3480156102a057600080fd5b506102a961078e565b604080519115158252519081900360200190f35b3480156102c957600080fd5b50610243600480360360208110156102e057600080fd5b50356001600160a01b03166107cd565b3480156102fc57600080fd5b506101066004803603602081101561031357600080fd5b50356001600160a01b03166107d9565b34801561032f57600080fd5b506101a46004803603602081101561034657600080fd5b50356108a2565b34801561035957600080fd5b5061015e6004803603602081101561037057600080fd5b50356109a7565b34801561038357600080fd5b5061015e6109ba565b34801561039857600080fd5b506102a9600480360360208110156103af57600080fd5b5035610a01565b3480156103c257600080fd5b50610106600480360360208110156103d957600080fd5b50356001600160a01b0316610a15565b3480156103f557600080fd5b506102436004803603602081101561040c57600080fd5b81019060208101813564010000000081111561042757600080fd5b82018360208201111561043957600080fd5b8035906020019184600183028401116401000000008311171561045b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610add945050505050565b3480156104a857600080fd5b50610106600480360360208110156104bf57600080fd5b50356001600160a01b0316610afb565b61050c60405160200180806a14105554d15117d4d313d560aa1b815250600b01905060405160208183030381529060405280519060200120610a01565b156105485760405162461bcd60e51b815260040180806020018281038252602c815260200180610ccc602c913960400191505060405180910390fd5b610550610bcc565b565b61058f60405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b0316146105de5760405162461bcd60e51b8152600401808060200182810382526030815260200180610c716030913960400191505060405180910390fd5b61061c60405160200180806a14105554d15117d4d313d560aa1b815250600b0190506040516020818303038152906040528051906020012082610c3a565b50565b61065c60405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b0316146106ab5760405162461bcd60e51b8152600401808060200182810382526030815260200180610c716030913960400191505060405180910390fd5b61055060405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206000610c5f565b600061072860405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b905090565b606061074061073b83610748565b6108a2565b90505b919050565b5490565b600061072860405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206109a7565b90565b600061072860405160200180806a14105554d15117d4d313d560aa1b815250600b01905060405160208183030381529060405280519060200120610a01565b6001600160a01b031690565b61081560405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b0316146108645760405162461bcd60e51b815260040180806020018281038252602b815260200180610ca1602b913960400191505060405180910390fd5b61061c60405160200180806a14105556915497d4d313d560aa1b815250600b0190506040516020818303038152906040528051906020012082610c5f565b6040805160208082528183019092526060918291906020820181803683370190505090506000805b6020811015610920576008810260020a85026001600160f81b031981161561091757808484815181106108f957fe5b60200101906001600160f81b031916908160001a9053506001909201915b506001016108ca565b506060816040519080825280601f01601f19166020018201604052801561094e576020820181803683370190505b50905060005b8281101561099e5783818151811061096857fe5b602001015160f81c60f81b82828151811061097f57fe5b60200101906001600160f81b031916908160001a905350600101610954565b50949350505050565b60006107406109b583610748565b61078b565b600061072860405160200180807212535413115351539510551253d397d4d313d5606a1b8152506013019050604051602081830303815290604052805190602001206109a7565b60006001610a0e83610748565b1492915050565b610a5160405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b031614610aa05760405162461bcd60e51b815260040180806020018281038252602b815260200180610ca1602b913960400191505060405180910390fd5b61061c60405160200180806913d5d3915497d4d313d560b21b815250600a0190506040516020818303038152906040528051906020012082610c5f565b80516000908290610af2575060009050610743565b50506020015190565b610b3760405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b031614610b865760405162461bcd60e51b815260040180806020018281038252602b815260200180610ca1602b913960400191505060405180910390fd5b61061c60405160200180807212535413115351539510551253d397d4d313d5606a1b81525060130190506040516020818303038152906040528051906020012082610c5f565b6000610c1360405160200180807212535413115351539510551253d397d4d313d5606a1b8152506013019050604051602081830303815290604052805190602001206109a7565b905060405136600082376000803683855af43d806000843e818015610c36578184f35b8184fd5b8015610c5057610c4b826001610c6c565b610c5b565b610c5b826000610c6c565b5050565b610c5b82610c6c836107cd565b905556fe5050726f78795061757361626c652e6f6e6c795061757a65723a206d73672073656e646572206e6f74207061757a65725050726f78792e6f6e6c7950726f78794f776e65723a206d73672073656e646572206e6f74206f776e65725050726f78795061757361626c652e6e6f745061757365643a20636f6e747261637420697320706175736564a2646970667358221220402a3349b51886149d11d3fe7ed7ff4d98a6c6375ecb098e332019cc656fb6d864736f6c634300060400334f776e61626c652e6f6e6c794f776e65723a206d73672e73656e646572206e6f74206f776e6572a2646970667358221220a30641f0e76ba80294b025d38f703d768dfe13d6b7824459b757ec5e264600e164736f6c63430006040033"; + "0x608060405234801561001057600080fd5b50615e66806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063ac4afa381161005b578063ac4afa381461011b578063afc8cc7114610138578063f0907843146103f1578063f2fde38b1461040b57610088565b806319ab453c1461008d5780635b16ebb7146100b557806372d6e87d146100ef57806382c84bfd14610113575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610431565b005b6100db600480360360208110156100cb57600080fd5b50356001600160a01b031661059e565b604080519115158252519081900360200190f35b6100f76105b3565b604080516001600160a01b039092168252519081900360200190f35b6100f76105c2565b6100f76004803603602081101561013157600080fd5b50356105d1565b6100f7600480360360e081101561014e57600080fd5b810190602081018135600160201b81111561016857600080fd5b82018360208201111561017a57600080fd5b803590602001918460018302840111600160201b8311171561019b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460018302840111600160201b8311171561022057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561027a57600080fd5b82018360208201111561028c57600080fd5b803590602001918460208302840111600160201b831117156102ad57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102fc57600080fd5b82018360208201111561030e57600080fd5b803590602001918460208302840111600160201b8311171561032f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561037e57600080fd5b82018360208201111561039057600080fd5b803590602001918460208302840111600160201b831117156103b157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506105f8915050565b6103f9610feb565b60408051918252519081900360200190f35b6100b36004803603602081101561042157600080fd5b50356001600160a01b031661101b565b6001546001600160a01b031615610485576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5cd959606a1b604482015290519081900360640190fd5b61048e33611076565b600080546001600160a01b0319166001600160a01b0383161781556040516104b590611118565b604051809103906000f0801580156104d1573d6000803e3d6000fd5b506040805163d2209ad960e01b81526001600480830191909152670de0b6b3a764000060648301526080602483015260848201819052631253541360e21b60a4830181905260c0604484015260c483019190915260e482015290519192506001600160a01b0383169163d2209ad9916101048082019260009290919082900301818387803b15801561056257600080fd5b505af1158015610576573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b039490941693909317909255505050565b60026020526000908152604090205460ff1681565b6000546001600160a01b031681565b6001546001600160a01b031681565b600381815481106105de57fe5b6000918252602090912001546001600160a01b0316905081565b60006106026110e8565b546001600160a01b031633146106495760405162461bcd60e51b8152600401808060200182810382526027815260200180615e0a6027913960400191505060405180910390fd5b600060405161065790611125565b604051809103906000f080158015610673573d6000803e3d6000fd5b5060015460408051636bc26a1360e11b81526001600160a01b03928316600482015290519293509083169163d784d4269160248082019260009290919082900301818387803b1580156106c557600080fd5b505af11580156106d9573d6000803e3d6000fd5b5050604080516347a76ff160e11b815233600482015290516001600160a01b0385169350638f4edfe29250602480830192600092919082900301818387803b15801561072457600080fd5b505af1158015610738573d6000803e3d6000fd5b5050604080516332abba4760e21b815233600482015290516001600160a01b038516935063caaee91c9250602480830192600092919082900301818387803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b5050505060008060009054906101000a90046001600160a01b03166001600160a01b031663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107ec57600080fd5b505af1158015610800573d6000803e3d6000fd5b505050506040513d602081101561081657600080fd5b505190508060005b8851811015610a4257600089828151811061083557fe5b60200260200101519050806001600160a01b03166323b872dd33308c868151811061085c57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156108cc57600080fd5b505af11580156108e0573d6000803e3d6000fd5b505050506040513d60208110156108f657600080fd5b50506040805163095ea7b360e01b81526001600160a01b038681166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b15801561094c57600080fd5b505af1158015610960573d6000803e3d6000fd5b505050506040513d602081101561097657600080fd5b505089516001600160a01b0384169063e4e1e538908c908590811061099757fe5b60200260200101518b85815181106109ab57fe5b60200260200101518b86815181106109bf57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015610a1d57600080fd5b505af1158015610a31573d6000803e3d6000fd5b50506001909301925061081e915050565b50806001600160a01b03166392eefe9b846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015610a9b57600080fd5b505af1158015610aaf573d6000803e3d6000fd5b505050506000839050806001600160a01b031663d2209ad9848e8e8e6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b031681526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610b39578181015183820152602001610b21565b50505050905090810190601f168015610b665780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610b99578181015183820152602001610b81565b50505050905090810190601f168015610bc65780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015610be957600080fd5b505af1158015610bfd573d6000803e3d6000fd5b50505050806001600160a01b03166347786d37876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b505060408051634eee8d1560e01b815233600482015290516001600160a01b0385169350634eee8d159250602480830192600092919082900301818387803b158015610ca657600080fd5b505af1158015610cba573d6000803e3d6000fd5b5050604080516317aa86fd60e31b815233600482015290516001600160a01b038516935063bd5437e89250602480830192600092919082900301818387803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b5050604080516392eefe9b60e01b815233600482015290516001600160a01b03851693506392eefe9b9250602480830192600092919082900301818387803b158015610d6457600080fd5b505af1158015610d78573d6000803e3d6000fd5b50505050806001600160a01b031663fd68f2236040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610db757600080fd5b505af1158015610dcb573d6000803e3d6000fd5b50505050600160026000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b03167feb1965569092c5cbc1e8b48dc38da8683f75399acee8d74d4d4e99f6f2731a978d8d604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610ec4578181015183820152602001610eac565b50505050905090810190601f168015610ef15780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610f24578181015183820152602001610f0c565b50505050905090810190601f168015610f515780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a26040805163a9059cbb60e01b8152336004820152602481018c905290516001600160a01b0383169163a9059cbb9160448083019260209291908290030181600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b505050506040513d6020811015610fd957600080fd5b50909c9b505050505050505050505050565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b6110236110e8565b546001600160a01b0316331461106a5760405162461bcd60e51b8152600401808060200182810382526027815260200180615e0a6027913960400191505060405180910390fd5b61107381611076565b50565b806001600160a01b03166110886110e8565b546040516001600160a01b03909116907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3806110c76110e8565b80546001600160a01b0319166001600160a01b039290921691909117905550565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b613ec68061113383390190565b610e1180614ff98339019056fe608060405234801561001057600080fd5b50613ea6806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063652062c511610130578063be1d24ad116100b8578063dd62ed3e1161007c578063dd62ed3e14610828578063e4e1e53814610856578063ec565ffe14610888578063fd68f22314610890578063fde924f71461089857610232565b8063be1d24ad146106e3578063cf5e7bd314610700578063d2209ad914610726578063d4cadf68146107f4578063d73dd623146107fc57610232565b806392eefe9b116100ff57806392eefe9b1461060b57806395d89b4114610631578063a9059cbb14610639578063aa6ca80814610665578063bd5437e8146106bd57610232565b8063652062c5146105a957806366188463146105b157806370a08231146105dd578063830df8521461060357610232565b806334e19907116101be57806347786d371161018257806347786d371461053757806349b59552146105545780634cde1618146105735780634eee8d151461057b578063554d578d146105a157610232565b806334e199071461040d57806334e7a19f1461042a578063371babdc146104475780633fdddaa2146104fd57806344b250521461052f57610232565b806323b872dd1161020557806323b872dd146103165780632c500bc81461034c5780632fecc529146103705780633018205f146103e7578063313ce567146103ef57610232565b806306fdde0314610237578063095ea7b3146102b4578063099e9e2a146102f457806318160ddd1461030e575b600080fd5b61023f6108a0565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e0600480360360408110156102ca57600080fd5b506001600160a01b038135169060200135610939565b604080519115158252519081900360200190f35b6102fc61099f565b60408051918252519081900360200190f35b6102fc6109d4565b6102e06004803603606081101561032c57600080fd5b506001600160a01b038135811691602081013590911690604001356109e7565b610354610b5c565b604080516001600160a01b039092168252519081900360200190f35b6103e56004803603604081101561038657600080fd5b81359190810190604081016020820135600160201b8111156103a757600080fd5b8201836020820111156103b957600080fd5b803590602001918460208302840111600160201b831117156103da57600080fd5b509092509050610b75565b005b610354610f8a565b6103f7610fa6565b6040805160ff9092168252519081900360200190f35b6103e56004803603602081101561042357600080fd5b5035610fab565b6103e56004803603602081101561044057600080fd5b5035611104565b6104646004803603602081101561045d57600080fd5b50356111c0565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104a8578181015183820152602001610490565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104e75781810151838201526020016104cf565b5050505090500194505050505060405180910390f35b6103e56004803603606081101561051357600080fd5b506001600160a01b038135169060208101359060400135611406565b610354611898565b6103e56004803603602081101561054d57600080fd5b50356118b4565b6103e56004803603602081101561056a57600080fd5b50351515611976565b610354611a68565b6103e56004803603602081101561059157600080fd5b50356001600160a01b0316611a84565b6102fc611b6f565b6102fc611b7f565b6102e0600480360360408110156105c757600080fd5b506001600160a01b038135169060200135611b9a565b6102fc600480360360208110156105f357600080fd5b50356001600160a01b0316611c8f565b6102fc611cbb565b6103e56004803603602081101561062157600080fd5b50356001600160a01b0316611cd6565b61023f611dc1565b6102e06004803603604081101561064f57600080fd5b506001600160a01b038135169060200135611e27565b61066d611e3d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a9578181015183820152602001610691565b505050509050019250505060405180910390f35b6103e5600480360360208110156106d357600080fd5b50356001600160a01b0316611f56565b6103e5600480360360208110156106f957600080fd5b5035612041565b6103e56004803603602081101561071657600080fd5b50356001600160a01b0316612378565b6103e56004803603608081101561073c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561076657600080fd5b82018360208201111561077857600080fd5b803590602001918460018302840111600160201b8311171561079957600080fd5b919390929091602081019035600160201b8111156107b657600080fd5b8201836020820111156107c857600080fd5b803590602001918460018302840111600160201b831117156107e957600080fd5b919350915035612599565b6102fc6126fd565b6102e06004803603604081101561081257600080fd5b506001600160a01b03813516906020013561277b565b6102fc6004803603604081101561083e57600080fd5b506001600160a01b0381358116916020013516612815565b6103e56004803603606081101561086c57600080fd5b506001600160a01b03813516906020810135906040013561284f565b6102fc612a86565b6103e5612ab6565b6102e0612d17565b60606108aa612d64565b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561092e5780601f106109035761010080835404028352916020019161092e565b820191906000526020600020905b81548152906001019060200180831161091157829003601f168201915b505050505090505b90565b600081610944612d64565b336000818152600492909201602090815260408084206001600160a01b03891680865290835293819020949094558351868152935192939192600080516020613d5c8339815191529281900390910190a35060015b92915050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902081565b60006109de612d64565b60020154905090565b6000806109f2612d64565b9050336001600160a01b0386161480610a3057506001600160a01b038516600090815260048201602090815260408083203384529091529020548311155b610a7a576040805162461bcd60e51b815260206004820152601660248201527522a9292fa821aa27a5a2a72fa120a22fa1a0a62622a960511b604482015290519081900360640190fd5b610a85858585612d94565b336001600160a01b03861614801590610ac557506001600160a01b0385166000908152600482016020908152604080832033845290915290205460001914155b15610b51576001600160a01b03851660009081526004820160209081526040808320338452909152902054610b00908463ffffffff612ec816565b6001600160a01b03868116600090815260048401602090815260408083203380855290835292819020859055805194855251928816939192600080516020613d5c8339815191529281900390910190a35b506001949350505050565b6000610b66612f2a565b546001600160a01b0316905090565b6000610b7f612f2a565b546001600160a01b03161415610bdc576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b610be4612f5f565b805460010190556000610bf5612f5f565b5490506000610c02612f2a565b546001600160a01b031690506000610c186109d4565b90506000610c2c878363ffffffff612f8116565b905080610c3857600080fd5b610c423388613094565b610c4b8761309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610cc357600080fd5b8101908080516040519392919084600160201b821115610ce257600080fd5b908301906020820185811115610cf757600080fd5b82518660208202830111600160201b82111715610d1357600080fd5b82525081516020918201928201910280838360005b83811015610d40578181015183820152602001610d28565b50505050905001604052505050905060008090505b8151811015610ec457610dae828281518110610d6d57fe5b60200260200101518989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130a792505050565b15610db857610ebc565b6000828281518110610dc657fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b505190506000610e68868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a3610eb8833383856131bf565b5050505b600101610d55565b50336001600160a01b03167fe27d877155575efc81398b13b114bbbbfd49b156eb72e9f6c691f3b72b8adf9489898960405180848152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a250505050610f46612f5f565b548114610f845760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b50505050565b6000610f94612f2a565b600101546001600160a01b0316905090565b601281565b610fb3612f2a565b600101546001600160a01b03163314610ffd5760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611005612f5f565b805460010190556000611016612f5f565b5460408051848152905191925033917f44ef267e747417ef6614a0ab5bee304ba1a35d76759d34170d1b74a850a9d0339181900360200190a2611057612f2a565b54604080516334e1990760e01b81526004810185905290516001600160a01b03909216916334e199079160248082019260009290919082900301818387803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506110c2612f5f565b5481146111005760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b5050565b61110c612f5f565b80546001019055600061111d612f5f565b549050611129826133a7565b611131612f5f565b54811461116f5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b506111786136bd565b546111816109d4565b106111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c5a602d913960400191505060405180910390fd5b50565b6060806111cb612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b15801561120e57600080fd5b505afa158015611222573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561124b57600080fd5b8101908080516040519392919084600160201b82111561126a57600080fd5b90830190602082018581111561127f57600080fd5b82518660208202830111600160201b8211171561129b57600080fd5b82525081516020918201928201910280838360005b838110156112c85781810151838201526020016112b0565b5050505090500160405250505091508151604051908082528060200260200182016040528015611302578160200160208202803683370190505b509050600061131f6113126109d4565b859063ffffffff612f8116565b905060005b83518110156113ff57600084828151811061133b57fe5b60200260200101519050600061134f612f2a565b546040805163f8b2cb4f60e01b81526001600160a01b0385811660048301529151919092169163f8b2cb4f916024808301926020929190829003018186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d60208110156113c457600080fd5b5051905060006113da858363ffffffff6130fd16565b9050808685815181106113e957fe5b6020908102919091010152505050600101611324565b5050915091565b61140e612f2a565b600301546001600160a01b031633146114585760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b611460612f5f565b805460010190556000611471612f5f565b549050600061147e612f2a565b5460408051631185197d60e31b81526001600160a01b038881166004830152915191909216925086918391638c28cbe89160248082019260009290919082900301818387803b1580156114d057600080fd5b505af11580156114e4573d6000803e3d6000fd5b505050506000816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561154057600080fd5b505afa158015611554573d6000803e3d6000fd5b505050506040513d602081101561156a57600080fd5b50519050808611156116e7576001600160a01b0382166323b872dd33306115978a8663ffffffff612ec816565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506040513d602081101561162957600080fd5b50516116665760405162461bcd60e51b815260040180806020018281038252602b815260200180613cb4602b913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038581166004830152600019602483015291519184169163095ea7b3916044808201926020929091908290030181600087803b1580156116ba57600080fd5b505af11580156116ce573d6000803e3d6000fd5b505050506040513d60208110156116e457600080fd5b50505b60408051631feeed5160e11b81526001600160a01b0389811660048301526024820189905260448201889052915191851691633fdddaa29160648082019260009290919082900301818387803b15801561174057600080fd5b505af1158015611754573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03861692506370a0823191602480820192602092909190829003018186803b1580156117a257600080fd5b505afa1580156117b6573d6000803e3d6000fd5b505050506040513d60208110156117cc57600080fd5b50519050801561188c576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b505161188c5760405162461bcd60e51b8152600401808060200182810382526027815260200180613d136027913960400191505060405180910390fd5b50505050610f46612f5f565b60006118a2612f2a565b600301546001600160a01b0316905090565b6118bc612f2a565b600101546001600160a01b031633146119065760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b61190e612f5f565b80546001019055600061191f612f5f565b549050337f6bc200110c7794738d401810b22ef824a2044a8ccb022d4ad8769840370331f561194c6136bd565b5460408051918252602082018690528051918290030190a28161196d6136bd565b556110c2612f5f565b61197e612f2a565b600201546001600160a01b031633146119c85760405162461bcd60e51b815260040180806020018281038252603c815260200180613e35603c913960400191505060405180910390fd5b6119d0612f5f565b8054600101905560006119e1612f5f565b546040519091508215159033907feda6fce4059a79def1a5550dd645183dbd84a324dde2aba020658eb3d7f84a8790600090a3611a1c612f2a565b54604080516324dacaa960e11b8152841515600482015290516001600160a01b03909216916349b595529160248082019260009290919082900301818387803b1580156110a257600080fd5b6000611a72612f2a565b600201546001600160a01b0316905090565b611a8c612f2a565b600101546001600160a01b03163314611ad65760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611ade612f5f565b805460010190556000611aef612f5f565b5490506001600160a01b038216611b04612f2a565b600201546040516001600160a01b03909116907fc2f50b6bc4bd45505f1557a7d4b19c5177d334181ae1179d335020424d3736c490600090a381611b46612f2a565b60020180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6000611b796136bd565b54905090565b604051806021613c3982396021019050604051809103902081565b600080611ba5612d64565b33600090815260048201602090815260408083206001600160a01b038916845290915290205490915080841115611c015733600090815260048301602090815260408083206001600160a01b0389168452909152812055611c38565b611c11818563ffffffff612ec816565b33600090815260048401602090815260408083206001600160a01b038a1684529091529020555b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190205481519081529051929392600080516020613d5c833981519152929181900390910190a3506001949350505050565b6000611c99612d64565b6001600160a01b03929092166000908152600390920160205250604090205490565b604051806022613d3a82396022019050604051809103902081565b611cde612f2a565b600101546001600160a01b03163314611d285760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611d30612f5f565b805460010190556000611d41612f5f565b5490506001600160a01b038216611d56612f2a565b600101546040516001600160a01b03909116907f6aef1fb5b23d0e109fc7f2b0601019e1edbacd177e31a441ec8548e8dd14f0f790600090a381611d98612f2a565b60010180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b6060611dcb612d64565b60019081018054604080516020600295841615610100026000190190931694909404601f81018390048302850183019091528084529083018282801561092e5780601f106109035761010080835404028352916020019161092e565b6000611e34338484612d94565b50600192915050565b6060611e47612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169163cc77828d91600480820192600092909190829003018186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ec757600080fd5b8101908080516040519392919084600160201b821115611ee657600080fd5b908301906020820185811115611efb57600080fd5b82518660208202830111600160201b82111715611f1757600080fd5b82525081516020918201928201910280838360005b83811015611f44578181015183820152602001611f2c565b50505050905001604052505050905090565b611f5e612f2a565b600101546001600160a01b03163314611fa85760405162461bcd60e51b815260040180806020018281038252602e815260200180613dd5602e913960400191505060405180910390fd5b611fb0612f5f565b805460010190556000611fc1612f5f565b5490506001600160a01b038216611fd6612f2a565b600301546040516001600160a01b03909116907fcbca212b561161352cbd1ef8956a916a93bee0f84bb6a3af9118af675266a96390600090a381612018612f2a565b60030180546001600160a01b0319166001600160a01b03929092169190911790556110c2612f5f565b600061204b612f2a565b546001600160a01b031614156120a8576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6120b0612f5f565b8054600101905560006120c1612f5f565b54905060006120ce612f2a565b546001600160a01b0316905060006120e46109d4565b905060006120f8858363ffffffff612f8116565b90508061210457600080fd5b61210e3386613094565b6121178561309e565b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561218f57600080fd5b8101908080516040519392919084600160201b8211156121ae57600080fd5b9083019060208201858111156121c357600080fd5b82518660208202830111600160201b821117156121df57600080fd5b82525081516020918201928201910280838360005b8381101561220c5781810151838201526020016121f4565b50505050905001604052505050905060008090505b815181101561233557600082828151811061223857fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561229a57600080fd5b505afa1580156122ae573d6000803e3d6000fd5b505050506040513d60208110156122c457600080fd5b5051905060006122da868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed919081900360200190a361232a833383856131bf565b505050600101612221565b5060408051878152905133917fbc865856a1e9f1dfe2abde98edc2eefe87b6c391a47032388ef36d8c2474aad3919081900360200190a2505050506110c2612f5f565b612380612f2a565b600301546001600160a01b031633146123ca5760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6123d2612f5f565b8054600101905560006123e3612f5f565b54905060006123f0612f2a565b546040805163cf5e7bd360e01b81526001600160a01b03868116600483015291519190921692508491839163cf5e7bd39160248082019260009290919082900301818387803b15801561244257600080fd5b505af1158015612456573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b03851692506370a0823191602480820192602092909190829003018186803b1580156124a457600080fd5b505afa1580156124b8573d6000803e3d6000fd5b505050506040513d60208110156124ce57600080fd5b50519050801561258e576040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561252757600080fd5b505af115801561253b573d6000803e3d6000fd5b505050506040513d602081101561255157600080fd5b505161258e5760405162461bcd60e51b8152600401808060200182810382526027815260200180613c126027913960400191505060405180910390fd5b5050506110c2612f5f565b60006125a3612f2a565b80549091506001600160a01b0316156125ed5760405162461bcd60e51b8152600401808060200182810382526029815260200180613d7c6029913960400191505060405180910390fd5b6001600160a01b0387166126325760405162461bcd60e51b8152600401808060200182810382526032815260200180613e036032913960400191505060405180910390fd5b8161266e5760405162461bcd60e51b8152600401808060200182810382526031815260200180613be16031913960400191505060405180910390fd5b80546001600160a01b0388166001600160a01b031991821617825560018201805482163390811790915560028301805483168217905560038301805490921617905585856126ba612d64565b6126c5929091613aee565b5083836126d0612d64565b60010191906126e0929190613aee565b506126ea826136df565b6126f433836136e8565b50505050505050565b6000612707612f2a565b5460408051631a995bed60e31b815290516001600160a01b039092169163d4cadf6891600480820192602092909190829003018186803b15801561274a57600080fd5b505afa15801561275e573d6000803e3d6000fd5b505050506040513d602081101561277457600080fd5b5051905090565b600080612786612d64565b33600090815260048201602090815260408083206001600160a01b03891684529091529020549091506127bf908463ffffffff6136f216565b33600081815260048401602090815260408083206001600160a01b038a16808552908352928190208590558051948552519193600080516020613d5c833981519152929081900390910190a35060019392505050565b600061281f612d64565b6001600160a01b039384166000908152600491909101602090815260408083209490951682529290925250205490565b612857612f2a565b600301546001600160a01b031633146128a15760405162461bcd60e51b8152600401808060200182810382526031815260200180613bb06031913960400191505060405180910390fd5b6128a9612f5f565b8054600101905560006128ba612f5f565b54905060006128c7612f2a565b54604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03928316935087928316916323b872dd9160648083019260209291908290030181600087803b15801561292457600080fd5b505af1158015612938573d6000803e3d6000fd5b505050506040513d602081101561294e57600080fd5b505161298b5760405162461bcd60e51b8152600401808060200182810382526029815260200180613b876029913960400191505060405180910390fd5b6040805163095ea7b360e01b81526001600160a01b038481166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b1580156129df57600080fd5b505af11580156129f3573d6000803e3d6000fd5b505050506040513d6020811015612a0957600080fd5b505060408051631c9c3ca760e31b81526001600160a01b038881166004830152602482018890526044820187905291519184169163e4e1e5389160648082019260009290919082900301818387803b158015612a6457600080fd5b505af1158015612a78573d6000803e3d6000fd5b505050505050610f46612f5f565b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b612abe612f5f565b805460010190556000612acf612f5f565b5490506000612adc612f2a565b546040805163cc77828d60e01b815290516001600160a01b039092169250606091839163cc77828d916004808301926000929190829003018186803b158015612b2457600080fd5b505afa158015612b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612b6157600080fd5b8101908080516040519392919084600160201b821115612b8057600080fd5b908301906020820185811115612b9557600080fd5b82518660208202830111600160201b82111715612bb157600080fd5b82525081516020918201928201910280838360005b83811015612bde578181015183820152602001612bc6565b50505050905001604052505050905060008090505b8151811015612ca557818181518110612c0857fe5b60200260200101516001600160a01b031663095ea7b3846000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c7157600080fd5b505af1158015612c85573d6000803e3d6000fd5b505050506040513d6020811015612c9b57600080fd5b5050600101612bf3565b506040517f198f462153295cccb18f8ac2ae01bf2fc81f948daad29b15c5a9ad53370b07e590600090a15050612cd9612f5f565b5481146111bd5760405162461bcd60e51b815260040180806020018281038252602d815260200180613c87602d913960400191505060405180910390fd5b6000612d21612f2a565b546040805163fde924f760e01b815290516001600160a01b039092169163fde924f791600480820192602092909190829003018186803b15801561274a57600080fd5b60408051772821aa37b5b2b71739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b6000612d9e612d64565b6001600160a01b0385166000908152600382016020526040902054909150821115612e07576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b6001600160a01b0384166000908152600382016020526040902054612e32908363ffffffff612ec816565b6001600160a01b0380861660009081526003840160205260408082209390935590851681522054612e69908363ffffffff6136f216565b6001600160a01b03808516600081815260038501602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050565b6000806000612ed78585613746565b915091508015612f22576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b604080517f504261736963536d617274506f6f6c2e73746f726167652e6c6f636174696f6e8152905190819003602001902090565b6000806040518080613d3a602291396040519081900360220190209392505050565b600081612fc4576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580612fec5750670de0b6b3a7640000848281612fe957fe5b04145b613030576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561307e576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161308957fe5b049695505050505050565b611100828261376b565b6111bd81613776565b6000805b82518110156130f357836001600160a01b03168382815181106130ca57fe5b60200260200101516001600160a01b031614156130eb576001915050610999565b6001016130ab565b5060009392505050565b600082820283158061311757508284828161311457fe5b04145b61315b576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b200008101818110156131ae576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082613089565b60006131c9612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b15801561321b57600080fd5b505afa15801561322f573d6000803e3d6000fd5b505050506040513d602081101561324557600080fd5b505190506001600160a01b038216633fdddaa287613269868863ffffffff612ec816565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b1580156132c057600080fd5b505af11580156132d4573d6000803e3d6000fd5b50505050856001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b505050506040513d602081101561336257600080fd5b505161339f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613da56030913960400191505060405180910390fd5b505050505050565b60006133b1612f2a565b546001600160a01b0316141561340e576040805162461bcd60e51b815260206004820181905260248201527f504261736963536d617274506f6f6c2e72656164793a206e6f74207265616479604482015290519081900360640190fd5b6000613418612f2a565b546001600160a01b03169050600061342e6109d4565b90506000613442848363ffffffff612f8116565b90508061344e57600080fd5b6060836001600160a01b031663cc77828d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561348957600080fd5b505afa15801561349d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156134c657600080fd5b8101908080516040519392919084600160201b8211156134e557600080fd5b9083019060208201858111156134fa57600080fd5b82518660208202830111600160201b8211171561351657600080fd5b82525081516020918201928201910280838360005b8381101561354357818101518382015260200161352b565b50505050905001604052505050905060008090505b815181101561366c57600082828151811061356f57fe5b602002602001015190506000866001600160a01b031663f8b2cb4f836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156135d157600080fd5b505afa1580156135e5573d6000803e3d6000fd5b505050506040513d60208110156135fb57600080fd5b505190506000613611868363ffffffff6130fd16565b6040805182815290519192506001600160a01b0385169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a919081900360200190a36136618333838561386a565b505050600101613558565b50613676856136df565b61368033866136e8565b60408051868152905133917f7a011ddbb8da163de89faccb018bb75c616e6ac270738b8bf1785f08ae1b2d6f919081900360200190a25050505050565b6000806040518080613c39602191396040519081900360210190209392505050565b6111bd81613a4c565b6111008282613ae3565b60008282018381101561373f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b60008082841061375c5750508082036000613764565b505081810360015b9250929050565b611100823083612d94565b6000613780612d64565b3060009081526003820160205260409020549091508211156137e0576040805162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b604482015290519081900360640190fd5b306000908152600382016020526040902054613802908363ffffffff612ec816565b3060009081526003830160205260409020556002810154613829908363ffffffff612ec816565b600282015560408051838152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000613874612f2a565b5460408051634a46c67360e11b81526001600160a01b0388811660048301529151919092169250600091839163948d8ce691602480820192602092909190829003018186803b1580156138c657600080fd5b505afa1580156138da573d6000803e3d6000fd5b505050506040513d60208110156138f057600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908816916323b872dd916064808201926020929091908290030181600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505050506040513d602081101561397857600080fd5b50516139b55760405162461bcd60e51b8152600401808060200182810382526034815260200180613cdf6034913960400191505060405180910390fd5b6001600160a01b038216633fdddaa2876139d5868863ffffffff6136f216565b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015613a2c57600080fd5b505af1158015613a40573d6000803e3d6000fd5b50505050505050505050565b6000613a56612d64565b306000908152600382016020526040902054909150613a7b908363ffffffff6136f216565b3060009081526003830160205260409020556002810154613aa2908363ffffffff6136f216565b600282015560408051838152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611100308383612d94565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b2f5782800160ff19823516178555613b5c565b82800160010185558215613b5c579182015b82811115613b5c578235825591602001919060010190613b41565b50613b68929150613b6c565b5090565b61093691905b80821115613b685760008155600101613b7256fe504261736963536d617274506f6f6c2e62696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e6f6e6c79546f6b656e42696e6465723a206e6f7420746f6b656e2062696e646572504261736963536d617274506f6f6c2e696e69743a205f696e697469616c537570706c792063616e206e6f74207a65726f504261736963536d617274506f6f6c2e756e62696e643a207472616e73666572206661696c656450436170706564536d617274506f6f6c2e73746f726167652e6c6f636174696f6e50436170706564536d617274506f6f6c2e77697468696e4361703a20436170206c696d697420726561636865645265656e74727950726f74656374696f6e2e6e6f5265656e7472793a207265656e747279206465746563746564504261736963536d617274506f6f6c2e726562696e643a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e5f70756c6c556e6465726c79696e673a207472616e7366657246726f6d206661696c6564504261736963536d617274506f6f6c2e726562696e643a207472616e73666572206661696c65645265656e74727950726f74656374696f6e2e73746f726167652e6c6f636174696f6e8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925504261736963536d617274506f6f6c2e696e69743a20616c726561647920696e697469616c69736564504261736963536d617274506f6f6c2e5f70757368556e6465726c79696e673a207472616e73666572206661696c6564504261736963536d617274506f6f6c2e6f6e6c79436f6e74726f6c6c65723a206e6f7420636f6e74726f6c6c6572504261736963536d617274506f6f6c2e696e69743a205f62506f6f6c2063616e6e6f7420626520307830302e2e2e2e303030504261736963536d617274506f6f6c2e6f6e6c795075626c6963537761705365747465723a206e6f74207075626c6963207377617020736574746572a2646970667358221220921f99f5ce710bff49f531f343876943c17e23402c0aabbc85e67784411cf5e564736f6c63430006040033608060405234801561001057600080fd5b5061005460405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001203361009d60201b60201c565b61009860405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001203361009d60201b60201c565b6100d5565b6100c1826100b3836001600160e01b036100c516565b6001600160e01b036100d116565b5050565b6001600160a01b031690565b9055565b610d2d806100e46000396000f3fe6080604052600436106100fe5760003560e01c806382c947b711610095578063aaf10f4211610064578063aaf10f4214610377578063bb15ac8e1461038c578063caaee91c146103b6578063cfb51928146103e9578063d784d4261461049c576100fe565b806382c947b7146102bd5780638f4edfe2146102f05780639201de55146103235780639d84ae691461034d576100fe565b806337a440e6116100d157806337a440e6146102195780634bde4b2e146102555780635ced058e1461026a5780636805b84b14610294576100fe565b806316c38b3c1461010857806317b857dd146101345780631ab7710d146101495780631bc289601461017a575b6101066104cf565b005b34801561011457600080fd5b506101066004803603602081101561012b57600080fd5b50351515610552565b34801561014057600080fd5b5061010661061f565b34801561015557600080fd5b5061015e6106ea565b604080516001600160a01b039092168252519081900360200190f35b34801561018657600080fd5b506101a46004803603602081101561019d57600080fd5b503561072d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101de5781810151838201526020016101c6565b50505050905090810190601f16801561020b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022557600080fd5b506102436004803603602081101561023c57600080fd5b5035610748565b60408051918252519081900360200190f35b34801561026157600080fd5b5061015e61074c565b34801561027657600080fd5b5061015e6004803603602081101561028d57600080fd5b503561078b565b3480156102a057600080fd5b506102a961078e565b604080519115158252519081900360200190f35b3480156102c957600080fd5b50610243600480360360208110156102e057600080fd5b50356001600160a01b03166107cd565b3480156102fc57600080fd5b506101066004803603602081101561031357600080fd5b50356001600160a01b03166107d9565b34801561032f57600080fd5b506101a46004803603602081101561034657600080fd5b50356108a2565b34801561035957600080fd5b5061015e6004803603602081101561037057600080fd5b50356109a7565b34801561038357600080fd5b5061015e6109ba565b34801561039857600080fd5b506102a9600480360360208110156103af57600080fd5b5035610a01565b3480156103c257600080fd5b50610106600480360360208110156103d957600080fd5b50356001600160a01b0316610a15565b3480156103f557600080fd5b506102436004803603602081101561040c57600080fd5b81019060208101813564010000000081111561042757600080fd5b82018360208201111561043957600080fd5b8035906020019184600183028401116401000000008311171561045b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610add945050505050565b3480156104a857600080fd5b50610106600480360360208110156104bf57600080fd5b50356001600160a01b0316610afb565b61050c60405160200180806a14105554d15117d4d313d560aa1b815250600b01905060405160208183030381529060405280519060200120610a01565b156105485760405162461bcd60e51b815260040180806020018281038252602c815260200180610ccc602c913960400191505060405180910390fd5b610550610bcc565b565b61058f60405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b0316146105de5760405162461bcd60e51b8152600401808060200182810382526030815260200180610c716030913960400191505060405180910390fd5b61061c60405160200180806a14105554d15117d4d313d560aa1b815250600b0190506040516020818303038152906040528051906020012082610c3a565b50565b61065c60405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b0316146106ab5760405162461bcd60e51b8152600401808060200182810382526030815260200180610c716030913960400191505060405180910390fd5b61055060405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206000610c5f565b600061072860405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b905090565b606061074061073b83610748565b6108a2565b90505b919050565b5490565b600061072860405160200180806a14105556915497d4d313d560aa1b815250600b019050604051602081830303815290604052805190602001206109a7565b90565b600061072860405160200180806a14105554d15117d4d313d560aa1b815250600b01905060405160208183030381529060405280519060200120610a01565b6001600160a01b031690565b61081560405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b0316146108645760405162461bcd60e51b815260040180806020018281038252602b815260200180610ca1602b913960400191505060405180910390fd5b61061c60405160200180806a14105556915497d4d313d560aa1b815250600b0190506040516020818303038152906040528051906020012082610c5f565b6040805160208082528183019092526060918291906020820181803683370190505090506000805b6020811015610920576008810260020a85026001600160f81b031981161561091757808484815181106108f957fe5b60200101906001600160f81b031916908160001a9053506001909201915b506001016108ca565b506060816040519080825280601f01601f19166020018201604052801561094e576020820181803683370190505b50905060005b8281101561099e5783818151811061096857fe5b602001015160f81c60f81b82828151811061097f57fe5b60200101906001600160f81b031916908160001a905350600101610954565b50949350505050565b60006107406109b583610748565b61078b565b600061072860405160200180807212535413115351539510551253d397d4d313d5606a1b8152506013019050604051602081830303815290604052805190602001206109a7565b60006001610a0e83610748565b1492915050565b610a5160405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b031614610aa05760405162461bcd60e51b815260040180806020018281038252602b815260200180610ca1602b913960400191505060405180910390fd5b61061c60405160200180806913d5d3915497d4d313d560b21b815250600a0190506040516020818303038152906040528051906020012082610c5f565b80516000908290610af2575060009050610743565b50506020015190565b610b3760405160200180806913d5d3915497d4d313d560b21b815250600a019050604051602081830303815290604052805190602001206109a7565b6001600160a01b0316336001600160a01b031614610b865760405162461bcd60e51b815260040180806020018281038252602b815260200180610ca1602b913960400191505060405180910390fd5b61061c60405160200180807212535413115351539510551253d397d4d313d5606a1b81525060130190506040516020818303038152906040528051906020012082610c5f565b6000610c1360405160200180807212535413115351539510551253d397d4d313d5606a1b8152506013019050604051602081830303815290604052805190602001206109a7565b905060405136600082376000803683855af43d806000843e818015610c36578184f35b8184fd5b8015610c5057610c4b826001610c6c565b610c5b565b610c5b826000610c6c565b5050565b610c5b82610c6c836107cd565b905556fe5050726f78795061757361626c652e6f6e6c795061757a65723a206d73672073656e646572206e6f74207061757a65725050726f78792e6f6e6c7950726f78794f776e65723a206d73672073656e646572206e6f74206f776e65725050726f78795061757361626c652e6e6f745061757365643a20636f6e747261637420697320706175736564a2646970667358221220402a3349b51886149d11d3fe7ed7ff4d98a6c6375ecb098e332019cc656fb6d864736f6c634300060400334f776e61626c652e6f6e6c794f776e65723a206d73672e73656e646572206e6f74206f776e6572a2646970667358221220cc17420418f51d47a0b01a2c4f435ff4f852f46154236bae2e55a00d591a613164736f6c63430006040033"; diff --git a/typechain/PUniswapKyberPoolRecipe.d.ts b/typechain/PUniswapKyberPoolRecipe.d.ts deleted file mode 100644 index bf5712c..0000000 --- a/typechain/PUniswapKyberPoolRecipe.d.ts +++ /dev/null @@ -1,312 +0,0 @@ -/* Generated by ts-generator ver. 0.0.8 */ -/* tslint:disable */ - -import { Contract, ContractTransaction, EventFilter, Signer } from "ethers"; -import { Listener, Provider } from "ethers/providers"; -import { Arrayish, BigNumber, BigNumberish, Interface } from "ethers/utils"; -import { - TransactionOverrides, - TypedEventDescription, - TypedFunctionDescription -} from "."; - -interface PUniswapKyberPoolRecipeInterface extends Interface { - functions: { - ETH: TypedFunctionDescription<{ encode([]: []): string }>; - - ethToTokenSwapOutput: TypedFunctionDescription<{ - encode([_tokens_bought, _deadline]: [BigNumberish, BigNumberish]): string; - }>; - - ethToTokenTransferOutput: TypedFunctionDescription<{ - encode([_tokens_bought, _deadline, _recipient]: [ - BigNumberish, - BigNumberish, - string - ]): string; - }>; - - getEthToTokenOutputPrice: TypedFunctionDescription<{ - encode([_tokens_bought]: [BigNumberish]): string; - }>; - - getTokenToEthInputPrice: TypedFunctionDescription<{ - encode([_tokens_sold]: [BigNumberish]): string; - }>; - - init: TypedFunctionDescription<{ encode([,]: [string, string]): string }>; - - initUK: TypedFunctionDescription<{ - encode([_pool, _uniswapFactory, _kyber, _swapOnKyber, _feeReciever]: [ - string, - string, - string, - string[], - string - ]): string; - }>; - - oSlot: TypedFunctionDescription<{ encode([]: []): string }>; - - pool: TypedFunctionDescription<{ encode([]: []): string }>; - - setKyberSwap: TypedFunctionDescription<{ - encode([_token, _value]: [string, boolean]): string; - }>; - - tokenToEthSwapInput: TypedFunctionDescription<{ - encode([_tokens_sold, _min_eth, _deadline]: [ - BigNumberish, - BigNumberish, - BigNumberish - ]): string; - }>; - - tokenToEthTransferInput: TypedFunctionDescription<{ - encode([_tokens_sold, _min_eth, _deadline, _recipient]: [ - BigNumberish, - BigNumberish, - BigNumberish, - string - ]): string; - }>; - - transferOwnership: TypedFunctionDescription<{ - encode([_newOwner]: [string]): string; - }>; - - ukprSlot: TypedFunctionDescription<{ encode([]: []): string }>; - - uprSlot: TypedFunctionDescription<{ encode([]: []): string }>; - }; - - events: { - OwnerChanged: TypedEventDescription<{ - encodeTopics([previousOwner, newOwner]: [ - string | null, - string | null - ]): string[]; - }>; - }; -} - -export class PUniswapKyberPoolRecipe extends Contract { - connect( - signerOrProvider: Signer | Provider | string - ): PUniswapKyberPoolRecipe; - attach(addressOrName: string): PUniswapKyberPoolRecipe; - deployed(): Promise; - - on(event: EventFilter | string, listener: Listener): PUniswapKyberPoolRecipe; - once( - event: EventFilter | string, - listener: Listener - ): PUniswapKyberPoolRecipe; - addListener( - eventName: EventFilter | string, - listener: Listener - ): PUniswapKyberPoolRecipe; - removeAllListeners(eventName: EventFilter | string): PUniswapKyberPoolRecipe; - removeListener(eventName: any, listener: Listener): PUniswapKyberPoolRecipe; - - interface: PUniswapKyberPoolRecipeInterface; - - functions: { - ETH(): Promise; - - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - init( - arg0: string, - arg1: string, - overrides?: TransactionOverrides - ): Promise; - - initUK( - _pool: string, - _uniswapFactory: string, - _kyber: string, - _swapOnKyber: string[], - _feeReciever: string, - overrides?: TransactionOverrides - ): Promise; - - oSlot(): Promise; - - pool(): Promise; - - setKyberSwap( - _token: string, - _value: boolean, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - transferOwnership( - _newOwner: string, - overrides?: TransactionOverrides - ): Promise; - - ukprSlot(): Promise; - - uprSlot(): Promise; - }; - - ETH(): Promise; - - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - init( - arg0: string, - arg1: string, - overrides?: TransactionOverrides - ): Promise; - - initUK( - _pool: string, - _uniswapFactory: string, - _kyber: string, - _swapOnKyber: string[], - _feeReciever: string, - overrides?: TransactionOverrides - ): Promise; - - oSlot(): Promise; - - pool(): Promise; - - setKyberSwap( - _token: string, - _value: boolean, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - transferOwnership( - _newOwner: string, - overrides?: TransactionOverrides - ): Promise; - - ukprSlot(): Promise; - - uprSlot(): Promise; - - filters: { - OwnerChanged( - previousOwner: string | null, - newOwner: string | null - ): EventFilter; - }; - - estimate: { - ETH(): Promise; - - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - init(arg0: string, arg1: string): Promise; - - initUK( - _pool: string, - _uniswapFactory: string, - _kyber: string, - _swapOnKyber: string[], - _feeReciever: string - ): Promise; - - oSlot(): Promise; - - pool(): Promise; - - setKyberSwap(_token: string, _value: boolean): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string - ): Promise; - - transferOwnership(_newOwner: string): Promise; - - ukprSlot(): Promise; - - uprSlot(): Promise; - }; -} diff --git a/typechain/PUniswapKyberPoolRecipeFactory.ts b/typechain/PUniswapKyberPoolRecipeFactory.ts deleted file mode 100644 index 8fc039f..0000000 --- a/typechain/PUniswapKyberPoolRecipeFactory.ts +++ /dev/null @@ -1,367 +0,0 @@ -/* Generated by ts-generator ver. 0.0.8 */ -/* tslint:disable */ - -import { Contract, ContractFactory, Signer } from "ethers"; -import { Provider } from "ethers/providers"; -import { UnsignedTransaction } from "ethers/utils/transaction"; - -import { PUniswapKyberPoolRecipe } from "./PUniswapKyberPoolRecipe"; - -export class PUniswapKyberPoolRecipeFactory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy(): Promise { - return super.deploy() as Promise; - } - getDeployTransaction(): UnsignedTransaction { - return super.getDeployTransaction(); - } - attach(address: string): PUniswapKyberPoolRecipe { - return super.attach(address) as PUniswapKyberPoolRecipe; - } - connect(signer: Signer): PUniswapKyberPoolRecipeFactory { - return super.connect(signer) as PUniswapKyberPoolRecipeFactory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PUniswapKyberPoolRecipe { - return new Contract( - address, - _abi, - signerOrProvider - ) as PUniswapKyberPoolRecipe; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address" - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address" - } - ], - name: "OwnerChanged", - type: "event" - }, - { - inputs: [], - name: "ETH", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - } - ], - name: "ethToTokenSwapOutput", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - }, - { - internalType: "address", - name: "_recipient", - type: "address" - } - ], - name: "ethToTokenTransferOutput", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - } - ], - name: "getEthToTokenOutputPrice", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - } - ], - name: "getTokenToEthInputPrice", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address" - }, - { - internalType: "address", - name: "", - type: "address" - } - ], - name: "init", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_pool", - type: "address" - }, - { - internalType: "address", - name: "_uniswapFactory", - type: "address" - }, - { - internalType: "address", - name: "_kyber", - type: "address" - }, - { - internalType: "address[]", - name: "_swapOnKyber", - type: "address[]" - }, - { - internalType: "address", - name: "_feeReciever", - type: "address" - } - ], - name: "initUK", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [], - name: "oSlot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_token", - type: "address" - }, - { - internalType: "bool", - name: "_value", - type: "bool" - } - ], - name: "setKyberSwap", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - }, - { - internalType: "uint256", - name: "_min_eth", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - } - ], - name: "tokenToEthSwapInput", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - }, - { - internalType: "uint256", - name: "_min_eth", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - }, - { - internalType: "address", - name: "_recipient", - type: "address" - } - ], - name: "tokenToEthTransferInput", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_newOwner", - type: "address" - } - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [], - name: "ukprSlot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "uprSlot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - stateMutability: "view", - type: "function" - }, - { - stateMutability: "payable", - type: "receive" - } -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50611c53806100206000396000f3fe6080604052600436106100ec5760003560e01c806382e1e00a1161008a578063f090784311610059578063f09078431461037a578063f09a40161461038f578063f2fde38b146103ca578063f3c98da6146103fd576100f3565b806382e1e00a146102295780638322fff21461030557806395b68fe71461031a57806395e3c50b14610344576100f3565b806359e94862116100c657806359e94862146101825780636b1d4db7146101ac5780637237e031146101cf5780637da8ca1714610214576100f3565b80630b573638146100f857806316f0115b1461013c5780632662a75d1461016d576100f3565b366100f357005b600080fd5b61012a6004803603606081101561010e57600080fd5b50803590602081013590604001356001600160a01b0316610438565b60408051918252519081900360200190f35b34801561014857600080fd5b50610151610874565b604080516001600160a01b039092168252519081900360200190f35b34801561017957600080fd5b5061012a61088d565b34801561018e57600080fd5b5061012a600480360360208110156101a557600080fd5b50356108a8565b61012a600480360360408110156101c257600080fd5b5080359060200135610ba8565b3480156101db57600080fd5b5061012a600480360360808110156101f257600080fd5b50803590602081013590604081013590606001356001600160a01b0316610bbe565b34801561022057600080fd5b5061012a610f1e565b34801561023557600080fd5b50610303600480360360a081101561024c57600080fd5b6001600160a01b0382358116926020810135821692604082013590921691810190608081016060820135600160201b81111561028757600080fd5b82018360208201111561029957600080fd5b803590602001918460208302840111600160201b831117156102ba57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b03169150610f399050565b005b34801561031157600080fd5b50610151610fef565b34801561032657600080fd5b5061012a6004803603602081101561033d57600080fd5b5035611007565b34801561035057600080fd5b5061012a6004803603606081101561036757600080fd5b50803590602081013590604001356112fe565b34801561038657600080fd5b5061012a611314565b34801561039b57600080fd5b50610303600480360360408110156103b257600080fd5b506001600160a01b0381358116916020013516611344565b3480156103d657600080fd5b50610303600480360360208110156103ed57600080fd5b50356001600160a01b031661137f565b34801561040957600080fd5b506103036004803603604081101561042057600080fd5b506001600160a01b03813516906020013515156113da565b600080610443611461565b90504284101561045257600080fd5b805460408051630dc6eaf760e21b815260048101889052905160609283926001600160a01b039091169163371babdc91602480820192600092909190829003018186803b1580156104a257600080fd5b505afa1580156104b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156104df57600080fd5b8101908080516040519392919084600160201b8211156104fe57600080fd5b90830190602082018581111561051357600080fd5b82518660208202830111600160201b8211171561052f57600080fd5b82525081516020918201928201910280838360005b8381101561055c578181015183820152602001610544565b5050505090500160405260200180516040519392919084600160201b82111561058457600080fd5b90830190602082018581111561059957600080fd5b82518660208202830111600160201b821117156105b557600080fd5b82525081516020918201928201910280838360005b838110156105e25781810151838201526020016105ca565b50505050905001604052505050915091506000935060008090505b82518110156106d85761063683828151811061061557fe5b602002602001015183838151811061062957fe5b6020026020010151611483565b8501945082818151811061064657fe5b60209081029190910181015185546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169263095ea7b392604480820193918290030181600087803b1580156106a457600080fd5b505af11580156106b8573d6000803e3d6000fd5b505050506040513d60208110156106ce57600080fd5b50506001016105fd565b50604051473403945033904780156108fc02916000818181858888f1935050505015801561070a573d6000803e3d6000fd5b508254604080516334e7a19f60e01b8152600481018a905290516001600160a01b03909216916334e7a19f9160248082019260009290919082900301818387803b15801561075757600080fd5b505af115801561076b573d6000803e3d6000fd5b50508454604080516370a0823160e01b815230600482015290516001600160a01b03909216935063a9059cbb9250889184916370a08231916024808301926020929190829003018186803b1580156107c257600080fd5b505afa1580156107d6573d6000803e3d6000fd5b505050506040513d60208110156107ec57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d602081101561086757600080fd5b50505050505b9392505050565b600061087e611461565b546001600160a01b0316905090565b604051806028611b3382396028019050604051809103902081565b6000806108b3611461565b805460408051630dc6eaf760e21b815260048101879052905192935060609283926001600160a01b03169163371babdc916024808301926000929190829003018186803b15801561090357600080fd5b505afa158015610917573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561094057600080fd5b8101908080516040519392919084600160201b82111561095f57600080fd5b90830190602082018581111561097457600080fd5b82518660208202830111600160201b8211171561099057600080fd5b82525081516020918201928201910280838360005b838110156109bd5781810151838201526020016109a5565b5050505090500160405260200180516040519392919084600160201b8211156109e557600080fd5b9083019060208201858111156109fa57600080fd5b82518660208202830111600160201b82111715610a1657600080fd5b82525081516020918201928201910280838360005b83811015610a43578181015183820152602001610a2b565b50505050905001604052505050915091506000935060008090505b8251811015610b9f57600184015483516000916001600160a01b0316906306f2bf6290869085908110610a8d57fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610adb57600080fd5b505afa158015610aef573d6000803e3d6000fd5b505050506040513d6020811015610b0557600080fd5b505183519091506001600160a01b038216906359e9486290859085908110610b2957fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b6557600080fd5b505afa158015610b79573d6000803e3d6000fd5b505050506040513d6020811015610b8f57600080fd5b5051959095019450600101610a5e565b50505050919050565b6000610bb5838333610438565b90505b92915050565b600080610bc9611461565b905042841015610bd857600080fd5b8054604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610c3157600080fd5b505af1158015610c45573d6000803e3d6000fd5b505050506040513d6020811015610c5b57600080fd5b5051610c985760405162461bcd60e51b815260040180806020018281038252603f815260200180611b5b603f913960400191505060405180910390fd5b80546040805163be1d24ad60e01b81526004810189905290516001600160a01b039092169163be1d24ad9160248082019260009290919082900301818387803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b505082546040805163154d950160e31b81529051606094506001600160a01b03909216925063aa6ca808916004808301926000929190829003018186803b158015610d4257600080fd5b505afa158015610d56573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610d7f57600080fd5b8101908080516040519392919084600160201b821115610d9e57600080fd5b908301906020820185811115610db357600080fd5b82518660208202830111600160201b82111715610dcf57600080fd5b82525081516020918201928201910280838360005b83811015610dfc578181015183820152602001610de4565b50505050919091016040525092935060009250829150505b8251811015610ed4576000838281518110610e2b57fe5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610e8d57600080fd5b505afa158015610ea1573d6000803e3d6000fd5b505050506040513d6020811015610eb757600080fd5b50519050610ec682828a611590565b909301925050600101610e14565b50868111610f135760405162461bcd60e51b815260040180806020018281038252603a815260200180611b9a603a913960400191505060405180910390fd5b979650505050505050565b604051806023611bd482396023019050604051809103902081565b6000610f43611723565b9050610f4f8686611745565b6001810180546001600160a01b038087166001600160a01b03199283161790925560028301805492851692909116919091179055610f8c336117d3565b60005b8351811015610fe6576001826000016000868481518110610fac57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610f8f565b50505050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600080611012611461565b805460408051630dc6eaf760e21b815260048101879052905192935060609283926001600160a01b03169163371babdc916024808301926000929190829003018186803b15801561106257600080fd5b505afa158015611076573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561109f57600080fd5b8101908080516040519392919084600160201b8211156110be57600080fd5b9083019060208201858111156110d357600080fd5b82518660208202830111600160201b821117156110ef57600080fd5b82525081516020918201928201910280838360005b8381101561111c578181015183820152602001611104565b5050505090500160405260200180516040519392919084600160201b82111561114457600080fd5b90830190602082018581111561115957600080fd5b82518660208202830111600160201b8211171561117557600080fd5b82525081516020918201928201910280838360005b838110156111a257818101518382015260200161118a565b50505050905001604052505050915091506000935060008090505b8251811015610b9f57600184015483516000916001600160a01b0316906306f2bf62908690859081106111ec57fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561123a57600080fd5b505afa15801561124e573d6000803e3d6000fd5b505050506040513d602081101561126457600080fd5b505183519091506001600160a01b038216906395b68fe79085908590811061128857fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156112c457600080fd5b505afa1580156112d8573d6000803e3d6000fd5b505050506040513d60208110156112ee57600080fd5b50519590950194506001016111bd565b600061130c84848433610bbe565b949350505050565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b6040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd08195b98589b195960aa1b604482015290519081900360640190fd5b611387611845565b546001600160a01b031633146113ce5760405162461bcd60e51b8152600401808060200182810382526027815260200180611bf76027913960400191505060405180910390fd5b6113d7816117d3565b50565b6113e2611845565b546001600160a01b031633146114295760405162461bcd60e51b8152600401808060200182810382526027815260200180611bf76027913960400191505060405180910390fd5b6000611433611723565b6001600160a01b03939093166000908152602093909352506040909120805460ff1916911515919091179055565b6000806040518080611bd4602391396040519081900360230190209392505050565b60008061148e611723565b6001600160a01b03851660009081526020829052604090205490915060ff166114c3576114bb8484611875565b915050610bb8565b60018082015460028301546040805163cb3c28c760e01b815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60048201524760248201526001600160a01b0389811660448301523060648301526084820189905260a482019590955291841660c48301525147939092169163cb3c28c791479160e480830192602092919082900301818588803b15801561155857600080fd5b505af115801561156c573d6000803e3d6000fd5b50505050506040513d602081101561158357600080fd5b5050479003949350505050565b60008061159b611723565b6001600160a01b03861660009081526020829052604090205490915060ff166115d1576115c985858561198c565b91505061086d565b60018101546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051479288169163095ea7b39160448083019260209291908290030181600087803b15801561162a57600080fd5b505af115801561163e573d6000803e3d6000fd5b505050506040513d602081101561165457600080fd5b505060018083015460028401546040805163cb3c28c760e01b81526001600160a01b038b81166004830152602482018b905273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6044830152306064830152600019608483015260a482019590955291841660c483015251929091169163cb3c28c79160e4808201926020929091908290030181600087803b1580156116ec57600080fd5b505af1158015611700573d6000803e3d6000fd5b505050506040513d602081101561171657600080fd5b5050470395945050505050565b6000806040518080611b33602891396040519081900360280190209392505050565b600061174f611461565b80549091506001600160a01b0316156117a5576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5cd959606a1b604482015290519081900360640190fd5b80546001600160a01b039384166001600160a01b031991821617825560019091018054929093169116179055565b806001600160a01b03166117e5611845565b546040516001600160a01b03909116907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a380611824611845565b80546001600160a01b0319166001600160a01b039290921691909117905550565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b600080611880611461565b6001810154604080516303795fb160e11b81526001600160a01b038881166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b1580156118d557600080fd5b505afa1580156118e9573d6000803e3d6000fd5b505050506040513d60208110156118ff57600080fd5b505160408051636b1d4db760e01b815260048101879052600019602482015290519192506001600160a01b03831691636b1d4db7914791604480830192602092919082900301818588803b15801561195657600080fd5b505af115801561196a573d6000803e3d6000fd5b50505050506040513d602081101561198157600080fd5b505195945050505050565b600080611997611461565b6001810154604080516303795fb160e11b81526001600160a01b038981166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b1580156119ec57600080fd5b505afa158015611a00573d6000803e3d6000fd5b505050506040513d6020811015611a1657600080fd5b50516040805163095ea7b360e01b81526001600160a01b0380841660048301526024820189905291519293509088169163095ea7b3916044808201926020929091908290030181600087803b158015611a6e57600080fd5b505af1158015611a82573d6000803e3d6000fd5b505050506040513d6020811015611a9857600080fd5b505060408051637237e03160e01b8152600481018790526001602482015260001960448201526001600160a01b038681166064830152915191831691637237e031916084808201926020929091908290030181600087803b158015611afc57600080fd5b505af1158015611b10573d6000803e3d6000fd5b505050506040513d6020811015611b2657600080fd5b5051969550505050505056fe50556e69737761704b79626572506f6f6c5265636970652e73746f726167652e6c6f636174696f6e50556e6973776170506f6f6c5265636970652e746f6b656e546f4574685472616e73666572496e7075743a207472616e7366657246726f6d206661696c656450556e6973776170506f6f6c5265636970652e746f6b656e546f4574685472616e73666572496e7075743a206e6f7420656e6f7567682045544850556e6973776170506f6f6c5265636970652e73746f726167652e6c6f636174696f6e4f776e61626c652e6f6e6c794f776e65723a206d73672e73656e646572206e6f74206f776e6572a26469706673582212202c8c7e42ae1b1ee914729aa1140021f50242e0faf2975c8194173dbc5bbe32d764736f6c63430006040033"; diff --git a/typechain/PUniswapPoolRecipe.d.ts b/typechain/PUniswapPoolRecipe.d.ts deleted file mode 100644 index d1edbef..0000000 --- a/typechain/PUniswapPoolRecipe.d.ts +++ /dev/null @@ -1,203 +0,0 @@ -/* Generated by ts-generator ver. 0.0.8 */ -/* tslint:disable */ - -import { Contract, ContractTransaction, EventFilter, Signer } from "ethers"; -import { Listener, Provider } from "ethers/providers"; -import { Arrayish, BigNumber, BigNumberish, Interface } from "ethers/utils"; -import { - TransactionOverrides, - TypedEventDescription, - TypedFunctionDescription -} from "."; - -interface PUniswapPoolRecipeInterface extends Interface { - functions: { - ethToTokenSwapOutput: TypedFunctionDescription<{ - encode([_tokens_bought, _deadline]: [BigNumberish, BigNumberish]): string; - }>; - - ethToTokenTransferOutput: TypedFunctionDescription<{ - encode([_tokens_bought, _deadline, _recipient]: [ - BigNumberish, - BigNumberish, - string - ]): string; - }>; - - getEthToTokenOutputPrice: TypedFunctionDescription<{ - encode([_tokens_bought]: [BigNumberish]): string; - }>; - - getTokenToEthInputPrice: TypedFunctionDescription<{ - encode([_tokens_sold]: [BigNumberish]): string; - }>; - - init: TypedFunctionDescription<{ - encode([_pool, _uniswapFactory]: [string, string]): string; - }>; - - pool: TypedFunctionDescription<{ encode([]: []): string }>; - - tokenToEthSwapInput: TypedFunctionDescription<{ - encode([_tokens_sold, _min_eth, _deadline]: [ - BigNumberish, - BigNumberish, - BigNumberish - ]): string; - }>; - - tokenToEthTransferInput: TypedFunctionDescription<{ - encode([_tokens_sold, _min_eth, _deadline, _recipient]: [ - BigNumberish, - BigNumberish, - BigNumberish, - string - ]): string; - }>; - - uprSlot: TypedFunctionDescription<{ encode([]: []): string }>; - }; - - events: {}; -} - -export class PUniswapPoolRecipe extends Contract { - connect(signerOrProvider: Signer | Provider | string): PUniswapPoolRecipe; - attach(addressOrName: string): PUniswapPoolRecipe; - deployed(): Promise; - - on(event: EventFilter | string, listener: Listener): PUniswapPoolRecipe; - once(event: EventFilter | string, listener: Listener): PUniswapPoolRecipe; - addListener( - eventName: EventFilter | string, - listener: Listener - ): PUniswapPoolRecipe; - removeAllListeners(eventName: EventFilter | string): PUniswapPoolRecipe; - removeListener(eventName: any, listener: Listener): PUniswapPoolRecipe; - - interface: PUniswapPoolRecipeInterface; - - functions: { - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - init( - _pool: string, - _uniswapFactory: string, - overrides?: TransactionOverrides - ): Promise; - - pool(): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - uprSlot(): Promise; - }; - - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - init( - _pool: string, - _uniswapFactory: string, - overrides?: TransactionOverrides - ): Promise; - - pool(): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - uprSlot(): Promise; - - filters: {}; - - estimate: { - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - init(_pool: string, _uniswapFactory: string): Promise; - - pool(): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string - ): Promise; - - uprSlot(): Promise; - }; -} diff --git a/typechain/PUniswapPoolRecipeFactory.ts b/typechain/PUniswapPoolRecipeFactory.ts deleted file mode 100644 index f89daf3..0000000 --- a/typechain/PUniswapPoolRecipeFactory.ts +++ /dev/null @@ -1,241 +0,0 @@ -/* Generated by ts-generator ver. 0.0.8 */ -/* tslint:disable */ - -import { Contract, ContractFactory, Signer } from "ethers"; -import { Provider } from "ethers/providers"; -import { UnsignedTransaction } from "ethers/utils/transaction"; - -import { PUniswapPoolRecipe } from "./PUniswapPoolRecipe"; - -export class PUniswapPoolRecipeFactory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy(): Promise { - return super.deploy() as Promise; - } - getDeployTransaction(): UnsignedTransaction { - return super.getDeployTransaction(); - } - attach(address: string): PUniswapPoolRecipe { - return super.attach(address) as PUniswapPoolRecipe; - } - connect(signer: Signer): PUniswapPoolRecipeFactory { - return super.connect(signer) as PUniswapPoolRecipeFactory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PUniswapPoolRecipe { - return new Contract(address, _abi, signerOrProvider) as PUniswapPoolRecipe; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - } - ], - name: "ethToTokenSwapOutput", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - }, - { - internalType: "address", - name: "_recipient", - type: "address" - } - ], - name: "ethToTokenTransferOutput", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - } - ], - name: "getEthToTokenOutputPrice", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - } - ], - name: "getTokenToEthInputPrice", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "address", - name: "_pool", - type: "address" - }, - { - internalType: "address", - name: "_uniswapFactory", - type: "address" - } - ], - name: "init", - outputs: [], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "address", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - }, - { - internalType: "uint256", - name: "_min_eth", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - } - ], - name: "tokenToEthSwapInput", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - }, - { - internalType: "uint256", - name: "_min_eth", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - }, - { - internalType: "address", - name: "_recipient", - type: "address" - } - ], - name: "tokenToEthTransferInput", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [], - name: "uprSlot", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32" - } - ], - stateMutability: "view", - type: "function" - }, - { - stateMutability: "payable", - type: "receive" - } -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061147e806100206000396000f3fe60806040526004361061008a5760003560e01c80637237e031116100595780637237e031146101585780637da8ca171461019d57806395b68fe7146101b257806395e3c50b146101dc578063f09a40161461021257610091565b80630b5736381461009657806316f0115b146100da57806359e948621461010b5780636b1d4db71461013557610091565b3661009157005b600080fd5b6100c8600480360360608110156100ac57600080fd5b50803590602081013590604001356001600160a01b031661024f565b60408051918252519081900360200190f35b3480156100e657600080fd5b506100ef61068a565b604080516001600160a01b039092168252519081900360200190f35b34801561011757600080fd5b506100c86004803603602081101561012e57600080fd5b50356106a3565b6100c86004803603604081101561014b57600080fd5b50803590602001356109a3565b34801561016457600080fd5b506100c86004803603608081101561017b57600080fd5b50803590602081013590604081013590606001356001600160a01b03166109b7565b3480156101a957600080fd5b506100c8610d17565b3480156101be57600080fd5b506100c8600480360360208110156101d557600080fd5b5035610d32565b3480156101e857600080fd5b506100c8600480360360608110156101ff57600080fd5b5080359060208101359060400135611029565b34801561021e57600080fd5b5061024d6004803603604081101561023557600080fd5b506001600160a01b038135811691602001351661103f565b005b60008061025a6110cd565b90504284101561026957600080fd5b805460408051630dc6eaf760e21b815260048101889052905160609283926001600160a01b039091169163371babdc91602480820192600092909190829003018186803b1580156102b957600080fd5b505afa1580156102cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156102f657600080fd5b8101908080516040519392919084600160201b82111561031557600080fd5b90830190602082018581111561032a57600080fd5b82518660208202830111600160201b8211171561034657600080fd5b82525081516020918201928201910280838360005b8381101561037357818101518382015260200161035b565b5050505090500160405260200180516040519392919084600160201b82111561039b57600080fd5b9083019060208201858111156103b057600080fd5b82518660208202830111600160201b821117156103cc57600080fd5b82525081516020918201928201910280838360005b838110156103f95781810151838201526020016103e1565b50505050905001604052505050915091506000935060008090505b82518110156104ef5761044d83828151811061042c57fe5b602002602001015183838151811061044057fe5b60200260200101516110ef565b8501945082818151811061045d57fe5b60209081029190910181015185546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169263095ea7b392604480820193918290030181600087803b1580156104bb57600080fd5b505af11580156104cf573d6000803e3d6000fd5b505050506040513d60208110156104e557600080fd5b5050600101610414565b50604051473403945033904780156108fc02916000818181858888f19350505050158015610521573d6000803e3d6000fd5b508254604080516334e7a19f60e01b8152600481018a905290516001600160a01b03909216916334e7a19f9160248082019260009290919082900301818387803b15801561056e57600080fd5b505af1158015610582573d6000803e3d6000fd5b50508454604080516370a0823160e01b815230600482015290516001600160a01b03909216935063a9059cbb9250889184916370a08231916024808301926020929190829003018186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050506040513d602081101561060357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561065457600080fd5b505af1158015610668573d6000803e3d6000fd5b505050506040513d602081101561067e57600080fd5b50505050509392505050565b60006106946110cd565b546001600160a01b0316905090565b6000806106ae6110cd565b805460408051630dc6eaf760e21b815260048101879052905192935060609283926001600160a01b03169163371babdc916024808301926000929190829003018186803b1580156106fe57600080fd5b505afa158015610712573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561073b57600080fd5b8101908080516040519392919084600160201b82111561075a57600080fd5b90830190602082018581111561076f57600080fd5b82518660208202830111600160201b8211171561078b57600080fd5b82525081516020918201928201910280838360005b838110156107b85781810151838201526020016107a0565b5050505090500160405260200180516040519392919084600160201b8211156107e057600080fd5b9083019060208201858111156107f557600080fd5b82518660208202830111600160201b8211171561081157600080fd5b82525081516020918201928201910280838360005b8381101561083e578181015183820152602001610826565b50505050905001604052505050915091506000935060008090505b825181101561099a57600184015483516000916001600160a01b0316906306f2bf629086908590811061088857fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156108d657600080fd5b505afa1580156108ea573d6000803e3d6000fd5b505050506040513d602081101561090057600080fd5b505183519091506001600160a01b038216906359e948629085908590811061092457fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561096057600080fd5b505afa158015610974573d6000803e3d6000fd5b505050506040513d602081101561098a57600080fd5b5051959095019450600101610859565b50505050919050565b60006109b083833361024f565b9392505050565b6000806109c26110cd565b9050428410156109d157600080fd5b8054604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610a2a57600080fd5b505af1158015610a3e573d6000803e3d6000fd5b505050506040513d6020811015610a5457600080fd5b5051610a915760405162461bcd60e51b815260040180806020018281038252603f8152602001806113ad603f913960400191505060405180910390fd5b80546040805163be1d24ad60e01b81526004810189905290516001600160a01b039092169163be1d24ad9160248082019260009290919082900301818387803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b505082546040805163154d950160e31b81529051606094506001600160a01b03909216925063aa6ca808916004808301926000929190829003018186803b158015610b3b57600080fd5b505afa158015610b4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610b7857600080fd5b8101908080516040519392919084600160201b821115610b9757600080fd5b908301906020820185811115610bac57600080fd5b82518660208202830111600160201b82111715610bc857600080fd5b82525081516020918201928201910280838360005b83811015610bf5578181015183820152602001610bdd565b50505050919091016040525092935060009250829150505b8251811015610ccd576000838281518110610c2457fe5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d6020811015610cb057600080fd5b50519050610cbf82828a611206565b909301925050600101610c0d565b50868111610d0c5760405162461bcd60e51b815260040180806020018281038252603a8152602001806113ec603a913960400191505060405180910390fd5b979650505050505050565b60405180602361142682396023019050604051809103902081565b600080610d3d6110cd565b805460408051630dc6eaf760e21b815260048101879052905192935060609283926001600160a01b03169163371babdc916024808301926000929190829003018186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610dca57600080fd5b8101908080516040519392919084600160201b821115610de957600080fd5b908301906020820185811115610dfe57600080fd5b82518660208202830111600160201b82111715610e1a57600080fd5b82525081516020918201928201910280838360005b83811015610e47578181015183820152602001610e2f565b5050505090500160405260200180516040519392919084600160201b821115610e6f57600080fd5b908301906020820185811115610e8457600080fd5b82518660208202830111600160201b82111715610ea057600080fd5b82525081516020918201928201910280838360005b83811015610ecd578181015183820152602001610eb5565b50505050905001604052505050915091506000935060008090505b825181101561099a57600184015483516000916001600160a01b0316906306f2bf6290869085908110610f1757fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610f6557600080fd5b505afa158015610f79573d6000803e3d6000fd5b505050506040513d6020811015610f8f57600080fd5b505183519091506001600160a01b038216906395b68fe790859085908110610fb357fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fef57600080fd5b505afa158015611003573d6000803e3d6000fd5b505050506040513d602081101561101957600080fd5b5051959095019450600101610ee8565b6000611037848484336109b7565b949350505050565b60006110496110cd565b80549091506001600160a01b03161561109f576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5cd959606a1b604482015290519081900360640190fd5b80546001600160a01b039384166001600160a01b031991821617825560019091018054929093169116179055565b6000806040518080611426602391396040519081900360230190209392505050565b6000806110fa6110cd565b6001810154604080516303795fb160e11b81526001600160a01b038881166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b15801561114f57600080fd5b505afa158015611163573d6000803e3d6000fd5b505050506040513d602081101561117957600080fd5b505160408051636b1d4db760e01b815260048101879052600019602482015290519192506001600160a01b03831691636b1d4db7914791604480830192602092919082900301818588803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b50505050506040513d60208110156111fb57600080fd5b505195945050505050565b6000806112116110cd565b6001810154604080516303795fb160e11b81526001600160a01b038981166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d602081101561129057600080fd5b50516040805163095ea7b360e01b81526001600160a01b0380841660048301526024820189905291519293509088169163095ea7b3916044808201926020929091908290030181600087803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050506040513d602081101561131257600080fd5b505060408051637237e03160e01b8152600481018790526001602482015260001960448201526001600160a01b038681166064830152915191831691637237e031916084808201926020929091908290030181600087803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b505050506040513d60208110156113a057600080fd5b5051969550505050505056fe50556e6973776170506f6f6c5265636970652e746f6b656e546f4574685472616e73666572496e7075743a207472616e7366657246726f6d206661696c656450556e6973776170506f6f6c5265636970652e746f6b656e546f4574685472616e73666572496e7075743a206e6f7420656e6f7567682045544850556e6973776170506f6f6c5265636970652e73746f726167652e6c6f636174696f6ea264697066735822122092bbddb47ecec637f62c0b98c95a697a62913133f9a34ee242478a540dc0006d64736f6c63430006040033"; diff --git a/typechain/PUnsiwapPoolRecipe.d.ts b/typechain/PUnsiwapPoolRecipe.d.ts deleted file mode 100644 index 6625e3e..0000000 --- a/typechain/PUnsiwapPoolRecipe.d.ts +++ /dev/null @@ -1,185 +0,0 @@ -/* Generated by ts-generator ver. 0.0.8 */ -/* tslint:disable */ - -import { Contract, ContractTransaction, EventFilter, Signer } from "ethers"; -import { Listener, Provider } from "ethers/providers"; -import { Arrayish, BigNumber, BigNumberish, Interface } from "ethers/utils"; -import { - TransactionOverrides, - TypedEventDescription, - TypedFunctionDescription -} from "."; - -interface PUnsiwapPoolRecipeInterface extends Interface { - functions: { - ethToTokenSwapOutput: TypedFunctionDescription<{ - encode([_tokens_bought, _deadline]: [BigNumberish, BigNumberish]): string; - }>; - - ethToTokenTransferOutput: TypedFunctionDescription<{ - encode([_tokens_bought, _deadline, _recipient]: [ - BigNumberish, - BigNumberish, - string - ]): string; - }>; - - getEthToTokenOutputPrice: TypedFunctionDescription<{ - encode([_tokens_bought]: [BigNumberish]): string; - }>; - - getTokenToEthInputPrice: TypedFunctionDescription<{ - encode([_tokens_sold]: [BigNumberish]): string; - }>; - - pool: TypedFunctionDescription<{ encode([]: []): string }>; - - tokenToEthSwapInput: TypedFunctionDescription<{ - encode([_tokens_sold, _min_eth, _deadline]: [ - BigNumberish, - BigNumberish, - BigNumberish - ]): string; - }>; - - tokenToEthTransferInput: TypedFunctionDescription<{ - encode([_tokens_sold, _min_eth, _deadline, _recipient]: [ - BigNumberish, - BigNumberish, - BigNumberish, - string - ]): string; - }>; - - uniswapFactory: TypedFunctionDescription<{ encode([]: []): string }>; - }; - - events: {}; -} - -export class PUnsiwapPoolRecipe extends Contract { - connect(signerOrProvider: Signer | Provider | string): PUnsiwapPoolRecipe; - attach(addressOrName: string): PUnsiwapPoolRecipe; - deployed(): Promise; - - on(event: EventFilter | string, listener: Listener): PUnsiwapPoolRecipe; - once(event: EventFilter | string, listener: Listener): PUnsiwapPoolRecipe; - addListener( - eventName: EventFilter | string, - listener: Listener - ): PUnsiwapPoolRecipe; - removeAllListeners(eventName: EventFilter | string): PUnsiwapPoolRecipe; - removeListener(eventName: any, listener: Listener): PUnsiwapPoolRecipe; - - interface: PUnsiwapPoolRecipeInterface; - - functions: { - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - pool(): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - uniswapFactory(): Promise; - }; - - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - pool(): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - overrides?: TransactionOverrides - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string, - overrides?: TransactionOverrides - ): Promise; - - uniswapFactory(): Promise; - - filters: {}; - - estimate: { - ethToTokenSwapOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish - ): Promise; - - ethToTokenTransferOutput( - _tokens_bought: BigNumberish, - _deadline: BigNumberish, - _recipient: string - ): Promise; - - getEthToTokenOutputPrice(_tokens_bought: BigNumberish): Promise; - - getTokenToEthInputPrice(_tokens_sold: BigNumberish): Promise; - - pool(): Promise; - - tokenToEthSwapInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish - ): Promise; - - tokenToEthTransferInput( - _tokens_sold: BigNumberish, - _min_eth: BigNumberish, - _deadline: BigNumberish, - _recipient: string - ): Promise; - - uniswapFactory(): Promise; - }; -} diff --git a/typechain/PUnsiwapPoolRecipeFactory.ts b/typechain/PUnsiwapPoolRecipeFactory.ts deleted file mode 100644 index de8cf61..0000000 --- a/typechain/PUnsiwapPoolRecipeFactory.ts +++ /dev/null @@ -1,242 +0,0 @@ -/* Generated by ts-generator ver. 0.0.8 */ -/* tslint:disable */ - -import { Contract, ContractFactory, Signer } from "ethers"; -import { Provider } from "ethers/providers"; -import { UnsignedTransaction } from "ethers/utils/transaction"; - -import { PUnsiwapPoolRecipe } from "./PUnsiwapPoolRecipe"; - -export class PUnsiwapPoolRecipeFactory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy(_pool: string, _uniswapFactory: string): Promise { - return super.deploy(_pool, _uniswapFactory) as Promise; - } - getDeployTransaction( - _pool: string, - _uniswapFactory: string - ): UnsignedTransaction { - return super.getDeployTransaction(_pool, _uniswapFactory); - } - attach(address: string): PUnsiwapPoolRecipe { - return super.attach(address) as PUnsiwapPoolRecipe; - } - connect(signer: Signer): PUnsiwapPoolRecipeFactory { - return super.connect(signer) as PUnsiwapPoolRecipeFactory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): PUnsiwapPoolRecipe { - return new Contract(address, _abi, signerOrProvider) as PUnsiwapPoolRecipe; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_pool", - type: "address" - }, - { - internalType: "address", - name: "_uniswapFactory", - type: "address" - } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { - stateMutability: "payable", - type: "fallback" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - } - ], - name: "ethToTokenSwapOutput", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - }, - { - internalType: "address", - name: "_recipient", - type: "address" - } - ], - name: "ethToTokenTransferOutput", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "payable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_bought", - type: "uint256" - } - ], - name: "getEthToTokenOutputPrice", - outputs: [ - { - internalType: "uint256", - name: "eth_sold", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - } - ], - name: "getTokenToEthInputPrice", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [], - name: "pool", - outputs: [ - { - internalType: "contract IPSmartPool", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - }, - { - internalType: "uint256", - name: "_min_eth", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - } - ], - name: "tokenToEthSwapInput", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [ - { - internalType: "uint256", - name: "_tokens_sold", - type: "uint256" - }, - { - internalType: "uint256", - name: "_min_eth", - type: "uint256" - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256" - }, - { - internalType: "address", - name: "_recipient", - type: "address" - } - ], - name: "tokenToEthTransferInput", - outputs: [ - { - internalType: "uint256", - name: "eth_bought", - type: "uint256" - } - ], - stateMutability: "nonpayable", - type: "function" - }, - { - inputs: [], - name: "uniswapFactory", - outputs: [ - { - internalType: "contract IUniswapFactory", - name: "", - type: "address" - } - ], - stateMutability: "view", - type: "function" - } -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50604051611b2a380380611b2a8339818101604052604081101561003357600080fd5b810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050611a4a806100e06000396000f3fe60806040526004361061007f5760003560e01c80637237e0311161004e5780637237e031146101e05780638bdb2afa1461026357806395b68fe7146102ba57806395e3c50b1461030957610080565b80630b5736381461008257806316f0115b146100ee57806359e94862146101455780636b1d4db71461019457610080565b5b005b6100d86004803603606081101561009857600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061036c565b6040518082815260200191505060405180910390f35b3480156100fa57600080fd5b50610103610aca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561015157600080fd5b5061017e6004803603602081101561016857600080fd5b8101908080359060200190929190505050610aef565b6040518082815260200191505060405180910390f35b6101ca600480360360408110156101aa57600080fd5b810190808035906020019092919080359060200190929190505050610e92565b6040518082815260200191505060405180910390f35b3480156101ec57600080fd5b5061024d6004803603608081101561020357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ea7565b6040518082815260200191505060405180910390f35b34801561026f57600080fd5b506102786115bb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102c657600080fd5b506102f3600480360360208110156102dd57600080fd5b81019080803590602001909291905050506115e1565b6040518082815260200191505060405180910390f35b34801561031557600080fd5b506103566004803603606081101561032c57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611984565b6040518082815260200191505060405180910390f35b60004283101561037b57600080fd5b6060806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663371babdc876040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156103f057600080fd5b505afa158015610404573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561042e57600080fd5b810190808051604051939291908464010000000082111561044e57600080fd5b8382019150602082018581111561046457600080fd5b825186602082028301116401000000008211171561048157600080fd5b8083526020830192505050908051906020019060200280838360005b838110156104b857808201518184015260208101905061049d565b50505050905001604052602001805160405193929190846401000000008211156104e157600080fd5b838201915060208201858111156104f757600080fd5b825186602082028301116401000000008211171561051457600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561054b578082015181840152602081019050610530565b505050509050016040525050509150915060008090505b825181101561082c576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306f2bf628584815181106105b757fe5b60200260200101516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561061f57600080fd5b505afa158015610633573d6000803e3d6000fd5b505050506040513d602081101561064957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16636b1d4db74785858151811061068557fe5b60200260200101518a6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b1580156106ca57600080fd5b505af11580156106de573d6000803e3d6000fd5b50505050506040513d60208110156106f557600080fd5b81019080805190602001909291905050505083828151811061071357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156107e257600080fd5b505af11580156107f6573d6000803e3d6000fd5b505050506040513d602081101561080c57600080fd5b810190808051906020019092919050505050508080600101915050610562565b5047340392503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610878573d6000803e3d6000fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334e7a19f876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156108ed57600080fd5b505af1158015610901573d6000803e3d6000fd5b505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b505050506040513d6020811015610a0b57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a8557600080fd5b505af1158015610a99573d6000803e3d6000fd5b505050506040513d6020811015610aaf57600080fd5b81019080805190602001909291905050505050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663371babdc856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015610b6657600080fd5b505afa158015610b7a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506040811015610ba457600080fd5b8101908080516040519392919084640100000000821115610bc457600080fd5b83820191506020820185811115610bda57600080fd5b8251866020820283011164010000000082111715610bf757600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610c2e578082015181840152602081019050610c13565b5050505090500160405260200180516040519392919084640100000000821115610c5757600080fd5b83820191506020820185811115610c6d57600080fd5b8251866020820283011164010000000082111715610c8a57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015610cc1578082015181840152602081019050610ca6565b50505050905001604052505050915091506000925060008090505b8251811015610e87576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306f2bf62858481518110610d3157fe5b60200260200101516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d9957600080fd5b505afa158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166359e94862848481518110610dfe57fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d6020811015610e6457600080fd5b810190808051906020019092919050505085019450508080600101915050610cdc565b508292505050919050565b6000610e9f83833361036c565b905092915050565b600042831015610eb657600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f9257600080fd5b505af1158015610fa6573d6000803e3d6000fd5b505050506040513d6020811015610fbc57600080fd5b8101908080519060200190929190505050611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f81526020018061199c603f913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663be1d24ad866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561109657600080fd5b505af11580156110aa573d6000803e3d6000fd5b5050505060606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aa6ca8086040518163ffffffff1660e01b815260040160006040518083038186803b15801561111757600080fd5b505afa15801561112b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561115557600080fd5b810190808051604051939291908464010000000082111561117557600080fd5b8382019150602082018581111561118b57600080fd5b82518660208202830111640100000000821117156111a857600080fd5b8083526020830192505050908051906020019060200280838360005b838110156111df5780820151818401526020810190506111c4565b50505050905001604052505050905060008090505b815181101561155657600082828151811061120b57fe5b602002602001015190506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306f2bf62836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112b657600080fd5b505afa1580156112ca573d6000803e3d6000fd5b505050506040513d60208110156112e057600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561137257600080fd5b505afa158015611386573d6000803e3d6000fd5b505050506040513d602081101561139c57600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561143657600080fd5b505af115801561144a573d6000803e3d6000fd5b505050506040513d602081101561146057600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff16637237e0318b60018b8b6040518563ffffffff1660e01b8152600401808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050602060405180830381600087803b15801561150a57600080fd5b505af115801561151e573d6000803e3d6000fd5b505050506040513d602081101561153457600080fd5b81019080805190602001909291905050505050505080806001019150506111f4565b508447116115af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806119db603a913960400191505060405180910390fd5b47915050949350505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663371babdc856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561165857600080fd5b505afa15801561166c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250604081101561169657600080fd5b81019080805160405193929190846401000000008211156116b657600080fd5b838201915060208201858111156116cc57600080fd5b82518660208202830111640100000000821117156116e957600080fd5b8083526020830192505050908051906020019060200280838360005b83811015611720578082015181840152602081019050611705565b505050509050016040526020018051604051939291908464010000000082111561174957600080fd5b8382019150602082018581111561175f57600080fd5b825186602082028301116401000000008211171561177c57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156117b3578082015181840152602081019050611798565b50505050905001604052505050915091506000925060008090505b8251811015611979576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306f2bf6285848151811061182357fe5b60200260200101516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188b57600080fd5b505afa15801561189f573d6000803e3d6000fd5b505050506040513d60208110156118b557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff166395b68fe78484815181106118f057fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561192c57600080fd5b505afa158015611940573d6000803e3d6000fd5b505050506040513d602081101561195657600080fd5b8101908080519060200190929190505050850194505080806001019150506117ce565b508292505050919050565b600061199284848433610ea7565b9050939250505056fe50556e6973776170506f6f6c5265636970652e746f6b656e546f4574685472616e73666572496e7075743a207472616e7366657246726f6d206661696c656450556e6973776170506f6f6c5265636970652e746f6b656e546f4574685472616e73666572496e7075743a206e6f7420656e6f75676820455448a26469706673582212203bfcaa815de9e5d06bc50e2756c8dc73cf95644c93d8dd3ec26544915a63ce4e64736f6c63430006040033";