Overview
S Balance
S Value
$0.00Latest 25 from a total of 149,658 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Swap Exact Token... | 62993167 | 27 mins ago | IN | 0 S | 0.00960605 | ||||
| Swap Exact Token... | 62992217 | 46 mins ago | IN | 0 S | 0.00674877 | ||||
| Swap Exact Token... | 62990013 | 1 hr ago | IN | 0 S | 0.0070736 | ||||
| Swap Exact Token... | 62977730 | 5 hrs ago | IN | 0 S | 0.00799229 | ||||
| Swap Tokens For ... | 62975334 | 6 hrs ago | IN | 0 S | 0.00634581 | ||||
| Swap Exact Token... | 62967646 | 8 hrs ago | IN | 0 S | 0.00613526 | ||||
| Add Liquidity S | 62967371 | 9 hrs ago | IN | 65.66593174 S | 0.01051617 | ||||
| Swap Exact Token... | 62967357 | 9 hrs ago | IN | 0 S | 0.00891361 | ||||
| Swap Exact S For... | 62961920 | 10 hrs ago | IN | 1,499 S | 0.00720926 | ||||
| Swap Exact S For... | 62959585 | 10 hrs ago | IN | 2,055 S | 0.00634859 | ||||
| Swap Exact Token... | 62951249 | 13 hrs ago | IN | 0 S | 0.0066229 | ||||
| Swap Exact S For... | 62950540 | 13 hrs ago | IN | 700 S | 0.00697862 | ||||
| Swap Exact Token... | 62950241 | 13 hrs ago | IN | 0 S | 0.00947402 | ||||
| Swap Tokens For ... | 62937020 | 17 hrs ago | IN | 0 S | 0.00697972 | ||||
| Swap S For Exact... | 62935758 | 17 hrs ago | IN | 19,994.61797696 S | 0.00746951 | ||||
| Swap S For Exact... | 62934773 | 18 hrs ago | IN | 82.75708651 S | 0.00675103 | ||||
| Swap Exact Token... | 62934709 | 18 hrs ago | IN | 0 S | 0.00698505 | ||||
| Swap Exact S For... | 62933756 | 18 hrs ago | IN | 354 S | 0.0060447 | ||||
| Swap Exact Token... | 62933414 | 18 hrs ago | IN | 0 S | 0.00674437 | ||||
| Swap Exact Token... | 62933349 | 18 hrs ago | IN | 0 S | 0.00698197 | ||||
| Swap Exact Token... | 62933041 | 18 hrs ago | IN | 0 S | 0.00698197 | ||||
| Swap Exact Token... | 62932966 | 18 hrs ago | IN | 0 S | 0.00698401 | ||||
| Swap Tokens For ... | 62932631 | 18 hrs ago | IN | 0 S | 0.00697796 | ||||
| Remove Liquidity... | 62930084 | 19 hrs ago | IN | 0 S | 0.01236175 | ||||
| Swap Exact S For... | 62929913 | 19 hrs ago | IN | 1,130 S | 0.00616559 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 62992217 | 46 mins ago | 1,345.39608845 S | ||||
| 62992217 | 46 mins ago | 1,345.39608845 S | ||||
| 62990013 | 1 hr ago | 3,211.06345942 S | ||||
| 62990013 | 1 hr ago | 3,211.06345942 S | ||||
| 62977730 | 5 hrs ago | 126.60498136 S | ||||
| 62977730 | 5 hrs ago | 126.60498136 S | ||||
| 62975334 | 6 hrs ago | 615 S | ||||
| 62975334 | 6 hrs ago | 615 S | ||||
| 62967646 | 8 hrs ago | 1,057.11681836 S | ||||
| 62967646 | 8 hrs ago | 1,057.11681836 S | ||||
| 62967371 | 9 hrs ago | 0.00354433 S | ||||
| 62967371 | 9 hrs ago | 65.6623874 S | ||||
| 62961920 | 10 hrs ago | 1,499 S | ||||
| 62959585 | 10 hrs ago | 2,055 S | ||||
| 62951249 | 13 hrs ago | 30.54861167 S | ||||
| 62951249 | 13 hrs ago | 30.54861167 S | ||||
| 62950540 | 13 hrs ago | 700 S | ||||
| 62937020 | 17 hrs ago | 200 S | ||||
| 62937020 | 17 hrs ago | 200 S | ||||
| 62935758 | 17 hrs ago | 101.46881313 S | ||||
| 62935758 | 17 hrs ago | 19,893.14916382 S | ||||
| 62934773 | 18 hrs ago | 0.41997618 S | ||||
| 62934773 | 18 hrs ago | 82.33711032 S | ||||
| 62934709 | 18 hrs ago | 0.20447987 S | ||||
| 62934709 | 18 hrs ago | 0.20447987 S |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DeFiveRouter
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 9999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
import { IDeFiveFactory } from "./interfaces/IDeFiveFactory.sol";
import { IDeFiveRouter } from "./interfaces/IDeFiveRouter.sol";
import { IDeFivePair } from "./interfaces/IDeFivePair.sol";
import { IDeFiveToken } from "./interfaces/IDeFiveToken.sol";
import { IWS } from "./interfaces/IWS.sol";
import { TransferHelper } from "./libraries/TransferHelper.sol";
import { DeFiveLibrary } from "./libraries/DeFiveLibrary.sol";
contract DeFiveRouter is IDeFiveRouter {
address public immutable override factory;
address public immutable override wS;
modifier ensure(uint256 deadline) {
require(deadline >= block.timestamp, "DeFiveRouter: EXPIRED");
_;
}
constructor(address _factory, address _wS) {
factory = _factory;
wS = _wS;
}
receive() external payable {
assert(msg.sender == wS); // only accept S via fallback from the wS contract
}
// **** ADD LIQUIDITY ****
function _addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin
) internal virtual returns (uint256 amountA, uint256 amountB) {
// create the pair if it doesn't exist yet
if (IDeFiveFactory(factory).getPair(tokenA, tokenB) == address(0)) {
IDeFiveFactory(factory).createPair(tokenA, tokenB);
}
(uint256 reserveA, uint256 reserveB) = DeFiveLibrary.getReserves(factory, tokenA, tokenB);
if (reserveA == 0 && reserveB == 0) {
(amountA, amountB) = (amountADesired, amountBDesired);
} else {
uint256 amountBOptimal = DeFiveLibrary.quote(amountADesired, reserveA, reserveB);
if (amountBOptimal <= amountBDesired) {
require(amountBOptimal >= amountBMin, "DeFiveRouter: INSUFFICIENT_B_AMOUNT");
(amountA, amountB) = (amountADesired, amountBOptimal);
} else {
uint256 amountAOptimal = DeFiveLibrary.quote(amountBDesired, reserveB, reserveA);
assert(amountAOptimal <= amountADesired);
require(amountAOptimal >= amountAMin, "DeFiveRouter: INSUFFICIENT_A_AMOUNT");
(amountA, amountB) = (amountAOptimal, amountBDesired);
}
}
}
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity) {
(amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
address pair = DeFiveLibrary.pairFor(factory, tokenA, tokenB);
TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
liquidity = IDeFivePair(pair).mint(to);
}
function addLiquidityS(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline
)
external
payable
virtual
override
ensure(deadline)
returns (uint256 amountToken, uint256 amountS, uint256 liquidity)
{
(amountToken, amountS) = _addLiquidity(token, wS, amountTokenDesired, msg.value, amountTokenMin, amountSMin);
address pair = DeFiveLibrary.pairFor(factory, token, wS);
TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
IWS(wS).deposit{ value: amountS }();
assert(IWS(wS).transfer(pair, amountS));
liquidity = IDeFivePair(pair).mint(to);
// refund dust S, if any
if (msg.value > amountS) TransferHelper.safeTransferS(msg.sender, msg.value - amountS);
}
// **** REMOVE LIQUIDITY ****
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) {
address pair = DeFiveLibrary.pairFor(factory, tokenA, tokenB);
IDeFivePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
(uint256 amount0, uint256 amount1) = IDeFivePair(pair).burn(to);
(address token0, ) = DeFiveLibrary.sortTokens(tokenA, tokenB);
(amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
require(amountA >= amountAMin, "DeFiveRouter: INSUFFICIENT_A_AMOUNT");
require(amountB >= amountBMin, "DeFiveRouter: INSUFFICIENT_B_AMOUNT");
}
function removeLiquidityS(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline
) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountS) {
(amountToken, amountS) = removeLiquidity(
token,
wS,
liquidity,
amountTokenMin,
amountSMin,
address(this),
deadline
);
TransferHelper.safeTransfer(token, to, amountToken);
IWS(wS).withdraw(amountS);
TransferHelper.safeTransferS(to, amountS);
}
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external virtual override returns (uint256 amountA, uint256 amountB) {
address pair = DeFiveLibrary.pairFor(factory, tokenA, tokenB);
uint256 value = approveMax ? type(uint256).max : liquidity;
// Use permit to allow the router to spend liquidity tokens
IDeFivePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
// Call standard removeLiquidity function
(amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
}
function removeLiquiditySWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external virtual override returns (uint256 amountToken, uint256 amountS) {
address pair = DeFiveLibrary.pairFor(factory, token, wS);
uint256 value = approveMax ? type(uint256).max : liquidity;
// Use permit to allow the router to spend liquidity tokens
IDeFivePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
// Call standard removeLiquidityS function
(amountToken, amountS) = removeLiquidityS(token, liquidity, amountTokenMin, amountSMin, to, deadline);
}
// **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
function removeLiquiditySSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline
) public virtual override ensure(deadline) returns (uint256 amountS) {
(, amountS) = removeLiquidity(token, wS, liquidity, amountTokenMin, amountSMin, address(this), deadline);
TransferHelper.safeTransfer(token, to, IDeFiveToken(token).balanceOf(address(this)));
IWS(wS).withdraw(amountS);
TransferHelper.safeTransferS(to, amountS);
}
function removeLiquiditySWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external virtual override returns (uint256 amountS) {
address pair = DeFiveLibrary.pairFor(factory, token, wS);
uint256 value = approveMax ? type(uint256).max : liquidity;
IDeFivePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
amountS = removeLiquiditySSupportingFeeOnTransferTokens(
token,
liquidity,
amountTokenMin,
amountSMin,
to,
deadline
);
}
// **** SWAP ****
// requires the initial amount to have already been sent to the first pair
function _swap(uint256[] memory amounts, address[] memory path, address _to) internal virtual {
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
(address token0, ) = DeFiveLibrary.sortTokens(input, output);
uint256 amountOut = amounts[i + 1];
(uint256 amount0Out, uint256 amount1Out) = input == token0
? (uint256(0), amountOut)
: (amountOut, uint256(0));
address to = i < path.length - 2 ? DeFiveLibrary.pairFor(factory, output, path[i + 2]) : _to;
IDeFivePair(DeFiveLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0));
}
}
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
amounts = DeFiveLibrary.getAmountsOut(factory, amountIn, path);
require(amounts[amounts.length - 1] >= amountOutMin, "DeFiveRouter: INSUFFICIENT_OUTPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
DeFiveLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, to);
}
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
amounts = DeFiveLibrary.getAmountsIn(factory, amountOut, path);
require(amounts[0] <= amountInMax, "DeFiveRouter: EXCESSIVE_INPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
DeFiveLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, to);
}
function swapExactSForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) {
require(path[0] == wS, "DeFiveRouter: INVALID_PATH");
amounts = DeFiveLibrary.getAmountsOut(factory, msg.value, path);
require(amounts[amounts.length - 1] >= amountOutMin, "DeFiveRouter: INSUFFICIENT_OUTPUT_AMOUNT");
IWS(wS).deposit{ value: amounts[0] }();
assert(IWS(wS).transfer(DeFiveLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
_swap(amounts, path, to);
}
function swapTokensForExactS(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
require(path[path.length - 1] == wS, "DeFiveRouter: INVALID_PATH");
amounts = DeFiveLibrary.getAmountsIn(factory, amountOut, path);
require(amounts[0] <= amountInMax, "DeFiveRouter: EXCESSIVE_INPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
DeFiveLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, address(this));
IWS(wS).withdraw(amounts[amounts.length - 1]);
TransferHelper.safeTransferS(to, amounts[amounts.length - 1]);
}
function swapExactTokensForS(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
require(path[path.length - 1] == wS, "DeFiveRouter: INVALID_PATH");
amounts = DeFiveLibrary.getAmountsOut(factory, amountIn, path);
require(amounts[amounts.length - 1] >= amountOutMin, "DeFiveRouter: INSUFFICIENT_OUTPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
DeFiveLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, address(this));
IWS(wS).withdraw(amounts[amounts.length - 1]);
TransferHelper.safeTransferS(to, amounts[amounts.length - 1]);
}
function swapSForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) {
require(path[0] == wS, "DeFiveRouter: INVALID_PATH");
amounts = DeFiveLibrary.getAmountsIn(factory, amountOut, path);
require(amounts[0] <= msg.value, "DeFiveRouter: EXCESSIVE_INPUT_AMOUNT");
IWS(wS).deposit{ value: amounts[0] }();
assert(IWS(wS).transfer(DeFiveLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
_swap(amounts, path, to);
// refund dust S, if any
if (msg.value > amounts[0]) TransferHelper.safeTransferS(msg.sender, msg.value - amounts[0]);
}
// **** SWAP (supporting fee-on-transfer tokens) ****
// requires the initial amount to have already been sent to the first pair
function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
(address token0, ) = DeFiveLibrary.sortTokens(input, output);
IDeFivePair pair = IDeFivePair(DeFiveLibrary.pairFor(factory, input, output));
uint256 amountInput;
uint256 amountOutput;
{
// scope to avoid stack too deep errors
(uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
(uint256 reserveInput, uint256 reserveOutput) = input == token0
? (reserve0, reserve1)
: (reserve1, reserve0);
amountInput = IDeFiveToken(input).balanceOf(address(pair)) - reserveInput;
amountOutput = DeFiveLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
}
(uint256 amount0Out, uint256 amount1Out) = input == token0
? (uint256(0), amountOutput)
: (amountOutput, uint256(0));
address to = i < path.length - 2 ? DeFiveLibrary.pairFor(factory, output, path[i + 2]) : _to;
pair.swap(amount0Out, amount1Out, to, new bytes(0));
}
}
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external virtual override ensure(deadline) {
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
DeFiveLibrary.pairFor(factory, path[0], path[1]),
amountIn
);
uint256 balanceBefore = IDeFiveToken(path[path.length - 1]).balanceOf(to);
_swapSupportingFeeOnTransferTokens(path, to);
require(
IDeFiveToken(path[path.length - 1]).balanceOf(to) - balanceBefore >= amountOutMin,
"DeFiveRouter: INSUFFICIENT_OUTPUT_AMOUNT"
);
}
function swapExactSForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable virtual override ensure(deadline) {
require(path[0] == wS, "DeFiveRouter: INVALID_PATH");
uint256 amountIn = msg.value;
IWS(wS).deposit{ value: amountIn }();
assert(IWS(wS).transfer(DeFiveLibrary.pairFor(factory, path[0], path[1]), amountIn));
uint256 balanceBefore = IDeFiveToken(path[path.length - 1]).balanceOf(to);
_swapSupportingFeeOnTransferTokens(path, to);
require(
IDeFiveToken(path[path.length - 1]).balanceOf(to) - balanceBefore >= amountOutMin,
"DeFiveRouter: INSUFFICIENT_OUTPUT_AMOUNT"
);
}
function swapExactTokensForSSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external virtual override ensure(deadline) {
require(path[path.length - 1] == wS, "DeFiveRouter: INVALID_PATH");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
DeFiveLibrary.pairFor(factory, path[0], path[1]),
amountIn
);
_swapSupportingFeeOnTransferTokens(path, address(this));
uint256 amountOut = IDeFiveToken(wS).balanceOf(address(this));
require(amountOut >= amountOutMin, "DeFiveRouter: INSUFFICIENT_OUTPUT_AMOUNT");
IWS(wS).withdraw(amountOut);
TransferHelper.safeTransferS(to, amountOut);
}
// **** LIBRARY FUNCTIONS ****
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) public pure virtual override returns (uint256 amountB) {
return DeFiveLibrary.quote(amountA, reserveA, reserveB);
}
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) public pure virtual override returns (uint256 amountOut) {
return DeFiveLibrary.getAmountOut(amountIn, reserveIn, reserveOut);
}
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) public pure virtual override returns (uint256 amountIn) {
return DeFiveLibrary.getAmountIn(amountOut, reserveIn, reserveOut);
}
function getAmountsOut(
uint256 amountIn,
address[] memory path
) public view virtual override returns (uint256[] memory amounts) {
return DeFiveLibrary.getAmountsOut(factory, amountIn, path);
}
function getAmountsIn(
uint256 amountOut,
address[] memory path
) public view virtual override returns (uint256[] memory amounts) {
return DeFiveLibrary.getAmountsIn(factory, amountOut, path);
}
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
interface IDeFiveFactory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
event SetFeeToDevs(address indexed sender, address indexed feeToDevs);
event SetFeeToGbm(address indexed sender, address indexed feeToGbm);
event SetFeeToDevsSetter(address indexed sender, address indexed feeToDevsSetter);
event SetFeeToGbmSetter(address indexed sender, address indexed feeToGbmSetter);
function feeToDevs() external view returns (address);
function feeToGbm() external view returns (address);
function feeToDevsSetter() external view returns (address);
function feeToGbmSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeToDevs(address _feeToDevs) external;
function setFeeToGbm(address _feeToGbm) external;
function setFeeToDevsSetter(address _feeToDevsSetter) external;
function setFeeToGbmSetter(address _feeToGbmSetter) external;
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
import { IDeFiveToken } from "./IDeFiveToken.sol";
interface IDeFivePair is IDeFiveToken {
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to) external returns (uint256 amount0, uint256 amount1);
function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
interface IDeFiveRouter {
function factory() external view returns (address);
function wS() external view returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityS(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline
) external payable returns (uint256 amountToken, uint256 amountS, uint256 liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityS(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountS);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquiditySWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountS);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactSForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactS(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForS(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapSForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
function removeLiquiditySSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline
) external returns (uint256 amountS);
function removeLiquiditySWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountSMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountS);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactSForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForSSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
interface IDeFiveToken {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
interface IWS {
function deposit() external payable;
function transfer(address to, uint256 value) external returns (bool);
function withdraw(uint256) external;
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
import { IDeFivePair } from "../interfaces/IDeFivePair.sol";
library DeFiveLibrary {
// Returns sorted token addresses, used to handle return values from pairs sorted in this order
function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
require(tokenA != tokenB, "DeFiveLibrary: IDENTICAL_ADDRESSES");
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), "DeFiveLibrary: ZERO_ADDRESS");
}
// Calculates the CREATE2 address for a pair without making any external calls
function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(
uint160(
uint256(
keccak256(
abi.encodePacked(
bytes1(0xff),
factory,
keccak256(abi.encodePacked(token0, token1)),
hex"a2bd630981c20599e374cdb7af13220e18e2422c7dde970eff313f36d739c801" // init code hash
)
)
)
)
);
}
// Fetches and sorts the reserves for a pair
function getReserves(
address factory,
address tokenA,
address tokenB
) internal view returns (uint256 reserveA, uint256 reserveB) {
(address token0, ) = sortTokens(tokenA, tokenB);
(uint256 reserve0, uint256 reserve1, ) = IDeFivePair(pairFor(factory, tokenA, tokenB)).getReserves();
(reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
}
// Given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) internal pure returns (uint256 amountB) {
require(amountA > 0, "DeFiveLibrary: INSUFFICIENT_AMOUNT");
require(reserveA > 0 && reserveB > 0, "DeFiveLibrary: INSUFFICIENT_LIQUIDITY");
amountB = (amountA * reserveB) / reserveA;
}
// Given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountOut) {
require(amountIn > 0, "DeFiveLibrary: INSUFFICIENT_INPUT_AMOUNT");
require(reserveIn > 0 && reserveOut > 0, "DeFiveLibrary: INSUFFICIENT_LIQUIDITY");
uint256 amountInWithFee = amountIn * 9982; // 0.018% fee
amountOut = (amountInWithFee * reserveOut) / (reserveIn * 10000 + amountInWithFee);
}
// Given an output amount of an asset and pair reserves, returns a required input amount of the other asset
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountIn) {
require(amountOut > 0, "DeFiveLibrary: INSUFFICIENT_OUTPUT_AMOUNT");
require(reserveIn > 0 && reserveOut > 0, "DeFiveLibrary: INSUFFICIENT_LIQUIDITY");
amountIn = (reserveIn * amountOut * 10000) / ((reserveOut - amountOut) * 9982) + 1;
}
// Performs chained getAmountOut calculations on any number of pairs
function getAmountsOut(
address factory,
uint256 amountIn,
address[] memory path
) internal view returns (uint256[] memory amounts) {
uint256 length = path.length;
require(length >= 2, "DeFiveLibrary: INVALID_PATH");
amounts = new uint256[](length);
amounts[0] = amountIn;
for (uint256 i = 0; i < length - 1; i++) {
(uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1]);
amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
}
}
// Performs chained getAmountIn calculations on any number of pairs
function getAmountsIn(
address factory,
uint256 amountOut,
address[] memory path
) internal view returns (uint256[] memory amounts) {
uint256 length = path.length;
require(length >= 2, "DeFiveLibrary: INVALID_PATH");
amounts = new uint256[](length);
amounts[length - 1] = amountOut;
for (uint256 i = length - 1; i > 0; i--) {
(uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]);
amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
}
}
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.4;
// helper methods for interacting with tokens and sending S that do not consistently return true/false
library TransferHelper {
function safeApprove(address token, address to, uint256 value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED");
}
function safeTransfer(address token, address to, uint256 value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED");
}
function safeTransferFrom(address token, address from, address to, uint256 value) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED");
}
function safeTransferS(address to, uint256 value) internal {
(bool success, ) = to.call{ value: value }(new bytes(0));
require(success, "TransferHelper: S_TRANSFER_FAILED");
}
}{
"optimizer": {
"enabled": true,
"runs": 9999
},
"metadata": {
"bytecodeHash": "none",
"useLiteralContent": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_wS","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityS","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountS","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityS","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquiditySSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquiditySWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquiditySWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactSForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactSForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForS","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForSSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapSForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactS","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040523480156200001157600080fd5b506040516200513038038062005130833981016040819052620000349162000070565b6001600160601b0319606092831b8116608052911b1660a052620000a7565b80516001600160a01b03811681146200006b57600080fd5b919050565b6000806040838503121562000083578182fd5b6200008e8362000053565b91506200009e6020840162000053565b90509250929050565b60805160601c60a05160601c614ef16200023f6000396000818161019f0152818161044f01528181610569015281816106d6015281816107cf015281816108a501528181610b9501528181610e1a01528181610fda0152818161107601528181611257015281816115600152818161161b0152818161168f01528181611a8001528181611ae801528181611bbe01528181611c1401528181611c4801528181611cf601528181612119015281816122cc0152818161236801528181612a0001528181612b4801528181612c710152612ebf01526000818161049b015281816105470152818161095f01528181610a9601528181610c8c01528181610cc301528181610ed3015281816110a801528181611235015281816113a5015281816116c101528181611bf201528181611edf015281816121d20152818161239a015281816125ac0152818161270c01528181612ce601528181612d7c01528181612f7901528181613962015281816139c001528181613cee01528181613edc01528181613ff8015281816140c301526141490152614ef16000f3fe60806040526004361061018f5760003560e01c80635c11d795116100d6578063bf7e14d91161007f578063d06ca61f11610059578063d06ca61f146104dd578063e8e33700146104fd578063ee2b38361461051d57600080fd5b8063bf7e14d91461043d578063c45a015514610489578063c8fd02a8146104bd57600080fd5b80638803dbee116100b05780638803dbee146103dd578063ad615dec146103fd578063baa2abde1461041d57600080fd5b80635c11d7951461038a5780637ae0a825146103aa57806385f8c259146103bd57600080fd5b80632a1f3f86116101385780633e0d80e5116101125780633e0d80e51461032957806344d2f1821461033c57806349bdd8111461035c57600080fd5b80632a1f3f86146102d65780632c1baa33146102e957806338ed17391461030957600080fd5b80631dd3621b116101695780631dd3621b146102695780631f00ca74146102965780632195995c146102b657600080fd5b806304b4d269146101e1578063054d50d41461021b57806309d669051461024957600080fd5b366101dc57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101da57634e487b7160e01b600052600160045260246000fd5b005b600080fd5b3480156101ed57600080fd5b506102016101fc3660046149cb565b61053d565b604080519283526020830191909152015b60405180910390f35b34801561022757600080fd5b5061023b610236366004614ccc565b610663565b604051908152602001610212565b34801561025557600080fd5b5061023b61026436600461496e565b610678565b34801561027557600080fd5b50610289610284366004614c5b565b610848565b6040516102129190614d13565b3480156102a257600080fd5b506102896102b1366004614b47565b610c85565b3480156102c257600080fd5b506102016102d136600461484a565b610cb9565b6102896102e4366004614ae2565b610dc5565b3480156102f557600080fd5b5061023b6103043660046149cb565b61122d565b34801561031557600080fd5b50610289610324366004614c5b565b61134d565b6101da610337366004614ae2565b61150d565b34801561034857600080fd5b5061020161035736600461496e565b611a26565b61036f61036a36600461496e565b611b62565b60408051938452602084019290925290820152606001610212565b34801561039657600080fd5b506101da6103a5366004614c5b565b611e4f565b6102896103b8366004614ae2565b6120c4565b3480156103c957600080fd5b5061023b6103d8366004614ccc565b612547565b3480156103e957600080fd5b506102896103f8366004614c5b565b612554565b34801561040957600080fd5b5061023b610418366004614ccc565b6126a4565b34801561042957600080fd5b506102016104383660046147d9565b6126b1565b34801561044957600080fd5b506104717f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610212565b34801561049557600080fd5b506104717f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c957600080fd5b506101da6104d8366004614c5b565b6129a5565b3480156104e957600080fd5b506102896104f8366004614b47565b612cdf565b34801561050957600080fd5b5061036f6105183660046148f3565b612d0c565b34801561052957600080fd5b50610289610538366004614c5b565b612e62565b600080600061058d7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061307e565b905060008761059c578c6105a0565b6000195b6040517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101829052606481018b905260ff8916608482015260a4810188905260c481018790529091506001600160a01b0383169063d505accf9060e401600060405180830381600087803b15801561062857600080fd5b505af115801561063c573d6000803e3d6000fd5b5050505061064e8e8e8e8e8e8e611a26565b909f909e509c50505050505050505050505050565b600061067084848461318b565b949350505050565b600081428110156106d05760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064015b60405180910390fd5b6106ff887f000000000000000000000000000000000000000000000000000000000000000089898930896126b1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529093506107a09150899086906001600160a01b038316906370a082319060240160206040518083038186803b15801561076357600080fd5b505afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b9190614aca565b6132c8565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561081b57600080fd5b505af115801561082f573d6000803e3d6000fd5b5050505061083d8483613411565b509695505050505050565b6060814281101561089b5760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866108d2600182614e1d565b8181106108ef57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061090491906147a1565b6001600160a01b03161461095a5760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b6109b87f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f992505050565b915086826000815181106109dc57634e487b7160e01b600052603260045260246000fd5b60200260200101511115610a575760405162461bcd60e51b8152602060048201526024808201527f446546697665526f757465723a204558434553534956455f494e5055545f414d60448201527f4f554e540000000000000000000000000000000000000000000000000000000060648201526084016106c7565b610b5486866000818110610a7b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a9091906147a1565b33610b267f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ad657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aeb91906147a1565b8b8b6001818110610b0c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b2191906147a1565b61307e565b85600081518110610b4757634e487b7160e01b600052603260045260246000fd5b60200260200101516136de565b610b9382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613855915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551610bd19190614e1d565b81518110610bef57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610c1591815260200190565b600060405180830381600087803b158015610c2f57600080fd5b505af1158015610c43573d6000803e3d6000fd5b5050505061083d848360018551610c5a9190614e1d565b81518110610c7857634e487b7160e01b600052603260045260246000fd5b6020026020010151613411565b6060610cb27f000000000000000000000000000000000000000000000000000000000000000084846134f9565b9392505050565b6000806000610ce97f00000000000000000000000000000000000000000000000000000000000000008f8f61307e565b9050600087610cf8578c610cfc565b6000195b6040517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101829052606481018b905260ff8916608482015260a4810188905260c481018790529091506001600160a01b0383169063d505accf9060e401600060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b50505050610dab8f8f8f8f8f8f8f6126b1565b809450819550505050509b509b9950505050505050505050565b60608142811015610e185760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110610e6357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e7891906147a1565b6001600160a01b031614610ece5760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b610f2c7f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a9592505050565b9150868260018451610f3e9190614e1d565b81518110610f5c57634e487b7160e01b600052603260045260246000fd5b60200260200101511015610fd85760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061102857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561105b57600080fd5b505af115801561106f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61111e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110e857634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110fd91906147a1565b8a8a6001818110610b0c57634e487b7160e01b600052603260045260246000fd5b8460008151811061113f57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016111789291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561119257600080fd5b505af11580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca9190614a60565b6111e457634e487b7160e01b600052600160045260246000fd5b61122382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613855915050565b5095945050505050565b60008061127b7f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061307e565b905060008661128a578b61128e565b6000195b6040517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101829052606481018a905260ff8816608482015260a4810187905260c481018690529091506001600160a01b0383169063d505accf9060e401600060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b5050505061133c8d8d8d8d8d8d610678565b9d9c50505050505050505050505050565b606081428110156113a05760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6113fe7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a9592505050565b91508682600184516114109190614e1d565b8151811061142e57634e487b7160e01b600052603260045260246000fd5b602002602001015110156114aa5760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b6114ce86866000818110610a7b57634e487b7160e01b600052603260045260246000fd5b61083d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613855915050565b804281101561155e5760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106115a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115be91906147a1565b6001600160a01b0316146116145760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6117017f0000000000000000000000000000000000000000000000000000000000000000898960008181106110e857634e487b7160e01b600052603260045260246000fd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561176157600080fd5b505af1158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190614a60565b6117b357634e487b7160e01b600052600160045260246000fd5b600086866117c2600182614e1d565b8181106117df57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117f491906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561185057600080fd5b505afa158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190614aca565b90506118c8878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613c5d915050565b878188886118d7600182614e1d565b8181106118f457634e487b7160e01b600052603260045260246000fd5b905060200201602081019061190991906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015291909116906370a08231906024015b60206040518083038186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199e9190614aca565b6119a89190614e1d565b1015611a1c5760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b5050505050505050565b6000808242811015611a7a5760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b611aa9897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6126b1565b9093509150611ab98986856132c8565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611b3457600080fd5b505af1158015611b48573d6000803e3d6000fd5b50505050611b568583613411565b50965096945050505050565b60008060008342811015611bb85760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b611be68a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fb1565b90945092506000611c387f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061307e565b9050611c468b3383886136de565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015611d3e57600080fd5b505af1158015611d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d769190614a60565b611d9057634e487b7160e01b600052600160045260246000fd5b6040517f6a6278420000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611dec57600080fd5b505af1158015611e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e249190614aca565b925083341115611e4157611e4133611e3c8634614e1d565b613411565b505096509650969350505050565b8042811015611ea05760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b611f2585856000818110611ec457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ed991906147a1565b33611f1f7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110e857634e487b7160e01b600052603260045260246000fd5b8a6136de565b60008585611f34600182614e1d565b818110611f5157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611f6691906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015611fc257600080fd5b505afa158015611fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffa9190614aca565b905061203a868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250613c5d915050565b86818787612049600182614e1d565b81811061206657634e487b7160e01b600052603260045260246000fd5b905060200201602081019061207b91906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015291909116906370a082319060240161194e565b606081428110156121175760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061216257634e487b7160e01b600052603260045260246000fd5b905060200201602081019061217791906147a1565b6001600160a01b0316146121cd5760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b61222b7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f992505050565b9150348260008151811061224f57634e487b7160e01b600052603260045260246000fd5b602002602001015111156122ca5760405162461bcd60e51b8152602060048201526024808201527f446546697665526f757465723a204558434553534956455f494e5055545f414d60448201527f4f554e540000000000000000000000000000000000000000000000000000000060648201526084016106c7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061231a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123da7f0000000000000000000000000000000000000000000000000000000000000000898960008181106110e857634e487b7160e01b600052603260045260246000fd5b846000815181106123fb57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016124349291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561244e57600080fd5b505af1158015612462573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124869190614a60565b6124a057634e487b7160e01b600052600160045260246000fd5b6124df82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613855915050565b8160008151811061250057634e487b7160e01b600052603260045260246000fd5b602002602001015134111561122357611223338360008151811061253457634e487b7160e01b600052603260045260246000fd5b602002602001015134611e3c9190614e1d565b60006106708484846142e0565b606081428110156125a75760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6126057f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f992505050565b9150868260008151811061262957634e487b7160e01b600052603260045260246000fd5b602002602001015111156114aa5760405162461bcd60e51b8152602060048201526024808201527f446546697665526f757465723a204558434553534956455f494e5055545f414d60448201527f4f554e540000000000000000000000000000000000000000000000000000000060648201526084016106c7565b600061067084848461441a565b60008082428110156127055760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b60006127327f00000000000000000000000000000000000000000000000000000000000000008c8c61307e565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d49190614a60565b506040517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561283557600080fd5b505af1158015612849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286d9190614c38565b91509150600061287d8e8e614528565b509050806001600160a01b03168e6001600160a01b0316146128a05781836128a3565b82825b90975095508a87101561291e5760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f415f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b898610156129945760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f425f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b505050505097509795505050505050565b80428110156129f65760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585612a2d600182614e1d565b818110612a4a57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a5f91906147a1565b6001600160a01b031614612ab55760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b612ad985856000818110611ec457634e487b7160e01b600052603260045260246000fd5b612b17858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613c5d915050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612b9257600080fd5b505afa158015612ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bca9190614aca565b905086811015612c425760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015612cbd57600080fd5b505af1158015612cd1573d6000803e3d6000fd5b50505050611a1c8482613411565b6060610cb27f00000000000000000000000000000000000000000000000000000000000000008484613a95565b60008060008342811015612d625760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b612d708c8c8c8c8c8c613fb1565b90945092506000612da27f00000000000000000000000000000000000000000000000000000000000000008e8e61307e565b9050612db08d3383886136de565b612dbc8c3383876136de565b6040517f6a6278420000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015612e1857600080fd5b505af1158015612e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e509190614aca565b92505050985098509895505050505050565b60608142811015612eb55760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686612eec600182614e1d565b818110612f0957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612f1e91906147a1565b6001600160a01b031614612f745760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b612fd27f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a9592505050565b9150868260018451612fe49190614e1d565b8151811061300257634e487b7160e01b600052603260045260246000fd5b60200260200101511015610a575760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b600080600061308d8585614528565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085811b821660208085019190915285821b83166034850152845180850360280181526048850190955284519401939093207fff000000000000000000000000000000000000000000000000000000000000006068840152928b901b166069820152607d8101919091527fa2bd630981c20599e374cdb7af13220e18e2422c7dde970eff313f36d739c801609d820152919350915060bd01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008084116132025760405162461bcd60e51b815260206004820152602860248201527f4465466976654c6962726172793a20494e53554646494349454e545f494e505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b6000831180156132125750600082115b6132845760405162461bcd60e51b815260206004820152602560248201527f4465466976654c6962726172793a20494e53554646494349454e545f4c49515560448201527f494449545900000000000000000000000000000000000000000000000000000060648201526084016106c7565b6000613292856126fe614dfe565b9050806132a185612710614dfe565b6132ab9190614dc6565b6132b58483614dfe565b6132bf9190614dde565b95945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916133529190614cf7565b6000604051808303816000865af19150503d806000811461338f576040519150601f19603f3d011682016040523d82523d6000602084013e613394565b606091505b50915091508180156133be5750805115806133be5750808060200190518101906133be9190614a60565b61340a5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016106c7565b5050505050565b604080516000808252602082019092526001600160a01b03841690839060405161343b9190614cf7565b60006040518083038185875af1925050503d8060008114613478576040519150601f19603f3d011682016040523d82523d6000602084013e61347d565b606091505b50509050806134f45760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657248656c7065723a20535f5452414e534645525f4641494c4560448201527f440000000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b505050565b8051606090600281101561354f5760405162461bcd60e51b815260206004820152601b60248201527f4465466976654c6962726172793a20494e56414c49445f50415448000000000060448201526064016106c7565b8067ffffffffffffffff81111561357657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561359f578160200160208202803683370190505b50915083826135af600184614e1d565b815181106135cd57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260006135e5600183614e1d565b90505b80156136d5576000806136548887613601600187614e1d565b8151811061361f57634e487b7160e01b600052603260045260246000fd5b602002602001015188868151811061364757634e487b7160e01b600052603260045260246000fd5b6020026020010151614638565b9150915061368a85848151811061367b57634e487b7160e01b600052603260045260246000fd5b602002602001015183836142e0565b85613696600186614e1d565b815181106136b457634e487b7160e01b600052603260045260246000fd5b602002602001018181525050505080806136cd90614e60565b9150506135e8565b50509392505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916137709190614cf7565b6000604051808303816000865af19150503d80600081146137ad576040519150601f19603f3d011682016040523d82523d6000602084013e6137b2565b606091505b50915091508180156137dc5750805115806137dc5750808060200190518101906137dc9190614a60565b61384d5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016106c7565b505050505050565b60005b600183516138669190614e1d565b811015613a8f5760008084838151811061389057634e487b7160e01b600052603260045260246000fd5b6020026020010151858460016138a69190614dc6565b815181106138c457634e487b7160e01b600052603260045260246000fd5b60200260200101519150915060006138dc8383614528565b5090506000876138ed866001614dc6565b8151811061390b57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139395782600061393d565b6000835b91509150600060028a516139519190614e1d565b881061395d57886139b9565b6139b97f0000000000000000000000000000000000000000000000000000000000000000878c61398e8c6002614dc6565b815181106139ac57634e487b7160e01b600052603260045260246000fd5b602002602001015161307e565b90506139e67f0000000000000000000000000000000000000000000000000000000000000000888861307e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613a23576020820181803683370190505b506040518563ffffffff1660e01b8152600401613a439493929190614d57565b600060405180830381600087803b158015613a5d57600080fd5b505af1158015613a71573d6000803e3d6000fd5b50505050505050505050508080613a8790614e77565b915050613858565b50505050565b80516060906002811015613aeb5760405162461bcd60e51b815260206004820152601b60248201527f4465466976654c6962726172793a20494e56414c49445f50415448000000000060448201526064016106c7565b8067ffffffffffffffff811115613b1257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015613b3b578160200160208202803683370190505b5091508382600081518110613b6057634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060005b613b7a600183614e1d565b8110156136d557600080613bdc88878581518110613ba857634e487b7160e01b600052603260045260246000fd5b602002602001015188866001613bbe9190614dc6565b8151811061364757634e487b7160e01b600052603260045260246000fd5b91509150613c12858481518110613c0357634e487b7160e01b600052603260045260246000fd5b6020026020010151838361318b565b85613c1e856001614dc6565b81518110613c3c57634e487b7160e01b600052603260045260246000fd5b60200260200101818152505050508080613c5590614e77565b915050613b6f565b60005b60018351613c6e9190614e1d565b8110156134f457600080848381518110613c9857634e487b7160e01b600052603260045260246000fd5b602002602001015185846001613cae9190614dc6565b81518110613ccc57634e487b7160e01b600052603260045260246000fd5b6020026020010151915091506000613ce48383614528565b5090506000613d147f0000000000000000000000000000000000000000000000000000000000000000858561307e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613d5557600080fd5b505afa158015613d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8d9190614a7c565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080876001600160a01b03168a6001600160a01b031614613dd5578284613dd8565b83835b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015292945090925083918c16906370a082319060240160206040518083038186803b158015613e3a57600080fd5b505afa158015613e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e729190614aca565b613e7c9190614e1d565b9550613e8986838361318b565b945050505050600080856001600160a01b0316886001600160a01b031614613eb357826000613eb7565b6000835b91509150600060028c51613ecb9190614e1d565b8a10613ed7578a613f08565b613f087f0000000000000000000000000000000000000000000000000000000000000000898e61398e8e6002614dc6565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091529091506001600160a01b0387169063022c0d9f90613f639086908690869060248101614d57565b600060405180830381600087803b158015613f7d57600080fd5b505af1158015613f91573d6000803e3d6000fd5b505050505050505050505050508080613fa990614e77565b915050613c60565b6040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301528681166024830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a439059060440160206040518083038186803b15801561403c57600080fd5b505afa158015614050573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407491906147bd565b6001600160a01b03161415614141576040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063c9c6539690604401602060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413f91906147bd565b505b60008061416f7f00000000000000000000000000000000000000000000000000000000000000008b8b614638565b91509150816000148015614181575080155b15614191578793508692506142d3565b600061419e89848461441a565b9050878111614228578581101561421d5760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f425f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b8894509250826142d1565b600061423589848661441a565b90508981111561425557634e487b7160e01b600052600160045260246000fd5b878110156142cb5760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f415f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b94508793505b505b5050965096945050505050565b60008084116143575760405162461bcd60e51b815260206004820152602960248201527f4465466976654c6962726172793a20494e53554646494349454e545f4f55545060448201527f55545f414d4f554e54000000000000000000000000000000000000000000000060648201526084016106c7565b6000831180156143675750600082115b6143d95760405162461bcd60e51b815260206004820152602560248201527f4465466976654c6962726172793a20494e53554646494349454e545f4c49515560448201527f494449545900000000000000000000000000000000000000000000000000000060648201526084016106c7565b6143e38483614e1d565b6143ef906126fe614dfe565b6143f98585614dfe565b61440590612710614dfe565b61440f9190614dde565b610670906001614dc6565b60008084116144915760405162461bcd60e51b815260206004820152602260248201527f4465466976654c6962726172793a20494e53554646494349454e545f414d4f5560448201527f4e5400000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b6000831180156144a15750600082115b6145135760405162461bcd60e51b815260206004820152602560248201527f4465466976654c6962726172793a20494e53554646494349454e545f4c49515560448201527f494449545900000000000000000000000000000000000000000000000000000060648201526084016106c7565b8261451e8386614dfe565b6106709190614dde565b600080826001600160a01b0316846001600160a01b031614156145b35760405162461bcd60e51b815260206004820152602260248201527f4465466976654c6962726172793a204944454e544943414c5f4144445245535360448201527f455300000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b826001600160a01b0316846001600160a01b0316106145d35782846145d6565b83835b90925090506001600160a01b0382166146315760405162461bcd60e51b815260206004820152601b60248201527f4465466976654c6962726172793a205a45524f5f41444452455353000000000060448201526064016106c7565b9250929050565b60008060006146478585614528565b50905060008061465888888861307e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561469057600080fd5b505afa1580156146a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146c89190614a7c565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b03161461470d578082614710565b81815b90999098509650505050505050565b803561472a81614ebe565b919050565b60008083601f840112614740578081fd5b50813567ffffffffffffffff811115614757578182fd5b6020830191508360208260051b850101111561463157600080fd5b80516dffffffffffffffffffffffffffff8116811461472a57600080fd5b803560ff8116811461472a57600080fd5b6000602082840312156147b2578081fd5b8135610cb281614ebe565b6000602082840312156147ce578081fd5b8151610cb281614ebe565b600080600080600080600060e0888a0312156147f3578283fd5b87356147fe81614ebe565b9650602088013561480e81614ebe565b955060408801359450606088013593506080880135925060a088013561483381614ebe565b8092505060c0880135905092959891949750929550565b60008060008060008060008060008060006101608c8e03121561486b578384fd5b8b3561487681614ebe565b9a5060208c013561488681614ebe565b995060408c0135985060608c0135975060808c0135965060a08c01356148ab81614ebe565b955060c08c0135945060e08c01356148c281614ed6565b93506148d16101008d01614790565b92506101208c013591506101408c013590509295989b509295989b9093969950565b600080600080600080600080610100898b03121561490f578384fd5b883561491a81614ebe565b9750602089013561492a81614ebe565b965060408901359550606089013594506080890135935060a0890135925060c089013561495681614ebe565b8092505060e089013590509295985092959890939650565b60008060008060008060c08789031215614986578182fd5b863561499181614ebe565b955060208701359450604087013593506060870135925060808701356149b681614ebe565b8092505060a087013590509295509295509295565b6000806000806000806000806000806101408b8d0312156149ea578384fd5b8a356149f581614ebe565b995060208b0135985060408b0135975060608b0135965060808b0135614a1a81614ebe565b955060a08b0135945060c08b0135614a3181614ed6565b9350614a3f60e08c01614790565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600060208284031215614a71578081fd5b8151610cb281614ed6565b600080600060608486031215614a90578081fd5b614a9984614772565b9250614aa760208501614772565b9150604084015163ffffffff81168114614abf578182fd5b809150509250925092565b600060208284031215614adb578081fd5b5051919050565b600080600080600060808688031215614af9578283fd5b85359450602086013567ffffffffffffffff811115614b16578384fd5b614b228882890161472f565b9095509350506040860135614b3681614ebe565b949793965091946060013592915050565b60008060408385031215614b59578182fd5b8235915060208084013567ffffffffffffffff80821115614b78578384fd5b818601915086601f830112614b8b578384fd5b813581811115614b9d57614b9d614ea8565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715614be057614be0614ea8565b604052828152858101935084860182860187018b1015614bfe578788fd5b8795505b83861015614c2757614c138161471f565b855260019590950194938601938601614c02565b508096505050505050509250929050565b60008060408385031215614c4a578182fd5b505080516020909101519092909150565b60008060008060008060a08789031215614c73578384fd5b8635955060208701359450604087013567ffffffffffffffff811115614c97578485fd5b614ca389828a0161472f565b9095509350506060870135614cb781614ebe565b80925050608087013590509295509295509295565b600080600060608486031215614ce0578081fd5b505081359360208301359350604090920135919050565b60008251614d09818460208701614e34565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015614d4b57835183529284019291840191600101614d2f565b50909695505050505050565b8481528360208201526001600160a01b03831660408201526080606082015260008251806080840152614d918160a0850160208701614e34565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160a00195945050505050565b60008219821115614dd957614dd9614e92565b500190565b600082614df957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614e1857614e18614e92565b500290565b600082821015614e2f57614e2f614e92565b500390565b60005b83811015614e4f578181015183820152602001614e37565b83811115613a8f5750506000910152565b600081614e6f57614e6f614e92565b506000190190565b6000600019821415614e8b57614e8b614e92565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614ed357600080fd5b50565b8015158114614ed357600080fdfea164736f6c6343000804000a00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Deployed Bytecode
0x60806040526004361061018f5760003560e01c80635c11d795116100d6578063bf7e14d91161007f578063d06ca61f11610059578063d06ca61f146104dd578063e8e33700146104fd578063ee2b38361461051d57600080fd5b8063bf7e14d91461043d578063c45a015514610489578063c8fd02a8146104bd57600080fd5b80638803dbee116100b05780638803dbee146103dd578063ad615dec146103fd578063baa2abde1461041d57600080fd5b80635c11d7951461038a5780637ae0a825146103aa57806385f8c259146103bd57600080fd5b80632a1f3f86116101385780633e0d80e5116101125780633e0d80e51461032957806344d2f1821461033c57806349bdd8111461035c57600080fd5b80632a1f3f86146102d65780632c1baa33146102e957806338ed17391461030957600080fd5b80631dd3621b116101695780631dd3621b146102695780631f00ca74146102965780632195995c146102b657600080fd5b806304b4d269146101e1578063054d50d41461021b57806309d669051461024957600080fd5b366101dc57336001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816146101da57634e487b7160e01b600052600160045260246000fd5b005b600080fd5b3480156101ed57600080fd5b506102016101fc3660046149cb565b61053d565b604080519283526020830191909152015b60405180910390f35b34801561022757600080fd5b5061023b610236366004614ccc565b610663565b604051908152602001610212565b34801561025557600080fd5b5061023b61026436600461496e565b610678565b34801561027557600080fd5b50610289610284366004614c5b565b610848565b6040516102129190614d13565b3480156102a257600080fd5b506102896102b1366004614b47565b610c85565b3480156102c257600080fd5b506102016102d136600461484a565b610cb9565b6102896102e4366004614ae2565b610dc5565b3480156102f557600080fd5b5061023b6103043660046149cb565b61122d565b34801561031557600080fd5b50610289610324366004614c5b565b61134d565b6101da610337366004614ae2565b61150d565b34801561034857600080fd5b5061020161035736600461496e565b611a26565b61036f61036a36600461496e565b611b62565b60408051938452602084019290925290820152606001610212565b34801561039657600080fd5b506101da6103a5366004614c5b565b611e4f565b6102896103b8366004614ae2565b6120c4565b3480156103c957600080fd5b5061023b6103d8366004614ccc565b612547565b3480156103e957600080fd5b506102896103f8366004614c5b565b612554565b34801561040957600080fd5b5061023b610418366004614ccc565b6126a4565b34801561042957600080fd5b506102016104383660046147d9565b6126b1565b34801561044957600080fd5b506104717f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b6040516001600160a01b039091168152602001610212565b34801561049557600080fd5b506104717f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e681565b3480156104c957600080fd5b506101da6104d8366004614c5b565b6129a5565b3480156104e957600080fd5b506102896104f8366004614b47565b612cdf565b34801561050957600080fd5b5061036f6105183660046148f3565b612d0c565b34801561052957600080fd5b50610289610538366004614c5b565b612e62565b600080600061058d7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68e7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3861307e565b905060008761059c578c6105a0565b6000195b6040517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101829052606481018b905260ff8916608482015260a4810188905260c481018790529091506001600160a01b0383169063d505accf9060e401600060405180830381600087803b15801561062857600080fd5b505af115801561063c573d6000803e3d6000fd5b5050505061064e8e8e8e8e8e8e611a26565b909f909e509c50505050505050505050505050565b600061067084848461318b565b949350505050565b600081428110156106d05760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064015b60405180910390fd5b6106ff887f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3889898930896126b1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529093506107a09150899086906001600160a01b038316906370a082319060240160206040518083038186803b15801561076357600080fd5b505afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b9190614aca565b6132c8565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561081b57600080fd5b505af115801561082f573d6000803e3d6000fd5b5050505061083d8483613411565b509695505050505050565b6060814281101561089b5760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad381686866108d2600182614e1d565b8181106108ef57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061090491906147a1565b6001600160a01b03161461095a5760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b6109b87f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f992505050565b915086826000815181106109dc57634e487b7160e01b600052603260045260246000fd5b60200260200101511115610a575760405162461bcd60e51b8152602060048201526024808201527f446546697665526f757465723a204558434553534956455f494e5055545f414d60448201527f4f554e540000000000000000000000000000000000000000000000000000000060648201526084016106c7565b610b5486866000818110610a7b57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a9091906147a1565b33610b267f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68a8a6000818110610ad657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aeb91906147a1565b8b8b6001818110610b0c57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b2191906147a1565b61307e565b85600081518110610b4757634e487b7160e01b600052603260045260246000fd5b60200260200101516136de565b610b9382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613855915050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316632e1a7d4d8360018551610bd19190614e1d565b81518110610bef57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610c1591815260200190565b600060405180830381600087803b158015610c2f57600080fd5b505af1158015610c43573d6000803e3d6000fd5b5050505061083d848360018551610c5a9190614e1d565b81518110610c7857634e487b7160e01b600052603260045260246000fd5b6020026020010151613411565b6060610cb27f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e684846134f9565b9392505050565b6000806000610ce97f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68f8f61307e565b9050600087610cf8578c610cfc565b6000195b6040517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101829052606481018b905260ff8916608482015260a4810188905260c481018790529091506001600160a01b0383169063d505accf9060e401600060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b50505050610dab8f8f8f8f8f8f8f6126b1565b809450819550505050509b509b9950505050505050505050565b60608142811015610e185760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031686866000818110610e6357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e7891906147a1565b6001600160a01b031614610ece5760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b610f2c7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e634888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a9592505050565b9150868260018451610f3e9190614e1d565b81518110610f5c57634e487b7160e01b600052603260045260246000fd5b60200260200101511015610fd85760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db08360008151811061102857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561105b57600080fd5b505af115801561106f573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb61111e7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6898960008181106110e857634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110fd91906147a1565b8a8a6001818110610b0c57634e487b7160e01b600052603260045260246000fd5b8460008151811061113f57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016111789291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561119257600080fd5b505af11580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca9190614a60565b6111e457634e487b7160e01b600052600160045260246000fd5b61122382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613855915050565b5095945050505050565b60008061127b7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68d7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3861307e565b905060008661128a578b61128e565b6000195b6040517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101829052606481018a905260ff8816608482015260a4810187905260c481018690529091506001600160a01b0383169063d505accf9060e401600060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b5050505061133c8d8d8d8d8d8d610678565b9d9c50505050505050505050505050565b606081428110156113a05760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6113fe7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a9592505050565b91508682600184516114109190614e1d565b8151811061142e57634e487b7160e01b600052603260045260246000fd5b602002602001015110156114aa5760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b6114ce86866000818110610a7b57634e487b7160e01b600052603260045260246000fd5b61083d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613855915050565b804281101561155e5760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316858560008181106115a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115be91906147a1565b6001600160a01b0316146116145760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b60003490507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb6117017f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6898960008181106110e857634e487b7160e01b600052603260045260246000fd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b15801561176157600080fd5b505af1158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190614a60565b6117b357634e487b7160e01b600052600160045260246000fd5b600086866117c2600182614e1d565b8181106117df57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117f491906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015291909116906370a082319060240160206040518083038186803b15801561185057600080fd5b505afa158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190614aca565b90506118c8878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613c5d915050565b878188886118d7600182614e1d565b8181106118f457634e487b7160e01b600052603260045260246000fd5b905060200201602081019061190991906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015291909116906370a08231906024015b60206040518083038186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199e9190614aca565b6119a89190614e1d565b1015611a1c5760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b5050505050505050565b6000808242811015611a7a5760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b611aa9897f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388a8a8a308a6126b1565b9093509150611ab98986856132c8565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611b3457600080fd5b505af1158015611b48573d6000803e3d6000fd5b50505050611b568583613411565b50965096945050505050565b60008060008342811015611bb85760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b611be68a7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388b348c8c613fb1565b90945092506000611c387f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68c7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3861307e565b9050611c468b3383886136de565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018990527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816935063a9059cbb92506044019050602060405180830381600087803b158015611d3e57600080fd5b505af1158015611d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d769190614a60565b611d9057634e487b7160e01b600052600160045260246000fd5b6040517f6a6278420000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611dec57600080fd5b505af1158015611e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e249190614aca565b925083341115611e4157611e4133611e3c8634614e1d565b613411565b505096509650969350505050565b8042811015611ea05760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b611f2585856000818110611ec457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ed991906147a1565b33611f1f7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6898960008181106110e857634e487b7160e01b600052603260045260246000fd5b8a6136de565b60008585611f34600182614e1d565b818110611f5157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611f6691906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015291909116906370a082319060240160206040518083038186803b158015611fc257600080fd5b505afa158015611fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffa9190614aca565b905061203a868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250613c5d915050565b86818787612049600182614e1d565b81811061206657634e487b7160e01b600052603260045260246000fd5b905060200201602081019061207b91906147a1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015291909116906370a082319060240161194e565b606081428110156121175760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b03168686600081811061216257634e487b7160e01b600052603260045260246000fd5b905060200201602081019061217791906147a1565b6001600160a01b0316146121cd5760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b61222b7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f992505050565b9150348260008151811061224f57634e487b7160e01b600052603260045260246000fd5b602002602001015111156122ca5760405162461bcd60e51b8152602060048201526024808201527f446546697665526f757465723a204558434553534956455f494e5055545f414d60448201527f4f554e540000000000000000000000000000000000000000000000000000000060648201526084016106c7565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db08360008151811061231a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b50505050507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663a9059cbb6123da7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6898960008181106110e857634e487b7160e01b600052603260045260246000fd5b846000815181106123fb57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016124349291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561244e57600080fd5b505af1158015612462573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124869190614a60565b6124a057634e487b7160e01b600052600160045260246000fd5b6124df82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613855915050565b8160008151811061250057634e487b7160e01b600052603260045260246000fd5b602002602001015134111561122357611223338360008151811061253457634e487b7160e01b600052603260045260246000fd5b602002602001015134611e3c9190614e1d565b60006106708484846142e0565b606081428110156125a75760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6126057f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134f992505050565b9150868260008151811061262957634e487b7160e01b600052603260045260246000fd5b602002602001015111156114aa5760405162461bcd60e51b8152602060048201526024808201527f446546697665526f757465723a204558434553534956455f494e5055545f414d60448201527f4f554e540000000000000000000000000000000000000000000000000000000060648201526084016106c7565b600061067084848461441a565b60008082428110156127055760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b60006127327f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68c8c61307e565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d49190614a60565b506040517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561283557600080fd5b505af1158015612849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286d9190614c38565b91509150600061287d8e8e614528565b509050806001600160a01b03168e6001600160a01b0316146128a05781836128a3565b82825b90975095508a87101561291e5760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f415f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b898610156129945760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f425f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b505050505097509795505050505050565b80428110156129f65760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168585612a2d600182614e1d565b818110612a4a57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a5f91906147a1565b6001600160a01b031614612ab55760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b612ad985856000818110611ec457634e487b7160e01b600052603260045260246000fd5b612b17858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613c5d915050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316906370a082319060240160206040518083038186803b158015612b9257600080fd5b505afa158015612ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bca9190614aca565b905086811015612c425760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015612cbd57600080fd5b505af1158015612cd1573d6000803e3d6000fd5b50505050611a1c8482613411565b6060610cb27f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68484613a95565b60008060008342811015612d625760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b612d708c8c8c8c8c8c613fb1565b90945092506000612da27f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68e8e61307e565b9050612db08d3383886136de565b612dbc8c3383876136de565b6040517f6a6278420000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015612e1857600080fd5b505af1158015612e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e509190614aca565b92505050985098509895505050505050565b60608142811015612eb55760405162461bcd60e51b815260206004820152601560248201527f446546697665526f757465723a2045585049524544000000000000000000000060448201526064016106c7565b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168686612eec600182614e1d565b818110612f0957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612f1e91906147a1565b6001600160a01b031614612f745760405162461bcd60e51b815260206004820152601a60248201527f446546697665526f757465723a20494e56414c49445f5041544800000000000060448201526064016106c7565b612fd27f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a9592505050565b9150868260018451612fe49190614e1d565b8151811061300257634e487b7160e01b600052603260045260246000fd5b60200260200101511015610a575760405162461bcd60e51b815260206004820152602860248201527f446546697665526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b600080600061308d8585614528565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085811b821660208085019190915285821b83166034850152845180850360280181526048850190955284519401939093207fff000000000000000000000000000000000000000000000000000000000000006068840152928b901b166069820152607d8101919091527fa2bd630981c20599e374cdb7af13220e18e2422c7dde970eff313f36d739c801609d820152919350915060bd01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008084116132025760405162461bcd60e51b815260206004820152602860248201527f4465466976654c6962726172793a20494e53554646494349454e545f494e505560448201527f545f414d4f554e5400000000000000000000000000000000000000000000000060648201526084016106c7565b6000831180156132125750600082115b6132845760405162461bcd60e51b815260206004820152602560248201527f4465466976654c6962726172793a20494e53554646494349454e545f4c49515560448201527f494449545900000000000000000000000000000000000000000000000000000060648201526084016106c7565b6000613292856126fe614dfe565b9050806132a185612710614dfe565b6132ab9190614dc6565b6132b58483614dfe565b6132bf9190614dde565b95945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916133529190614cf7565b6000604051808303816000865af19150503d806000811461338f576040519150601f19603f3d011682016040523d82523d6000602084013e613394565b606091505b50915091508180156133be5750805115806133be5750808060200190518101906133be9190614a60565b61340a5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016106c7565b5050505050565b604080516000808252602082019092526001600160a01b03841690839060405161343b9190614cf7565b60006040518083038185875af1925050503d8060008114613478576040519150601f19603f3d011682016040523d82523d6000602084013e61347d565b606091505b50509050806134f45760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657248656c7065723a20535f5452414e534645525f4641494c4560448201527f440000000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b505050565b8051606090600281101561354f5760405162461bcd60e51b815260206004820152601b60248201527f4465466976654c6962726172793a20494e56414c49445f50415448000000000060448201526064016106c7565b8067ffffffffffffffff81111561357657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561359f578160200160208202803683370190505b50915083826135af600184614e1d565b815181106135cd57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260006135e5600183614e1d565b90505b80156136d5576000806136548887613601600187614e1d565b8151811061361f57634e487b7160e01b600052603260045260246000fd5b602002602001015188868151811061364757634e487b7160e01b600052603260045260246000fd5b6020026020010151614638565b9150915061368a85848151811061367b57634e487b7160e01b600052603260045260246000fd5b602002602001015183836142e0565b85613696600186614e1d565b815181106136b457634e487b7160e01b600052603260045260246000fd5b602002602001018181525050505080806136cd90614e60565b9150506135e8565b50509392505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916137709190614cf7565b6000604051808303816000865af19150503d80600081146137ad576040519150601f19603f3d011682016040523d82523d6000602084013e6137b2565b606091505b50915091508180156137dc5750805115806137dc5750808060200190518101906137dc9190614a60565b61384d5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016106c7565b505050505050565b60005b600183516138669190614e1d565b811015613a8f5760008084838151811061389057634e487b7160e01b600052603260045260246000fd5b6020026020010151858460016138a69190614dc6565b815181106138c457634e487b7160e01b600052603260045260246000fd5b60200260200101519150915060006138dc8383614528565b5090506000876138ed866001614dc6565b8151811061390b57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139395782600061393d565b6000835b91509150600060028a516139519190614e1d565b881061395d57886139b9565b6139b97f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6878c61398e8c6002614dc6565b815181106139ac57634e487b7160e01b600052603260045260246000fd5b602002602001015161307e565b90506139e67f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6888861307e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613a23576020820181803683370190505b506040518563ffffffff1660e01b8152600401613a439493929190614d57565b600060405180830381600087803b158015613a5d57600080fd5b505af1158015613a71573d6000803e3d6000fd5b50505050505050505050508080613a8790614e77565b915050613858565b50505050565b80516060906002811015613aeb5760405162461bcd60e51b815260206004820152601b60248201527f4465466976654c6962726172793a20494e56414c49445f50415448000000000060448201526064016106c7565b8067ffffffffffffffff811115613b1257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015613b3b578160200160208202803683370190505b5091508382600081518110613b6057634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060005b613b7a600183614e1d565b8110156136d557600080613bdc88878581518110613ba857634e487b7160e01b600052603260045260246000fd5b602002602001015188866001613bbe9190614dc6565b8151811061364757634e487b7160e01b600052603260045260246000fd5b91509150613c12858481518110613c0357634e487b7160e01b600052603260045260246000fd5b6020026020010151838361318b565b85613c1e856001614dc6565b81518110613c3c57634e487b7160e01b600052603260045260246000fd5b60200260200101818152505050508080613c5590614e77565b915050613b6f565b60005b60018351613c6e9190614e1d565b8110156134f457600080848381518110613c9857634e487b7160e01b600052603260045260246000fd5b602002602001015185846001613cae9190614dc6565b81518110613ccc57634e487b7160e01b600052603260045260246000fd5b6020026020010151915091506000613ce48383614528565b5090506000613d147f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6858561307e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613d5557600080fd5b505afa158015613d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8d9190614a7c565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600080876001600160a01b03168a6001600160a01b031614613dd5578284613dd8565b83835b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015292945090925083918c16906370a082319060240160206040518083038186803b158015613e3a57600080fd5b505afa158015613e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e729190614aca565b613e7c9190614e1d565b9550613e8986838361318b565b945050505050600080856001600160a01b0316886001600160a01b031614613eb357826000613eb7565b6000835b91509150600060028c51613ecb9190614e1d565b8a10613ed7578a613f08565b613f087f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6898e61398e8e6002614dc6565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091529091506001600160a01b0387169063022c0d9f90613f639086908690869060248101614d57565b600060405180830381600087803b158015613f7d57600080fd5b505af1158015613f91573d6000803e3d6000fd5b505050505050505050505050508080613fa990614e77565b915050613c60565b6040517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301528681166024830152600091829182917f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e69091169063e6a439059060440160206040518083038186803b15801561403c57600080fd5b505afa158015614050573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407491906147bd565b6001600160a01b03161415614141576040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301527f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6169063c9c6539690604401602060405180830381600087803b15801561410757600080fd5b505af115801561411b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413f91906147bd565b505b60008061416f7f00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e68b8b614638565b91509150816000148015614181575080155b15614191578793508692506142d3565b600061419e89848461441a565b9050878111614228578581101561421d5760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f425f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b8894509250826142d1565b600061423589848661441a565b90508981111561425557634e487b7160e01b600052600160045260246000fd5b878110156142cb5760405162461bcd60e51b815260206004820152602360248201527f446546697665526f757465723a20494e53554646494349454e545f415f414d4f60448201527f554e54000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b94508793505b505b5050965096945050505050565b60008084116143575760405162461bcd60e51b815260206004820152602960248201527f4465466976654c6962726172793a20494e53554646494349454e545f4f55545060448201527f55545f414d4f554e54000000000000000000000000000000000000000000000060648201526084016106c7565b6000831180156143675750600082115b6143d95760405162461bcd60e51b815260206004820152602560248201527f4465466976654c6962726172793a20494e53554646494349454e545f4c49515560448201527f494449545900000000000000000000000000000000000000000000000000000060648201526084016106c7565b6143e38483614e1d565b6143ef906126fe614dfe565b6143f98585614dfe565b61440590612710614dfe565b61440f9190614dde565b610670906001614dc6565b60008084116144915760405162461bcd60e51b815260206004820152602260248201527f4465466976654c6962726172793a20494e53554646494349454e545f414d4f5560448201527f4e5400000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b6000831180156144a15750600082115b6145135760405162461bcd60e51b815260206004820152602560248201527f4465466976654c6962726172793a20494e53554646494349454e545f4c49515560448201527f494449545900000000000000000000000000000000000000000000000000000060648201526084016106c7565b8261451e8386614dfe565b6106709190614dde565b600080826001600160a01b0316846001600160a01b031614156145b35760405162461bcd60e51b815260206004820152602260248201527f4465466976654c6962726172793a204944454e544943414c5f4144445245535360448201527f455300000000000000000000000000000000000000000000000000000000000060648201526084016106c7565b826001600160a01b0316846001600160a01b0316106145d35782846145d6565b83835b90925090506001600160a01b0382166146315760405162461bcd60e51b815260206004820152601b60248201527f4465466976654c6962726172793a205a45524f5f41444452455353000000000060448201526064016106c7565b9250929050565b60008060006146478585614528565b50905060008061465888888861307e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561469057600080fd5b505afa1580156146a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146c89190614a7c565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b03161461470d578082614710565b81815b90999098509650505050505050565b803561472a81614ebe565b919050565b60008083601f840112614740578081fd5b50813567ffffffffffffffff811115614757578182fd5b6020830191508360208260051b850101111561463157600080fd5b80516dffffffffffffffffffffffffffff8116811461472a57600080fd5b803560ff8116811461472a57600080fd5b6000602082840312156147b2578081fd5b8135610cb281614ebe565b6000602082840312156147ce578081fd5b8151610cb281614ebe565b600080600080600080600060e0888a0312156147f3578283fd5b87356147fe81614ebe565b9650602088013561480e81614ebe565b955060408801359450606088013593506080880135925060a088013561483381614ebe565b8092505060c0880135905092959891949750929550565b60008060008060008060008060008060006101608c8e03121561486b578384fd5b8b3561487681614ebe565b9a5060208c013561488681614ebe565b995060408c0135985060608c0135975060808c0135965060a08c01356148ab81614ebe565b955060c08c0135945060e08c01356148c281614ed6565b93506148d16101008d01614790565b92506101208c013591506101408c013590509295989b509295989b9093969950565b600080600080600080600080610100898b03121561490f578384fd5b883561491a81614ebe565b9750602089013561492a81614ebe565b965060408901359550606089013594506080890135935060a0890135925060c089013561495681614ebe565b8092505060e089013590509295985092959890939650565b60008060008060008060c08789031215614986578182fd5b863561499181614ebe565b955060208701359450604087013593506060870135925060808701356149b681614ebe565b8092505060a087013590509295509295509295565b6000806000806000806000806000806101408b8d0312156149ea578384fd5b8a356149f581614ebe565b995060208b0135985060408b0135975060608b0135965060808b0135614a1a81614ebe565b955060a08b0135945060c08b0135614a3181614ed6565b9350614a3f60e08c01614790565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600060208284031215614a71578081fd5b8151610cb281614ed6565b600080600060608486031215614a90578081fd5b614a9984614772565b9250614aa760208501614772565b9150604084015163ffffffff81168114614abf578182fd5b809150509250925092565b600060208284031215614adb578081fd5b5051919050565b600080600080600060808688031215614af9578283fd5b85359450602086013567ffffffffffffffff811115614b16578384fd5b614b228882890161472f565b9095509350506040860135614b3681614ebe565b949793965091946060013592915050565b60008060408385031215614b59578182fd5b8235915060208084013567ffffffffffffffff80821115614b78578384fd5b818601915086601f830112614b8b578384fd5b813581811115614b9d57614b9d614ea8565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715614be057614be0614ea8565b604052828152858101935084860182860187018b1015614bfe578788fd5b8795505b83861015614c2757614c138161471f565b855260019590950194938601938601614c02565b508096505050505050509250929050565b60008060408385031215614c4a578182fd5b505080516020909101519092909150565b60008060008060008060a08789031215614c73578384fd5b8635955060208701359450604087013567ffffffffffffffff811115614c97578485fd5b614ca389828a0161472f565b9095509350506060870135614cb781614ebe565b80925050608087013590509295509295509295565b600080600060608486031215614ce0578081fd5b505081359360208301359350604090920135919050565b60008251614d09818460208701614e34565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015614d4b57835183529284019291840191600101614d2f565b50909695505050505050565b8481528360208201526001600160a01b03831660408201526080606082015260008251806080840152614d918160a0850160208701614e34565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160a00195945050505050565b60008219821115614dd957614dd9614e92565b500190565b600082614df957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614e1857614e18614e92565b500290565b600082821015614e2f57614e2f614e92565b500390565b60005b83811015614e4f578181015183820152602001614e37565b83811115613a8f5750506000910152565b600081614e6f57614e6f614e92565b506000190190565b6000600019821415614e8b57614e8b614e92565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614ed357600080fd5b50565b8015158114614ed357600080fdfea164736f6c6343000804000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
-----Decoded View---------------
Arg [0] : _factory (address): 0x47524ca6578E172878aBf6fD6f3E1Cd106c551e6
Arg [1] : _wS (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000047524ca6578e172878abf6fd6f3e1cd106c551e6
Arg [1] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.