ERC-20
Overview
Max Total Supply
23,307.843668411 FUMOG
Holders
293
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1.620773915 FUMOGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
QuantumWealthAcceleratorToken
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; pragma experimental ABIEncoderV2; import "../interface/IQWAFee.sol"; import "../interface/factory/IQWAFactory.sol"; /** * @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; } } /** * @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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @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 ); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV3Router { struct ExactInputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; uint160 sqrtPriceLimitX96; } function exactInputSingle( ExactInputSingleParams calldata params ) external payable returns (uint256 amountOut); } interface IWETH { function deposit() external payable; function withdraw(uint) external; } /// @title QuantumWealthAcceleratorToken /// @notice Quantum Wealth Accelerator Token contract QuantumWealthAcceleratorToken is ERC20, Ownable { /// STATE VARIABLES /// /// @notice Address of UniswapV2Router IUniswapV2Router02 private immutable uniswapV2Router; /// @notice Address of UniswapV3Router address private immutable uniswapV3Router; /// @notice Address of QWN/ETH LP address public immutable uniswapV2Pair; /// @notice WETH address address private immutable WETH; /// @notice Backing token addresses address[] public backingTokens; /// @notice Backing token V3 pool fee to swap (if 0 - v2) uint24[] private backingTokensV3Fee; /// @notice QWN treasury address public treasury; /// @notice Address QWA Factory address address private QWAFactory; bool private swapping; uint256 private backingSwapping; /// @notice Current percent of supply to swap tokens at (i.e. 5 = 0.05%) uint256 private swapPercent; /// @notice Current total fees uint256 public totalFees; /// @notice Current backing fee uint256 public backingFee; /// @notice Current liquidity fee uint256 public liquidityFee; /// @notice 1% QWA fee uint256 public constant QWA_FEE = 100; /// @notice Current team fee uint256 public teamFee; /// @notice Current tokens going for backing uint256 public tokensForBacking; /// @notice Current tokens going for liquidity uint256 public tokensForLiquidity; /// @notice Current tokens going for tean uint256 public tokensForTeam; /// @notice Current tokens going towards fee uint256 public tokensForFee; /// MAPPINGS /// /// @dev Bool if address is excluded from fees mapping(address => bool) private _isExcludedFromFees; /// @notice Bool if address is AMM pair mapping(address => bool) public automatedMarketMakerPairs; /// EVENTS /// event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); /// CONSTRUCTOR /// /// @param _weth Address of WETH constructor( address _qwaFactory, address _weth, address[] memory _backingTokens, uint24[] memory _backingTokensV3Fee, string memory _name, string memory _symbol ) ERC20(_name, _symbol) { QWAFactory = _qwaFactory; WETH = _weth; backingTokens = _backingTokens; backingTokensV3Fee = _backingTokensV3Fee; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Router = _uniswapV2Router; uniswapV3Router = 0xE592427A0AEce92De3Edee1F18E0157C05861564; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _weth); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); swapPercent = 25; // 0.25% backingFee = 200; liquidityFee = 100; teamFee = 100; totalFees = 500; // exclude from paying fees _isExcludedFromFees[_qwaFactory] = true; _isExcludedFromFees[address(this)] = true; /// Starting supply of 25,000 _mint(_qwaFactory, 25000000000000); } /// RECEIVE /// receive() external payable {} /// AMM PAIR /// /// @notice Sets if address is AMM pair /// @param pair Address of pair /// @param value Bool if AMM pair function setAutomatedMarketMakerPair( address pair, bool value ) public onlyOwner { require(pair != uniswapV2Pair); _setAutomatedMarketMakerPair(pair, value); } /// @dev Internal function to set `vlaue` of `pair` function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } /// INTERNAL TRANSFER /// /// @dev Internal function to burn `amount` from `account` function _burnFrom(address account, uint256 amount) internal { uint256 decreasedAllowance_ = allowance(account, msg.sender) - amount; _approve(account, msg.sender, decreasedAllowance_); _burn(account, amount); } /// @dev Internal function to transfer - handles fee logic function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount(); if ( canSwap && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on buy or sell if ( (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]) && totalFees > 0 ) { fees = (amount * totalFees) / 10000; if (IQWAFactory(QWAFactory).feeDiscount(tx.origin)) fees = (fees * 3) / 4; tokensForLiquidity += (fees * liquidityFee) / totalFees; tokensForTeam += (fees * teamFee) / totalFees; tokensForBacking += (fees * backingFee) / totalFees; tokensForFee += (fees * QWA_FEE) / totalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } /// PRIVATE FUNCTIONS /// /// @dev PRIVATE function to swap `ethTokenAmount` for ETH /// @dev Invoked in `swapBack()` function swapTokens( uint256 ethTokenAmount, uint256 totalTokensToSwap ) private returns (uint256 ethBalance_, uint256 ethForBacking_) { address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; _approve(address(this), address(uniswapV2Router), ethTokenAmount + 1); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( ethTokenAmount, 0, path, address(this), block.timestamp ); ethBalance_ = address(this).balance; ethForBacking_ = (ethBalance_ * tokensForBacking) / (totalTokensToSwap - tokensForLiquidity / 2); address backingToken = backingTokens[backingSwapping]; if (backingToken == WETH) { IWETH(WETH).deposit{value: ethForBacking_}(); IERC20(WETH).transfer(treasury, ethForBacking_); } else { if (backingTokensV3Fee[backingSwapping] == 0) { path[0] = WETH; path[1] = backingToken; uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ethForBacking_ }(0, path, treasury, block.timestamp); } else { IUniswapV3Router.ExactInputSingleParams memory params = IUniswapV3Router.ExactInputSingleParams({ tokenIn: WETH, tokenOut: backingToken, fee: backingTokensV3Fee[backingSwapping], recipient: treasury, deadline: block.timestamp, amountIn: ethForBacking_, amountOutMinimum: 0, sqrtPriceLimitX96: 0 }); IUniswapV3Router(uniswapV3Router).exactInputSingle{ value: ethForBacking_ }(params); } } if (backingSwapping == backingTokens.length - 1) backingSwapping = 0; else ++backingSwapping; } /// @dev PRIVATE function to add `tokenAmount` and `ethAmount` to LP /// @dev Invoked in `swapBack()` function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, treasury, block.timestamp ); } /// @dev PRIVATE function to transfer fees properly /// @dev Invoked in `_transfer()` function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForBacking + tokensForTeam + tokensForFee; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance - liquidityTokens; (uint256 ethBalance, uint256 ethForBacking) = swapTokens( amountToSwapForETH, totalTokensToSwap ); uint256 ethForTeam = (ethBalance * tokensForTeam) / (totalTokensToSwap - tokensForLiquidity / 2); uint256 ethForFee = (ethBalance * tokensForFee) / (totalTokensToSwap - tokensForLiquidity / 2); uint256 ethForLiquidity = ethBalance - ethForTeam - ethForFee - ethForBacking; tokensForLiquidity = 0; tokensForBacking = 0; tokensForTeam = 0; tokensForFee = 0; (success, ) = address(owner()).call{value: ethForTeam}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } address feeAddress = IQWAFactory(QWAFactory).feeAddress(); (success, ) = address(feeAddress).call{value: address(this).balance}( "" ); IQWAFee(feeAddress).convertFees(); } /// VIEW FUNCTION /// /// @notice Returns decimals for QWA (9) function decimals() public view virtual override returns (uint8) { return 9; } /// @notice Returns if address is excluded from fees function isExcludedFromFees(address account) external view returns (bool) { return _isExcludedFromFees[account]; } /// @notice Returns at what percent of supply to swap tokens at function swapTokensAtAmount() public view returns (uint256 amount_) { amount_ = (totalSupply() * swapPercent) / 10000; } /// TREASURY FUNCTION /// /// @notice Mint QWA (Only by treasury) /// @param account Address to mint QWA to /// @param amount Amount to mint function mint(address account, uint256 amount) external { require(msg.sender == treasury); _mint(account, amount); } /// USER FUNCTIONS /// /// @notice Burn QWA /// @param account Address to burn QWA from /// @param amount Amount to QWA to burn function burnFrom(address account, uint256 amount) external { _burnFrom(account, amount); } /// @notice Burn QWA /// @param amount Amount to QWA to burn function burn(uint256 amount) external { _burn(msg.sender, amount); } /// OWNER FUNCTIONS /// /// @notice Set address of treasury function setTreasury(address _treasury) external onlyOwner { require(treasury == address(0)); treasury = _treasury; excludeFromFees(_treasury, true); } /// @notice Update percent of supply to swap tokens at function updateSwapTokensAtPercent(uint256 newPercent) external onlyOwner { require(newPercent >= 1); require(newPercent <= 50); swapPercent = newPercent; } /// @notice Update fees function updateFees( uint256 _backingFee, uint256 _liquidityFee, uint256 _teamFee ) external onlyOwner { backingFee = _backingFee; liquidityFee = _liquidityFee; teamFee = _teamFee; totalFees = backingFee + liquidityFee + teamFee + QWA_FEE; require(teamFee <= 100, "Team fee <= 1%"); require(totalFees <= 500); } /// @notice Set if an address is excluded from fees function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.19; interface IQWAFactory { function WETH() external view returns (address); function QWN() external view returns (address); function sQWN() external view returns (address); function QWNStaking() external view returns (address); function feeAddress() external view returns (address); function feeDiscount(address _user) external view returns (bool); }
pragma solidity 0.8.19; interface IQWAFee { function convertFees() external; }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_qwaFactory","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address[]","name":"_backingTokens","type":"address[]"},{"internalType":"uint24[]","name":"_backingTokensV3Fee","type":"uint24[]"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"QWA_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"backingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"backingTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_backingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"updateSwapTokensAtPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040523480156200001257600080fd5b506040516200561938038062005619833981810160405281019062000038919062000c32565b818181600390816200004b919062000f95565b5080600490816200005d919062000f95565b5050506200008062000074620003f660201b60201c565b620003fe60201b60201c565b85600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff168152505083600690805190602001906200010d929190620006e7565b5082600790805190602001906200012692919062000776565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505073e592427a0aece92de3edee1f18e0157c0586156473ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000208573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022e91906200107c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630886040518363ffffffff1660e01b81526004016200026a929190620010bf565b6020604051808303816000875af11580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b091906200107c565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050620002f860c0516001620004c460201b60201c565b6019600b8190555060c8600d819055506064600e819055506064600f819055506101f4600c819055506001601460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003e9876516bcc41e90006200056560201b60201c565b5050505050505062001207565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620005d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005ce906200114d565b60405180910390fd5b620005eb60008383620006dd60201b60201c565b8060026000828254620005ff91906200119e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200065691906200119e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006bd9190620011ea565b60405180910390a3620006d960008383620006e260201b60201c565b5050565b505050565b505050565b82805482825590600052602060002090810192821562000763579160200282015b82811115620007625782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000708565b5b5090506200077291906200082a565b5090565b82805482825590600052602060002090600901600a90048101928215620008175791602002820160005b83821115620007e457835183826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302620007a0565b8015620008155782816101000a81549062ffffff0219169055600301602081600201049283019260010302620007e4565b505b5090506200082691906200082a565b5090565b5b80821115620008455760008160009055506001016200082b565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200088a826200085d565b9050919050565b6200089c816200087d565b8114620008a857600080fd5b50565b600081519050620008bc8162000891565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200091282620008c7565b810181811067ffffffffffffffff82111715620009345762000933620008d8565b5b80604052505050565b60006200094962000849565b905062000957828262000907565b919050565b600067ffffffffffffffff8211156200097a5762000979620008d8565b5b602082029050602081019050919050565b600080fd5b6000620009a7620009a1846200095c565b6200093d565b90508083825260208201905060208402830185811115620009cd57620009cc6200098b565b5b835b81811015620009fa5780620009e58882620008ab565b845260208401935050602081019050620009cf565b5050509392505050565b600082601f83011262000a1c5762000a1b620008c2565b5b815162000a2e84826020860162000990565b91505092915050565b600067ffffffffffffffff82111562000a555762000a54620008d8565b5b602082029050602081019050919050565b600062ffffff82169050919050565b62000a808162000a66565b811462000a8c57600080fd5b50565b60008151905062000aa08162000a75565b92915050565b600062000abd62000ab78462000a37565b6200093d565b9050808382526020820190506020840283018581111562000ae35762000ae26200098b565b5b835b8181101562000b10578062000afb888262000a8f565b84526020840193505060208101905062000ae5565b5050509392505050565b600082601f83011262000b325762000b31620008c2565b5b815162000b4484826020860162000aa6565b91505092915050565b600080fd5b600067ffffffffffffffff82111562000b705762000b6f620008d8565b5b62000b7b82620008c7565b9050602081019050919050565b60005b8381101562000ba857808201518184015260208101905062000b8b565b60008484015250505050565b600062000bcb62000bc58462000b52565b6200093d565b90508281526020810184848401111562000bea5762000be962000b4d565b5b62000bf784828562000b88565b509392505050565b600082601f83011262000c175762000c16620008c2565b5b815162000c2984826020860162000bb4565b91505092915050565b60008060008060008060c0878903121562000c525762000c5162000853565b5b600062000c6289828a01620008ab565b965050602062000c7589828a01620008ab565b955050604087015167ffffffffffffffff81111562000c995762000c9862000858565b5b62000ca789828a0162000a04565b945050606087015167ffffffffffffffff81111562000ccb5762000cca62000858565b5b62000cd989828a0162000b1a565b935050608087015167ffffffffffffffff81111562000cfd5762000cfc62000858565b5b62000d0b89828a0162000bff565b92505060a087015167ffffffffffffffff81111562000d2f5762000d2e62000858565b5b62000d3d89828a0162000bff565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d9d57607f821691505b60208210810362000db35762000db262000d55565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e1d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dde565b62000e29868362000dde565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e7662000e7062000e6a8462000e41565b62000e4b565b62000e41565b9050919050565b6000819050919050565b62000e928362000e55565b62000eaa62000ea18262000e7d565b84845462000deb565b825550505050565b600090565b62000ec162000eb2565b62000ece81848462000e87565b505050565b5b8181101562000ef65762000eea60008262000eb7565b60018101905062000ed4565b5050565b601f82111562000f455762000f0f8162000db9565b62000f1a8462000dce565b8101602085101562000f2a578190505b62000f4262000f398562000dce565b83018262000ed3565b50505b505050565b600082821c905092915050565b600062000f6a6000198460080262000f4a565b1980831691505092915050565b600062000f85838362000f57565b9150826002028217905092915050565b62000fa08262000d4a565b67ffffffffffffffff81111562000fbc5762000fbb620008d8565b5b62000fc8825462000d84565b62000fd582828562000efa565b600060209050601f8311600181146200100d576000841562000ff8578287015190505b62001004858262000f77565b86555062001074565b601f1984166200101d8662000db9565b60005b82811015620010475784890151825560018201915060208501945060208101905062001020565b8683101562001067578489015162001063601f89168262000f57565b8355505b6001600288020188555050505b505050505050565b60006020828403121562001095576200109462000853565b5b6000620010a584828501620008ab565b91505092915050565b620010b9816200087d565b82525050565b6000604082019050620010d66000830185620010ae565b620010e56020830184620010ae565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001135601f83620010ec565b91506200114282620010fd565b602082019050919050565b60006020820190508181036000830152620011688162001126565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011ab8262000e41565b9150620011b88362000e41565b9250828201905080821115620011d357620011d26200116f565b5b92915050565b620011e48162000e41565b82525050565b6000602082019050620012016000830184620011d9565b92915050565b60805160a05160c05160e051614392620012876000396000818161296001528181612b1601528181612b6901528181612bea01528181612cf70152612e7d015260008181610d060152610fc801526000612f880152600081816129d301528181612a0601528181612db501528181613074015261309b01526143926000f3fe60806040526004361061021e5760003560e01c8063715018a611610123578063b62496f5116100ab578063e2f456051161006f578063e2f456051461080a578063f0f4426014610835578063f2ecd8f61461085e578063f2fde38b1461089b578063fde83a34146108c457610225565b8063b62496f514610713578063ba22abc314610750578063c024666814610779578063d7c94efd146107a2578063dd62ed3e146107cd57610225565b806395d89b41116100f257806395d89b411461061a57806398118cb4146106455780639a7a23d614610670578063a457c2d714610699578063a9059cbb146106d657610225565b8063715018a61461058457806379cc67901461059b5780637f6bf20a146105c45780638da5cb5b146105ef57610225565b8063313ce567116101a657806342966c681161017557806342966c681461048b57806349bd5a5e146104b45780634fbee193146104df57806361d027b31461051c57806370a082311461054757610225565b8063313ce567146103cf57806339509351146103fa5780633ba246b61461043757806340c10f191461046257610225565b806318160ddd116101ed57806318160ddd146102e85780631a8145bb14610313578063224290851461033e57806323b872dd146103675780632bc54702146103a457610225565b806306fdde031461022a578063095ea7b3146102555780630c44a69e1461029257806313114a9d146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108ef565b60405161024c91906131fa565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906132b5565b610981565b6040516102899190613310565b60405180910390f35b34801561029e57600080fd5b506102a761099f565b6040516102b4919061333a565b60405180910390f35b3480156102c957600080fd5b506102d26109a5565b6040516102df919061333a565b60405180910390f35b3480156102f457600080fd5b506102fd6109ab565b60405161030a919061333a565b60405180910390f35b34801561031f57600080fd5b506103286109b5565b604051610335919061333a565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190613355565b6109bb565b005b34801561037357600080fd5b5061038e600480360381019061038991906133a8565b610ad7565b60405161039b9190613310565b60405180910390f35b3480156103b057600080fd5b506103b9610bcf565b6040516103c6919061333a565b60405180910390f35b3480156103db57600080fd5b506103e4610bd4565b6040516103f19190613417565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906132b5565b610bdd565b60405161042e9190613310565b60405180910390f35b34801561044357600080fd5b5061044c610c89565b604051610459919061333a565b60405180910390f35b34801561046e57600080fd5b50610489600480360381019061048491906132b5565b610c8f565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613432565b610cf7565b005b3480156104c057600080fd5b506104c9610d04565b6040516104d6919061346e565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190613489565b610d28565b6040516105139190613310565b60405180910390f35b34801561052857600080fd5b50610531610d7e565b60405161053e919061346e565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613489565b610da4565b60405161057b919061333a565b60405180910390f35b34801561059057600080fd5b50610599610dec565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906132b5565b610e74565b005b3480156105d057600080fd5b506105d9610e82565b6040516105e6919061333a565b60405180910390f35b3480156105fb57600080fd5b50610604610e88565b604051610611919061346e565b60405180910390f35b34801561062657600080fd5b5061062f610eb2565b60405161063c91906131fa565b60405180910390f35b34801561065157600080fd5b5061065a610f44565b604051610667919061333a565b60405180910390f35b34801561067c57600080fd5b50610697600480360381019061069291906134e2565b610f4a565b005b3480156106a557600080fd5b506106c060048036038101906106bb91906132b5565b61102c565b6040516106cd9190613310565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f891906132b5565b611117565b60405161070a9190613310565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613489565b611135565b6040516107479190613310565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613432565b611155565b005b34801561078557600080fd5b506107a0600480360381019061079b91906134e2565b6111f7565b005b3480156107ae57600080fd5b506107b761131c565b6040516107c4919061333a565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190613522565b611322565b604051610801919061333a565b60405180910390f35b34801561081657600080fd5b5061081f6113a9565b60405161082c919061333a565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190613489565b6113d2565b005b34801561086a57600080fd5b5061088560048036038101906108809190613432565b6114f8565b604051610892919061346e565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613489565b611537565b005b3480156108d057600080fd5b506108d961162e565b6040516108e6919061333a565b60405180910390f35b6060600380546108fe90613591565b80601f016020809104026020016040519081016040528092919081815260200182805461092a90613591565b80156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b5050505050905090565b600061099561098e611634565b848461163c565b6001905092915050565b60135481565b600c5481565b6000600254905090565b60115481565b6109c3611634565b73ffffffffffffffffffffffffffffffffffffffff166109e1610e88565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e9061360e565b60405180910390fd5b82600d8190555081600e8190555080600f819055506064600f54600e54600d54610a61919061365d565b610a6b919061365d565b610a75919061365d565b600c819055506064600f541115610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab8906136dd565b60405180910390fd5b6101f4600c541115610ad257600080fd5b505050565b6000610ae4848484611805565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b2f611634565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba69061376f565b60405180910390fd5b610bc385610bbb611634565b85840361163c565b60019150509392505050565b606481565b60006009905090565b6000610c7f610bea611634565b848460016000610bf8611634565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7a919061365d565b61163c565b6001905092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce957600080fd5b610cf38282611dd3565b5050565b610d013382611f32565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610df4611634565b73ffffffffffffffffffffffffffffffffffffffff16610e12610e88565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061360e565b60405180910390fd5b610e726000612108565b565b610e7e82826121ce565b5050565b60105481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ec190613591565b80601f0160208091040260200160405190810160405280929190818152602001828054610eed90613591565b8015610f3a5780601f10610f0f57610100808354040283529160200191610f3a565b820191906000526020600020905b815481529060010190602001808311610f1d57829003601f168201915b5050505050905090565b600e5481565b610f52611634565b73ffffffffffffffffffffffffffffffffffffffff16610f70610e88565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd9061360e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361101e57600080fd5b6110288282612201565b5050565b6000806001600061103b611634565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613801565b60405180910390fd5b61110c611103611634565b8585840361163c565b600191505092915050565b600061112b611124611634565b8484611805565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b61115d611634565b73ffffffffffffffffffffffffffffffffffffffff1661117b610e88565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061360e565b60405180910390fd5b60018110156111df57600080fd5b60328111156111ed57600080fd5b80600b8190555050565b6111ff611634565b73ffffffffffffffffffffffffffffffffffffffff1661121d610e88565b73ffffffffffffffffffffffffffffffffffffffff1614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061360e565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113109190613310565b60405180910390a25050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612710600b546113b96109ab565b6113c39190613821565b6113cd9190613892565b905090565b6113da611634565b73ffffffffffffffffffffffffffffffffffffffff166113f8610e88565b73ffffffffffffffffffffffffffffffffffffffff161461144e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114459061360e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a957600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114f58160016111f7565b50565b6006818154811061150857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61153f611634565b73ffffffffffffffffffffffffffffffffffffffff1661155d610e88565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa9061360e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613935565b60405180910390fd5b61162b81612108565b50565b60125481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906139c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361171a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171190613a59565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117f8919061333a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613aeb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da90613b7d565b60405180910390fd5b600081036118fc576118f7838360006122a2565b611dce565b600061190730610da4565b905060006119136113a9565b82101590508080156119325750600960149054906101000a900460ff16155b80156119885750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119de5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a345750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a78576001600960146101000a81548160ff021916908315150217905550611a5c612521565b6000600960146101000a81548160ff0219169083151502179055505b6000600960149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b2e5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b3857600090505b60008115611dbe57601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611be15750601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611bef57506000600c54115b15611d9a57612710600c5486611c059190613821565b611c0f9190613892565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b242e7cf326040518263ffffffff1660e01b8152600401611c6c919061346e565b602060405180830381865afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190613bb2565b15611cce576004600382611cc19190613821565b611ccb9190613892565b90505b600c54600e5482611cdf9190613821565b611ce99190613892565b60116000828254611cfa919061365d565b92505081905550600c54600f5482611d129190613821565b611d1c9190613892565b60126000828254611d2d919061365d565b92505081905550600c54600d5482611d459190613821565b611d4f9190613892565b60106000828254611d60919061365d565b92505081905550600c54606482611d779190613821565b611d819190613892565b60136000828254611d92919061365d565b925050819055505b6000811115611daf57611dae8730836122a2565b5b8085611dbb9190613bdf565b94505b611dc98787876122a2565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990613c5f565b60405180910390fd5b611e4e600083836128b4565b8060026000828254611e60919061365d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eb5919061365d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f1a919061333a565b60405180910390a3611f2e600083836128b9565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9890613cf1565b60405180910390fd5b611fad826000836128b4565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90613d83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461208a9190613bdf565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ef919061333a565b60405180910390a3612103836000846128b9565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000816121db8433611322565b6121e59190613bdf565b90506121f283338361163c565b6121fc8383611f32565b505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890613aeb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237790613b7d565b60405180910390fd5b61238b8383836128b4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890613e15565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124a4919061365d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612508919061333a565b60405180910390a361251b8484846128b9565b50505050565b600061252c30610da4565b90506000601354601254601054601154612546919061365d565b612550919061365d565b61255a919061365d565b905060008083148061256c5750600082145b15612579575050506128b2565b60006002836011548661258c9190613821565b6125969190613892565b6125a09190613892565b9050600081856125b09190613bdf565b90506000806125bf83876128be565b91509150600060026011546125d49190613892565b876125df9190613bdf565b601254846125ed9190613821565b6125f79190613892565b90506000600260115461260a9190613892565b886126159190613bdf565b601354856126239190613821565b61262d9190613892565b905060008382848761263f9190613bdf565b6126499190613bdf565b6126539190613bdf565b9050600060118190555060006010819055506000601281905550600060138190555061267d610e88565b73ffffffffffffffffffffffffffffffffffffffff16836040516126a090613e66565b60006040518083038185875af1925050503d80600081146126dd576040519150601f19603f3d011682016040523d82523d6000602084013e6126e2565b606091505b5050809850506000871180156126f85750600081115b1561274557612707878261306e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260115460405161273c93929190613e7b565b60405180910390a15b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663412753586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d89190613ec7565b90508073ffffffffffffffffffffffffffffffffffffffff16476040516127fe90613e66565b60006040518083038185875af1925050503d806000811461283b576040519150601f19603f3d011682016040523d82523d6000602084013e612840565b606091505b5050809950508073ffffffffffffffffffffffffffffffffffffffff16632b5335c36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561288e57600080fd5b505af11580156128a2573d6000803e3d6000fd5b5050505050505050505050505050505b565b505050565b505050565b6000806000600267ffffffffffffffff8111156128de576128dd613ef4565b5b60405190808252806020026020018201604052801561290c5781602001602082028036833780820191505090505b509050308160008151811061292457612923613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061299357612992613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a04307f00000000000000000000000000000000000000000000000000000000000000006001886129ff919061365d565b61163c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008430426040518663ffffffff1660e01b8152600401612a66959493929190614055565b600060405180830381600087803b158015612a8057600080fd5b505af1158015612a94573d6000803e3d6000fd5b505050504792506002601154612aaa9190613892565b84612ab59190613bdf565b60105484612ac39190613821565b612acd9190613892565b915060006006600a5481548110612ae757612ae6613f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cae577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612bcf57600080fd5b505af1158015612be3573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401612c659291906140af565b6020604051808303816000875af1158015612c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca89190613bb2565b50613027565b60006007600a5481548110612cc657612cc5613f23565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1662ffffff1603612e6d577f000000000000000000000000000000000000000000000000000000000000000082600081518110612d2a57612d29613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508082600181518110612d7957612d78613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600085600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e3694939291906140d8565b6000604051808303818588803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b5050505050613026565b60006040518061010001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016007600a5481548110612ee957612ee8613f23565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1662ffffff168152602001600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200142815260200185815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663414bf38985836040518363ffffffff1660e01b8152600401612fe09190614202565b60206040518083038185885af1158015612ffe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130239190614233565b50505b5b60016006805490506130399190613bdf565b600a540361304e576000600a81905550613065565b600a6000815461305d90614260565b919050819055505b50509250929050565b613099307f00000000000000000000000000000000000000000000000000000000000000008461163c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613120969594939291906142a8565b60606040518083038185885af115801561313e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131639190614309565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131a4578082015181840152602081019050613189565b60008484015250505050565b6000601f19601f8301169050919050565b60006131cc8261316a565b6131d68185613175565b93506131e6818560208601613186565b6131ef816131b0565b840191505092915050565b6000602082019050818103600083015261321481846131c1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061324c82613221565b9050919050565b61325c81613241565b811461326757600080fd5b50565b60008135905061327981613253565b92915050565b6000819050919050565b6132928161327f565b811461329d57600080fd5b50565b6000813590506132af81613289565b92915050565b600080604083850312156132cc576132cb61321c565b5b60006132da8582860161326a565b92505060206132eb858286016132a0565b9150509250929050565b60008115159050919050565b61330a816132f5565b82525050565b60006020820190506133256000830184613301565b92915050565b6133348161327f565b82525050565b600060208201905061334f600083018461332b565b92915050565b60008060006060848603121561336e5761336d61321c565b5b600061337c868287016132a0565b935050602061338d868287016132a0565b925050604061339e868287016132a0565b9150509250925092565b6000806000606084860312156133c1576133c061321c565b5b60006133cf8682870161326a565b93505060206133e08682870161326a565b92505060406133f1868287016132a0565b9150509250925092565b600060ff82169050919050565b613411816133fb565b82525050565b600060208201905061342c6000830184613408565b92915050565b6000602082840312156134485761344761321c565b5b6000613456848285016132a0565b91505092915050565b61346881613241565b82525050565b6000602082019050613483600083018461345f565b92915050565b60006020828403121561349f5761349e61321c565b5b60006134ad8482850161326a565b91505092915050565b6134bf816132f5565b81146134ca57600080fd5b50565b6000813590506134dc816134b6565b92915050565b600080604083850312156134f9576134f861321c565b5b60006135078582860161326a565b9250506020613518858286016134cd565b9150509250929050565b600080604083850312156135395761353861321c565b5b60006135478582860161326a565b92505060206135588582860161326a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135a957607f821691505b6020821081036135bc576135bb613562565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135f8602083613175565b9150613603826135c2565b602082019050919050565b60006020820190508181036000830152613627816135eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136688261327f565b91506136738361327f565b925082820190508082111561368b5761368a61362e565b5b92915050565b7f5465616d20666565203c3d203125000000000000000000000000000000000000600082015250565b60006136c7600e83613175565b91506136d282613691565b602082019050919050565b600060208201905081810360008301526136f6816136ba565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613759602883613175565b9150613764826136fd565b604082019050919050565b600060208201905081810360008301526137888161374c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006137eb602583613175565b91506137f68261378f565b604082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b600061382c8261327f565b91506138378361327f565b92508282026138458161327f565b9150828204841483151761385c5761385b61362e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389d8261327f565b91506138a88361327f565b9250826138b8576138b7613863565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061391f602683613175565b915061392a826138c3565b604082019050919050565b6000602082019050818103600083015261394e81613912565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139b1602483613175565b91506139bc82613955565b604082019050919050565b600060208201905081810360008301526139e0816139a4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a43602283613175565b9150613a4e826139e7565b604082019050919050565b60006020820190508181036000830152613a7281613a36565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ad5602583613175565b9150613ae082613a79565b604082019050919050565b60006020820190508181036000830152613b0481613ac8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b67602383613175565b9150613b7282613b0b565b604082019050919050565b60006020820190508181036000830152613b9681613b5a565b9050919050565b600081519050613bac816134b6565b92915050565b600060208284031215613bc857613bc761321c565b5b6000613bd684828501613b9d565b91505092915050565b6000613bea8261327f565b9150613bf58361327f565b9250828203905081811115613c0d57613c0c61362e565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c49601f83613175565b9150613c5482613c13565b602082019050919050565b60006020820190508181036000830152613c7881613c3c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cdb602183613175565b9150613ce682613c7f565b604082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d6d602283613175565b9150613d7882613d11565b604082019050919050565b60006020820190508181036000830152613d9c81613d60565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dff602683613175565b9150613e0a82613da3565b604082019050919050565b60006020820190508181036000830152613e2e81613df2565b9050919050565b600081905092915050565b50565b6000613e50600083613e35565b9150613e5b82613e40565b600082019050919050565b6000613e7182613e43565b9150819050919050565b6000606082019050613e90600083018661332b565b613e9d602083018561332b565b613eaa604083018461332b565b949350505050565b600081519050613ec181613253565b92915050565b600060208284031215613edd57613edc61321c565b5b6000613eeb84828501613eb2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b6000613f81613f7c613f7784613f52565b613f5c565b61327f565b9050919050565b613f9181613f66565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613fcc81613241565b82525050565b6000613fde8383613fc3565b60208301905092915050565b6000602082019050919050565b600061400282613f97565b61400c8185613fa2565b935061401783613fb3565b8060005b8381101561404857815161402f8882613fd2565b975061403a83613fea565b92505060018101905061401b565b5085935050505092915050565b600060a08201905061406a600083018861332b565b6140776020830187613f88565b81810360408301526140898186613ff7565b9050614098606083018561345f565b6140a5608083018461332b565b9695505050505050565b60006040820190506140c4600083018561345f565b6140d1602083018461332b565b9392505050565b60006080820190506140ed6000830187613f88565b81810360208301526140ff8186613ff7565b905061410e604083018561345f565b61411b606083018461332b565b95945050505050565b600062ffffff82169050919050565b61413c81614124565b82525050565b61414b8161327f565b82525050565b61415a81613221565b82525050565b610100820160008201516141776000850182613fc3565b50602082015161418a6020850182613fc3565b50604082015161419d6040850182614133565b5060608201516141b06060850182613fc3565b5060808201516141c36080850182614142565b5060a08201516141d660a0850182614142565b5060c08201516141e960c0850182614142565b5060e08201516141fc60e0850182614151565b50505050565b6000610100820190506142186000830184614160565b92915050565b60008151905061422d81613289565b92915050565b6000602082840312156142495761424861321c565b5b60006142578482850161421e565b91505092915050565b600061426b8261327f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361429d5761429c61362e565b5b600182019050919050565b600060c0820190506142bd600083018961345f565b6142ca602083018861332b565b6142d76040830187613f88565b6142e46060830186613f88565b6142f1608083018561345f565b6142fe60a083018461332b565b979650505050505050565b6000806000606084860312156143225761432161321c565b5b60006143308682870161421e565b93505060206143418682870161421e565b92505060406143528682870161421e565b915050925092509256fea2646970667358221220603c15ab85d00aabce809e97713724c4fd001bcc83ae4e7a5336c9b0b799d8d764736f6c634300081300330000000000000000000000003230aa07f66c5c30ff7e01d1554c6095d916815d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000020000000000000000000000002890df158d76e584877a1d17a85fea3aeeb85aa6000000000000000000000000aaee1a9723aadb7afa2810263653a34ba2c21c7a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546756d6f67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546554d4f47000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021e5760003560e01c8063715018a611610123578063b62496f5116100ab578063e2f456051161006f578063e2f456051461080a578063f0f4426014610835578063f2ecd8f61461085e578063f2fde38b1461089b578063fde83a34146108c457610225565b8063b62496f514610713578063ba22abc314610750578063c024666814610779578063d7c94efd146107a2578063dd62ed3e146107cd57610225565b806395d89b41116100f257806395d89b411461061a57806398118cb4146106455780639a7a23d614610670578063a457c2d714610699578063a9059cbb146106d657610225565b8063715018a61461058457806379cc67901461059b5780637f6bf20a146105c45780638da5cb5b146105ef57610225565b8063313ce567116101a657806342966c681161017557806342966c681461048b57806349bd5a5e146104b45780634fbee193146104df57806361d027b31461051c57806370a082311461054757610225565b8063313ce567146103cf57806339509351146103fa5780633ba246b61461043757806340c10f191461046257610225565b806318160ddd116101ed57806318160ddd146102e85780631a8145bb14610313578063224290851461033e57806323b872dd146103675780632bc54702146103a457610225565b806306fdde031461022a578063095ea7b3146102555780630c44a69e1461029257806313114a9d146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108ef565b60405161024c91906131fa565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906132b5565b610981565b6040516102899190613310565b60405180910390f35b34801561029e57600080fd5b506102a761099f565b6040516102b4919061333a565b60405180910390f35b3480156102c957600080fd5b506102d26109a5565b6040516102df919061333a565b60405180910390f35b3480156102f457600080fd5b506102fd6109ab565b60405161030a919061333a565b60405180910390f35b34801561031f57600080fd5b506103286109b5565b604051610335919061333a565b60405180910390f35b34801561034a57600080fd5b5061036560048036038101906103609190613355565b6109bb565b005b34801561037357600080fd5b5061038e600480360381019061038991906133a8565b610ad7565b60405161039b9190613310565b60405180910390f35b3480156103b057600080fd5b506103b9610bcf565b6040516103c6919061333a565b60405180910390f35b3480156103db57600080fd5b506103e4610bd4565b6040516103f19190613417565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906132b5565b610bdd565b60405161042e9190613310565b60405180910390f35b34801561044357600080fd5b5061044c610c89565b604051610459919061333a565b60405180910390f35b34801561046e57600080fd5b50610489600480360381019061048491906132b5565b610c8f565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613432565b610cf7565b005b3480156104c057600080fd5b506104c9610d04565b6040516104d6919061346e565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190613489565b610d28565b6040516105139190613310565b60405180910390f35b34801561052857600080fd5b50610531610d7e565b60405161053e919061346e565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613489565b610da4565b60405161057b919061333a565b60405180910390f35b34801561059057600080fd5b50610599610dec565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906132b5565b610e74565b005b3480156105d057600080fd5b506105d9610e82565b6040516105e6919061333a565b60405180910390f35b3480156105fb57600080fd5b50610604610e88565b604051610611919061346e565b60405180910390f35b34801561062657600080fd5b5061062f610eb2565b60405161063c91906131fa565b60405180910390f35b34801561065157600080fd5b5061065a610f44565b604051610667919061333a565b60405180910390f35b34801561067c57600080fd5b50610697600480360381019061069291906134e2565b610f4a565b005b3480156106a557600080fd5b506106c060048036038101906106bb91906132b5565b61102c565b6040516106cd9190613310565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f891906132b5565b611117565b60405161070a9190613310565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613489565b611135565b6040516107479190613310565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613432565b611155565b005b34801561078557600080fd5b506107a0600480360381019061079b91906134e2565b6111f7565b005b3480156107ae57600080fd5b506107b761131c565b6040516107c4919061333a565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190613522565b611322565b604051610801919061333a565b60405180910390f35b34801561081657600080fd5b5061081f6113a9565b60405161082c919061333a565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190613489565b6113d2565b005b34801561086a57600080fd5b5061088560048036038101906108809190613432565b6114f8565b604051610892919061346e565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613489565b611537565b005b3480156108d057600080fd5b506108d961162e565b6040516108e6919061333a565b60405180910390f35b6060600380546108fe90613591565b80601f016020809104026020016040519081016040528092919081815260200182805461092a90613591565b80156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b5050505050905090565b600061099561098e611634565b848461163c565b6001905092915050565b60135481565b600c5481565b6000600254905090565b60115481565b6109c3611634565b73ffffffffffffffffffffffffffffffffffffffff166109e1610e88565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e9061360e565b60405180910390fd5b82600d8190555081600e8190555080600f819055506064600f54600e54600d54610a61919061365d565b610a6b919061365d565b610a75919061365d565b600c819055506064600f541115610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab8906136dd565b60405180910390fd5b6101f4600c541115610ad257600080fd5b505050565b6000610ae4848484611805565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b2f611634565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba69061376f565b60405180910390fd5b610bc385610bbb611634565b85840361163c565b60019150509392505050565b606481565b60006009905090565b6000610c7f610bea611634565b848460016000610bf8611634565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7a919061365d565b61163c565b6001905092915050565b600d5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce957600080fd5b610cf38282611dd3565b5050565b610d013382611f32565b50565b7f000000000000000000000000db98950d58c62b8299192300d47294f20c09384781565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610df4611634565b73ffffffffffffffffffffffffffffffffffffffff16610e12610e88565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061360e565b60405180910390fd5b610e726000612108565b565b610e7e82826121ce565b5050565b60105481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ec190613591565b80601f0160208091040260200160405190810160405280929190818152602001828054610eed90613591565b8015610f3a5780601f10610f0f57610100808354040283529160200191610f3a565b820191906000526020600020905b815481529060010190602001808311610f1d57829003601f168201915b5050505050905090565b600e5481565b610f52611634565b73ffffffffffffffffffffffffffffffffffffffff16610f70610e88565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd9061360e565b60405180910390fd5b7f000000000000000000000000db98950d58c62b8299192300d47294f20c09384773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361101e57600080fd5b6110288282612201565b5050565b6000806001600061103b611634565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613801565b60405180910390fd5b61110c611103611634565b8585840361163c565b600191505092915050565b600061112b611124611634565b8484611805565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b61115d611634565b73ffffffffffffffffffffffffffffffffffffffff1661117b610e88565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061360e565b60405180910390fd5b60018110156111df57600080fd5b60328111156111ed57600080fd5b80600b8190555050565b6111ff611634565b73ffffffffffffffffffffffffffffffffffffffff1661121d610e88565b73ffffffffffffffffffffffffffffffffffffffff1614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a9061360e565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113109190613310565b60405180910390a25050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612710600b546113b96109ab565b6113c39190613821565b6113cd9190613892565b905090565b6113da611634565b73ffffffffffffffffffffffffffffffffffffffff166113f8610e88565b73ffffffffffffffffffffffffffffffffffffffff161461144e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114459061360e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a957600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114f58160016111f7565b50565b6006818154811061150857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61153f611634565b73ffffffffffffffffffffffffffffffffffffffff1661155d610e88565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa9061360e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613935565b60405180910390fd5b61162b81612108565b50565b60125481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906139c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361171a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171190613a59565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117f8919061333a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613aeb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da90613b7d565b60405180910390fd5b600081036118fc576118f7838360006122a2565b611dce565b600061190730610da4565b905060006119136113a9565b82101590508080156119325750600960149054906101000a900460ff16155b80156119885750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119de5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a345750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a78576001600960146101000a81548160ff021916908315150217905550611a5c612521565b6000600960146101000a81548160ff0219169083151502179055505b6000600960149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b2e5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b3857600090505b60008115611dbe57601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611be15750601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611bef57506000600c54115b15611d9a57612710600c5486611c059190613821565b611c0f9190613892565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b242e7cf326040518263ffffffff1660e01b8152600401611c6c919061346e565b602060405180830381865afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad9190613bb2565b15611cce576004600382611cc19190613821565b611ccb9190613892565b90505b600c54600e5482611cdf9190613821565b611ce99190613892565b60116000828254611cfa919061365d565b92505081905550600c54600f5482611d129190613821565b611d1c9190613892565b60126000828254611d2d919061365d565b92505081905550600c54600d5482611d459190613821565b611d4f9190613892565b60106000828254611d60919061365d565b92505081905550600c54606482611d779190613821565b611d819190613892565b60136000828254611d92919061365d565b925050819055505b6000811115611daf57611dae8730836122a2565b5b8085611dbb9190613bdf565b94505b611dc98787876122a2565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990613c5f565b60405180910390fd5b611e4e600083836128b4565b8060026000828254611e60919061365d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eb5919061365d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f1a919061333a565b60405180910390a3611f2e600083836128b9565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9890613cf1565b60405180910390fd5b611fad826000836128b4565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90613d83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461208a9190613bdf565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ef919061333a565b60405180910390a3612103836000846128b9565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000816121db8433611322565b6121e59190613bdf565b90506121f283338361163c565b6121fc8383611f32565b505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890613aeb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237790613b7d565b60405180910390fd5b61238b8383836128b4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890613e15565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124a4919061365d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612508919061333a565b60405180910390a361251b8484846128b9565b50505050565b600061252c30610da4565b90506000601354601254601054601154612546919061365d565b612550919061365d565b61255a919061365d565b905060008083148061256c5750600082145b15612579575050506128b2565b60006002836011548661258c9190613821565b6125969190613892565b6125a09190613892565b9050600081856125b09190613bdf565b90506000806125bf83876128be565b91509150600060026011546125d49190613892565b876125df9190613bdf565b601254846125ed9190613821565b6125f79190613892565b90506000600260115461260a9190613892565b886126159190613bdf565b601354856126239190613821565b61262d9190613892565b905060008382848761263f9190613bdf565b6126499190613bdf565b6126539190613bdf565b9050600060118190555060006010819055506000601281905550600060138190555061267d610e88565b73ffffffffffffffffffffffffffffffffffffffff16836040516126a090613e66565b60006040518083038185875af1925050503d80600081146126dd576040519150601f19603f3d011682016040523d82523d6000602084013e6126e2565b606091505b5050809850506000871180156126f85750600081115b1561274557612707878261306e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260115460405161273c93929190613e7b565b60405180910390a15b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663412753586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d89190613ec7565b90508073ffffffffffffffffffffffffffffffffffffffff16476040516127fe90613e66565b60006040518083038185875af1925050503d806000811461283b576040519150601f19603f3d011682016040523d82523d6000602084013e612840565b606091505b5050809950508073ffffffffffffffffffffffffffffffffffffffff16632b5335c36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561288e57600080fd5b505af11580156128a2573d6000803e3d6000fd5b5050505050505050505050505050505b565b505050565b505050565b6000806000600267ffffffffffffffff8111156128de576128dd613ef4565b5b60405190808252806020026020018201604052801561290c5781602001602082028036833780820191505090505b509050308160008151811061292457612923613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061299357612992613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a04307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001886129ff919061365d565b61163c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008430426040518663ffffffff1660e01b8152600401612a66959493929190614055565b600060405180830381600087803b158015612a8057600080fd5b505af1158015612a94573d6000803e3d6000fd5b505050504792506002601154612aaa9190613892565b84612ab59190613bdf565b60105484612ac39190613821565b612acd9190613892565b915060006006600a5481548110612ae757612ae6613f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612cae577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015612bcf57600080fd5b505af1158015612be3573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401612c659291906140af565b6020604051808303816000875af1158015612c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca89190613bb2565b50613027565b60006007600a5481548110612cc657612cc5613f23565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1662ffffff1603612e6d577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282600081518110612d2a57612d29613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508082600181518110612d7957612d78613f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600085600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e3694939291906140d8565b6000604051808303818588803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b5050505050613026565b60006040518061010001604052807f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016007600a5481548110612ee957612ee8613f23565b5b90600052602060002090600a91828204019190066003029054906101000a900462ffffff1662ffffff168152602001600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200142815260200185815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156473ffffffffffffffffffffffffffffffffffffffff1663414bf38985836040518363ffffffff1660e01b8152600401612fe09190614202565b60206040518083038185885af1158015612ffe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130239190614233565b50505b5b60016006805490506130399190613bdf565b600a540361304e576000600a81905550613065565b600a6000815461305d90614260565b919050819055505b50509250929050565b613099307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461163c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613120969594939291906142a8565b60606040518083038185885af115801561313e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131639190614309565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131a4578082015181840152602081019050613189565b60008484015250505050565b6000601f19601f8301169050919050565b60006131cc8261316a565b6131d68185613175565b93506131e6818560208601613186565b6131ef816131b0565b840191505092915050565b6000602082019050818103600083015261321481846131c1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061324c82613221565b9050919050565b61325c81613241565b811461326757600080fd5b50565b60008135905061327981613253565b92915050565b6000819050919050565b6132928161327f565b811461329d57600080fd5b50565b6000813590506132af81613289565b92915050565b600080604083850312156132cc576132cb61321c565b5b60006132da8582860161326a565b92505060206132eb858286016132a0565b9150509250929050565b60008115159050919050565b61330a816132f5565b82525050565b60006020820190506133256000830184613301565b92915050565b6133348161327f565b82525050565b600060208201905061334f600083018461332b565b92915050565b60008060006060848603121561336e5761336d61321c565b5b600061337c868287016132a0565b935050602061338d868287016132a0565b925050604061339e868287016132a0565b9150509250925092565b6000806000606084860312156133c1576133c061321c565b5b60006133cf8682870161326a565b93505060206133e08682870161326a565b92505060406133f1868287016132a0565b9150509250925092565b600060ff82169050919050565b613411816133fb565b82525050565b600060208201905061342c6000830184613408565b92915050565b6000602082840312156134485761344761321c565b5b6000613456848285016132a0565b91505092915050565b61346881613241565b82525050565b6000602082019050613483600083018461345f565b92915050565b60006020828403121561349f5761349e61321c565b5b60006134ad8482850161326a565b91505092915050565b6134bf816132f5565b81146134ca57600080fd5b50565b6000813590506134dc816134b6565b92915050565b600080604083850312156134f9576134f861321c565b5b60006135078582860161326a565b9250506020613518858286016134cd565b9150509250929050565b600080604083850312156135395761353861321c565b5b60006135478582860161326a565b92505060206135588582860161326a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135a957607f821691505b6020821081036135bc576135bb613562565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135f8602083613175565b9150613603826135c2565b602082019050919050565b60006020820190508181036000830152613627816135eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136688261327f565b91506136738361327f565b925082820190508082111561368b5761368a61362e565b5b92915050565b7f5465616d20666565203c3d203125000000000000000000000000000000000000600082015250565b60006136c7600e83613175565b91506136d282613691565b602082019050919050565b600060208201905081810360008301526136f6816136ba565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613759602883613175565b9150613764826136fd565b604082019050919050565b600060208201905081810360008301526137888161374c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006137eb602583613175565b91506137f68261378f565b604082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b600061382c8261327f565b91506138378361327f565b92508282026138458161327f565b9150828204841483151761385c5761385b61362e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389d8261327f565b91506138a88361327f565b9250826138b8576138b7613863565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061391f602683613175565b915061392a826138c3565b604082019050919050565b6000602082019050818103600083015261394e81613912565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139b1602483613175565b91506139bc82613955565b604082019050919050565b600060208201905081810360008301526139e0816139a4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a43602283613175565b9150613a4e826139e7565b604082019050919050565b60006020820190508181036000830152613a7281613a36565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ad5602583613175565b9150613ae082613a79565b604082019050919050565b60006020820190508181036000830152613b0481613ac8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b67602383613175565b9150613b7282613b0b565b604082019050919050565b60006020820190508181036000830152613b9681613b5a565b9050919050565b600081519050613bac816134b6565b92915050565b600060208284031215613bc857613bc761321c565b5b6000613bd684828501613b9d565b91505092915050565b6000613bea8261327f565b9150613bf58361327f565b9250828203905081811115613c0d57613c0c61362e565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613c49601f83613175565b9150613c5482613c13565b602082019050919050565b60006020820190508181036000830152613c7881613c3c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cdb602183613175565b9150613ce682613c7f565b604082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d6d602283613175565b9150613d7882613d11565b604082019050919050565b60006020820190508181036000830152613d9c81613d60565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dff602683613175565b9150613e0a82613da3565b604082019050919050565b60006020820190508181036000830152613e2e81613df2565b9050919050565b600081905092915050565b50565b6000613e50600083613e35565b9150613e5b82613e40565b600082019050919050565b6000613e7182613e43565b9150819050919050565b6000606082019050613e90600083018661332b565b613e9d602083018561332b565b613eaa604083018461332b565b949350505050565b600081519050613ec181613253565b92915050565b600060208284031215613edd57613edc61321c565b5b6000613eeb84828501613eb2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b6000613f81613f7c613f7784613f52565b613f5c565b61327f565b9050919050565b613f9181613f66565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613fcc81613241565b82525050565b6000613fde8383613fc3565b60208301905092915050565b6000602082019050919050565b600061400282613f97565b61400c8185613fa2565b935061401783613fb3565b8060005b8381101561404857815161402f8882613fd2565b975061403a83613fea565b92505060018101905061401b565b5085935050505092915050565b600060a08201905061406a600083018861332b565b6140776020830187613f88565b81810360408301526140898186613ff7565b9050614098606083018561345f565b6140a5608083018461332b565b9695505050505050565b60006040820190506140c4600083018561345f565b6140d1602083018461332b565b9392505050565b60006080820190506140ed6000830187613f88565b81810360208301526140ff8186613ff7565b905061410e604083018561345f565b61411b606083018461332b565b95945050505050565b600062ffffff82169050919050565b61413c81614124565b82525050565b61414b8161327f565b82525050565b61415a81613221565b82525050565b610100820160008201516141776000850182613fc3565b50602082015161418a6020850182613fc3565b50604082015161419d6040850182614133565b5060608201516141b06060850182613fc3565b5060808201516141c36080850182614142565b5060a08201516141d660a0850182614142565b5060c08201516141e960c0850182614142565b5060e08201516141fc60e0850182614151565b50505050565b6000610100820190506142186000830184614160565b92915050565b60008151905061422d81613289565b92915050565b6000602082840312156142495761424861321c565b5b60006142578482850161421e565b91505092915050565b600061426b8261327f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361429d5761429c61362e565b5b600182019050919050565b600060c0820190506142bd600083018961345f565b6142ca602083018861332b565b6142d76040830187613f88565b6142e46060830186613f88565b6142f1608083018561345f565b6142fe60a083018461332b565b979650505050505050565b6000806000606084860312156143225761432161321c565b5b60006143308682870161421e565b93505060206143418682870161421e565b92505060406143528682870161421e565b915050925092509256fea2646970667358221220603c15ab85d00aabce809e97713724c4fd001bcc83ae4e7a5336c9b0b799d8d764736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003230aa07f66c5c30ff7e01d1554c6095d916815d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000020000000000000000000000002890df158d76e584877a1d17a85fea3aeeb85aa6000000000000000000000000aaee1a9723aadb7afa2810263653a34ba2c21c7a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546756d6f67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546554d4f47000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _qwaFactory (address): 0x3230AA07F66c5c30FF7e01D1554c6095D916815D
Arg [1] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _backingTokens (address[]): 0x2890dF158D76E584877a1D17A85FEA3aeeB85aa6,0xaaeE1A9723aaDB7afA2810263653A34bA2C21C7a
Arg [3] : _backingTokensV3Fee (uint24[]): 10000,0
Arg [4] : _name (string): Fumog
Arg [5] : _symbol (string): FUMOG
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000003230aa07f66c5c30ff7e01d1554c6095d916815d
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 0000000000000000000000002890df158d76e584877a1d17a85fea3aeeb85aa6
Arg [8] : 000000000000000000000000aaee1a9723aadb7afa2810263653a34ba2c21c7a
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [10] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [13] : 46756d6f67000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [15] : 46554d4f47000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.