Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- Token
- Optimization enabled
- true
- Compiler version
- v0.8.17+commit.8df45f5f
- Optimization runs
- 100
- EVM Version
- default
- Verified at
- 2025-02-15T02:49:08.103374Z
Constructor Arguments
0x00000000000000000000000000000000000000005a790ea17ace06a96000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d9000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000d050000000000000000000000000000000000000000000000000000000000000d0500000000000000000000000000000000000000000000000000000000000006830000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000002d3c8750bd670354b00000000000000000000000000000052957c71f8b873f62ca939aceb75e86bfbb77fee000000000000000000000000000000000000000000000000000000000000000944756d624d6f6e65790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444554d420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000cc78a0acdf847a2c1714d2a925bb4477df5d48a60000000000000000000000002b591e99afe9f32eaa6214f7b7629768c40eeb390000000000000000000000002fa878ab3f87cc1c9737fc071108f904c0b0c95d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000095b303987a60c71504d99aa1b13b4da07b0790ab
contracts/Token.sol
/* SPDX-License-Identifier: UNLICENSED */
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "hardhat/console.sol";
interface IPulseXV2Router is IUniswapV2Router02 {
function WPLS() external view returns (address);
}
interface IRelayer {
function relay(address token) external;
}
contract Token is IERC20, Ownable {
struct FeesDistribution {
uint16 buyAndBurn;
uint16 liquidity;
uint16 burn;
uint16 reflection;
}
address public constant DEAD_ADDRESS =
address(0x000000000000000000000000000000000000dEaD);
uint256 public constant PRECISION = 10000;
uint256 private constant MAX = ~uint256(0);
uint256 public constant BUY_AND_BURN_COOLDOWN = 11 hours;
IRelayer public RELAYER;
uint256 public lastBuyAndBurnTime;
uint256 public override totalSupply;
string public name;
uint8 public decimals;
string public symbol;
uint16 public fees;
uint16 private _previousFees;
FeesDistribution public feesDistribution;
uint256 public swapThreshold;
bool public executeSwapsActive = false;
uint256 private _rTotal;
uint256 private _tFeeTotal;
mapping(address => uint256) private _rOwned;
mapping(address => uint256) private _tOwned;
mapping(address => bool) private _isExcluded;
address[] private _excluded;
mapping(address => mapping(address => uint256)) public allowances;
mapping(address => bool) public isLiquidityPair;
mapping(address => bool) public isExcludedFromFee;
address[] public pairTokens;
IPulseXV2Router public ROUTER;
IUniswapV2Factory public FACTORY;
bool public inSwap;
modifier inSwapLock() {
inSwap = true;
_;
inSwap = false;
}
constructor(
uint256 _initialAmount,
string memory _tokenName,
uint8 _decimalUnits,
string memory _tokenSymbol,
address _router,
address[] memory _erc20Tokens,
uint16 _fees,
FeesDistribution memory _feesDistribution,
uint256 _swapThreshold,
address _relayerAddress
) {
ROUTER = IPulseXV2Router(_router);
FACTORY = IUniswapV2Factory(ROUTER.factory());
_approve(address(this), _router, type(uint256).max);
IERC20(ROUTER.WPLS()).approve(_router, type(uint256).max);
name = _tokenName;
decimals = _decimalUnits;
symbol = _tokenSymbol;
totalSupply = _initialAmount;
_rTotal = (MAX - (MAX % totalSupply));
_rOwned[_msgSender()] = _rTotal;
isExcludedFromFee[address(this)] = true;
isExcludedFromFee[_msgSender()] = true;
isExcludedFromFee[_router] = true;
address nativePair = FACTORY.createPair(address(this), ROUTER.WPLS());
isLiquidityPair[nativePair] = true;
pairTokens.push(ROUTER.WPLS());
for (uint i = 0; i < _erc20Tokens.length; i++) {
require(_erc20Tokens[i] != address(0), "Invalid token address");
IERC20(_erc20Tokens[i]).approve(_router, type(uint256).max);
address pair = FACTORY.createPair(address(this), _erc20Tokens[i]);
isLiquidityPair[pair] = true;
pairTokens.push(_erc20Tokens[i]);
}
emit Transfer(address(0), _msgSender(), _initialAmount);
emit OwnershipTransferred(address(0), _msgSender());
fees = _fees;
feesDistribution = _feesDistribution;
swapThreshold = _swapThreshold;
RELAYER = IRelayer(_relayerAddress);
}
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal - rFee;
_tFeeTotal = _tFeeTotal + tFee;
}
function _getRate() private view returns (uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply / tSupply;
}
function _getCurrentSupply() private view returns (uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = totalSupply;
for (uint256 i = 0; i < _excluded.length; i++) {
if (
_rOwned[_excluded[i]] > rSupply ||
_tOwned[_excluded[i]] > tSupply
) return (_rTotal, totalSupply);
rSupply = rSupply - _rOwned[_excluded[i]];
tSupply = tSupply - _tOwned[_excluded[i]];
}
if (rSupply < _rTotal / totalSupply) return (_rTotal, totalSupply);
return (rSupply, tSupply);
}
function _getValues(
uint256 tAmount
)
private
view
returns (
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tBurn,
uint256 tBuyAndBurn
)
{
uint256 toBeTaxed = (tAmount * fees) / PRECISION;
tFee = (toBeTaxed * feesDistribution.reflection) / PRECISION;
tLiquidity = (toBeTaxed * feesDistribution.liquidity) / PRECISION;
tBurn = (toBeTaxed * feesDistribution.burn) / PRECISION;
tBuyAndBurn = (toBeTaxed * feesDistribution.buyAndBurn) / PRECISION;
tTransferAmount = tAmount - tFee - tLiquidity - tBurn - tBuyAndBurn;
uint256 currentRate = _getRate();
rAmount = tAmount * currentRate;
rFee = tFee * currentRate;
uint256 rLiquidity = tLiquidity * currentRate;
uint256 rBurn = tBurn * currentRate;
uint256 rBuyAndBurn = tBuyAndBurn * currentRate;
rTransferAmount = rAmount - rFee - rLiquidity - rBurn - rBuyAndBurn;
}
function excludeFromReward(address account) external onlyOwner {
require(!_isExcluded[account], "Account is already excluded");
if (_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeInReward(address account) external onlyOwner {
require(_isExcluded[account], "Account is not excluded");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
}
function tokenFromReflection(
uint256 rAmount
) public view returns (uint256) {
require(
rAmount <= _rTotal,
"Amount must be less than total reflections"
);
uint256 currentRate = _getRate();
return rAmount / currentRate;
}
function _transferStandard(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tBurn,
uint256 tBuyAndBurn
) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender] - rAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
if (tLiquidity > 0) {
_takeLiquidity(tLiquidity);
}
if (tBurn > 0) {
_takeBurn(tBurn);
}
if (tBuyAndBurn > 0) {
_takeBuyAndBurn(tBuyAndBurn);
}
if (tFee > 0) {
_reflectFee(rFee, tFee);
}
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferToExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tBurn,
uint256 tBuyAndBurn
) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender] - rAmount;
_tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
if (tLiquidity > 0) {
_takeLiquidity(tLiquidity);
}
if (tBurn > 0) {
_takeBurn(tBurn);
}
if (tBuyAndBurn > 0) {
_takeBuyAndBurn(tBuyAndBurn);
}
if (tFee > 0) {
_reflectFee(rFee, tFee);
}
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferFromExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tBurn,
uint256 tBuyAndBurn
) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender] - tAmount;
_rOwned[sender] = _rOwned[sender] - rAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
if (tLiquidity > 0) {
_takeLiquidity(tLiquidity);
}
if (tBurn > 0) {
_takeBurn(tBurn);
}
if (tBuyAndBurn > 0) {
_takeBuyAndBurn(tBuyAndBurn);
}
if (tFee > 0) {
_reflectFee(rFee, tFee);
}
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferBothExcluded(
address sender,
address recipient,
uint256 tAmount
) private {
(
uint256 rAmount,
uint256 rTransferAmount,
uint256 rFee,
uint256 tTransferAmount,
uint256 tFee,
uint256 tLiquidity,
uint256 tBurn,
uint256 tBuyAndBurn
) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender] - tAmount;
_rOwned[sender] = _rOwned[sender] - rAmount;
_tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
if (tLiquidity > 0) {
_takeLiquidity(tLiquidity);
}
if (tBurn > 0) {
_takeBurn(tBurn);
}
if (tBuyAndBurn > 0) {
_takeBuyAndBurn(tBuyAndBurn);
}
if (tFee > 0) {
_reflectFee(rFee, tFee);
}
emit Transfer(sender, recipient, tTransferAmount);
}
function _takeBurn(uint256 tBurn) private {
uint256 currentRate = _getRate();
uint256 rBurn = tBurn * currentRate;
_rOwned[DEAD_ADDRESS] = _rOwned[DEAD_ADDRESS] + rBurn;
if (_isExcluded[DEAD_ADDRESS]) {
_tOwned[DEAD_ADDRESS] = _tOwned[DEAD_ADDRESS] + tBurn;
}
emit Transfer(_msgSender(), DEAD_ADDRESS, tBurn);
}
function _takeLiquidity(uint256 tLiquidity) private {
uint256 currentRate = _getRate();
uint256 rLiquidity = tLiquidity * currentRate;
_rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
if (_isExcluded[address(this)]) {
_tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
}
emit Transfer(_msgSender(), address(this), tLiquidity);
}
function _takeBuyAndBurn(uint256 tBuyAndBurn) private {
uint256 currentRate = _getRate();
uint256 rBuyAndBurn = tBuyAndBurn * currentRate;
_rOwned[address(this)] = _rOwned[address(this)] + rBuyAndBurn;
if (_isExcluded[address(this)]) {
_tOwned[address(this)] = _tOwned[address(this)] + tBuyAndBurn;
}
emit Transfer(_msgSender(), address(this), tBuyAndBurn);
}
function _transfer(address _from, address _to, uint256 _value) internal {
require(_from != address(0), "Transfer from zero address");
require(_to != address(0), "Transfer to zero address");
require(_value > 0, "Transfer amount must be greater than zero");
if (
balanceOf(address(this)) >= swapThreshold &&
executeSwapsActive &&
!isLiquidityPair[_from] &&
!inSwap
) {
console.log("Processing fees");
_processFees();
}
bool takeFee = !isExcludedFromFee[_from] && !isExcludedFromFee[_to];
if (!takeFee) {
_previousFees = fees;
fees = 0;
console.log("Fees set to 0");
}
if (_isExcluded[_from] && !_isExcluded[_to]) {
console.log("Transferring from excluded to not excluded");
_transferFromExcluded(_from, _to, _value);
} else if (!_isExcluded[_from] && _isExcluded[_to]) {
console.log("Transferring from not excluded to excluded");
_transferToExcluded(_from, _to, _value);
} else if (_isExcluded[_from] && _isExcluded[_to]) {
console.log("Transferring from both excluded");
_transferBothExcluded(_from, _to, _value);
} else {
console.log("Transferring standard");
_transferStandard(_from, _to, _value);
}
if (!takeFee) {
console.log("Fees set to previous");
fees = _previousFees;
}
}
function _processFees() internal inSwapLock {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance == 0) return;
uint256 buyAndBurnAmount = (contractTokenBalance *
feesDistribution.buyAndBurn) /
(feesDistribution.buyAndBurn + feesDistribution.liquidity);
console.log("buyAndBurnAmount", buyAndBurnAmount);
uint256 liquidityAmount = contractTokenBalance - buyAndBurnAmount;
console.log("liquidityAmount", liquidityAmount);
if (buyAndBurnAmount > 0) {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = ROUTER.WPLS();
console.log("swapping buyAndBurnAmount", buyAndBurnAmount);
ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens(
buyAndBurnAmount,
0,
path,
address(this),
block.timestamp + 3600
);
console.log("swapped buyAndBurnAmount", buyAndBurnAmount);
}
if (block.timestamp >= lastBuyAndBurnTime + BUY_AND_BURN_COOLDOWN) {
console.log("buying and burning");
uint256 ethBalance = address(this).balance;
if (ethBalance > 0) {
console.log("ethBalance", ethBalance);
uint256 buyAmount = ethBalance / 10;
if (buyAmount > 0) {
console.log("buying", buyAmount);
address[] memory path = new address[](2);
path[0] = ROUTER.WPLS();
path[1] = address(this);
console.log("swapping buyAmount", buyAmount);
ROUTER.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: buyAmount
}(0, path, DEAD_ADDRESS, block.timestamp + 3600);
lastBuyAndBurnTime = block.timestamp;
console.log("bought and burned", buyAmount);
}
}
}
if (liquidityAmount > 0 && pairTokens.length > 0) {
uint256 amountPerPair = liquidityAmount / pairTokens.length;
console.log("amountPerPair", amountPerPair);
for (uint i = 0; i < pairTokens.length; i++) {
address pairToken = pairTokens[i];
console.log("pairToken", pairToken);
uint256 halfAmount = amountPerPair / 2;
console.log("halfAmount", halfAmount);
if (pairToken == ROUTER.WPLS()) {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = ROUTER.WPLS();
console.log("swapping halfAmount ETH", halfAmount);
ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens(
halfAmount,
0,
path,
address(this),
block.timestamp + 3600
);
console.log("swapped halfAmount ETH", halfAmount);
console.log("adding liquidity ETH");
ROUTER.addLiquidityETH{value: address(this).balance}(
address(this),
halfAmount,
0,
0,
DEAD_ADDRESS,
block.timestamp + 3600
);
console.log("added liquidity ETH");
} else {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = pairToken;
console.log("swapping halfAmount", halfAmount);
ROUTER
.swapExactTokensForTokensSupportingFeeOnTransferTokens(
halfAmount,
0,
path,
address(RELAYER),
block.timestamp + 3600
);
console.log("swapped halfAmount", halfAmount);
console.log(
"transfering from relayer to this",
address(RELAYER),
address(this),
halfAmount
);
RELAYER.relay(pairToken);
console.log("relayed");
uint256 pairTokenBalance = IERC20(pairToken).balanceOf(
address(this)
);
console.log("pairTokenBalance", pairTokenBalance);
console.log(
"adding liquidity",
halfAmount,
pairTokenBalance
);
ROUTER.addLiquidity(
address(this),
pairToken,
halfAmount,
pairTokenBalance,
0,
0,
DEAD_ADDRESS,
block.timestamp + 3600
);
console.log(
"added liquidity",
halfAmount,
pairTokenBalance
);
}
}
}
}
function transfer(
address _to,
uint256 _value
) public override returns (bool success) {
_transfer(_msgSender(), _to, _value);
return true;
}
function transferFrom(
address _from,
address _to,
uint256 _value
) public override returns (bool success) {
address spender = _msgSender();
if (allowances[_from][spender] != type(uint256).max) {
allowances[_from][spender] -= _value;
}
_transfer(_from, _to, _value);
return true;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function approve(
address _spender,
uint256 _value
) public override returns (bool success) {
_approve(_msgSender(), _spender, _value);
return true;
}
function _approve(
address _sender,
address _spender,
uint256 _value
) internal returns (bool success) {
allowances[_sender][_spender] = _value;
emit Approval(_sender, _spender, _value);
return true;
}
function allowance(
address _owner,
address _spender
) public view override returns (uint256 remaining) {
return allowances[_owner][_spender];
}
function setIsExcludedFromFee(
address account,
bool excluded
) external onlyOwner {
isExcludedFromFee[account] = excluded;
}
function setExecuteSwapsActive(
bool _executeSwapsActive
) external onlyOwner {
executeSwapsActive = _executeSwapsActive;
}
function addPairToken(address pairToken) external onlyOwner {
require(pairToken != address(0), "Invalid token address");
IERC20(pairToken).approve(address(ROUTER), type(uint256).max);
address pair = FACTORY.createPair(address(this), pairToken);
isLiquidityPair[pair] = true;
pairTokens.push(pairToken);
}
function addLiquidity(
uint256 tokenAmount,
uint256[] memory tokenAmounts,
uint256[] memory pairTokenAmounts
) external payable onlyOwner {
_addLiquidityForTokens(tokenAmounts, pairTokenAmounts);
_addLiquidityNative(tokenAmount);
}
function _addLiquidityForTokens(
uint256[] memory tokenAmounts,
uint256[] memory pairTokenAmounts
) internal {
require(
pairTokens.length == tokenAmounts.length &&
tokenAmounts.length == pairTokenAmounts.length,
"Arrays length mismatch"
);
console.log("pairTokens.length", pairTokens.length);
console.log("tokenAmounts.length", tokenAmounts.length);
console.log("pairTokenAmounts.length", pairTokenAmounts.length);
for (uint i = 1; i < pairTokens.length; i++) {
console.log("pairTokens[i]", pairTokens[i]);
require(pairTokens[i] != address(0), "Invalid token address");
address pair = FACTORY.getPair(address(this), pairTokens[i]);
console.log("pair", pair);
require(pair != address(0), "Pair does not exist");
console.log("isLiquidityPair[pair]", isLiquidityPair[pair]);
require(isLiquidityPair[pair], "Not a registered liquidity pair");
require(
tokenAmounts[i] > 0 && pairTokenAmounts[i] > 0,
"Amounts must be greater than 0"
);
console.log("tokenAmounts[i]", tokenAmounts[i]);
console.log("pairTokenAmounts[i]", pairTokenAmounts[i]);
console.log(
"Transferring THIS_TOKEN from msg.sender to this",
_msgSender(),
address(this),
tokenAmounts[i]
);
_transfer(_msgSender(), address(this), tokenAmounts[i]);
console.log(
"Transferring PAIR_TOKEN from msg.sender to this",
_msgSender(),
address(this),
pairTokenAmounts[i]
);
IERC20(pairTokens[i]).transferFrom(
_msgSender(),
address(this),
pairTokenAmounts[i]
);
console.log("Adding liquidity for pair", pairTokens[i]);
console.log(
"this token approval",
allowances[address(this)][address(ROUTER)]
);
console.log("this token balance", balanceOf(address(this)));
console.log("this token amount", tokenAmounts[i]);
console.log(
"pair token approval",
IERC20(pairTokens[i]).allowance(address(this), address(ROUTER))
);
console.log(
"pair token balance",
IERC20(pairTokens[i]).balanceOf(address(this))
);
console.log("pair token amount", pairTokenAmounts[i]);
ROUTER.addLiquidity(
address(this),
pairTokens[i],
tokenAmounts[i],
pairTokenAmounts[i],
(tokenAmounts[i] * 95) / 100,
(pairTokenAmounts[i] * 95) / 100,
DEAD_ADDRESS,
block.timestamp + 3600
);
console.log("Added liquidity for pair", pairTokens[i]);
}
}
function _addLiquidityNative(uint256 tokenAmount) internal {
require(tokenAmount > 0, "Token amount must be greater than 0");
require(msg.value > 0, "Native token amount must be greater than 0");
address pair = FACTORY.getPair(address(this), ROUTER.WPLS());
require(pair != address(0), "Native pair does not exist");
require(
isLiquidityPair[pair],
"Not a registered native liquidity pair"
);
_transfer(_msgSender(), address(this), tokenAmount);
ROUTER.addLiquidityETH{value: msg.value}(
address(this),
tokenAmount,
(tokenAmount * 95) / 100,
(msg.value * 95) / 100,
DEAD_ADDRESS,
block.timestamp + 3600
);
}
receive() external payable {}
}
@openzeppelin/contracts/access/Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
@openzeppelin/contracts/interfaces/IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)
pragma solidity ^0.8.0;
import "../token/ERC20/IERC20.sol";
@openzeppelin/contracts/token/ERC20/IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
@openzeppelin/contracts/utils/Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol
pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol
pragma solidity >=0.6.2;
import './IUniswapV2Router01.sol';
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
hardhat/console.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
library console {
address constant CONSOLE_ADDRESS =
0x000000000000000000636F6e736F6c652e6c6f67;
function _sendLogPayloadImplementation(bytes memory payload) internal view {
address consoleAddress = CONSOLE_ADDRESS;
/// @solidity memory-safe-assembly
assembly {
pop(
staticcall(
gas(),
consoleAddress,
add(payload, 32),
mload(payload),
0,
0
)
)
}
}
function _castToPure(
function(bytes memory) internal view fnIn
) internal pure returns (function(bytes memory) pure fnOut) {
assembly {
fnOut := fnIn
}
}
function _sendLogPayload(bytes memory payload) internal pure {
_castToPure(_sendLogPayloadImplementation)(payload);
}
function log() internal pure {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
}
function logUint(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function logString(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function logBool(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function logAddress(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function logBytes(bytes memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
}
function logBytes1(bytes1 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
}
function logBytes2(bytes2 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
}
function logBytes3(bytes3 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
}
function logBytes4(bytes4 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
}
function logBytes5(bytes5 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
}
function logBytes6(bytes6 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
}
function logBytes7(bytes7 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
}
function logBytes8(bytes8 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
}
function logBytes9(bytes9 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
}
function logBytes10(bytes10 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
}
function logBytes11(bytes11 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
}
function logBytes12(bytes12 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
}
function logBytes13(bytes13 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
}
function logBytes14(bytes14 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
}
function logBytes15(bytes15 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
}
function logBytes16(bytes16 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
}
function logBytes17(bytes17 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
}
function logBytes18(bytes18 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
}
function logBytes19(bytes19 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
}
function logBytes20(bytes20 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
}
function logBytes21(bytes21 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
}
function logBytes22(bytes22 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
}
function logBytes23(bytes23 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
}
function logBytes24(bytes24 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
}
function logBytes25(bytes25 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
}
function logBytes26(bytes26 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
}
function logBytes27(bytes27 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
}
function logBytes28(bytes28 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
}
function logBytes29(bytes29 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
}
function logBytes30(bytes30 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
}
function logBytes31(bytes31 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
}
function logBytes32(bytes32 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
}
function log(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function log(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function log(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function log(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function log(uint256 p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
}
function log(uint256 p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
}
function log(uint256 p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
}
function log(uint256 p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
}
function log(string memory p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1));
}
function log(string memory p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
}
function log(string memory p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
}
function log(string memory p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
}
function log(bool p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1));
}
function log(bool p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
}
function log(bool p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
}
function log(bool p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
}
function log(address p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1));
}
function log(address p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
}
function log(address p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
}
function log(address p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
}
function log(uint256 p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
}
function log(uint256 p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
}
function log(uint256 p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
}
function log(uint256 p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
}
function log(uint256 p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
}
function log(uint256 p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
}
function log(uint256 p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
}
function log(uint256 p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
}
function log(uint256 p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
}
function log(string memory p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2));
}
function log(string memory p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
}
function log(string memory p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
}
function log(string memory p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
}
function log(string memory p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2));
}
function log(string memory p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
}
function log(string memory p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
}
function log(string memory p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
}
function log(string memory p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2));
}
function log(string memory p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
}
function log(string memory p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
}
function log(string memory p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
}
function log(bool p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
}
function log(bool p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
}
function log(bool p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
}
function log(bool p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
}
function log(bool p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2));
}
function log(bool p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
}
function log(bool p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
}
function log(bool p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
}
function log(bool p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2));
}
function log(bool p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
}
function log(bool p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
}
function log(bool p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
}
function log(bool p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2));
}
function log(bool p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
}
function log(bool p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
}
function log(bool p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
}
function log(address p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
}
function log(address p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
}
function log(address p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
}
function log(address p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
}
function log(address p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2));
}
function log(address p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
}
function log(address p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
}
function log(address p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
}
function log(address p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2));
}
function log(address p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
}
function log(address p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
}
function log(address p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
}
function log(address p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2));
}
function log(address p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
}
function log(address p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
}
function log(address p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
}
}
Compiler Settings
{"viaIR":true,"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","storageLayout"],"":["ast"]}},"optimizer":{"runs":100,"enabled":true},"libraries":{}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"uint256","name":"_initialAmount","internalType":"uint256"},{"type":"string","name":"_tokenName","internalType":"string"},{"type":"uint8","name":"_decimalUnits","internalType":"uint8"},{"type":"string","name":"_tokenSymbol","internalType":"string"},{"type":"address","name":"_router","internalType":"address"},{"type":"address[]","name":"_erc20Tokens","internalType":"address[]"},{"type":"uint16","name":"_fees","internalType":"uint16"},{"type":"tuple","name":"_feesDistribution","internalType":"struct Token.FeesDistribution","components":[{"type":"uint16","name":"buyAndBurn","internalType":"uint16"},{"type":"uint16","name":"liquidity","internalType":"uint16"},{"type":"uint16","name":"burn","internalType":"uint16"},{"type":"uint16","name":"reflection","internalType":"uint16"}]},{"type":"uint256","name":"_swapThreshold","internalType":"uint256"},{"type":"address","name":"_relayerAddress","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BUY_AND_BURN_COOLDOWN","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DEAD_ADDRESS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Factory"}],"name":"FACTORY","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"PRECISION","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IRelayer"}],"name":"RELAYER","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IPulseXV2Router"}],"name":"ROUTER","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"addLiquidity","inputs":[{"type":"uint256","name":"tokenAmount","internalType":"uint256"},{"type":"uint256[]","name":"tokenAmounts","internalType":"uint256[]"},{"type":"uint256[]","name":"pairTokenAmounts","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addPairToken","inputs":[{"type":"address","name":"pairToken","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"remaining","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"_spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowances","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"executeSwapsActive","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"","internalType":"uint16"}],"name":"fees","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"buyAndBurn","internalType":"uint16"},{"type":"uint16","name":"liquidity","internalType":"uint16"},{"type":"uint16","name":"burn","internalType":"uint16"},{"type":"uint16","name":"reflection","internalType":"uint16"}],"name":"feesDistribution","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"inSwap","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromFee","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isLiquidityPair","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastBuyAndBurnTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pairTokens","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setExecuteSwapsActive","inputs":[{"type":"bool","name":"_executeSwapsActive","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"excluded","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenFromReflection","inputs":[{"type":"uint256","name":"rAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x60808060405234620006dc576200433b803803809162000020828562000c04565b8339810190808203916101a08312620006dc57815160208301519093906001600160401b038111620006dc57826200005a91850162000c28565b60408401519360ff85168503620006dc5760608101516001600160401b038111620006dc57846200008d91830162000c28565b946200009c6080830162000c9f565b60a08301519096906001600160401b038111620006dc5783019580601f88011215620006dc578651966001600160401b03881162000a35578760051b9060405198620000ec602084018b62000c04565b89526020808a0192820101928311620006dc57602001905b82821062000be95750505060806200011f60c0850162000cb4565b9560df190112620006dc5760405191608083016001600160401b0381118482101762000a35576040526200015660e0850162000cb4565b835262000167610100850162000cb4565b60208401526200017b610120850162000cb4565b60408401526200018f610140850162000cb4565b6060840152620001a9610180610160860151950162000c9f565b60008054336001600160a01b03198216811783556040519398939290916001600160a01b031690600080516020620042fb8339815191529080a3600a805460ff19169055601580546001600160a01b0319166001600160a01b038c1690811790915563c45a015560e01b8252602090829060049082905afa908115620006ea5760009162000ba7575b50601680546001600160a01b0319166001600160a01b03928316179055306000818152601160209081526040808320948e16808452948252918290206000199081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a360155460405163ef8ef56f60e01b815290602090829060049082906001600160a01b03165afa908115620006ea5760009162000b60575b5060405163095ea7b360e01b81526001600160a01b03808c1660048301526000196024830152909160209183916044918391600091165af18015620006ea5762000b3c575b508051906001600160401b03821162000a3557600454600181811c9116801562000b31575b602082101462000a1457601f811162000acb575b50602090601f831160011462000a575760ff9392916000918362000a4b575b50508160011b916000199060031b1c1916176004555b1660ff19600554161760055580519060018060401b03821162000a355760065490600182811c9216801562000a2a575b602083101462000a145781601f849311620009b3575b50602090601f8311600114620009355760009262000929575b50508160011b916000199060031b1c1916176006555b866003558615620009135786600019061980600b5533600052600d6020526040600020553060005260136020526040600020600160ff19825416179055336000526040600020600160ff1982541617905560018060a01b0386166000526040600020600160ff19825416179055600460018060a01b0360165416602060018060a01b03601554166040519384809263ef8ef56f60e01b82525afa918215620006ea57600092620008c5575b506040516364e329cb60e11b81523060048201526001600160a01b039092166024830152602090829081600081604481015b03925af1908115620006ea5760009162000883575b506001600160a01b03908116600090815260126020908152604091829020805460ff19166001179055601554915163ef8ef56f60e01b815292909183916004918391165afa8015620006ea576000906200083f575b6200054f915062000cde565b60005b855181101562000771576001600160a01b0362000570828862000d5f565b5116156200072c57600060206001600160a01b0362000590848a62000d5f565b5160405163095ea7b360e01b81526001600160a01b038c16600482015284196024820152938492604492849291165af18015620006ea57620006f6575b5060165460009060209062000627906001600160a01b0390811690620005f4868c62000d5f565b516040516364e329cb60e11b815230600482015291166001600160a01b0316602482015293849283919082906044820190565b03925af1908115620006ea57600091620006a3575b506001600160a01b039081166000908152601260205260409020805460ff191660011790556200067a9062000672838962000d5f565b511662000cde565b60001981146200068d5760010162000552565b634e487b7160e01b600052601160045260246000fd5b90506020813d602011620006e1575b81620006c16020938362000c04565b81010312620006dc57620006d59062000c9f565b386200063c565b600080fd5b3d9150620006b2565b6040513d6000823e3d90fd5b6200071c9060203d60201162000724575b62000713818362000c04565b81019062000cc4565b5038620005cd565b503d62000707565b60405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e206164647265737300000000000000000000006044820152606490fd5b508660405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a360405193336000600080516020620042fb8339815191528180a361ffff80911661ffff196007541617600755815116906008549163ffff0000602083015160101b169067ffff000000000000606065ffff00000000604086015160201b1694015160301b169360018060401b0319161717171760085560095560018060a01b031660018060a01b03196001541617600155613586908162000d758239f35b506020813d6020116200087a575b816200085c6020938362000c04565b81010312620006dc57620008746200054f9162000c9f565b62000543565b3d91506200084d565b90506020813d602011620008bc575b81620008a16020938362000c04565b81010312620006dc57620008b59062000c9f565b38620004ee565b3d915062000892565b91506020823d6020116200090a575b81620008e36020938362000c04565b81010312620006dc57620004d96020916200090060009462000c9f565b93509150620004a7565b3d9150620008d4565b634e487b7160e01b600052601260045260246000fd5b015190503880620003e6565b6006600090815293506000805160206200431b83398151915291905b601f198416851062000997576001945083601f198116106200097d575b505050811b01600655620003fc565b015160001960f88460031b161c191690553880806200096e565b8181015183556020948501946001909301929091019062000951565b60066000529091506000805160206200431b833981519152601f840160051c81016020851062000a0c575b90849392915b601f830160051c82018110620009fc575050620003cd565b60008155859450600101620009e4565b5080620009de565b634e487b7160e01b600052602260045260246000fd5b91607f1691620003b7565b634e487b7160e01b600052604160045260246000fd5b01519050388062000371565b90600460005260206000209160005b601f198516811062000ab2575091839160019360ff9695601f1981161062000a98575b505050811b0160045562000387565b015160001960f88460031b161c1916905538808062000a89565b9192602060018192868501518155019401920162000a66565b60046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c81016020851062000b29575b601f830160051c8201811062000b1c57505062000352565b6000815560010162000b04565b508062000b04565b90607f16906200033e565b62000b589060203d602011620007245762000713818362000c04565b503862000319565b90506020813d60201162000b9e575b8162000b7e6020938362000c04565b81010312620006dc57602062000b9660009262000c9f565b9150620002d4565b3d915062000b6f565b90506020813d60201162000be0575b8162000bc56020938362000c04565b81010312620006dc5762000bd99062000c9f565b3862000232565b3d915062000bb6565b6020809162000bf88462000c9f565b81520191019062000104565b601f909101601f19168101906001600160401b0382119082101762000a3557604052565b919080601f84011215620006dc578251906001600160401b03821162000a35576040519160209162000c64601f8301601f191684018562000c04565b818452828287010111620006dc5760005b81811062000c8b57508260009394955001015290565b858101830151848201840152820162000c75565b51906001600160a01b0382168203620006dc57565b519061ffff82168203620006dc57565b90816020910312620006dc57518015158103620006dc5790565b6014546801000000000000000081101562000a3557600181018060145581101562000d495760146000527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b600052603260045260246000fd5b805182101562000d495760209160051b01019056fe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b66714611a6f5750806306fdde03146119c9578063095ea7b3146119505780631141ece41461193357806318160ddd1461191557806323b872dd1461188e5780632483e715146118655780632d838119146118475780632dd310001461181e578063313ce567146117fd57806332fe7b26146117d45780633685d4191461168b5780634e6fd6c41461166e57806352390c02146115795780635342acb41461153a57806355b6ed5c146102e55780635c38693d146115175780635c9a05b8146114d857806365a807df1461149f57806370a0823114611474578063715018a61461141b5780638da5cb5b146113f257806395d89b41146112fd5780639af1d35a146112db578063a4e6668f14611280578063a9059cbb1461124f578063aaf5eb6814611232578063b068d56e146111ee578063b3e03f74146104e6578063c98e82181461035c578063d830678614610336578063dd62ed3e146102e5578063ef422a181461028f578063f2fde38b146101ce5763f99d7b9b146101ab573861000f565b346101c95760003660031901126101c9576020600254604051908152f35b600080fd5b346101c95760203660031901126101c9576101e7611b38565b6101ef611c17565b6001600160a01b0390811690811561023b576000548260018060a01b0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b346101c95760403660031901126101c9576102a8611b38565b602435908115158092036101c9576102be611c17565b60018060a01b0316600052601360205260406000209060ff80198354169116179055600080f35b346101c95760403660031901126101c9576102fe611b38565b610306611b4e565b9060018060a01b038091166000526011602052604060002091166000526020526020604060002054604051908152f35b346101c95760003660031901126101c957602060ff60165460a01c166040519015158152f35b346101c9576020806003193601126101c957610376611b38565b9061037f611c17565b6001600160a01b039060008184841661039981151561332e565b60448560155416604051948593849263095ea7b360e01b84526004840152811960248401525af180156104ad576104b9575b508160165416918160405180946364e329cb60e11b8252816000816103f48a306004840161338a565b03925af180156104ad57601293600091610480575b5016600052526040600020600160ff1982541617905560145490600160401b82101561046a5761044282600161001b9401601455611b95565b9080546001600160a01b0360039390931b83811b80199092169390941690931b909216179055565b634e487b7160e01b600052604160045260246000fd5b6104a09150833d85116104a6575b6104988183611ad6565b81019061266a565b85610409565b503d61048e565b6040513d6000823e3d90fd5b6104d890823d84116104df575b6104d08183611ad6565b810190613372565b50836103cb565b503d6104c6565b60603660031901126101c95767ffffffffffffffff6024358181116101c957610513903690600401611bb0565b906044359081116101c95761052c903690600401611bb0565b610534611c17565b601454825180821490816111e3575b50156111a55761057c9060405161055981611a9e565b60118152700e0c2d2e4a8ded6cadce65cd8cadccee8d607b1b60208201526133f3565b6105b2825160405161058d81611a9e565b60138152720e8ded6cadc82dadeeadce8e65cd8cadccee8d606b1b60208201526133f3565b6105ec81516040516105c381611a9e565b60178152760e0c2d2e4a8ded6cadc82dadeeadce8e65cd8cadccee8d604b1b60208201526133f3565b60015b601454811015610ee25761064561060582611b95565b9054906040519161061583611a9e565b600d83526c70616972546f6b656e735b695d60981b602084015260039190911b1c6001600160a01b031690613438565b61066a61065182611b95565b905460039190911b1c6001600160a01b0316151561332e565b6016546106b5906020906001600160a01b031661068684611b95565b905460405163e6a4390560e01b815294859392849283929160031b1c6001600160a01b0316306004840161338a565b03915afa9081156104ad57600091610ec3575b506106ef816040516106d981611a9e565b60048152633830b4b960e11b6020820152613438565b6001600160a01b03811615610e885760018060a01b038116600052601260205260008061077361078960ff6040842054166040519061072d82611a9e565b601582527469734c6971756964697479506169725b706169725d60581b602083015260405193849263c3b5563560e01b6020850152604060248501526064840190611af8565b901515604483015203601f198101835282611ad6565b6020815191016a636f6e736f6c652e6c6f675afa506001600160a01b031660009081526012602052604090205460ff1615610e43576107c88184612656565b51151580610e30575b15610deb576108116107e38285612656565b516040516107f081611a9e565b600f81526e746f6b656e416d6f756e74735b695d60881b60208201526133f3565b61085061081e8284612656565b5160405161082b81611a9e565b601381527270616972546f6b656e416d6f756e74735b695d60681b60208201526133f3565b61092161085d8285612656565b516040519061086b82611aba565b6108bd602f918284527f5472616e7366657272696e6720544849535f544f4b454e2066726f6d206d736760208501526e2e73656e64657220746f207468697360881b93846040820152309033906134d3565b6108d26108ca8588612656565b513033611e35565b6108dc8486612656565b5191604051916108eb83611aba565b82527f5472616e7366657272696e6720504149525f544f4b454e2066726f6d206d736760208301526040820152309033906134d3565b6000602061092e83611b95565b905460039190911b1c6001600160a01b0316606461094c8587612656565b5160405194859384926323b872dd60e01b845233600485015230602485015260448401525af180156104ad57610dcc575b506109d461098a82611b95565b905460405160039290921b1c6001600160a01b0316906109a981611a9e565b601981527820b23234b733903634b8bab4b234ba3c903337b9103830b4b960391b6020820152613438565b30600052601160205260406000209060018060a01b03601554169182600052602052610a30604060002054604051610a0b81611a9e565b60138152721d1a1a5cc81d1bdad95b88185c1c1c9bdd985b606a1b60208201526133f3565b610a6c610a3c306132ee565b604051610a4881611a9e565b60128152717468697320746f6b656e2062616c616e636560701b60208201526133f3565b610aa9610a798286612656565b51604051610a8681611a9e565b60118152701d1a1a5cc81d1bdad95b88185b5bdd5b9d607a1b60208201526133f3565b610ab281611b95565b9054604051636eb1769f60e11b815291602091839160031b1c6001600160a01b03168180610ae488306004840161338a565b03915afa80156104ad57600090610d98575b610b2c9150604051610b0781611a9e565b60138152721c185a5c881d1bdad95b88185c1c1c9bdd985b606a1b60208201526133f3565b60246020610b3983611b95565b90546040516370a0823160e01b81523060048201529384929091839160031b1c6001600160a01b03165afa80156104ad57600090610d64575b610ba79150604051610b8381611a9e565b60128152717061697220746f6b656e2062616c616e636560701b60208201526133f3565b610be4610bb48285612656565b51604051610bc181611a9e565b60118152701c185a5c881d1bdad95b88185b5bdd5b9d607a1b60208201526133f3565b610bed81611b95565b905460039190911b1c6001600160a01b0316610c098286612656565b51610c148386612656565b5193610c208488612656565b5192605f918483810204831485151715610d4e57610c3e8689612656565b51908184810204841482151715610d4e57610e1042014211610d4e57606484600093826101049760609a6040519d8e9b8c9a62e8e33760e81b8c523060048d015260248c015260448b0152838a015202046084870152020460a484015261dead60c4840152610e10420160e48401525af19182156104ad57610d1a92610d1f575b50610d15610ccc82611b95565b905460405160039290921b1c6001600160a01b031690610ceb81611a9e565b601881527720b23232b2103634b8bab4b234ba3c903337b9103830b4b960411b6020820152613438565b611c6f565b6105ef565b610d409060603d606011610d47575b610d388183611ad6565b810190612700565b5050610cbf565b503d610d2e565b634e487b7160e01b600052601160045260246000fd5b506020813d602011610d90575b81610d7e60209383611ad6565b810103126101c957610ba79051610b72565b3d9150610d71565b506020813d602011610dc4575b81610db260209383611ad6565b810103126101c957610b2c9051610af6565b3d9150610da5565b610de49060203d6020116104df576104d08183611ad6565b508361097d565b60405162461bcd60e51b815260206004820152601e60248201527f416d6f756e7473206d7573742062652067726561746572207468616e203000006044820152606490fd5b50610e3b8183612656565b5115156107d1565b60405162461bcd60e51b815260206004820152601f60248201527f4e6f7420612072656769737465726564206c69717569646974792070616972006044820152606490fd5b60405162461bcd60e51b815260206004820152601360248201527214185a5c88191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b610edc915060203d6020116104a6576104988183611ad6565b846106c8565b60043580156111545734156110fc5760165460155460405163ef8ef56f60e01b81526001600160a01b03928316916020908290600490829087165afa80156104ad57610f50926020926000926110dd575b50604051808095819463e6a4390560e01b8352306004840161338a565b03915afa80156104ad5782916000916110be575b5016801561107957600052601260205260ff604060002054161561102557610f8d823033611e35565b60155416605f8202828104605f03610d4e57605f3402348104605f03610d4e57610e1042014211610d4e576064936060938560c493604051978896879563f305d71960e01b8752306004880152602487015204604485015204606483015261dead6084830152610e10420160a483015234905af180156104ad5761100d57005b61001b9060603d606011610d4757610d388183611ad6565b60405162461bcd60e51b815260206004820152602660248201527f4e6f7420612072656769737465726564206e6174697665206c697175696469746044820152653c903830b4b960d11b6064820152608490fd5b60405162461bcd60e51b815260206004820152601a60248201527f4e6174697665207061697220646f6573206e6f742065786973740000000000006044820152606490fd5b6110d7915060203d6020116104a6576104988183611ad6565b84610f64565b6110f5919250833d85116104a6576104988183611ad6565b9086610f33565b60405162461bcd60e51b815260206004820152602a60248201527f4e617469766520746f6b656e20616d6f756e74206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f546f6b656e20616d6f756e74206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606490fd5b905082511484610543565b346101c95760003660031901126101c95760806008546040519061ffff908181168352818160101c166020840152818160201c16604084015260301c166060820152f35b346101c95760003660031901126101c95760206040516127108152f35b346101c95760403660031901126101c95761127561126b611b38565b6024359033611e35565b602060405160018152f35b346101c95760203660031901126101c9576004356014548110156101c95760146000527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec01546040516001600160a01b039091168152602090f35b346101c95760003660031901126101c957602061ffff60075416604051908152f35b346101c95760003660031901126101c957604051600060065490600182811c918184169182156113e8575b60209485851084146113d25785879486865291826000146113b2575050600114611372575b5061135a92500383611ad6565b61136e604051928284938452830190611af8565b0390f35b849150600660005281600020906000915b85831061139a57505061135a93508201018561134d565b80548389018501528794508693909201918101611383565b60ff19168582015261135a95151560051b850101925087915061134d9050565b634e487b7160e01b600052602260045260246000fd5b92607f1692611328565b346101c95760003660031901126101c9576000546040516001600160a01b039091168152602090f35b346101c95760003660031901126101c957611434611c17565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101c95760203660031901126101c9576020611497611492611b38565b6132ee565b604051908152f35b346101c95760203660031901126101c9576004358015158091036101c9576114c5611c17565b60ff8019600a5416911617600a55600080f35b346101c95760203660031901126101c9576001600160a01b036114f9611b38565b166000526012602052602060ff604060002054166040519015158152f35b346101c95760003660031901126101c957602060ff600a54166040519015158152f35b346101c95760203660031901126101c9576001600160a01b0361155b611b38565b166000526013602052602060ff604060002054166040519015158152f35b346101c9576020806003193601126101c957611593611b38565b9061159c611c17565b6001600160a01b0382166000818152600f8352604090205460ff16611629579081600f92600052600d8252604060002054611607575b50526040600020805460ff1916600117905560105490600160401b82101561046a5761044282600161001b9401601055611b64565b611615604060002054611cab565b90600052600e8252604060002055836115d2565b60405162461bcd60e51b815260048101839052601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606490fd5b346101c95760003660031901126101c957602060405161dead8152f35b346101c9576020806003193601126101c9576116a5611b38565b906116ae611c17565b60018060a01b038092169081600052600f9182825260ff60406000205416156117955760005b60108054908183101561001b578691846116ed85611b64565b949054600395861b1c161461170d5750505061170890611c6f565b6116d4565b60009795929796939491961994858201918211610d4e576104428761173461174194611b64565b9054908c1b1c1691611b64565b600052600e81526000604081205552604060002060ff1981541690558254801561177f57019261177084611b64565b8154921b9290921b1916905555005b634e487b7160e01b600052603160045260246000fd5b60405162461bcd60e51b81526004810183905260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606490fd5b346101c95760003660031901126101c9576015546040516001600160a01b039091168152602090f35b346101c95760003660031901126101c957602060ff60055416604051908152f35b346101c95760003660031901126101c9576016546040516001600160a01b039091168152602090f35b346101c95760203660031901126101c9576020611497600435611cab565b346101c95760003660031901126101c9576001546040516001600160a01b039091168152602090f35b346101c95760603660031901126101c9576112756118aa611b38565b6118b2611b4e565b6044359160018060a01b038116806000526011602052604060002033600052602052600019604060002054036118e9575b50611e35565b6000526011602052604060002033600052602052604060002061190d848254611c7e565b9055846118e3565b346101c95760003660031901126101c9576020600354604051908152f35b346101c95760003660031901126101c9576020604051619ab08152f35b346101c95760403660031901126101c957611969611b38565b60243533600052601160205260406000209160018060a01b03169182600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346101c95760003660031901126101c957604051600060045490600182811c91818416918215611a65575b60209485851084146113d25785879486865291826000146113b2575050600114611a25575061135a92500383611ad6565b849150600460005281600020906000915b858310611a4d57505061135a93508201018561134d565b80548389018501528794508693909201918101611a36565b92607f16926119f4565b346101c95760003660031901126101c9576020906009548152f35b67ffffffffffffffff811161046a57604052565b6040810190811067ffffffffffffffff82111761046a57604052565b6060810190811067ffffffffffffffff82111761046a57604052565b90601f8019910116810190811067ffffffffffffffff82111761046a57604052565b919082519283825260005b848110611b24575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201611b03565b600435906001600160a01b03821682036101c957565b602435906001600160a01b03821682036101c957565b601054811015611b7f57601060005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b601454811015611b7f57601460005260206000200190600090565b9080601f830112156101c95781359067ffffffffffffffff821161046a578160051b60405193602093611be585840187611ad6565b855283808601928201019283116101c9578301905b828210611c08575050505090565b81358152908301908301611bfa565b6000546001600160a01b03163303611c2b57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6000198114610d4e5760010190565b91908203918211610d4e57565b8115611c95570490565b634e487b7160e01b600052601260045260246000fd5b600b548111611ccc57611cc990611cc3611cc3611d24565b90611c8b565b90565b60405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608490fd5b600b54908160038054938491600090601054905b818310611d5f57505050611d4c8282611c8b565b8310611d585750509190565b9350919050565b9091959496611d6d87611b64565b989060018060a01b03998a915490851b1c16600052600d986020918a835260409a818c60002054118015611e10575b611e0157611df49383611ddf611dd98e9f958f9e9f95611dfa9a988c611dc3600e99611b64565b9054911b1c166000528552866000205490611c7e565b9c611b64565b905490891b1c16600052526000205490611c7e565b97611c6f565b9190611d38565b50959950959750505050505050565b5082611e1b8c611b64565b905490881b1c16600052600e8452848c6000205411611d9c565b6001600160a01b039081169182156123d5571691821561239557801561233e57611e5e306132ee565b600954111580612332575b80612319575b80612309575b6122af575b600092828452602092601384526000805160206135318339815191528460ff9483826040998a898183205416158061229d575b15998a612253575b848352600f845280828420541680612243575b15612039575093611f50611f6592611f2787691d08195e18db1d59195960b21b600e995191611ef683611aba565b602a83527f5472616e7366657272696e672066726f6d206578636c7564656420746f206e6f898401528201526133a4565b8d611f7c611f348561245a565b9c9596949e939f929d919a909b848b52838352898b2054611c7e565b9289525285872055600d8d5284862054611c7e565b8d8552600d8c52838520558d84528284205461241a565b918c8152600d8a5220558061202a575b508061201b575b508061200c575b5080611ffc575b50508751908152a35b611fb2575050565b73466565732073657420746f2070726576696f757360601b611fe5925191611fd983611a9e565b601483528201526133a4565b60075461ffff8160101c169061ffff191617600755565b61200591612427565b3880611fa1565b612015906125b6565b38611f9a565b6120249061252b565b38611f93565b612033906125b6565b38611f8c565b848394929593528085852054161580612234575b156121765750509082916120b46120cf956120af612107965161206f81611aba565b602a81527f5472616e7366657272696e672066726f6d206e6f74206578636c7564656420748a820152691bc8195e18db1d59195960b21b878201526133a4565b61245a565b98959299949a939b919690978652600d8d5284862054611c7e565b8d8552600d8c52838520558d8452600e8b528d6120ef8b8587205461241a565b908552600e8c5283852055600d8b528284205461241a565b918c8152600d8a52205580612167575b5080612158575b5080612149575b5080612139575b50508751908152a3611faa565b61214291612427565b388061212c565b612152906125b6565b38612125565b6121619061252b565b3861211e565b612170906125b6565b38612117565b828493959294528082842054169081612224575b50156121e35793611f506120cf926121d6600e97516121a881611a9e565b601f81527f5472616e7366657272696e672066726f6d20626f7468206578636c7564656400878201526133a4565b8d612107611f348561245a565b9150612107926120b4611f65956120af85516121fe81611a9e565b6015815274151c985b9cd9995c9c9a5b99c81cdd185b99185c99605a1b8a8201526133a4565b905089835281832054163861218a565b5089845280858520541661204d565b5089835280828420541615611ec8565b60075463ffff00008160101b169063ffffffff191617600755612298825161227a81611a9e565b600d81526c0466565732073657420746f203609c1b868201526133a4565b611eb5565b50508781528a89818320541615611ead565b6122df6040516122be81611a9e565b600f81526e50726f63657373696e67206665657360881b60208201526133a4565b6016805460ff60a01b19908116600160a01b179091556122fd61271b565b60165416601655611e7a565b5060ff60165460a01c1615611e75565b5081600052601260205260ff6040600020541615611e6f565b5060ff600a5416611e69565b60405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608490fd5b60405162461bcd60e51b81526020600482015260186024820152775472616e7366657220746f207a65726f206164647265737360401b6044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606490fd5b91908201809211610d4e57565b9061243761244292600b54611c7e565b600b55600c5461241a565b600c55565b81810292918115918404141715610d4e57565b906127109161ffff9280612472856007541684612447565b04600854916124b78161248a888660301c1685612447565b04928261249c898760101c1683612447565b0497836124ae828860201c1684612447565b04951690612447565b04946124d4866124cf856124cf856124cf888b611c7e565b611c7e565b926124ea6124e3611cc3611d24565b8096612447565b96612528886124cf6124fc8988612447565b986124cf61250a8289612447565b6124cf8c61252261251b868c612447565b958a612447565b96611c7e565b96565b61253f612539611cc3611d24565b82612447565b9060008051602061353183398151915261dead92600090848252602091600d835261256f6040928383205461241a565b868252600d845282822055600f835260ff8282205416612594575b50519283523392a3565b600e8352816125a6868284205461241a565b91878152600e855220553861258a565b6125c4612539611cc3611d24565b90600091308352602092600d84526125e16040928383205461241a565b308252600d855282822055600f845260ff8282205416612617575b505190815260008051602061353183398151915230923392a3565b600e845281612629848284205461241a565b91308152600e86522055386125fc565b805115611b7f5760200190565b805160011015611b7f5760400190565b8051821015611b7f5760209160051b010190565b908160209103126101c957516001600160a01b03811681036101c95790565b90815180825260208080930193019160005b8281106126a9575050505090565b83516001600160a01b03168552938101939281019260010161269b565b906080926126ec919695949683526000602084015260a0604084015260a0830190612689565b6001600160a01b0390951660608201520152565b908160609103126101c9578051916040602083015192015190565b612724306132ee565b9060009180156132e95760085461ffff808216816127428286612447565b9360101c16018181116132d5579161275f91612793931690611c8b565b80926124cf8260405161277181611a9e565b601081526f189d5e505b99109d5c9b905b5bdd5b9d60821b60208201526133f3565b906127c5826040516127a481611a9e565b600f81526e1b1a5c5d5a591a5d1e505b5bdd5b9d608a1b60208201526133f3565b8061316a575b50600254619ab0810180911161315657421015612f3c575b80151580612f31575b6127f557509050565b60145461280191611c8b565b6128308160405161281181611a9e565b600d81526c30b6b7bab73a2832b92830b4b960991b60208201526133f3565b825b601454811015612f2b5761284581611b95565b60018060a01b0391549060031b1c16906128808260405161286581611a9e565b60098152683830b4b92a37b5b2b760b91b6020820152613438565b6128b060405161288f81611a9e565b600a8152691a185b19905b5bdd5b9d60b21b60208201528460011c906133f3565b60155460405163ef8ef56f60e01b81526001600160a01b0390911690602081600481855afa908115612b80578791612f0c575b506001600160a01b03168303612b8b5750604051915061290282611aba565b6002825260403660208401373061291883612639565b5260155460405163ef8ef56f60e01b81526001600160a01b039091169290602081600481875afa908115612b80578791612b61575b5061295782612646565b6001600160a01b0390911690526040516129a29061297481611a9e565b60178152760e6eec2e0e0d2dcce40d0c2d8cc82dadeeadce8408aa89604b1b60208201528560011c906133f3565b610e10420192834211612b4d57908187923b15612b495784839187836129e4956040519687958694859363791ac94760e01b8552309160011c600486016126c6565b03925af18015612b3e57612b26575b5050612a31604051612a0481611a9e565b60168152750e6eec2e0e0cac840d0c2d8cc82dadeeadce8408aa8960531b60208201528460011c906133f3565b612a66604051612a4081611a9e565b60148152730c2c8c8d2dcce40d8d2e2ead2c8d2e8f2408aa8960631b60208201526133a4565b60018060a01b036015541647906040519363f305d71960e01b85523060048601528560011c602486015287604486015287606486015261dead608486015260a48501528360c48160609485945af1928315612b1b57612afa93612aff575b5050610d15604051612ad581611a9e565b60138152720c2c8c8cac840d8d2e2ead2c8d2e8f2408aa89606b1b60208201526133a4565b612832565b81612b1592903d10610d4757610d388183611ad6565b50612ac4565b6040513d88823e3d90fd5b612b2f90611a8a565b612b3a5784386129f3565b8480fd5b6040513d84823e3d90fd5b8280fd5b634e487b7160e01b87526011600452602487fd5b612b7a915060203d6020116104a6576104988183611ad6565b3861294d565b6040513d89823e3d90fd5b604051612b9781611aba565b60028152604036602083013730612bad82612639565b5283612bb882612646565b52612bf2604051612bc881611a9e565b60138152721cddd85c1c1a5b99c81a185b19905b5bdd5b9d606a1b60208201528660011c906133f3565b6001546001600160a01b03169042610e10810110612ef85790829188933b15612ef457612c4492849283899360405196879586948593635c11d79560e01b8552610e1042019260011c600486016126c6565b03925af18015612b3e57612ee0575b5050612c8d604051612c6481611a9e565b60128152711cddd85c1c1959081a185b19905b5bdd5b9d60721b60208201528460011c906133f3565b60015460405186916001600160a01b031690612ce390612cac81611a9e565b602081527f7472616e73666572696e672066726f6d2072656c6179657220746f207468697360208201528660011c908330916134d3565b803b15612edc578180916024604051809481936373b6656f60e01b83528960048401525af18015612b3e57612ec8575b5050612d3d604051612d2481611a9e565b60078152661c995b185e595960ca1b60208201526133a4565b6040516370a0823160e01b81523060048201528590602081602481875afa908115612b3e578291612e93575b50612d9c81604051612d7a81611a9e565b601081526f70616972546f6b656e42616c616e636560801b60208201526133f3565b612dd381604051612dac81611a9e565b601081526f616464696e67206c697175696469747960801b60208201528760011c90613488565b60018060a01b03601554166040519462e8e33760e81b865230600487015260248601528560011c60448601528160648601528260848601528260a486015261dead60c4860152610e10420160e4860152846101048160609586945af1918215612b8057612afa94610d1593612e77575b5050604051612e5181611a9e565b600f81526e6164646564206c697175696469747960881b60208201528560011c90613488565b81612e8d92903d10610d4757610d388183611ad6565b50612e43565b9150506020813d602011612ec0575b81612eaf60209383611ad6565b810103126101c95785905138612d69565b3d9150612ea2565b612ed190611a8a565b612b3a578438612d13565b5080fd5b612ee990611a8a565b612b3a578438612c53565b8380fd5b634e487b7160e01b88526011600452602488fd5b612f25915060203d6020116104a6576104988183611ad6565b386128e3565b50509050565b5060145415156127ec565b612f6f604051612f4b81611a9e565b6012815271627579696e6720616e64206275726e696e6760701b60208201526133a4565b4780612f7c575b506127e3565b80612faa600a92604051612f8f81611a9e565b8481526965746842616c616e636560b01b60208201526133f3565b048015612f7657612fd981604051612fc181611a9e565b6006815265627579696e6760d01b60208201526133f3565b604051612fe581611aba565b60028152604036602083013760155460405163ef8ef56f60e01b81526001600160a01b0391821691602082600481865afa91821561314b57889261312a575b5061302e84612639565b911690523061303c83612646565b526130718360405161304d81611a9e565b60128152711cddd85c1c1a5b99c8189d5e505b5bdd5b9d60721b60208201526133f3565b610e10420191824211612b4d5790869291813b15612ef45783916130ba918660405180968195829463b6f9de9560e01b8452886004850152608060248501526084840190612689565b9061dead6044840152606483015203925af18015612b3e57613116575b505061311090426002556040516130ed81611a9e565b6011815270189bdd59da1d08185b9908189d5c9b9959607a1b60208201526133f3565b38612f76565b61311f90611a8a565b612ef45783386130d7565b61314491925060203d6020116104a6576104988183611ad6565b9038613024565b6040513d8a823e3d90fd5b634e487b7160e01b84526011600452602484fd5b60405161317681611aba565b6002815260403660208301373061318c82612639565b5260155460405163ef8ef56f60e01b81526001600160a01b0391821691602082600481865afa91821561314b5788926132b4575b506131ca84612646565b91169052613209836040516131de81611a9e565b60198152781cddd85c1c1a5b99c8189d5e505b99109d5c9b905b5bdd5b9d603a1b60208201526133f3565b610e10420190814211612b4d57908187923b15612b4957613244938360405180968195829463791ac94760e01b845230908b600486016126c6565b03925af180156132a957613294575b5061328e9060405161326481611a9e565b60188152771cddd85c1c195908189d5e505b99109d5c9b905b5bdd5b9d60421b60208201526133f3565b386127cb565b936132a261328e9295611a8a565b9390613253565b6040513d87823e3d90fd5b6132ce91925060203d6020116104a6576104988183611ad6565b90386131c0565b634e487b7160e01b86526011600452602486fd5b509050565b6001600160a01b03166000908152600f602052604090205460ff1661332057600d602052611cc9604060002054611cab565b600e60205260406000205490565b1561333557565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606490fd5b908160209103126101c9575180151581036101c95790565b6001600160a01b0391821681529116602082015260400190565b600080916040516133e0816133d2602082019463104c13eb60e21b8652602060248401526044830190611af8565b03601f198101835282611ad6565b51906a636f6e736f6c652e6c6f675afa50565b6000919082916133e060405180926134246020830195632d839cb360e21b8752604060248501526064840190611af8565b90604483015203601f198101835282611ad6565b6000919082916133e06040518092613469602083019563319af33360e01b8752604060248501526064840190611af8565b6001600160a01b0391909116604483015203601f198101835282611ad6565b600092916133e084936040519283916134ba602084019663ca47c4eb60e01b8852606060248601526084850190611af8565b916044840152606483015203601f198101835282611ad6565b90926133e060009485946040519384926135066020850197638ef3f39960e01b89526080602487015260a4860190611af8565b6001600160a01b03918216604486015292166064840152608483015203601f198101835282611ad656feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220428cb63ef881da2b5b0d4d5992c5962573205d5ac0303e6b4a8b5466a50adbe264736f6c634300081100338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0f652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f00000000000000000000000000000000000000005a790ea17ace06a96000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d9000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000d050000000000000000000000000000000000000000000000000000000000000d0500000000000000000000000000000000000000000000000000000000000006830000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000002d3c8750bd670354b00000000000000000000000000000052957c71f8b873f62ca939aceb75e86bfbb77fee000000000000000000000000000000000000000000000000000000000000000944756d624d6f6e65790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444554d420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000cc78a0acdf847a2c1714d2a925bb4477df5d48a60000000000000000000000002b591e99afe9f32eaa6214f7b7629768c40eeb390000000000000000000000002fa878ab3f87cc1c9737fc071108f904c0b0c95d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000000095b303987a60c71504d99aa1b13b4da07b0790ab
Deployed ByteCode
0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b66714611a6f5750806306fdde03146119c9578063095ea7b3146119505780631141ece41461193357806318160ddd1461191557806323b872dd1461188e5780632483e715146118655780632d838119146118475780632dd310001461181e578063313ce567146117fd57806332fe7b26146117d45780633685d4191461168b5780634e6fd6c41461166e57806352390c02146115795780635342acb41461153a57806355b6ed5c146102e55780635c38693d146115175780635c9a05b8146114d857806365a807df1461149f57806370a0823114611474578063715018a61461141b5780638da5cb5b146113f257806395d89b41146112fd5780639af1d35a146112db578063a4e6668f14611280578063a9059cbb1461124f578063aaf5eb6814611232578063b068d56e146111ee578063b3e03f74146104e6578063c98e82181461035c578063d830678614610336578063dd62ed3e146102e5578063ef422a181461028f578063f2fde38b146101ce5763f99d7b9b146101ab573861000f565b346101c95760003660031901126101c9576020600254604051908152f35b600080fd5b346101c95760203660031901126101c9576101e7611b38565b6101ef611c17565b6001600160a01b0390811690811561023b576000548260018060a01b0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b346101c95760403660031901126101c9576102a8611b38565b602435908115158092036101c9576102be611c17565b60018060a01b0316600052601360205260406000209060ff80198354169116179055600080f35b346101c95760403660031901126101c9576102fe611b38565b610306611b4e565b9060018060a01b038091166000526011602052604060002091166000526020526020604060002054604051908152f35b346101c95760003660031901126101c957602060ff60165460a01c166040519015158152f35b346101c9576020806003193601126101c957610376611b38565b9061037f611c17565b6001600160a01b039060008184841661039981151561332e565b60448560155416604051948593849263095ea7b360e01b84526004840152811960248401525af180156104ad576104b9575b508160165416918160405180946364e329cb60e11b8252816000816103f48a306004840161338a565b03925af180156104ad57601293600091610480575b5016600052526040600020600160ff1982541617905560145490600160401b82101561046a5761044282600161001b9401601455611b95565b9080546001600160a01b0360039390931b83811b80199092169390941690931b909216179055565b634e487b7160e01b600052604160045260246000fd5b6104a09150833d85116104a6575b6104988183611ad6565b81019061266a565b85610409565b503d61048e565b6040513d6000823e3d90fd5b6104d890823d84116104df575b6104d08183611ad6565b810190613372565b50836103cb565b503d6104c6565b60603660031901126101c95767ffffffffffffffff6024358181116101c957610513903690600401611bb0565b906044359081116101c95761052c903690600401611bb0565b610534611c17565b601454825180821490816111e3575b50156111a55761057c9060405161055981611a9e565b60118152700e0c2d2e4a8ded6cadce65cd8cadccee8d607b1b60208201526133f3565b6105b2825160405161058d81611a9e565b60138152720e8ded6cadc82dadeeadce8e65cd8cadccee8d606b1b60208201526133f3565b6105ec81516040516105c381611a9e565b60178152760e0c2d2e4a8ded6cadc82dadeeadce8e65cd8cadccee8d604b1b60208201526133f3565b60015b601454811015610ee25761064561060582611b95565b9054906040519161061583611a9e565b600d83526c70616972546f6b656e735b695d60981b602084015260039190911b1c6001600160a01b031690613438565b61066a61065182611b95565b905460039190911b1c6001600160a01b0316151561332e565b6016546106b5906020906001600160a01b031661068684611b95565b905460405163e6a4390560e01b815294859392849283929160031b1c6001600160a01b0316306004840161338a565b03915afa9081156104ad57600091610ec3575b506106ef816040516106d981611a9e565b60048152633830b4b960e11b6020820152613438565b6001600160a01b03811615610e885760018060a01b038116600052601260205260008061077361078960ff6040842054166040519061072d82611a9e565b601582527469734c6971756964697479506169725b706169725d60581b602083015260405193849263c3b5563560e01b6020850152604060248501526064840190611af8565b901515604483015203601f198101835282611ad6565b6020815191016a636f6e736f6c652e6c6f675afa506001600160a01b031660009081526012602052604090205460ff1615610e43576107c88184612656565b51151580610e30575b15610deb576108116107e38285612656565b516040516107f081611a9e565b600f81526e746f6b656e416d6f756e74735b695d60881b60208201526133f3565b61085061081e8284612656565b5160405161082b81611a9e565b601381527270616972546f6b656e416d6f756e74735b695d60681b60208201526133f3565b61092161085d8285612656565b516040519061086b82611aba565b6108bd602f918284527f5472616e7366657272696e6720544849535f544f4b454e2066726f6d206d736760208501526e2e73656e64657220746f207468697360881b93846040820152309033906134d3565b6108d26108ca8588612656565b513033611e35565b6108dc8486612656565b5191604051916108eb83611aba565b82527f5472616e7366657272696e6720504149525f544f4b454e2066726f6d206d736760208301526040820152309033906134d3565b6000602061092e83611b95565b905460039190911b1c6001600160a01b0316606461094c8587612656565b5160405194859384926323b872dd60e01b845233600485015230602485015260448401525af180156104ad57610dcc575b506109d461098a82611b95565b905460405160039290921b1c6001600160a01b0316906109a981611a9e565b601981527820b23234b733903634b8bab4b234ba3c903337b9103830b4b960391b6020820152613438565b30600052601160205260406000209060018060a01b03601554169182600052602052610a30604060002054604051610a0b81611a9e565b60138152721d1a1a5cc81d1bdad95b88185c1c1c9bdd985b606a1b60208201526133f3565b610a6c610a3c306132ee565b604051610a4881611a9e565b60128152717468697320746f6b656e2062616c616e636560701b60208201526133f3565b610aa9610a798286612656565b51604051610a8681611a9e565b60118152701d1a1a5cc81d1bdad95b88185b5bdd5b9d607a1b60208201526133f3565b610ab281611b95565b9054604051636eb1769f60e11b815291602091839160031b1c6001600160a01b03168180610ae488306004840161338a565b03915afa80156104ad57600090610d98575b610b2c9150604051610b0781611a9e565b60138152721c185a5c881d1bdad95b88185c1c1c9bdd985b606a1b60208201526133f3565b60246020610b3983611b95565b90546040516370a0823160e01b81523060048201529384929091839160031b1c6001600160a01b03165afa80156104ad57600090610d64575b610ba79150604051610b8381611a9e565b60128152717061697220746f6b656e2062616c616e636560701b60208201526133f3565b610be4610bb48285612656565b51604051610bc181611a9e565b60118152701c185a5c881d1bdad95b88185b5bdd5b9d607a1b60208201526133f3565b610bed81611b95565b905460039190911b1c6001600160a01b0316610c098286612656565b51610c148386612656565b5193610c208488612656565b5192605f918483810204831485151715610d4e57610c3e8689612656565b51908184810204841482151715610d4e57610e1042014211610d4e57606484600093826101049760609a6040519d8e9b8c9a62e8e33760e81b8c523060048d015260248c015260448b0152838a015202046084870152020460a484015261dead60c4840152610e10420160e48401525af19182156104ad57610d1a92610d1f575b50610d15610ccc82611b95565b905460405160039290921b1c6001600160a01b031690610ceb81611a9e565b601881527720b23232b2103634b8bab4b234ba3c903337b9103830b4b960411b6020820152613438565b611c6f565b6105ef565b610d409060603d606011610d47575b610d388183611ad6565b810190612700565b5050610cbf565b503d610d2e565b634e487b7160e01b600052601160045260246000fd5b506020813d602011610d90575b81610d7e60209383611ad6565b810103126101c957610ba79051610b72565b3d9150610d71565b506020813d602011610dc4575b81610db260209383611ad6565b810103126101c957610b2c9051610af6565b3d9150610da5565b610de49060203d6020116104df576104d08183611ad6565b508361097d565b60405162461bcd60e51b815260206004820152601e60248201527f416d6f756e7473206d7573742062652067726561746572207468616e203000006044820152606490fd5b50610e3b8183612656565b5115156107d1565b60405162461bcd60e51b815260206004820152601f60248201527f4e6f7420612072656769737465726564206c69717569646974792070616972006044820152606490fd5b60405162461bcd60e51b815260206004820152601360248201527214185a5c88191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b610edc915060203d6020116104a6576104988183611ad6565b846106c8565b60043580156111545734156110fc5760165460155460405163ef8ef56f60e01b81526001600160a01b03928316916020908290600490829087165afa80156104ad57610f50926020926000926110dd575b50604051808095819463e6a4390560e01b8352306004840161338a565b03915afa80156104ad5782916000916110be575b5016801561107957600052601260205260ff604060002054161561102557610f8d823033611e35565b60155416605f8202828104605f03610d4e57605f3402348104605f03610d4e57610e1042014211610d4e576064936060938560c493604051978896879563f305d71960e01b8752306004880152602487015204604485015204606483015261dead6084830152610e10420160a483015234905af180156104ad5761100d57005b61001b9060603d606011610d4757610d388183611ad6565b60405162461bcd60e51b815260206004820152602660248201527f4e6f7420612072656769737465726564206e6174697665206c697175696469746044820152653c903830b4b960d11b6064820152608490fd5b60405162461bcd60e51b815260206004820152601a60248201527f4e6174697665207061697220646f6573206e6f742065786973740000000000006044820152606490fd5b6110d7915060203d6020116104a6576104988183611ad6565b84610f64565b6110f5919250833d85116104a6576104988183611ad6565b9086610f33565b60405162461bcd60e51b815260206004820152602a60248201527f4e617469766520746f6b656e20616d6f756e74206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f546f6b656e20616d6f756e74206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606490fd5b905082511484610543565b346101c95760003660031901126101c95760806008546040519061ffff908181168352818160101c166020840152818160201c16604084015260301c166060820152f35b346101c95760003660031901126101c95760206040516127108152f35b346101c95760403660031901126101c95761127561126b611b38565b6024359033611e35565b602060405160018152f35b346101c95760203660031901126101c9576004356014548110156101c95760146000527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec01546040516001600160a01b039091168152602090f35b346101c95760003660031901126101c957602061ffff60075416604051908152f35b346101c95760003660031901126101c957604051600060065490600182811c918184169182156113e8575b60209485851084146113d25785879486865291826000146113b2575050600114611372575b5061135a92500383611ad6565b61136e604051928284938452830190611af8565b0390f35b849150600660005281600020906000915b85831061139a57505061135a93508201018561134d565b80548389018501528794508693909201918101611383565b60ff19168582015261135a95151560051b850101925087915061134d9050565b634e487b7160e01b600052602260045260246000fd5b92607f1692611328565b346101c95760003660031901126101c9576000546040516001600160a01b039091168152602090f35b346101c95760003660031901126101c957611434611c17565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101c95760203660031901126101c9576020611497611492611b38565b6132ee565b604051908152f35b346101c95760203660031901126101c9576004358015158091036101c9576114c5611c17565b60ff8019600a5416911617600a55600080f35b346101c95760203660031901126101c9576001600160a01b036114f9611b38565b166000526012602052602060ff604060002054166040519015158152f35b346101c95760003660031901126101c957602060ff600a54166040519015158152f35b346101c95760203660031901126101c9576001600160a01b0361155b611b38565b166000526013602052602060ff604060002054166040519015158152f35b346101c9576020806003193601126101c957611593611b38565b9061159c611c17565b6001600160a01b0382166000818152600f8352604090205460ff16611629579081600f92600052600d8252604060002054611607575b50526040600020805460ff1916600117905560105490600160401b82101561046a5761044282600161001b9401601055611b64565b611615604060002054611cab565b90600052600e8252604060002055836115d2565b60405162461bcd60e51b815260048101839052601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606490fd5b346101c95760003660031901126101c957602060405161dead8152f35b346101c9576020806003193601126101c9576116a5611b38565b906116ae611c17565b60018060a01b038092169081600052600f9182825260ff60406000205416156117955760005b60108054908183101561001b578691846116ed85611b64565b949054600395861b1c161461170d5750505061170890611c6f565b6116d4565b60009795929796939491961994858201918211610d4e576104428761173461174194611b64565b9054908c1b1c1691611b64565b600052600e81526000604081205552604060002060ff1981541690558254801561177f57019261177084611b64565b8154921b9290921b1916905555005b634e487b7160e01b600052603160045260246000fd5b60405162461bcd60e51b81526004810183905260176024820152761058d8dbdd5b9d081a5cc81b9bdd08195e18db1d591959604a1b6044820152606490fd5b346101c95760003660031901126101c9576015546040516001600160a01b039091168152602090f35b346101c95760003660031901126101c957602060ff60055416604051908152f35b346101c95760003660031901126101c9576016546040516001600160a01b039091168152602090f35b346101c95760203660031901126101c9576020611497600435611cab565b346101c95760003660031901126101c9576001546040516001600160a01b039091168152602090f35b346101c95760603660031901126101c9576112756118aa611b38565b6118b2611b4e565b6044359160018060a01b038116806000526011602052604060002033600052602052600019604060002054036118e9575b50611e35565b6000526011602052604060002033600052602052604060002061190d848254611c7e565b9055846118e3565b346101c95760003660031901126101c9576020600354604051908152f35b346101c95760003660031901126101c9576020604051619ab08152f35b346101c95760403660031901126101c957611969611b38565b60243533600052601160205260406000209160018060a01b03169182600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346101c95760003660031901126101c957604051600060045490600182811c91818416918215611a65575b60209485851084146113d25785879486865291826000146113b2575050600114611a25575061135a92500383611ad6565b849150600460005281600020906000915b858310611a4d57505061135a93508201018561134d565b80548389018501528794508693909201918101611a36565b92607f16926119f4565b346101c95760003660031901126101c9576020906009548152f35b67ffffffffffffffff811161046a57604052565b6040810190811067ffffffffffffffff82111761046a57604052565b6060810190811067ffffffffffffffff82111761046a57604052565b90601f8019910116810190811067ffffffffffffffff82111761046a57604052565b919082519283825260005b848110611b24575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201611b03565b600435906001600160a01b03821682036101c957565b602435906001600160a01b03821682036101c957565b601054811015611b7f57601060005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b601454811015611b7f57601460005260206000200190600090565b9080601f830112156101c95781359067ffffffffffffffff821161046a578160051b60405193602093611be585840187611ad6565b855283808601928201019283116101c9578301905b828210611c08575050505090565b81358152908301908301611bfa565b6000546001600160a01b03163303611c2b57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6000198114610d4e5760010190565b91908203918211610d4e57565b8115611c95570490565b634e487b7160e01b600052601260045260246000fd5b600b548111611ccc57611cc990611cc3611cc3611d24565b90611c8b565b90565b60405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608490fd5b600b54908160038054938491600090601054905b818310611d5f57505050611d4c8282611c8b565b8310611d585750509190565b9350919050565b9091959496611d6d87611b64565b989060018060a01b03998a915490851b1c16600052600d986020918a835260409a818c60002054118015611e10575b611e0157611df49383611ddf611dd98e9f958f9e9f95611dfa9a988c611dc3600e99611b64565b9054911b1c166000528552866000205490611c7e565b9c611b64565b905490891b1c16600052526000205490611c7e565b97611c6f565b9190611d38565b50959950959750505050505050565b5082611e1b8c611b64565b905490881b1c16600052600e8452848c6000205411611d9c565b6001600160a01b039081169182156123d5571691821561239557801561233e57611e5e306132ee565b600954111580612332575b80612319575b80612309575b6122af575b600092828452602092601384526000805160206135318339815191528460ff9483826040998a898183205416158061229d575b15998a612253575b848352600f845280828420541680612243575b15612039575093611f50611f6592611f2787691d08195e18db1d59195960b21b600e995191611ef683611aba565b602a83527f5472616e7366657272696e672066726f6d206578636c7564656420746f206e6f898401528201526133a4565b8d611f7c611f348561245a565b9c9596949e939f929d919a909b848b52838352898b2054611c7e565b9289525285872055600d8d5284862054611c7e565b8d8552600d8c52838520558d84528284205461241a565b918c8152600d8a5220558061202a575b508061201b575b508061200c575b5080611ffc575b50508751908152a35b611fb2575050565b73466565732073657420746f2070726576696f757360601b611fe5925191611fd983611a9e565b601483528201526133a4565b60075461ffff8160101c169061ffff191617600755565b61200591612427565b3880611fa1565b612015906125b6565b38611f9a565b6120249061252b565b38611f93565b612033906125b6565b38611f8c565b848394929593528085852054161580612234575b156121765750509082916120b46120cf956120af612107965161206f81611aba565b602a81527f5472616e7366657272696e672066726f6d206e6f74206578636c7564656420748a820152691bc8195e18db1d59195960b21b878201526133a4565b61245a565b98959299949a939b919690978652600d8d5284862054611c7e565b8d8552600d8c52838520558d8452600e8b528d6120ef8b8587205461241a565b908552600e8c5283852055600d8b528284205461241a565b918c8152600d8a52205580612167575b5080612158575b5080612149575b5080612139575b50508751908152a3611faa565b61214291612427565b388061212c565b612152906125b6565b38612125565b6121619061252b565b3861211e565b612170906125b6565b38612117565b828493959294528082842054169081612224575b50156121e35793611f506120cf926121d6600e97516121a881611a9e565b601f81527f5472616e7366657272696e672066726f6d20626f7468206578636c7564656400878201526133a4565b8d612107611f348561245a565b9150612107926120b4611f65956120af85516121fe81611a9e565b6015815274151c985b9cd9995c9c9a5b99c81cdd185b99185c99605a1b8a8201526133a4565b905089835281832054163861218a565b5089845280858520541661204d565b5089835280828420541615611ec8565b60075463ffff00008160101b169063ffffffff191617600755612298825161227a81611a9e565b600d81526c0466565732073657420746f203609c1b868201526133a4565b611eb5565b50508781528a89818320541615611ead565b6122df6040516122be81611a9e565b600f81526e50726f63657373696e67206665657360881b60208201526133a4565b6016805460ff60a01b19908116600160a01b179091556122fd61271b565b60165416601655611e7a565b5060ff60165460a01c1615611e75565b5081600052601260205260ff6040600020541615611e6f565b5060ff600a5416611e69565b60405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608490fd5b60405162461bcd60e51b81526020600482015260186024820152775472616e7366657220746f207a65726f206164647265737360401b6044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606490fd5b91908201809211610d4e57565b9061243761244292600b54611c7e565b600b55600c5461241a565b600c55565b81810292918115918404141715610d4e57565b906127109161ffff9280612472856007541684612447565b04600854916124b78161248a888660301c1685612447565b04928261249c898760101c1683612447565b0497836124ae828860201c1684612447565b04951690612447565b04946124d4866124cf856124cf856124cf888b611c7e565b611c7e565b926124ea6124e3611cc3611d24565b8096612447565b96612528886124cf6124fc8988612447565b986124cf61250a8289612447565b6124cf8c61252261251b868c612447565b958a612447565b96611c7e565b96565b61253f612539611cc3611d24565b82612447565b9060008051602061353183398151915261dead92600090848252602091600d835261256f6040928383205461241a565b868252600d845282822055600f835260ff8282205416612594575b50519283523392a3565b600e8352816125a6868284205461241a565b91878152600e855220553861258a565b6125c4612539611cc3611d24565b90600091308352602092600d84526125e16040928383205461241a565b308252600d855282822055600f845260ff8282205416612617575b505190815260008051602061353183398151915230923392a3565b600e845281612629848284205461241a565b91308152600e86522055386125fc565b805115611b7f5760200190565b805160011015611b7f5760400190565b8051821015611b7f5760209160051b010190565b908160209103126101c957516001600160a01b03811681036101c95790565b90815180825260208080930193019160005b8281106126a9575050505090565b83516001600160a01b03168552938101939281019260010161269b565b906080926126ec919695949683526000602084015260a0604084015260a0830190612689565b6001600160a01b0390951660608201520152565b908160609103126101c9578051916040602083015192015190565b612724306132ee565b9060009180156132e95760085461ffff808216816127428286612447565b9360101c16018181116132d5579161275f91612793931690611c8b565b80926124cf8260405161277181611a9e565b601081526f189d5e505b99109d5c9b905b5bdd5b9d60821b60208201526133f3565b906127c5826040516127a481611a9e565b600f81526e1b1a5c5d5a591a5d1e505b5bdd5b9d608a1b60208201526133f3565b8061316a575b50600254619ab0810180911161315657421015612f3c575b80151580612f31575b6127f557509050565b60145461280191611c8b565b6128308160405161281181611a9e565b600d81526c30b6b7bab73a2832b92830b4b960991b60208201526133f3565b825b601454811015612f2b5761284581611b95565b60018060a01b0391549060031b1c16906128808260405161286581611a9e565b60098152683830b4b92a37b5b2b760b91b6020820152613438565b6128b060405161288f81611a9e565b600a8152691a185b19905b5bdd5b9d60b21b60208201528460011c906133f3565b60155460405163ef8ef56f60e01b81526001600160a01b0390911690602081600481855afa908115612b80578791612f0c575b506001600160a01b03168303612b8b5750604051915061290282611aba565b6002825260403660208401373061291883612639565b5260155460405163ef8ef56f60e01b81526001600160a01b039091169290602081600481875afa908115612b80578791612b61575b5061295782612646565b6001600160a01b0390911690526040516129a29061297481611a9e565b60178152760e6eec2e0e0d2dcce40d0c2d8cc82dadeeadce8408aa89604b1b60208201528560011c906133f3565b610e10420192834211612b4d57908187923b15612b495784839187836129e4956040519687958694859363791ac94760e01b8552309160011c600486016126c6565b03925af18015612b3e57612b26575b5050612a31604051612a0481611a9e565b60168152750e6eec2e0e0cac840d0c2d8cc82dadeeadce8408aa8960531b60208201528460011c906133f3565b612a66604051612a4081611a9e565b60148152730c2c8c8d2dcce40d8d2e2ead2c8d2e8f2408aa8960631b60208201526133a4565b60018060a01b036015541647906040519363f305d71960e01b85523060048601528560011c602486015287604486015287606486015261dead608486015260a48501528360c48160609485945af1928315612b1b57612afa93612aff575b5050610d15604051612ad581611a9e565b60138152720c2c8c8cac840d8d2e2ead2c8d2e8f2408aa89606b1b60208201526133a4565b612832565b81612b1592903d10610d4757610d388183611ad6565b50612ac4565b6040513d88823e3d90fd5b612b2f90611a8a565b612b3a5784386129f3565b8480fd5b6040513d84823e3d90fd5b8280fd5b634e487b7160e01b87526011600452602487fd5b612b7a915060203d6020116104a6576104988183611ad6565b3861294d565b6040513d89823e3d90fd5b604051612b9781611aba565b60028152604036602083013730612bad82612639565b5283612bb882612646565b52612bf2604051612bc881611a9e565b60138152721cddd85c1c1a5b99c81a185b19905b5bdd5b9d606a1b60208201528660011c906133f3565b6001546001600160a01b03169042610e10810110612ef85790829188933b15612ef457612c4492849283899360405196879586948593635c11d79560e01b8552610e1042019260011c600486016126c6565b03925af18015612b3e57612ee0575b5050612c8d604051612c6481611a9e565b60128152711cddd85c1c1959081a185b19905b5bdd5b9d60721b60208201528460011c906133f3565b60015460405186916001600160a01b031690612ce390612cac81611a9e565b602081527f7472616e73666572696e672066726f6d2072656c6179657220746f207468697360208201528660011c908330916134d3565b803b15612edc578180916024604051809481936373b6656f60e01b83528960048401525af18015612b3e57612ec8575b5050612d3d604051612d2481611a9e565b60078152661c995b185e595960ca1b60208201526133a4565b6040516370a0823160e01b81523060048201528590602081602481875afa908115612b3e578291612e93575b50612d9c81604051612d7a81611a9e565b601081526f70616972546f6b656e42616c616e636560801b60208201526133f3565b612dd381604051612dac81611a9e565b601081526f616464696e67206c697175696469747960801b60208201528760011c90613488565b60018060a01b03601554166040519462e8e33760e81b865230600487015260248601528560011c60448601528160648601528260848601528260a486015261dead60c4860152610e10420160e4860152846101048160609586945af1918215612b8057612afa94610d1593612e77575b5050604051612e5181611a9e565b600f81526e6164646564206c697175696469747960881b60208201528560011c90613488565b81612e8d92903d10610d4757610d388183611ad6565b50612e43565b9150506020813d602011612ec0575b81612eaf60209383611ad6565b810103126101c95785905138612d69565b3d9150612ea2565b612ed190611a8a565b612b3a578438612d13565b5080fd5b612ee990611a8a565b612b3a578438612c53565b8380fd5b634e487b7160e01b88526011600452602488fd5b612f25915060203d6020116104a6576104988183611ad6565b386128e3565b50509050565b5060145415156127ec565b612f6f604051612f4b81611a9e565b6012815271627579696e6720616e64206275726e696e6760701b60208201526133a4565b4780612f7c575b506127e3565b80612faa600a92604051612f8f81611a9e565b8481526965746842616c616e636560b01b60208201526133f3565b048015612f7657612fd981604051612fc181611a9e565b6006815265627579696e6760d01b60208201526133f3565b604051612fe581611aba565b60028152604036602083013760155460405163ef8ef56f60e01b81526001600160a01b0391821691602082600481865afa91821561314b57889261312a575b5061302e84612639565b911690523061303c83612646565b526130718360405161304d81611a9e565b60128152711cddd85c1c1a5b99c8189d5e505b5bdd5b9d60721b60208201526133f3565b610e10420191824211612b4d5790869291813b15612ef45783916130ba918660405180968195829463b6f9de9560e01b8452886004850152608060248501526084840190612689565b9061dead6044840152606483015203925af18015612b3e57613116575b505061311090426002556040516130ed81611a9e565b6011815270189bdd59da1d08185b9908189d5c9b9959607a1b60208201526133f3565b38612f76565b61311f90611a8a565b612ef45783386130d7565b61314491925060203d6020116104a6576104988183611ad6565b9038613024565b6040513d8a823e3d90fd5b634e487b7160e01b84526011600452602484fd5b60405161317681611aba565b6002815260403660208301373061318c82612639565b5260155460405163ef8ef56f60e01b81526001600160a01b0391821691602082600481865afa91821561314b5788926132b4575b506131ca84612646565b91169052613209836040516131de81611a9e565b60198152781cddd85c1c1a5b99c8189d5e505b99109d5c9b905b5bdd5b9d603a1b60208201526133f3565b610e10420190814211612b4d57908187923b15612b4957613244938360405180968195829463791ac94760e01b845230908b600486016126c6565b03925af180156132a957613294575b5061328e9060405161326481611a9e565b60188152771cddd85c1c195908189d5e505b99109d5c9b905b5bdd5b9d60421b60208201526133f3565b386127cb565b936132a261328e9295611a8a565b9390613253565b6040513d87823e3d90fd5b6132ce91925060203d6020116104a6576104988183611ad6565b90386131c0565b634e487b7160e01b86526011600452602486fd5b509050565b6001600160a01b03166000908152600f602052604090205460ff1661332057600d602052611cc9604060002054611cab565b600e60205260406000205490565b1561333557565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606490fd5b908160209103126101c9575180151581036101c95790565b6001600160a01b0391821681529116602082015260400190565b600080916040516133e0816133d2602082019463104c13eb60e21b8652602060248401526044830190611af8565b03601f198101835282611ad6565b51906a636f6e736f6c652e6c6f675afa50565b6000919082916133e060405180926134246020830195632d839cb360e21b8752604060248501526064840190611af8565b90604483015203601f198101835282611ad6565b6000919082916133e06040518092613469602083019563319af33360e01b8752604060248501526064840190611af8565b6001600160a01b0391909116604483015203601f198101835282611ad6565b600092916133e084936040519283916134ba602084019663ca47c4eb60e01b8852606060248601526084850190611af8565b916044840152606483015203601f198101835282611ad6565b90926133e060009485946040519384926135066020850197638ef3f39960e01b89526080602487015260a4860190611af8565b6001600160a01b03918216604486015292166064840152608483015203601f198101835282611ad656feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220428cb63ef881da2b5b0d4d5992c5962573205d5ac0303e6b4a8b5466a50adbe264736f6c63430008110033