Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 54 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 22630529 | 190 days ago | IN | 0 ETH | 0.00029407 | ||||
| Transfer | 22630473 | 190 days ago | IN | 0 ETH | 0.00025529 | ||||
| Transfer | 22219416 | 247 days ago | IN | 0 ETH | 0.00022398 | ||||
| Approve | 22139484 | 258 days ago | IN | 0 ETH | 0.00026891 | ||||
| Approve | 22139447 | 258 days ago | IN | 0 ETH | 0.00012989 | ||||
| Transfer | 22130595 | 260 days ago | IN | 0 ETH | 0.00005317 | ||||
| Transfer | 22130542 | 260 days ago | IN | 0 ETH | 0.00005088 | ||||
| Transfer | 22130540 | 260 days ago | IN | 0 ETH | 0.00004475 | ||||
| Transfer | 22130462 | 260 days ago | IN | 0 ETH | 0.00005107 | ||||
| Transfer | 22130411 | 260 days ago | IN | 0 ETH | 0.00010692 | ||||
| Transfer | 22130398 | 260 days ago | IN | 0 ETH | 0.00003453 | ||||
| Transfer | 22130327 | 260 days ago | IN | 0 ETH | 0.00010794 | ||||
| Transfer | 22122907 | 261 days ago | IN | 0 ETH | 0.00004769 | ||||
| Transfer | 22122906 | 261 days ago | IN | 0 ETH | 0.00004769 | ||||
| Transfer | 22122406 | 261 days ago | IN | 0 ETH | 0.00004219 | ||||
| Transfer | 22122395 | 261 days ago | IN | 0 ETH | 0.00004406 | ||||
| Transfer | 22122366 | 261 days ago | IN | 0 ETH | 0.00008863 | ||||
| Transfer | 22122363 | 261 days ago | IN | 0 ETH | 0.00008857 | ||||
| Transfer | 22122360 | 261 days ago | IN | 0 ETH | 0.00009069 | ||||
| Transfer | 22122352 | 261 days ago | IN | 0 ETH | 0.00004563 | ||||
| Transfer | 22122352 | 261 days ago | IN | 0 ETH | 0.00004563 | ||||
| Transfer | 22122267 | 261 days ago | IN | 0 ETH | 0.00004821 | ||||
| Transfer | 22122226 | 261 days ago | IN | 0 ETH | 0.00008834 | ||||
| Transfer | 22118282 | 261 days ago | IN | 0 ETH | 0.00007722 | ||||
| Transfer | 22118240 | 261 days ago | IN | 0 ETH | 0.00011182 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Token6OS
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-03-21
*/
/*
██████╗ ███████╗███╗ ██╗███████╗███████╗ ████████╗ ██████╗ ██╗ ██╗███████╗███╗ ██╗
██╔════╝ ██╔════╝████╗ ██║██╔════╝██╔════╝ ╚══██╔══╝██╔═══██╗██║ ██╔╝██╔════╝████╗ ██║
███████╗ █████╗ ██╔██╗ ██║███████╗█████╗ ██║ ██║ ██║█████╔╝ █████╗ ██╔██╗ ██║
██╔═══██╗██╔══╝ ██║╚██╗██║╚════██║██╔══╝ ██║ ██║ ██║██╔═██╗ ██╔══╝ ██║╚██╗██║
╚██████╔╝███████╗██║ ╚████║███████║███████╗ ██║ ╚██████╔╝██║ ██╗███████╗██║ ╚████║
╚═════╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝
”Sometimes when you're in a dark place you think you've been buried, but Actually you’ve been planted.“
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
interface IERC20 {
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);
}
/**
* @title Context
* @dev The base contract that provides information about the message sender
* and the calldata in the current transaction.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
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.
*/
contract Ownable is Context {
address private _owner;
address private _previousOwner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event Locked(address owner, address newOwner,uint256 lockTime);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view 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 {
emit OwnershipTransferred(_owner, address(0));
_owner = 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");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @title IUniswapV2Factory
* @dev Interface for the Uniswap V2 Factory contract.
*/
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
/**
* @title IUniswapV2Router01
* @dev Interface for the Uniswap V2 Router version 01 contract.
*/
interface IUniswapV2Router01 {
function factory() external pure returns (address);
//WETH function that return const value, rather than performing some state-changing operation.
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract Token6OS is Context, IERC20, Ownable {
mapping (address => uint256) private _rOwned;
mapping (address => uint256) private _tOwned;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) public isExcludedFromFee;
mapping (address => bool) private _isExcluded;
address[] private _excluded;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal = 963 * 10**7 * 10**18;
uint256 private _rTotal = (MAX - (MAX % _tTotal));
uint256 private _tFeeTotal;
string private constant NAME = "6ENSE";
string private constant SYMBOL = "6OS";
uint8 private constant DECIMALS = 18;
bool private swapping;
bool public tradeEnabled;
uint256 private taxThreshold = 1 * 10**3 * 10**18;
uint256 refAmt;
uint256 plantoFee;
uint256 public reflectionTax=0;
uint256 public plantoGroupTax=1;
uint256 public maxTransferAmount = 1926 * 10*5 * 10**18; // Max transfer Limit
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address public immutable usdcAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address public plantoGroupWallet;
event PlantoGroupWalletChange(address wallet);
event ThresholdUpdated(uint256 amount);
event ReflectedFee(uint256 totalReflectFee);
event UpdatedMaxAmount(uint256 updatedMaxAmount);
event UpdatedReflectionTax(uint256 reflectionTax);
event UpdatedWalletTax(uint256 walletTax);
event TradeEnabled(bool enabled);
event IncludedInFee(address account);
event ExcludedFromFee(address account);
event IncludedInReward(address account);
event ExcludedFromReward(address account);
/**
* @dev Constructor for the token contract.
* @param _wallet Address of the PlantoGroup wallet, which cannot be the zero address.
*
* Initializes the contract by setting the initial token supply to the deployer,
* setting up the Uniswap V2 router and liquidity pair, and excluding certain addresses
* (owner, contract, and liquidity pair) from fees.
*/
constructor(address _wallet) {
require(_wallet != address(0),"plantoGroup wallet can not be zero");
_rOwned[_msgSender()] = _rTotal;
plantoGroupWallet = _wallet;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //etherum mainnet
// Create a uniswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), usdcAddress);
// set the rest of the contract variables
uniswapV2Router = _uniswapV2Router;
//exclude owner and this contract from fee
isExcludedFromFee[owner()] = true;
isExcludedFromFee[address(this)] = true;
excludeFromReward(uniswapV2Pair);
emit Transfer(address(0), _msgSender(), _tTotal);
}
/**
* @notice Retrieves the name of the token.
* @dev This function returns the name of the token, which is often used for identification.
* It is commonly displayed in user interfaces and provides a human-readable name for the token.
* @return The name of the token.
*/
function name() external pure returns (string memory) {
return NAME;
}
/**
* @notice Retrieves the symbol or ticker of the token.
* @dev This function returns the symbol or ticker that represents the token.
* It is commonly used for identifying the token in user interfaces and exchanges.
* @return The symbol or ticker of the token.
*/
function symbol() external pure returns (string memory) {
return SYMBOL;
}
/**
* @notice Retrieves the number of decimal places used in the token representation.
* @dev This function returns the number of decimal places used to represent the token balances.
* It is commonly used to interpret the token amounts correctly in user interfaces.
* @return The number of decimal places used in the token representation.
*/
function decimals() external pure returns (uint8) {
return DECIMALS;
}
/**
* @notice Retrieves the total supply of tokens.
* @dev This function returns the total supply of tokens in circulation.
* @return The total supply of tokens.
*/
function totalSupply() external view override returns (uint256) {
return _tTotal;
}
/**
* @notice Retrieves the token balance of a specified account.
* @dev This function returns the token balance of the specified account.
* If the account is excluded, it directly returns the token balance.
* If the account is not excluded, it converts the reflection balance to token balance using the current rate.
* @param account The address of the account whose token balance is being queried.
* @return The token balance of the specified account.
*/
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];//exculded
return tokenFromReflection(_rOwned[account]);//not excluded
}
/**
* @notice Transfers a specified amount of tokens to a recipient.
* @dev This function transfers tokens from the sender's account to the specified recipient.
* If successful, it returns true.
* @param recipient The address of the recipient to whom tokens are being transferred.
* @param amount The amount of tokens to be transferred.
* @return A boolean indicating the success of the transfer operation.
*/
function transfer(address recipient, uint256 amount) external override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @notice Retrieves the remaining allowance for a spender to spend tokens on behalf of an owner.
* @dev This function returns the current allowance set for the specified spender to spend tokens
* from the specified owner's account.
* @param owner The address of the owner whose allowance is being queried.
* @param spender The address of the spender for whom the allowance is queried.
* @return The remaining allowance for the specified spender to spend tokens on behalf of the owner.
*/
function allowance(address owner, address spender) external view override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @notice Approves a spender to spend a specified amount of tokens on behalf of the owner.
* @dev This function sets or updates the allowance for a spender to spend tokens
* from the owner's account. If successful, it returns true.
* @param spender The address of the spender to be approved.
* @param amount The amount of tokens to approve for spending.
* @return A boolean indicating the success of the approval operation.
*/
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @notice Transfers tokens from one address to another on behalf of a third-party.
* @dev This function allows a designated spender to transfer tokens from the sender's account
* to the recipient's account. It also ensures that the allowance is updated correctly.
* If successful, it returns true.
* @param sender The address from which tokens are being transferred.
* @param recipient The address to which tokens are being transferred.
* @param amount The amount of tokens to be transferred.
* @return A boolean indicating the success of the transfer operation.
*/
function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()]-amount);
return true;
}
/**
* @notice Increases the allowance granted to a spender by a specified amount.
* @dev This function increases the allowance for the specified spender by the given value.
* It ensures that the updated allowance is correctly set. If successful, it returns true.
* @param spender The address of the spender whose allowance is being increased.
* @param addedValue The amount by which to increase the allowance.
* @return A boolean indicating the success of the operation.
*/
function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender]+addedValue);
return true;
}
/**
* @notice Reduces the allowance granted to a spender by a specified amount.
* @dev This function decreases the allowance for the specified spender by the given value.
* It ensures that the allowance does not go below zero. If successful, it returns true.
* @param spender The address of the spender whose allowance is being reduced.
* @param subtractedValue The amount by which to reduce the allowance.
* @return A boolean indicating the success of the operation.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender]-subtractedValue);
return true;
}
/**
* @notice Checks if the specified address is excluded from earning reflections.
* @dev Excluded addresses do not receive reflections in certain tokenomics designs.
* This function returns true if the address is excluded, and false otherwise.
* @param account The address to check for exclusion from reflections.
* @return A boolean indicating whether the address is excluded from earning reflections.
*/
function isExcludedFromReward(address account) external view returns (bool) {
return _isExcluded[account];
}
/**
* @notice Retrieves the total amount of fees collected in tokens.
* @dev This function returns the cumulative sum of fees collected during transactions.
* The fees are often used for various purposes like liquidity provision, rewards, or burns.
* @return The total amount of fees collected in tokens.
*/
function totalFees() external view returns (uint256) {
return _tFeeTotal;
}
/**
* @notice Distributes the specified amount of tokens as reflections to the reward pool.
* @dev This function is typically used to convert a portion of tokens into reflections
* and add them to a reward pool. Excluded addresses cannot call this function.
* @param tAmount The amount of tokens to be converted and added to reflections.
*/
function deliver(uint256 tAmount) external {
address sender = _msgSender();
require(!_isExcluded[sender], "Excluded addresses cannot call this function");
(uint256 rAmount,) = _getValue(tAmount);
_rOwned[sender] = _rOwned[sender]-rAmount;
_rTotal = _rTotal-rAmount;
_tFeeTotal = _tFeeTotal+tAmount;
}
/**
* @notice Converts the given token amount to its equivalent reflection amount.
* @dev Reflections are often used in tokenomics to calculate rewards or balances.
* This function converts a token amount to its corresponding reflection amount
* based on the current rate. Optionally, it deducts the transfer fee from the calculation.
* @param tAmount The token amount to be converted to reflections.
* @param deductTransferFee A boolean indicating whether to deduct the transfer fee from the calculation.
* @return The equivalent reflection amount corresponding to the given token amount.
*/
function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
(uint256 rAmount,) = _getValue(tAmount);
return rAmount;
} else {
(,uint256 rTransferAmount) = _getValue(tAmount);
return rTransferAmount;
}
}
/**
* @notice Converts the given reflection amount to its equivalent token amount.
* @dev Reflections are often used in tokenomics to calculate rewards or balances.
* This function converts a reflection amount to its corresponding token amount
* based on the current rate.
* @param rAmount The reflection amount to be converted to tokens.
* @return The equivalent token amount corresponding to the given reflection amount.
*/
function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
require(rAmount <= _rTotal, "Amount must be less than total reflections");
uint256 currentRate = _getRate();
return rAmount / currentRate;
}
/**
* @notice Grants the owner the ability to exclude an address from earning reflections.
* @dev Reflections are often used in tokenomics to distribute rewards to holders.
* This function excludes the specified address from receiving reflections.
* @param account The address to be excluded from earning reflections.
*/
function excludeFromReward(address account) public onlyOwner() {
require(!_isExcluded[account], "Account is already excluded");
if(_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
emit ExcludedFromReward(account);
}
/**
* @dev External function for including an account in the reward distribution.
* @param account The address to be included in the reward distribution.
*
* The function can only be called by the owner of the contract.
* Requires that the specified account is currently excluded.
* Iterates through the list of excluded accounts, finds the specified account, and removes it from the exclusion list.
* Resets the token balance of the specified account to 0 and updates the exclusion status.
*
* @notice Only the owner of the contract can call this function.
* @notice Requires that the specified account is currently excluded.
*/
function includeInReward(address account) external onlyOwner() {
require(_isExcluded[account], "Account is already Included");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
emit IncludedInReward(account);
}
/**
* @notice Grants the owner the ability to exclude an address from transaction fees.
* @dev Transaction fees are often applied in decentralized finance (DeFi) projects
* to support various mechanisms like liquidity provision, rewards, or token burns.
* @param account The address to exclude from transaction fees.
*/
function excludeFromFee(address account) external onlyOwner {
require(!isExcludedFromFee[account],"Alreay excluded from fee");
isExcludedFromFee[account] = true;
emit ExcludedFromFee(account);
}
/**
* @notice Grants the owner the ability to include an address in transaction fees.
* @dev Transaction fees are often applied in decentralized finance (DeFi) projects
* to support various mechanisms like liquidity provision, rewards, or token burns.
* @param account The address to include in transaction fees.
*/
function includeInFee(address account) external onlyOwner {
require(isExcludedFromFee[account],"Alreay included in fee");
isExcludedFromFee[account] = false;
emit IncludedInFee(account);
}
/**
* @dev Sets the address of the fund wallet.
* @param wallet The new address to be set as the fund wallet.
*
* Requirements:
* - Only the contract owner can call this function.
*
* Emits a {plantoGroupWalletChange} event with the updated wallet address on successful execution.
*/
function setplantoGroupWallet(address wallet) external onlyOwner{
require(wallet != address(0),"wallet can not be zero");
plantoGroupWallet = wallet;
emit PlantoGroupWalletChange(wallet);
}
/**
* @dev External function for updating the threshold amount required for triggering liquidity addition.
* @param amount The new threshold amount.
*
* The function can only be called by the owner of the contract.
* Requires that the provided threshold amount (amount) is greater than 0.
* Updates the taxThreshold with the new threshold amount.
* @notice Only the owner of the contract can call this function.
* @notice Requires a positive amount for successful execution.
*/
function updateThreshold(uint256 amount) external onlyOwner {
require(amount > 0 && amount <= 5 * 10**5 * 10**18,"Amount should be more than zero and less than 500k tokens");
taxThreshold = amount;
emit ThresholdUpdated(amount);
}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
/**
* @dev Private function for approving a spender to spend a certain amount on behalf of the owner.
* @param owner The address that owns the tokens.
* @param spender The address that is approved to spend the tokens.
* @param amount The amount of tokens to be approved for spending.
*
* Requires that both the owner and spender addresses are not the zero address.
* Sets the allowance for the spender on behalf of the owner to the specified amount.
* Emits an `Approval` event with details about the approval.
*
* @notice This function is intended for internal use and should not be called directly.
*/
function _approve(address owner, address spender, uint256 amount) private {
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 Reduces the total reflection supply by `rFee` and adds `tFee` to the total fee collected.
* @param rFee The reflection fee deducted from the total supply.
* @param tFee The transaction fee added to the fee total.
*/
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal - rFee ;
_tFeeTotal = _tFeeTotal + tFee;
emit ReflectedFee(tFee);
}
/**
* @dev Allocates a portion of the transaction amount to the plantoGroup fund.
* @param tPlantoFee The amount of tokens allocated for plantoGroup.
*
* Converts `_takePlantoFee` to reflected value and stores it in the contract balance.
*/
function _takePlantoFee(uint256 tPlantoFee) private {
uint256 currentRate = _getRate();
uint256 rPlantoFee = tPlantoFee * currentRate;
_rOwned[address(this)] = _rOwned[address(this)] + rPlantoFee;
if(_isExcluded[address(this)])
_tOwned[address(this)] = _tOwned[address(this)] + tPlantoFee;
}
/**
* @dev Calculates and returns the transfer amount, tax fee, and plantoGroup fee for a given transaction.
* @param tAmount The total transaction amount.
* @return tTransferAmount The amount remaining after tax deductions.
* @return tFee The transaction fee deducted.
* @return tCoinOperation The fee allocated for plantoGroups.
*/
function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
(uint256 tTransferAmount, uint256 tFee,uint256 tPlantoFee) = _getTValues(tAmount);
return ( tTransferAmount, tFee, tPlantoFee);
}
/**
* @dev Returns the reflected amount and reflected transfer amount for a given transaction.
* @param tAmount The total transaction amount.
* @return rAmount The reflected total amount.
* @return rTransferAmount The reflected transfer amount after tax deductions.
*/
function _getValue(uint256 tAmount) private view returns(uint256, uint256){
(, uint256 tFee, uint256 tPlantoFee) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tPlantoFee);
return (rAmount, rTransferAmount);
}
/**
* @dev Calculates the tax and plantoGroup fees and returns the transfer amount.
* @param tAmount The total transaction amount.
* @return tTransferAmount The amount left after deducting all taxes.
* @return tFee The tax fee deducted from the transaction.
* @return tPlantoFee The plantoGroup fee deducted from the transaction.
*/
function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
uint256 tFee = calculateTaxFee(tAmount);
uint256 tPlantoFee = calculatePlantoTax(tAmount);
uint256 allTax = tFee + tPlantoFee;
uint256 tTransferAmount = tAmount - allTax;
return (tTransferAmount, tFee, tPlantoFee);
}
/**
* @dev Converts token values to reflected values and calculates the reflected transfer amount.
* @param tAmount The total transaction amount.
* @param tFee The transaction fee in token value.
* @param tPlantoFee The plantoGroup fee in token value.
* @return rAmount The reflected total amount.
* @return rTransferAmount The reflected transfer amount after tax deductions.
* @return rFee The reflected tax fee deducted from the transaction.
*/
function _getRValues(uint256 tAmount, uint256 tFee, uint256 tPlantoFee) private view returns (uint256, uint256, uint256) {
uint256 currentRate = _getRate();
uint256 rAmount = tAmount * currentRate;
uint256 rFee = tFee * currentRate;
uint256 rPlantoFee = tPlantoFee * currentRate;
uint256 allTax = rFee + rPlantoFee;
uint256 rTransferAmount = rAmount - allTax;
return (rAmount, rTransferAmount, rFee);
}
/**
* @dev Private function for retrieving the current conversion rate between reflection and token balances.
* @return rate Current conversion rate.
*
* @notice Internal use only.
*/
function _getRate() private view returns(uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply / tSupply;
}
/**
* @dev Private function for retrieving the current supply of both reflection and token balances.
* @return rSupply Current reflection supply.
* @return tSupply Current token supply.
*
* @notice Internal use only.
*/
function _getCurrentSupply() private view returns(uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
rSupply = rSupply - _rOwned[_excluded[i]];
tSupply = tSupply - _tOwned[_excluded[i]];
}
if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
/**
* @dev Calculates the tax fee for reflection based on a specified amount.
* @param amount Amount for tax fee calculation.
* @return Calculated tax fee amount.
*
* @notice Internal use only.
*/
function calculateTaxFee(uint256 amount) private view returns (uint256) {
return amount * refAmt / 10**2;
}
/**
* @dev Calculates the plantoGroup tax based on a specified amount.
* @param amount Amount for plantoGroup tax calculation.
* @return Calculated plantoGroup tax amount.
*
* @notice Internal use only.
*/
function calculatePlantoTax(uint256 amount) private view returns (uint256) {
return amount * plantoFee / 10**2;
}
/**
* @dev Removes all fees by setting `refAmt` and `plantoFee` to zero.
*
* This function is typically used for transactions where fees should be excluded,
* such as transfers between specific addresses.
*/
function removeAllFee() private {
refAmt = 0;
plantoFee = 0;
}
/**
* @notice Enables or disables trading functionality based on the input parameter.
* @dev Only callable by the owner of the contract.
* @param _enable A boolean value: `true` to enable trading, `false` to disable trading.
*/
function setTrading(bool _enable) external onlyOwner {
require(tradeEnabled != _enable, "Trading is already in the desired state");
tradeEnabled = _enable;
emit TradeEnabled(tradeEnabled);
}
/**
* @notice Updates the reflection tax (max 6%).
*/
function updateReflectionTaxPer(uint256 reflectionPercent) external onlyOwner {
require(reflectionPercent <= 6,"You can not set reflection tax more then 6%");
reflectionTax = reflectionPercent;
emit UpdatedReflectionTax(reflectionTax);
}
/**
* @notice Updates the PlantoGroup tax (max 6%).
*/
function updatePlantoGroupTax(uint256 walletTax) external onlyOwner {
require(walletTax <= 6,"You can not set plantoGroup tax more then 6%");
plantoGroupTax = walletTax;
emit UpdatedWalletTax(plantoGroupTax);
}
/**
* @dev Sets the maximum buy limit per transaction. Can only be called by the contract owner.
*
* The `amount` entered should include the token's decimal places.
* For example, if the token has 18 decimals, to set a limit of 500,000 tokens,
* the `amount` should be entered as 500,000 * 10^18 (i.e., 500k tokens with decimals).
*
* The function enforces a minimum buy limit of 500,000 tokens (accounting for decimals).
*
* @param amount The new maximum amount allowed per transaction. This value must include decimals.
* Emits an {UpdatedMaxAmount} event indicating the new maximum buy amount.
*/
function setMaxTransferLimit(uint256 amount) external onlyOwner {
require(amount >= 500000 * 10**18, "Max Transfer limit can not be less than 500,000 tokens");
maxTransferAmount = amount;
emit UpdatedMaxAmount(maxTransferAmount);
}
/**
* @notice Transfers tokens while applying tax rules.
* @dev Ensures transaction limits, tax deductions, and trading status.
* @param from The address sending tokens.
* @param to The address receiving tokens.
* @param amount The amount of tokens to transfer.
*/
function _transfer( address from, address to, uint256 amount ) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
if (from == owner() || to == owner()){
_tokenTransfer(from,to,amount,false);
return;
}
require(amount <= maxTransferAmount, "Transaction limit exceed");
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinTokenBalance = contractTokenBalance >= taxThreshold;
if (
overMinTokenBalance &&
!swapping &&
from != uniswapV2Pair
) {
swapping = true;
swapAndLiquify();
swapping = false;
}
//indicates if fee should be deducted from transfer
bool takeFee = true;
//if any account belongs to isExcludedFromFee account then remove the fee
if(isExcludedFromFee[from] || isExcludedFromFee[to]){
takeFee = false;
}
//if takeFee is true then set sell or buy tax percentage
if(takeFee){
refAmt = reflectionTax;
plantoFee = plantoGroupTax;
}
_tokenTransfer(from,to,amount,takeFee);
}
/**
* @dev Swaps contract token balance for USDC and limits swap amount to maxTransferAmount.
* Ensures that excessive tokens are not swapped in a single transaction.
*/
function swapAndLiquify() private{
uint256 contractTokenBalance = balanceOf(address(this));
if(contractTokenBalance > maxTransferAmount){
contractTokenBalance = maxTransferAmount;
}
swapTokensForUsdc(contractTokenBalance);
}
/**
* @dev Swaps a specified amount of tokens for USDC using Uniswap.
* The swapped USDC is sent to the `plantoGroupWallet`.
*
* @param tokenAmount The amount of tokens to swap for USDC.
*/
function swapTokensForUsdc(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = usdcAddress;
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForTokens(
tokenAmount,
0, // accept any amount of Usdc
path,
plantoGroupWallet,
block.timestamp
);
}
/**
* @notice Handles token transfers, applying tax rules if necessary.
* @dev Determines the transfer type based on sender/recipient exclusions and applies fees accordingly.
* @param sender The address sending tokens.
* @param recipient The address receiving tokens.
* @param amount The amount of tokens being transferred.
* @param takeFee Boolean indicating whether tax should be applied.
*/
function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
if(!takeFee)
removeAllFee();
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
_transferStandard(sender, recipient, amount);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount);
} else {
_transferStandard(sender, recipient, amount);
}
}
/**
* @notice Handles transfers between two excluded accounts.
* @dev Excluded accounts hold both reflected and total token balances.
* @param sender The address sending tokens.
* @param recipient The address receiving tokens.
* @param tAmount The amount of tokens being transferred.
*/
function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 tTransferAmount, uint256 tFee, uint256 tPlantoFee) = _getValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tPlantoFee);
_tOwned[sender] = _tOwned[sender]-tAmount;
_rOwned[sender] = _rOwned[sender]-rAmount;
_tOwned[recipient] = _tOwned[recipient]+tTransferAmount;
_rOwned[recipient] = _rOwned[recipient]+rTransferAmount;
_reflectFee(rFee, tFee);
_takePlantoFee(tPlantoFee);
emit Transfer(sender, recipient, tTransferAmount);
}
/**
* @notice Handles standard transfers between two non-excluded accounts.
* @dev Only reflected balances are updated, and transaction fees are deducted.
* @param sender The address sending tokens.
* @param recipient The address receiving tokens.
* @param tAmount The amount of tokens being transferred.
*/
function _transferStandard(address sender, address recipient, uint256 tAmount) private {
(uint256 tTransferAmount, uint256 tFee, uint256 tPlantoFee) = _getValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tPlantoFee);
_rOwned[sender] = _rOwned[sender]-rAmount;
_rOwned[recipient] = _rOwned[recipient]+rTransferAmount;
_reflectFee(rFee, tFee);
_takePlantoFee(tPlantoFee);
emit Transfer(sender, recipient, tTransferAmount);
}
/**
* @notice Handles transfers where the recipient is excluded from rewards.
* @dev Excluded recipients maintain a total balance but do not participate in reflections.
* @param sender The address sending tokens.
* @param recipient The address receiving tokens.
* @param tAmount The amount of tokens being transferred.
*/
function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 tTransferAmount, uint256 tFee, uint256 tPlantoFee) = _getValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee,tPlantoFee);
_rOwned[sender] = _rOwned[sender]-rAmount;
_tOwned[recipient] = _tOwned[recipient]+tTransferAmount;
_rOwned[recipient] = _rOwned[recipient]+rTransferAmount;
_reflectFee(rFee, tFee);
_takePlantoFee(tPlantoFee);
emit Transfer(sender, recipient, tTransferAmount);
}
/**
* @notice Handles transfers where the sender is excluded from rewards.
* @dev Excluded senders maintain a total balance but do not participate in reflections.
* @param sender The address sending tokens.
* @param recipient The address receiving tokens.
* @param tAmount The amount of tokens being transferred.
*/
function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 tTransferAmount, uint256 tFee, uint256 tPlantoFee) = _getValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tPlantoFee);
_tOwned[sender] = _tOwned[sender]-tAmount;
_rOwned[sender] = _rOwned[sender]-rAmount;
_rOwned[recipient] = _rOwned[recipient]+rTransferAmount;
_reflectFee(rFee, tFee);
_takePlantoFee(tPlantoFee);
emit Transfer(sender, recipient, tTransferAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludedFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludedInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludedInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"Locked","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":false,"internalType":"address","name":"wallet","type":"address"}],"name":"PlantoGroupWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalReflectFee","type":"uint256"}],"name":"ReflectedFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradeEnabled","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxAmount","type":"uint256"}],"name":"UpdatedMaxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reflectionTax","type":"uint256"}],"name":"UpdatedReflectionTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletTax","type":"uint256"}],"name":"UpdatedWalletTax","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plantoGroupTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plantoGroupWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTransferLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setplantoGroupWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"walletTax","type":"uint256"}],"name":"updatePlantoGroupTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionPercent","type":"uint256"}],"name":"updateReflectionTaxPer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e06040526b1f1dbfd20d40d2ee5e0000006008556008545f196100239190610b7c565b5f1961002f9190610bd9565b600955683635c9adc5dea00000600c555f600f5560016010556914646ef744bba530000060115573a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1660c09073ffffffffffffffffffffffffffffffffffffffff168152503480156100a8575f80fd5b506040516160fd3803806160fd83398181016040528101906100ca9190610c6a565b5f6100d961051f60201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101da90610d15565b60405180910390fd5b60095460025f6101f761051f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f99190610c6a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b8152600401610335929190610d42565b6020604051808303815f875af1158015610351573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103759190610c6a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160055f6103ef61052660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506104a460a05161054d60201b60201c565b6104b261051f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516105109190610d78565b60405180910390a35050610f65565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61055b61051f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105de90610ddb565b60405180910390fd5b60065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066890610e43565b60405180910390fd5b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156107445761070260025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461083360201b60201c565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600781908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f110b1fbed46dec7bc9019c3fba97541a3d64821a824872bb7b2ad678490855bf816040516108289190610e61565b60405180910390a150565b5f600954821115610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087090610eea565b60405180910390fd5b5f61088861089e60201b60201c565b905080836108969190610f08565b915050919050565b5f805f6108af6108c660201b60201c565b9150915080826108bf9190610f08565b9250505090565b5f805f60095490505f60085490505f5b600780549050811015610b10578260025f600784815481106108fb576108fa610f38565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411806109e057508160035f6007848154811061097c5761097b610f38565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b156109f75760095460085494509450505050610b42565b60025f60078381548110610a0e57610a0d610f38565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610a7b9190610bd9565b925060035f60078381548110610a9457610a93610f38565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482610b019190610bd9565b915080806001019150506108d6565b50600854600954610b219190610f08565b821015610b3957600954600854935093505050610b42565b81819350935050505b9091565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610b8682610b46565b9150610b9183610b46565b925082610ba157610ba0610b4f565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610be382610b46565b9150610bee83610b46565b9250828203905081811115610c0657610c05610bac565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c3982610c10565b9050919050565b610c4981610c2f565b8114610c53575f80fd5b50565b5f81519050610c6481610c40565b92915050565b5f60208284031215610c7f57610c7e610c0c565b5b5f610c8c84828501610c56565b91505092915050565b5f82825260208201905092915050565b7f706c616e746f47726f75702077616c6c65742063616e206e6f74206265207a655f8201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b5f610cff602283610c95565b9150610d0a82610ca5565b604082019050919050565b5f6020820190508181035f830152610d2c81610cf3565b9050919050565b610d3c81610c2f565b82525050565b5f604082019050610d555f830185610d33565b610d626020830184610d33565b9392505050565b610d7281610b46565b82525050565b5f602082019050610d8b5f830184610d69565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610dc5602083610c95565b9150610dd082610d91565b602082019050919050565b5f6020820190508181035f830152610df281610db9565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f610e2d601b83610c95565b9150610e3882610df9565b602082019050919050565b5f6020820190508181035f830152610e5a81610e21565b9050919050565b5f602082019050610e745f830184610d33565b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f610ed4602a83610c95565b9150610edf82610e7a565b604082019050919050565b5f6020820190508181035f830152610f0181610ec8565b9050919050565b5f610f1282610b46565b9150610f1d83610b46565b925082610f2d57610f2c610b4f565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60805160a05160c051615152610fab5f395f818161090b0152613a7601525f818161139601526128a001525f818161099201528181613ae90152613b1001526151525ff3fe608060405260043610610228575f3560e01c806370a0823111610122578063b220aae1116100aa578063dd62ed3e1161006e578063dd62ed3e1461082b578063e1b2cfb614610867578063ea2f0b3714610891578063eef63f1f146108b9578063f2fde38b146108e15761022f565b8063b220aae11461075f578063b4e1e6ad14610787578063bbae8086146107b1578063d621e813146107d9578063d7d7442f146108035761022f565b80638f70ccf7116100f15780638f70ccf71461066b57806395d89b4114610693578063a457c2d7146106bd578063a9059cbb146106f9578063a9e75723146107355761022f565b806370a08231146105b3578063715018a6146105ef57806388f82020146106055780638da5cb5b146106415761022f565b8063313ce567116101b0578063437823ec11610174578063437823ec146104c15780634549b039146104e957806349bd5a5e1461052557806352390c021461054f5780635342acb4146105775761022f565b8063313ce567146103e15780633685d4191461040b57806339509351146104335780633ae2f3541461046f5780633bd5d173146104995761022f565b80631694505e116101f75780631694505e146102ed57806318160ddd146103175780631978c0b31461034157806323b872dd146103695780632d838119146103a55761022f565b806302d454571461023357806306fdde031461025d578063095ea7b31461028757806313114a9d146102c35761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b50610247610909565b6040516102549190613e69565b60405180910390f35b348015610268575f80fd5b5061027161092d565b60405161027e9190613ef2565b60405180910390f35b348015610292575f80fd5b506102ad60048036038101906102a89190613f80565b61096a565b6040516102ba9190613fd8565b60405180910390f35b3480156102ce575f80fd5b506102d7610987565b6040516102e49190614000565b60405180910390f35b3480156102f8575f80fd5b50610301610990565b60405161030e9190614074565b60405180910390f35b348015610322575f80fd5b5061032b6109b4565b6040516103389190614000565b60405180910390f35b34801561034c575f80fd5b506103676004803603810190610362919061408d565b6109bd565b005b348015610374575f80fd5b5061038f600480360381019061038a91906140b8565b610ae1565b60405161039c9190613fd8565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c6919061408d565b610b94565b6040516103d89190614000565b60405180910390f35b3480156103ec575f80fd5b506103f5610bf9565b6040516104029190614123565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c919061413c565b610c01565b005b34801561043e575f80fd5b5061045960048036038101906104549190613f80565b610f68565b6040516104669190613fd8565b60405180910390f35b34801561047a575f80fd5b5061048361100f565b6040516104909190614000565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba919061408d565b611015565b005b3480156104cc575f80fd5b506104e760048036038101906104e2919061413c565b61116e565b005b3480156104f4575f80fd5b5061050f600480360381019061050a9190614191565b61131b565b60405161051c9190614000565b60405180910390f35b348015610530575f80fd5b50610539611394565b6040516105469190613e69565b60405180910390f35b34801561055a575f80fd5b506105756004803603810190610570919061413c565b6113b8565b005b348015610582575f80fd5b5061059d6004803603810190610598919061413c565b611692565b6040516105aa9190613fd8565b60405180910390f35b3480156105be575f80fd5b506105d960048036038101906105d4919061413c565b6116af565b6040516105e69190614000565b60405180910390f35b3480156105fa575f80fd5b50610603611792565b005b348015610610575f80fd5b5061062b6004803603810190610626919061413c565b6118e0565b6040516106389190613fd8565b60405180910390f35b34801561064c575f80fd5b50610655611932565b6040516106629190613e69565b60405180910390f35b348015610676575f80fd5b50610691600480360381019061068c91906141cf565b611959565b005b34801561069e575f80fd5b506106a7611aa5565b6040516106b49190613ef2565b60405180910390f35b3480156106c8575f80fd5b506106e360048036038101906106de9190613f80565b611ae2565b6040516106f09190613fd8565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a9190613f80565b611b89565b60405161072c9190613fd8565b60405180910390f35b348015610740575f80fd5b50610749611ba6565b6040516107569190614000565b60405180910390f35b34801561076a575f80fd5b506107856004803603810190610780919061408d565b611bac565b005b348015610792575f80fd5b5061079b611cc7565b6040516107a89190613e69565b60405180910390f35b3480156107bc575f80fd5b506107d760048036038101906107d2919061408d565b611cec565b005b3480156107e4575f80fd5b506107ed611e07565b6040516107fa9190613fd8565b60405180910390f35b34801561080e575f80fd5b506108296004803603810190610824919061408d565b611e1a565b005b348015610836575f80fd5b50610851600480360381019061084c91906141fa565b611f47565b60405161085e9190614000565b60405180910390f35b348015610872575f80fd5b5061087b611fc9565b6040516108889190614000565b60405180910390f35b34801561089c575f80fd5b506108b760048036038101906108b2919061413c565b611fcf565b005b3480156108c4575f80fd5b506108df60048036038101906108da919061413c565b61217a565b005b3480156108ec575f80fd5b506109076004803603810190610902919061413c565b6122f6565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b60606040518060400160405280600581526020017f36454e5345000000000000000000000000000000000000000000000000000000815250905090565b5f61097d6109766124b3565b84846124ba565b6001905092915050565b5f600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600854905090565b6109c56124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890614282565b60405180910390fd5b6969e10de76676d0800000811015610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590614310565b60405180910390fd5b806011819055507f44d540c6079791f805bc9b5d5a643dbf1f545ec260212b2b2478ef9d9ed0768e601154604051610ad69190614000565b60405180910390a150565b5f610aed84848461267d565b610b8984610af96124b3565b8460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b406124b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b84919061435b565b6124ba565b600190509392505050565b5f600954821115610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd1906143fe565b60405180910390fd5b5f610be3612a07565b90508083610bf19190614449565b915050919050565b5f6012905090565b610c096124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614282565b60405180910390fd5b60065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d15906144c3565b60405180910390fd5b5f5b600780549050811015610f2d578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d5857610d576144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f205760076001600780549050610daf919061435b565b81548110610dc057610dbf6144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610dfc57610dfb6144e1565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506007805480610ee957610ee861450e565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f2d565b8080600101915050610d20565b507f47ab6b2d1f416edec684889dc42cd04ed7cc6c6244edaa04c4215e107754861481604051610f5d9190613e69565b60405180910390a150565b5f611005610f746124b3565b848460045f610f816124b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611000919061453b565b6124ba565b6001905092915050565b600f5481565b5f61101e6124b3565b905060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906145de565b60405180910390fd5b5f6110b483612a29565b5090508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611100919061435b565b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060095461114f919061435b565b60098190555082600a54611163919061453b565b600a81905550505050565b6111766124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614282565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128390614646565b60405180910390fd5b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c816040516113109190613e69565b60405180910390a150565b5f600854831115611361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611358906146ae565b60405180910390fd5b8161137c575f61137084612a29565b5090508091505061138e565b5f61138684612a29565b915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6113c06124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144390614282565b60405180910390fd5b60065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90614716565b60405180910390fd5b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156115a35761156160025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b94565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600781908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f110b1fbed46dec7bc9019c3fba97541a3d64821a824872bb7b2ad678490855bf816040516116879190613e69565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156117445760035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061178d565b61178a60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b94565b90505b919050565b61179a6124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90614282565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119616124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614282565b60405180910390fd5b801515600b60019054906101000a900460ff16151503611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a39906147a4565b60405180910390fd5b80600b60016101000a81548160ff0219169083151502179055507f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e735600b60019054906101000a900460ff16604051611a9a9190613fd8565b60405180910390a150565b60606040518060400160405280600381526020017f364f530000000000000000000000000000000000000000000000000000000000815250905090565b5f611b7f611aee6124b3565b848460045f611afb6124b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b7a919061435b565b6124ba565b6001905092915050565b5f611b9c611b956124b3565b848461267d565b6001905092915050565b60115481565b611bb46124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790614282565b60405180910390fd5b6006811115611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90614832565b60405180910390fd5b806010819055507fa815c78ebc61f51da32266e7b03d1f5bddd25a61e988127ea02e702754a25ece601054604051611cbc9190614000565b60405180910390a150565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cf46124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614282565b60405180910390fd5b6006811115611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb906148c0565b60405180910390fd5b80600f819055507ff2e8ba611224a81bdb301fbf10ccdc28d0d972efd159b4eb954d7939c2657fbd600f54604051611dfc9190614000565b60405180910390a150565b600b60019054906101000a900460ff1681565b611e226124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590614282565b60405180910390fd5b5f81118015611ec757506969e10de76676d08000008111155b611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd9061494e565b60405180910390fd5b80600c819055507fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe17181604051611f3c9190614000565b60405180910390a150565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b611fd76124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614282565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906149b6565b60405180910390fd5b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f78ce087db51d01d3e32355f2d83455d5a39f99194c8d3d1c2614893695cee4428160405161216f9190613e69565b60405180910390a150565b6121826124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220590614282565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614a1e565b60405180910390fd5b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f410c5b0c182205a95058d14406d0ee4155a6307bfe9db934608043b307188f8e816040516122eb9190613e69565b60405180910390a150565b6122fe6124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190614282565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef90614aac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251f90614b3a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614bc8565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126709190614000565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e290614c56565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275090614ce4565b60405180910390fd5b5f811161279b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279290614d72565b60405180910390fd5b6127a3611932565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061280e57506127df611932565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156128245761281f8383835f612a5c565b612a02565b601154811115612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286090614dda565b60405180910390fd5b5f612873306116af565b90505f600c5482101590508080156128975750600b5f9054906101000a900460ff16155b80156128ef57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612930576001600b5f6101000a81548160ff021916908315150217905550612916612d47565b5f600b5f6101000a81548160ff0219169083151502179055505b5f6001905060055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129d0575060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156129d9575f90505b80156129f257600f54600d81905550601054600e819055505b6129fe86868684612a5c565b5050505b505050565b5f805f612a12612d6f565b915091508082612a229190614449565b9250505090565b5f805f80612a3685612fef565b92509250505f80612a4887858561303c565b509150915081819550955050505050915091565b80612a6a57612a696130ad565b5b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b07575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b1c57612b178484846130bd565b612d41565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612bb9575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bce57612bc9848484613304565b612d40565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c6c575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c8157612c7c84848461354b565b612d3f565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d1d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d3257612d2d848484613708565b612d3e565b612d3d84848461354b565b5b5b5b5b50505050565b5f612d51306116af565b9050601154811115612d635760115490505b612d6c816139d9565b50565b5f805f60095490505f60085490505f5b600780549050811015612fb9578260025f60078481548110612da457612da36144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612e8957508160035f60078481548110612e2557612e246144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612ea05760095460085494509450505050612feb565b60025f60078381548110612eb757612eb66144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612f24919061435b565b925060035f60078381548110612f3d57612f3c6144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482612faa919061435b565b91508080600101915050612d7f565b50600854600954612fca9190614449565b821015612fe257600954600854935093505050612feb565b81819350935050505b9091565b5f805f80612ffc85613bd8565b90505f61300886613bfa565b90505f8183613017919061453b565b90505f8188613026919061435b565b9050808484965096509650505050509193909250565b5f805f80613048612a07565b90505f81886130579190614df8565b90505f82886130669190614df8565b90505f83886130759190614df8565b90505f8183613084919061453b565b90505f8185613093919061435b565b905084818598509850985050505050505093509350939050565b5f600d819055505f600e81905550565b5f805f6130c984613c1c565b9250925092505f805f6130dd87868661303c565b9250925092508660035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461312c919061435b565b60035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b6919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613240919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061328b8186613c44565b61329484613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516132f19190614000565b60405180910390a3505050505050505050565b5f805f61331084613c1c565b9250925092505f805f61332487868661303c565b9250925092508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613373919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546133fd919061453b565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613487919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506134d28186613c44565b6134db84613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516135389190614000565b60405180910390a3505050505050505050565b5f805f61355784613c1c565b9250925092505f805f61356b87868661303c565b9250925092508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135ba919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613644919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061368f8186613c44565b61369884613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516136f59190614000565b60405180910390a3505050505050505050565b5f805f61371484613c1c565b9250925092505f805f61372887868661303c565b9250925092508660035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613777919061435b565b60035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613801919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461388b919061453b565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613915919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506139608186613c44565b61396984613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139c69190614000565b60405180910390a3505050505050505050565b5f600267ffffffffffffffff8111156139f5576139f4614e39565b5b604051908082528060200260200182016040528015613a235781602001602082028036833780820191505090505b50905030815f81518110613a3a57613a396144e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613aa957613aa86144e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b0e307f0000000000000000000000000000000000000000000000000000000000000000846124ba565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338ed1739835f8460125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613b90959493929190614f56565b5f604051808303815f875af1158015613bab573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190613bd391906150d5565b505050565b5f6064600d5483613be99190614df8565b613bf39190614449565b9050919050565b5f6064600e5483613c0b9190614df8565b613c159190614449565b9050919050565b5f805f805f80613c2b87612fef565b9250925092508282829550955095505050509193909250565b81600954613c52919061435b565b60098190555080600a54613c66919061453b565b600a819055507f56b5df500587465b57d8ce799cc562a294f136b75a13718c574d9d36bd82805881604051613c9b9190614000565b60405180910390a15050565b5f613cb0612a07565b90505f8183613cbf9190614df8565b90508060025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613d0a919061453b565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613e25578260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613de3919061453b565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613e5382613e2a565b9050919050565b613e6381613e49565b82525050565b5f602082019050613e7c5f830184613e5a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613ec482613e82565b613ece8185613e8c565b9350613ede818560208601613e9c565b613ee781613eaa565b840191505092915050565b5f6020820190508181035f830152613f0a8184613eba565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b613f2c81613e49565b8114613f36575f80fd5b50565b5f81359050613f4781613f23565b92915050565b5f819050919050565b613f5f81613f4d565b8114613f69575f80fd5b50565b5f81359050613f7a81613f56565b92915050565b5f8060408385031215613f9657613f95613f1b565b5b5f613fa385828601613f39565b9250506020613fb485828601613f6c565b9150509250929050565b5f8115159050919050565b613fd281613fbe565b82525050565b5f602082019050613feb5f830184613fc9565b92915050565b613ffa81613f4d565b82525050565b5f6020820190506140135f830184613ff1565b92915050565b5f819050919050565b5f61403c61403761403284613e2a565b614019565b613e2a565b9050919050565b5f61404d82614022565b9050919050565b5f61405e82614043565b9050919050565b61406e81614054565b82525050565b5f6020820190506140875f830184614065565b92915050565b5f602082840312156140a2576140a1613f1b565b5b5f6140af84828501613f6c565b91505092915050565b5f805f606084860312156140cf576140ce613f1b565b5b5f6140dc86828701613f39565b93505060206140ed86828701613f39565b92505060406140fe86828701613f6c565b9150509250925092565b5f60ff82169050919050565b61411d81614108565b82525050565b5f6020820190506141365f830184614114565b92915050565b5f6020828403121561415157614150613f1b565b5b5f61415e84828501613f39565b91505092915050565b61417081613fbe565b811461417a575f80fd5b50565b5f8135905061418b81614167565b92915050565b5f80604083850312156141a7576141a6613f1b565b5b5f6141b485828601613f6c565b92505060206141c58582860161417d565b9150509250929050565b5f602082840312156141e4576141e3613f1b565b5b5f6141f18482850161417d565b91505092915050565b5f80604083850312156142105761420f613f1b565b5b5f61421d85828601613f39565b925050602061422e85828601613f39565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61426c602083613e8c565b915061427782614238565b602082019050919050565b5f6020820190508181035f83015261429981614260565b9050919050565b7f4d6178205472616e73666572206c696d69742063616e206e6f74206265206c655f8201527f7373207468616e203530302c30303020746f6b656e7300000000000000000000602082015250565b5f6142fa603683613e8c565b9150614305826142a0565b604082019050919050565b5f6020820190508181035f830152614327816142ee565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61436582613f4d565b915061437083613f4d565b92508282039050818111156143885761438761432e565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6143e8602a83613e8c565b91506143f38261438e565b604082019050919050565b5f6020820190508181035f830152614415816143dc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61445382613f4d565b915061445e83613f4d565b92508261446e5761446d61441c565b5b828204905092915050565b7f4163636f756e7420697320616c726561647920496e636c7564656400000000005f82015250565b5f6144ad601b83613e8c565b91506144b882614479565b602082019050919050565b5f6020820190508181035f8301526144da816144a1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61454582613f4d565b915061455083613f4d565b92508282019050808211156145685761456761432e565b5b92915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f6145c8602c83613e8c565b91506145d38261456e565b604082019050919050565b5f6020820190508181035f8301526145f5816145bc565b9050919050565b7f416c72656179206578636c756465642066726f6d2066656500000000000000005f82015250565b5f614630601883613e8c565b915061463b826145fc565b602082019050919050565b5f6020820190508181035f83015261465d81614624565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614698601f83613e8c565b91506146a382614664565b602082019050919050565b5f6020820190508181035f8301526146c58161468c565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f614700601b83613e8c565b915061470b826146cc565b602082019050919050565b5f6020820190508181035f83015261472d816146f4565b9050919050565b7f54726164696e6720697320616c726561647920696e20746865206465736972655f8201527f6420737461746500000000000000000000000000000000000000000000000000602082015250565b5f61478e602783613e8c565b915061479982614734565b604082019050919050565b5f6020820190508181035f8301526147bb81614782565b9050919050565b7f596f752063616e206e6f742073657420706c616e746f47726f757020746178205f8201527f6d6f7265207468656e2036250000000000000000000000000000000000000000602082015250565b5f61481c602c83613e8c565b9150614827826147c2565b604082019050919050565b5f6020820190508181035f83015261484981614810565b9050919050565b7f596f752063616e206e6f7420736574207265666c656374696f6e20746178206d5f8201527f6f7265207468656e203625000000000000000000000000000000000000000000602082015250565b5f6148aa602b83613e8c565b91506148b582614850565b604082019050919050565b5f6020820190508181035f8301526148d78161489e565b9050919050565b7f416d6f756e742073686f756c64206265206d6f7265207468616e207a65726f205f8201527f616e64206c657373207468616e203530306b20746f6b656e7300000000000000602082015250565b5f614938603983613e8c565b9150614943826148de565b604082019050919050565b5f6020820190508181035f8301526149658161492c565b9050919050565b7f416c7265617920696e636c7564656420696e20666565000000000000000000005f82015250565b5f6149a0601683613e8c565b91506149ab8261496c565b602082019050919050565b5f6020820190508181035f8301526149cd81614994565b9050919050565b7f77616c6c65742063616e206e6f74206265207a65726f000000000000000000005f82015250565b5f614a08601683613e8c565b9150614a13826149d4565b602082019050919050565b5f6020820190508181035f830152614a35816149fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a96602683613e8c565b9150614aa182614a3c565b604082019050919050565b5f6020820190508181035f830152614ac381614a8a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614b24602483613e8c565b9150614b2f82614aca565b604082019050919050565b5f6020820190508181035f830152614b5181614b18565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614bb2602283613e8c565b9150614bbd82614b58565b604082019050919050565b5f6020820190508181035f830152614bdf81614ba6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614c40602583613e8c565b9150614c4b82614be6565b604082019050919050565b5f6020820190508181035f830152614c6d81614c34565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614cce602383613e8c565b9150614cd982614c74565b604082019050919050565b5f6020820190508181035f830152614cfb81614cc2565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614d5c602983613e8c565b9150614d6782614d02565b604082019050919050565b5f6020820190508181035f830152614d8981614d50565b9050919050565b7f5472616e73616374696f6e206c696d69742065786365656400000000000000005f82015250565b5f614dc4601883613e8c565b9150614dcf82614d90565b602082019050919050565b5f6020820190508181035f830152614df181614db8565b9050919050565b5f614e0282613f4d565b9150614e0d83613f4d565b9250828202614e1b81613f4d565b91508282048414831517614e3257614e3161432e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f614e89614e84614e7f84614e66565b614019565b613f4d565b9050919050565b614e9981614e6f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614ed181613e49565b82525050565b5f614ee28383614ec8565b60208301905092915050565b5f602082019050919050565b5f614f0482614e9f565b614f0e8185614ea9565b9350614f1983614eb9565b805f5b83811015614f49578151614f308882614ed7565b9750614f3b83614eee565b925050600181019050614f1c565b5085935050505092915050565b5f60a082019050614f695f830188613ff1565b614f766020830187614e90565b8181036040830152614f888186614efa565b9050614f976060830185613e5a565b614fa46080830184613ff1565b9695505050505050565b5f80fd5b614fbb82613eaa565b810181811067ffffffffffffffff82111715614fda57614fd9614e39565b5b80604052505050565b5f614fec613f12565b9050614ff88282614fb2565b919050565b5f67ffffffffffffffff82111561501757615016614e39565b5b602082029050602081019050919050565b5f80fd5b5f8151905061503a81613f56565b92915050565b5f61505261504d84614ffd565b614fe3565b9050808382526020820190506020840283018581111561507557615074615028565b5b835b8181101561509e578061508a888261502c565b845260208401935050602081019050615077565b5050509392505050565b5f82601f8301126150bc576150bb614fae565b5b81516150cc848260208601615040565b91505092915050565b5f602082840312156150ea576150e9613f1b565b5b5f82015167ffffffffffffffff81111561510757615106613f1f565b5b615113848285016150a8565b9150509291505056fea26469706673582212208be70300b9e73cec4472101880c67349ead0e8121072eaaffb5290beb25c221f64736f6c634300081a00330000000000000000000000009c27bf771ea62de8e4281e971f72d52d49c58486
Deployed Bytecode
0x608060405260043610610228575f3560e01c806370a0823111610122578063b220aae1116100aa578063dd62ed3e1161006e578063dd62ed3e1461082b578063e1b2cfb614610867578063ea2f0b3714610891578063eef63f1f146108b9578063f2fde38b146108e15761022f565b8063b220aae11461075f578063b4e1e6ad14610787578063bbae8086146107b1578063d621e813146107d9578063d7d7442f146108035761022f565b80638f70ccf7116100f15780638f70ccf71461066b57806395d89b4114610693578063a457c2d7146106bd578063a9059cbb146106f9578063a9e75723146107355761022f565b806370a08231146105b3578063715018a6146105ef57806388f82020146106055780638da5cb5b146106415761022f565b8063313ce567116101b0578063437823ec11610174578063437823ec146104c15780634549b039146104e957806349bd5a5e1461052557806352390c021461054f5780635342acb4146105775761022f565b8063313ce567146103e15780633685d4191461040b57806339509351146104335780633ae2f3541461046f5780633bd5d173146104995761022f565b80631694505e116101f75780631694505e146102ed57806318160ddd146103175780631978c0b31461034157806323b872dd146103695780632d838119146103a55761022f565b806302d454571461023357806306fdde031461025d578063095ea7b31461028757806313114a9d146102c35761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b50610247610909565b6040516102549190613e69565b60405180910390f35b348015610268575f80fd5b5061027161092d565b60405161027e9190613ef2565b60405180910390f35b348015610292575f80fd5b506102ad60048036038101906102a89190613f80565b61096a565b6040516102ba9190613fd8565b60405180910390f35b3480156102ce575f80fd5b506102d7610987565b6040516102e49190614000565b60405180910390f35b3480156102f8575f80fd5b50610301610990565b60405161030e9190614074565b60405180910390f35b348015610322575f80fd5b5061032b6109b4565b6040516103389190614000565b60405180910390f35b34801561034c575f80fd5b506103676004803603810190610362919061408d565b6109bd565b005b348015610374575f80fd5b5061038f600480360381019061038a91906140b8565b610ae1565b60405161039c9190613fd8565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c6919061408d565b610b94565b6040516103d89190614000565b60405180910390f35b3480156103ec575f80fd5b506103f5610bf9565b6040516104029190614123565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c919061413c565b610c01565b005b34801561043e575f80fd5b5061045960048036038101906104549190613f80565b610f68565b6040516104669190613fd8565b60405180910390f35b34801561047a575f80fd5b5061048361100f565b6040516104909190614000565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba919061408d565b611015565b005b3480156104cc575f80fd5b506104e760048036038101906104e2919061413c565b61116e565b005b3480156104f4575f80fd5b5061050f600480360381019061050a9190614191565b61131b565b60405161051c9190614000565b60405180910390f35b348015610530575f80fd5b50610539611394565b6040516105469190613e69565b60405180910390f35b34801561055a575f80fd5b506105756004803603810190610570919061413c565b6113b8565b005b348015610582575f80fd5b5061059d6004803603810190610598919061413c565b611692565b6040516105aa9190613fd8565b60405180910390f35b3480156105be575f80fd5b506105d960048036038101906105d4919061413c565b6116af565b6040516105e69190614000565b60405180910390f35b3480156105fa575f80fd5b50610603611792565b005b348015610610575f80fd5b5061062b6004803603810190610626919061413c565b6118e0565b6040516106389190613fd8565b60405180910390f35b34801561064c575f80fd5b50610655611932565b6040516106629190613e69565b60405180910390f35b348015610676575f80fd5b50610691600480360381019061068c91906141cf565b611959565b005b34801561069e575f80fd5b506106a7611aa5565b6040516106b49190613ef2565b60405180910390f35b3480156106c8575f80fd5b506106e360048036038101906106de9190613f80565b611ae2565b6040516106f09190613fd8565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a9190613f80565b611b89565b60405161072c9190613fd8565b60405180910390f35b348015610740575f80fd5b50610749611ba6565b6040516107569190614000565b60405180910390f35b34801561076a575f80fd5b506107856004803603810190610780919061408d565b611bac565b005b348015610792575f80fd5b5061079b611cc7565b6040516107a89190613e69565b60405180910390f35b3480156107bc575f80fd5b506107d760048036038101906107d2919061408d565b611cec565b005b3480156107e4575f80fd5b506107ed611e07565b6040516107fa9190613fd8565b60405180910390f35b34801561080e575f80fd5b506108296004803603810190610824919061408d565b611e1a565b005b348015610836575f80fd5b50610851600480360381019061084c91906141fa565b611f47565b60405161085e9190614000565b60405180910390f35b348015610872575f80fd5b5061087b611fc9565b6040516108889190614000565b60405180910390f35b34801561089c575f80fd5b506108b760048036038101906108b2919061413c565b611fcf565b005b3480156108c4575f80fd5b506108df60048036038101906108da919061413c565b61217a565b005b3480156108ec575f80fd5b506109076004803603810190610902919061413c565b6122f6565b005b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b60606040518060400160405280600581526020017f36454e5345000000000000000000000000000000000000000000000000000000815250905090565b5f61097d6109766124b3565b84846124ba565b6001905092915050565b5f600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600854905090565b6109c56124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890614282565b60405180910390fd5b6969e10de76676d0800000811015610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590614310565b60405180910390fd5b806011819055507f44d540c6079791f805bc9b5d5a643dbf1f545ec260212b2b2478ef9d9ed0768e601154604051610ad69190614000565b60405180910390a150565b5f610aed84848461267d565b610b8984610af96124b3565b8460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b406124b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b84919061435b565b6124ba565b600190509392505050565b5f600954821115610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd1906143fe565b60405180910390fd5b5f610be3612a07565b90508083610bf19190614449565b915050919050565b5f6012905090565b610c096124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90614282565b60405180910390fd5b60065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d15906144c3565b60405180910390fd5b5f5b600780549050811015610f2d578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d5857610d576144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f205760076001600780549050610daf919061435b565b81548110610dc057610dbf6144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610dfc57610dfb6144e1565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506007805480610ee957610ee861450e565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f2d565b8080600101915050610d20565b507f47ab6b2d1f416edec684889dc42cd04ed7cc6c6244edaa04c4215e107754861481604051610f5d9190613e69565b60405180910390a150565b5f611005610f746124b3565b848460045f610f816124b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611000919061453b565b6124ba565b6001905092915050565b600f5481565b5f61101e6124b3565b905060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906145de565b60405180910390fd5b5f6110b483612a29565b5090508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611100919061435b565b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060095461114f919061435b565b60098190555082600a54611163919061453b565b600a81905550505050565b6111766124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614282565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128390614646565b60405180910390fd5b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c816040516113109190613e69565b60405180910390a150565b5f600854831115611361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611358906146ae565b60405180910390fd5b8161137c575f61137084612a29565b5090508091505061138e565b5f61138684612a29565b915050809150505b92915050565b7f000000000000000000000000b8edb72a75ef76bc60ff4d5da124cf118a1ed8b081565b6113c06124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144390614282565b60405180910390fd5b60065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90614716565b60405180910390fd5b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156115a35761156160025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b94565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600781908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f110b1fbed46dec7bc9019c3fba97541a3d64821a824872bb7b2ad678490855bf816040516116879190613e69565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156117445760035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061178d565b61178a60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b94565b90505b919050565b61179a6124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90614282565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119616124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614282565b60405180910390fd5b801515600b60019054906101000a900460ff16151503611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a39906147a4565b60405180910390fd5b80600b60016101000a81548160ff0219169083151502179055507f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e735600b60019054906101000a900460ff16604051611a9a9190613fd8565b60405180910390a150565b60606040518060400160405280600381526020017f364f530000000000000000000000000000000000000000000000000000000000815250905090565b5f611b7f611aee6124b3565b848460045f611afb6124b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b7a919061435b565b6124ba565b6001905092915050565b5f611b9c611b956124b3565b848461267d565b6001905092915050565b60115481565b611bb46124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790614282565b60405180910390fd5b6006811115611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90614832565b60405180910390fd5b806010819055507fa815c78ebc61f51da32266e7b03d1f5bddd25a61e988127ea02e702754a25ece601054604051611cbc9190614000565b60405180910390a150565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cf46124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614282565b60405180910390fd5b6006811115611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb906148c0565b60405180910390fd5b80600f819055507ff2e8ba611224a81bdb301fbf10ccdc28d0d972efd159b4eb954d7939c2657fbd600f54604051611dfc9190614000565b60405180910390a150565b600b60019054906101000a900460ff1681565b611e226124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590614282565b60405180910390fd5b5f81118015611ec757506969e10de76676d08000008111155b611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd9061494e565b60405180910390fd5b80600c819055507fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe17181604051611f3c9190614000565b60405180910390a150565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b611fd76124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614282565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906149b6565b60405180910390fd5b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f78ce087db51d01d3e32355f2d83455d5a39f99194c8d3d1c2614893695cee4428160405161216f9190613e69565b60405180910390a150565b6121826124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220590614282565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614a1e565b60405180910390fd5b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f410c5b0c182205a95058d14406d0ee4155a6307bfe9db934608043b307188f8e816040516122eb9190613e69565b60405180910390a150565b6122fe6124b3565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190614282565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef90614aac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251f90614b3a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614bc8565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126709190614000565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e290614c56565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275090614ce4565b60405180910390fd5b5f811161279b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279290614d72565b60405180910390fd5b6127a3611932565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061280e57506127df611932565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156128245761281f8383835f612a5c565b612a02565b601154811115612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286090614dda565b60405180910390fd5b5f612873306116af565b90505f600c5482101590508080156128975750600b5f9054906101000a900460ff16155b80156128ef57507f000000000000000000000000b8edb72a75ef76bc60ff4d5da124cf118a1ed8b073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612930576001600b5f6101000a81548160ff021916908315150217905550612916612d47565b5f600b5f6101000a81548160ff0219169083151502179055505b5f6001905060055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129d0575060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156129d9575f90505b80156129f257600f54600d81905550601054600e819055505b6129fe86868684612a5c565b5050505b505050565b5f805f612a12612d6f565b915091508082612a229190614449565b9250505090565b5f805f80612a3685612fef565b92509250505f80612a4887858561303c565b509150915081819550955050505050915091565b80612a6a57612a696130ad565b5b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b07575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b1c57612b178484846130bd565b612d41565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612bb9575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bce57612bc9848484613304565b612d40565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c6c575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c8157612c7c84848461354b565b612d3f565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d1d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d3257612d2d848484613708565b612d3e565b612d3d84848461354b565b5b5b5b5b50505050565b5f612d51306116af565b9050601154811115612d635760115490505b612d6c816139d9565b50565b5f805f60095490505f60085490505f5b600780549050811015612fb9578260025f60078481548110612da457612da36144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612e8957508160035f60078481548110612e2557612e246144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612ea05760095460085494509450505050612feb565b60025f60078381548110612eb757612eb66144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612f24919061435b565b925060035f60078381548110612f3d57612f3c6144e1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482612faa919061435b565b91508080600101915050612d7f565b50600854600954612fca9190614449565b821015612fe257600954600854935093505050612feb565b81819350935050505b9091565b5f805f80612ffc85613bd8565b90505f61300886613bfa565b90505f8183613017919061453b565b90505f8188613026919061435b565b9050808484965096509650505050509193909250565b5f805f80613048612a07565b90505f81886130579190614df8565b90505f82886130669190614df8565b90505f83886130759190614df8565b90505f8183613084919061453b565b90505f8185613093919061435b565b905084818598509850985050505050505093509350939050565b5f600d819055505f600e81905550565b5f805f6130c984613c1c565b9250925092505f805f6130dd87868661303c565b9250925092508660035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461312c919061435b565b60035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b6919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613240919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061328b8186613c44565b61329484613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516132f19190614000565b60405180910390a3505050505050505050565b5f805f61331084613c1c565b9250925092505f805f61332487868661303c565b9250925092508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613373919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546133fd919061453b565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613487919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506134d28186613c44565b6134db84613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516135389190614000565b60405180910390a3505050505050505050565b5f805f61355784613c1c565b9250925092505f805f61356b87868661303c565b9250925092508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546135ba919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613644919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061368f8186613c44565b61369884613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516136f59190614000565b60405180910390a3505050505050505050565b5f805f61371484613c1c565b9250925092505f805f61372887868661303c565b9250925092508660035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613777919061435b565b60035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613801919061435b565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508560035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461388b919061453b565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613915919061453b565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506139608186613c44565b61396984613ca7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139c69190614000565b60405180910390a3505050505050505050565b5f600267ffffffffffffffff8111156139f5576139f4614e39565b5b604051908082528060200260200182016040528015613a235781602001602082028036833780820191505090505b50905030815f81518110613a3a57613a396144e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881600181518110613aa957613aa86144e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b0e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124ba565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff166338ed1739835f8460125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613b90959493929190614f56565b5f604051808303815f875af1158015613bab573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190613bd391906150d5565b505050565b5f6064600d5483613be99190614df8565b613bf39190614449565b9050919050565b5f6064600e5483613c0b9190614df8565b613c159190614449565b9050919050565b5f805f805f80613c2b87612fef565b9250925092508282829550955095505050509193909250565b81600954613c52919061435b565b60098190555080600a54613c66919061453b565b600a819055507f56b5df500587465b57d8ce799cc562a294f136b75a13718c574d9d36bd82805881604051613c9b9190614000565b60405180910390a15050565b5f613cb0612a07565b90505f8183613cbf9190614df8565b90508060025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613d0a919061453b565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613e25578260035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613de3919061453b565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613e5382613e2a565b9050919050565b613e6381613e49565b82525050565b5f602082019050613e7c5f830184613e5a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613ec482613e82565b613ece8185613e8c565b9350613ede818560208601613e9c565b613ee781613eaa565b840191505092915050565b5f6020820190508181035f830152613f0a8184613eba565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b613f2c81613e49565b8114613f36575f80fd5b50565b5f81359050613f4781613f23565b92915050565b5f819050919050565b613f5f81613f4d565b8114613f69575f80fd5b50565b5f81359050613f7a81613f56565b92915050565b5f8060408385031215613f9657613f95613f1b565b5b5f613fa385828601613f39565b9250506020613fb485828601613f6c565b9150509250929050565b5f8115159050919050565b613fd281613fbe565b82525050565b5f602082019050613feb5f830184613fc9565b92915050565b613ffa81613f4d565b82525050565b5f6020820190506140135f830184613ff1565b92915050565b5f819050919050565b5f61403c61403761403284613e2a565b614019565b613e2a565b9050919050565b5f61404d82614022565b9050919050565b5f61405e82614043565b9050919050565b61406e81614054565b82525050565b5f6020820190506140875f830184614065565b92915050565b5f602082840312156140a2576140a1613f1b565b5b5f6140af84828501613f6c565b91505092915050565b5f805f606084860312156140cf576140ce613f1b565b5b5f6140dc86828701613f39565b93505060206140ed86828701613f39565b92505060406140fe86828701613f6c565b9150509250925092565b5f60ff82169050919050565b61411d81614108565b82525050565b5f6020820190506141365f830184614114565b92915050565b5f6020828403121561415157614150613f1b565b5b5f61415e84828501613f39565b91505092915050565b61417081613fbe565b811461417a575f80fd5b50565b5f8135905061418b81614167565b92915050565b5f80604083850312156141a7576141a6613f1b565b5b5f6141b485828601613f6c565b92505060206141c58582860161417d565b9150509250929050565b5f602082840312156141e4576141e3613f1b565b5b5f6141f18482850161417d565b91505092915050565b5f80604083850312156142105761420f613f1b565b5b5f61421d85828601613f39565b925050602061422e85828601613f39565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61426c602083613e8c565b915061427782614238565b602082019050919050565b5f6020820190508181035f83015261429981614260565b9050919050565b7f4d6178205472616e73666572206c696d69742063616e206e6f74206265206c655f8201527f7373207468616e203530302c30303020746f6b656e7300000000000000000000602082015250565b5f6142fa603683613e8c565b9150614305826142a0565b604082019050919050565b5f6020820190508181035f830152614327816142ee565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61436582613f4d565b915061437083613f4d565b92508282039050818111156143885761438761432e565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6143e8602a83613e8c565b91506143f38261438e565b604082019050919050565b5f6020820190508181035f830152614415816143dc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61445382613f4d565b915061445e83613f4d565b92508261446e5761446d61441c565b5b828204905092915050565b7f4163636f756e7420697320616c726561647920496e636c7564656400000000005f82015250565b5f6144ad601b83613e8c565b91506144b882614479565b602082019050919050565b5f6020820190508181035f8301526144da816144a1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61454582613f4d565b915061455083613f4d565b92508282019050808211156145685761456761432e565b5b92915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f6145c8602c83613e8c565b91506145d38261456e565b604082019050919050565b5f6020820190508181035f8301526145f5816145bc565b9050919050565b7f416c72656179206578636c756465642066726f6d2066656500000000000000005f82015250565b5f614630601883613e8c565b915061463b826145fc565b602082019050919050565b5f6020820190508181035f83015261465d81614624565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614698601f83613e8c565b91506146a382614664565b602082019050919050565b5f6020820190508181035f8301526146c58161468c565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f614700601b83613e8c565b915061470b826146cc565b602082019050919050565b5f6020820190508181035f83015261472d816146f4565b9050919050565b7f54726164696e6720697320616c726561647920696e20746865206465736972655f8201527f6420737461746500000000000000000000000000000000000000000000000000602082015250565b5f61478e602783613e8c565b915061479982614734565b604082019050919050565b5f6020820190508181035f8301526147bb81614782565b9050919050565b7f596f752063616e206e6f742073657420706c616e746f47726f757020746178205f8201527f6d6f7265207468656e2036250000000000000000000000000000000000000000602082015250565b5f61481c602c83613e8c565b9150614827826147c2565b604082019050919050565b5f6020820190508181035f83015261484981614810565b9050919050565b7f596f752063616e206e6f7420736574207265666c656374696f6e20746178206d5f8201527f6f7265207468656e203625000000000000000000000000000000000000000000602082015250565b5f6148aa602b83613e8c565b91506148b582614850565b604082019050919050565b5f6020820190508181035f8301526148d78161489e565b9050919050565b7f416d6f756e742073686f756c64206265206d6f7265207468616e207a65726f205f8201527f616e64206c657373207468616e203530306b20746f6b656e7300000000000000602082015250565b5f614938603983613e8c565b9150614943826148de565b604082019050919050565b5f6020820190508181035f8301526149658161492c565b9050919050565b7f416c7265617920696e636c7564656420696e20666565000000000000000000005f82015250565b5f6149a0601683613e8c565b91506149ab8261496c565b602082019050919050565b5f6020820190508181035f8301526149cd81614994565b9050919050565b7f77616c6c65742063616e206e6f74206265207a65726f000000000000000000005f82015250565b5f614a08601683613e8c565b9150614a13826149d4565b602082019050919050565b5f6020820190508181035f830152614a35816149fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a96602683613e8c565b9150614aa182614a3c565b604082019050919050565b5f6020820190508181035f830152614ac381614a8a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614b24602483613e8c565b9150614b2f82614aca565b604082019050919050565b5f6020820190508181035f830152614b5181614b18565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614bb2602283613e8c565b9150614bbd82614b58565b604082019050919050565b5f6020820190508181035f830152614bdf81614ba6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614c40602583613e8c565b9150614c4b82614be6565b604082019050919050565b5f6020820190508181035f830152614c6d81614c34565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614cce602383613e8c565b9150614cd982614c74565b604082019050919050565b5f6020820190508181035f830152614cfb81614cc2565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f614d5c602983613e8c565b9150614d6782614d02565b604082019050919050565b5f6020820190508181035f830152614d8981614d50565b9050919050565b7f5472616e73616374696f6e206c696d69742065786365656400000000000000005f82015250565b5f614dc4601883613e8c565b9150614dcf82614d90565b602082019050919050565b5f6020820190508181035f830152614df181614db8565b9050919050565b5f614e0282613f4d565b9150614e0d83613f4d565b9250828202614e1b81613f4d565b91508282048414831517614e3257614e3161432e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f614e89614e84614e7f84614e66565b614019565b613f4d565b9050919050565b614e9981614e6f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614ed181613e49565b82525050565b5f614ee28383614ec8565b60208301905092915050565b5f602082019050919050565b5f614f0482614e9f565b614f0e8185614ea9565b9350614f1983614eb9565b805f5b83811015614f49578151614f308882614ed7565b9750614f3b83614eee565b925050600181019050614f1c565b5085935050505092915050565b5f60a082019050614f695f830188613ff1565b614f766020830187614e90565b8181036040830152614f888186614efa565b9050614f976060830185613e5a565b614fa46080830184613ff1565b9695505050505050565b5f80fd5b614fbb82613eaa565b810181811067ffffffffffffffff82111715614fda57614fd9614e39565b5b80604052505050565b5f614fec613f12565b9050614ff88282614fb2565b919050565b5f67ffffffffffffffff82111561501757615016614e39565b5b602082029050602081019050919050565b5f80fd5b5f8151905061503a81613f56565b92915050565b5f61505261504d84614ffd565b614fe3565b9050808382526020820190506020840283018581111561507557615074615028565b5b835b8181101561509e578061508a888261502c565b845260208401935050602081019050615077565b5050509392505050565b5f82601f8301126150bc576150bb614fae565b5b81516150cc848260208601615040565b91505092915050565b5f602082840312156150ea576150e9613f1b565b5b5f82015167ffffffffffffffff81111561510757615106613f1f565b5b615113848285016150a8565b9150509291505056fea26469706673582212208be70300b9e73cec4472101880c67349ead0e8121072eaaffb5290beb25c221f64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009c27bf771ea62de8e4281e971f72d52d49c58486
-----Decoded View---------------
Arg [0] : _wallet (address): 0x9C27bF771ea62dE8e4281e971f72d52D49c58486
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009c27bf771ea62de8e4281e971f72d52d49c58486
Deployed Bytecode Sourcemap
13128:35358:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14288:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16552:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20306:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23761:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14185:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17690:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40199:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21095:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26138:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17408:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27823:520;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21883:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14016:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24229:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28702:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25234:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14243:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26747:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13361:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18292:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6750:148;;;;;;;;;;;;;:::i;:::-;;23293:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38619:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16940:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22617:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18973:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14097:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39270:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14378:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38918:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13874:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30718:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19682:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14053:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29289:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29846:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7053:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14288:81;;;:::o;16552:84::-;16591:13;16624:4;;;;;;;;;;;;;;;;;16617:11;;16552:84;:::o;20306:161::-;20381:4;20398:39;20407:12;:10;:12::i;:::-;20421:7;20430:6;20398:8;:39::i;:::-;20455:4;20448:11;;20306:161;;;;:::o;23761:89::-;23805:7;23832:10;;23825:17;;23761:89;:::o;14185:51::-;;;:::o;17690:97::-;17745:7;17772;;17765:14;;17690:97;:::o;40199:263::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40292:15:::1;40282:6;:25;;40274:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;40397:6;40377:17;:26;;;;40419:35;40436:17;;40419:35;;;;;;:::i;:::-;;;;;;;;40199:263:::0;:::o;21095:266::-;21195:4;21212:36;21222:6;21230:9;21241:6;21212:9;:36::i;:::-;21259:72;21268:6;21276:12;:10;:12::i;:::-;21324:6;21290:11;:19;21302:6;21290:19;;;;;;;;;;;;;;;:33;21310:12;:10;:12::i;:::-;21290:33;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;21259:8;:72::i;:::-;21349:4;21342:11;;21095:266;;;;;:::o;26138:250::-;26204:7;26243;;26232;:18;;26224:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26308:19;26331:10;:8;:10::i;:::-;26308:33;;26369:11;26359:7;:21;;;;:::i;:::-;26352:28;;;26138:250;;;:::o;17408:84::-;17451:5;13833:2;17469:15;;17408:84;:::o;27823:520::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27905:11:::1;:20;27917:7;27905:20;;;;;;;;;;;;;;;;;;;;;;;;;27897:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27973:9;27968:327;27992:9;:16;;;;27988:1;:20;27968:327;;;28050:7;28034:23;;:9;28044:1;28034:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;28030:254:::1;;28093:9;28122:1;28103:9;:16;;;;:20;;;;:::i;:::-;28093:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28078:9;28088:1;28078:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28162:1;28143:7;:16;28151:7;28143:16;;;;;;;;;;;;;;;:20;;;;28205:5;28182:11;:20;28194:7;28182:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;28229:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;28263:5;;28030:254;28010:3;;;;;;;27968:327;;;;28310:25;28327:7;28310:25;;;;;;:::i;:::-;;;;;;;;27823:520:::0;:::o;21883:215::-;21973:4;21990:78;21999:12;:10;:12::i;:::-;22013:7;22057:10;22022:11;:25;22034:12;:10;:12::i;:::-;22022:25;;;;;;;;;;;;;;;:34;22048:7;22022:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;21990:8;:78::i;:::-;22086:4;22079:11;;21883:215;;;;:::o;14016:30::-;;;;:::o;24229:359::-;24283:14;24300:12;:10;:12::i;:::-;24283:29;;24332:11;:19;24344:6;24332:19;;;;;;;;;;;;;;;;;;;;;;;;;24331:20;24323:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24412:15;24432:18;24442:7;24432:9;:18::i;:::-;24411:39;;;24495:7;24479;:15;24487:6;24479:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;24461:7;:15;24469:6;24461:15;;;;;;;;;;;;;;;:41;;;;24531:7;24523;;:15;;;;:::i;:::-;24513:7;:25;;;;24573:7;24562:10;;:18;;;;:::i;:::-;24549:10;:31;;;;24272:316;;24229:359;:::o;28702:227::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28783:17:::1;:26;28801:7;28783:26;;;;;;;;;;;;;;;;;;;;;;;;;28782:27;28774:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28877:4;28848:17;:26;28866:7;28848:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;28897:24;28913:7;28897:24;;;;;;:::i;:::-;;;;;;;;28702:227:::0;:::o;25234:430::-;25326:7;25365;;25354;:18;;25346:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25424:17;25419:238;;25459:15;25479:18;25489:7;25479:9;:18::i;:::-;25458:39;;;25520:7;25513:14;;;;;25419:238;25562:23;25589:18;25599:7;25589:9;:18::i;:::-;25560:47;;;25630:15;25623:22;;;25234:430;;;;;:::o;14243:38::-;;;:::o;26747:376::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26830:11:::1;:20;26842:7;26830:20;;;;;;;;;;;;;;;;;;;;;;;;;26829:21;26821:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26915:1;26896:7;:16;26904:7;26896:16;;;;;;;;;;;;;;;;:20;26893:108;;;26952:37;26972:7;:16;26980:7;26972:16;;;;;;;;;;;;;;;;26952:19;:37::i;:::-;26933:7;:16;26941:7;26933:16;;;;;;;;;;;;;;;:56;;;;26893:108;27034:4;27011:11;:20;27023:7;27011:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27049:9;27064:7;27049:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27088:27;27107:7;27088:27;;;;;;:::i;:::-;;;;;;;;26747:376:::0;:::o;13361:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;18292:222::-;18358:7;18382:11;:20;18394:7;18382:20;;;;;;;;;;;;;;;;;;;;;;;;;18378:49;;;18411:7;:16;18419:7;18411:16;;;;;;;;;;;;;;;;18404:23;;;;18378:49;18455:37;18475:7;:16;18483:7;18475:16;;;;;;;;;;;;;;;;18455:19;:37::i;:::-;18448:44;;18292:222;;;;:::o;6750:148::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6857:1:::1;6820:40;;6841:6;::::0;::::1;;;;;;;;6820:40;;;;;;;;;;;;6888:1;6871:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6750:148::o:0;23293:122::-;23363:4;23387:11;:20;23399:7;23387:20;;;;;;;;;;;;;;;;;;;;;;;;;23380:27;;23293:122;;;:::o;6107:79::-;6145:7;6172:6;;;;;;;;;;;6165:13;;6107:79;:::o;38619:222::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38707:7:::1;38691:23;;:12;;;;;;;;;;;:23;;::::0;38683:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38784:7;38769:12;;:22;;;;;;;;;;;;;;;;;;38807:26;38820:12;;;;;;;;;;;38807:26;;;;;;:::i;:::-;;;;;;;;38619:222:::0;:::o;16940:88::-;16981:13;17014:6;;;;;;;;;;;;;;;;;17007:13;;16940:88;:::o;22617:225::-;22712:4;22729:83;22738:12;:10;:12::i;:::-;22752:7;22796:15;22761:11;:25;22773:12;:10;:12::i;:::-;22761:25;;;;;;;;;;;;;;;:34;22787:7;22761:34;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;22729:8;:83::i;:::-;22830:4;22823:11;;22617:225;;;;:::o;18973:169::-;19053:4;19070:42;19080:12;:10;:12::i;:::-;19094:9;19105:6;19070:9;:42::i;:::-;19130:4;19123:11;;18973:169;;;;:::o;14097:56::-;;;;:::o;39270:247::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39370:1:::1;39357:9;:14;;39349:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39452:9;39435:14;:26;;;;39477:32;39494:14;;39477:32;;;;;;:::i;:::-;;;;;;;;39270:247:::0;:::o;14378:32::-;;;;;;;;;;;;;:::o;38918:274::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39036:1:::1;39015:17;:22;;39007:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39116:17;39100:13;:33;;;;39149:35;39170:13;;39149:35;;;;;;:::i;:::-;;;;;;;;38918:274:::0;:::o;13874:24::-;;;;;;;;;;;;;:::o;30718:262::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30806:1:::1;30797:6;:10;:42;;;;;30821:18;30811:6;:28;;30797:42;30789:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30926:6;30911:12;:21;;;;30948:24;30965:6;30948:24;;;;;;:::i;:::-;;;;;;;;30718:262:::0;:::o;19682:145::-;19765:7;19792:11;:18;19804:5;19792:18;;;;;;;;;;;;;;;:27;19811:7;19792:27;;;;;;;;;;;;;;;;19785:34;;19682:145;;;;:::o;14053:31::-;;;;:::o;29289:220::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29366:17:::1;:26;29384:7;29366:26;;;;;;;;;;;;;;;;;;;;;;;;;29358:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29458:5;29429:17;:26;29447:7;29429:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;29479:22;29493:7;29479:22;;;;;;:::i;:::-;;;;;;;;29289:220:::0;:::o;29846:221::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29947:1:::1;29929:20;;:6;:20;;::::0;29921:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30006:6;29986:17;;:26;;;;;;;;;;;;;;;;;;30028:31;30052:6;30028:31;;;;;;:::i;:::-;;;;;;;;29846:221:::0;:::o;7053:244::-;6329:12;:10;:12::i;:::-;6319:22;;:6;;;;;;;;;;:22;;;6311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7162:1:::1;7142:22;;:8;:22;;::::0;7134:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7252:8;7223:38;;7244:6;::::0;::::1;;;;;;;;7223:38;;;;;;;;;;;;7281:8;7272:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7053:244:::0;:::o;4638:115::-;4691:15;4734:10;4719:26;;4638:115;:::o;31751:337::-;31861:1;31844:19;;:5;:19;;;31836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31942:1;31923:21;;:7;:21;;;31915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32026:6;31996:11;:18;32008:5;31996:18;;;;;;;;;;;;;;;:27;32015:7;31996:27;;;;;;;;;;;;;;;:36;;;;32064:7;32048:32;;32057:5;32048:32;;;32073:6;32048:32;;;;;;:::i;:::-;;;;;;;;31751:337;;;:::o;40770:1423::-;40876:1;40860:18;;:4;:18;;;40852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40953:1;40939:16;;:2;:16;;;40931:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41023:1;41014:6;:10;41006:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41095:7;:5;:7::i;:::-;41087:15;;:4;:15;;;:32;;;;41112:7;:5;:7::i;:::-;41106:13;;:2;:13;;;41087:32;41083:121;;;41135:36;41150:4;41155:2;41158:6;41165:5;41135:14;:36::i;:::-;41186:7;;41083:121;41234:17;;41224:6;:27;;41216:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41291:28;41322:24;41340:4;41322:9;:24::i;:::-;41291:55;;41367:24;41418:12;;41394:20;:36;;41367:63;;41459:19;:45;;;;;41496:8;;;;;;;;;;;41495:9;41459:45;:83;;;;;41529:13;41521:21;;:4;:21;;;;41459:83;41441:218;;;41581:4;41570:8;;:15;;;;;;;;;;;;;;;;;;41600:16;:14;:16::i;:::-;41642:5;41631:8;;:16;;;;;;;;;;;;;;;;;;41441:218;41740:12;41755:4;41740:19;;41866:17;:23;41884:4;41866:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41893:17;:21;41911:2;41893:21;;;;;;;;;;;;;;;;;;;;;;;;;41866:48;41863:94;;;41940:5;41930:15;;41863:94;42038:7;42035:103;;;42070:13;;42061:6;:22;;;;42111:14;;42099:9;:26;;;;42035:103;42147:38;42162:4;42167:2;42170:6;42177:7;42147:14;:38::i;:::-;40841:1352;;;40770:1423;;;;:::o;36306:160::-;36347:7;36368:15;36385;36404:19;:17;:19::i;:::-;36367:56;;;;36451:7;36441;:17;;;;:::i;:::-;36434:24;;;;36306:160;:::o;34085:292::-;34142:7;34151;34173:12;34187:18;34209:20;34221:7;34209:11;:20::i;:::-;34170:59;;;;;34241:15;34258:23;34286:38;34298:7;34307:4;34313:10;34286:11;:38::i;:::-;34240:84;;;;;34344:7;34353:15;34336:33;;;;;;;;34085:292;;;:::o;43853:776::-;43964:7;43960:40;;43986:14;:12;:14::i;:::-;43960:40;44027:11;:19;44039:6;44027:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;44051:11;:22;44063:9;44051:22;;;;;;;;;;;;;;;;;;;;;;;;;44050:23;44027:46;44023:597;;;44090:48;44112:6;44120:9;44131:6;44090:21;:48::i;:::-;44023:597;;;44161:11;:19;44173:6;44161:19;;;;;;;;;;;;;;;;;;;;;;;;;44160:20;:46;;;;;44184:11;:22;44196:9;44184:22;;;;;;;;;;;;;;;;;;;;;;;;;44160:46;44156:464;;;44223:46;44243:6;44251:9;44262:6;44223:19;:46::i;:::-;44156:464;;;44292:11;:19;44304:6;44292:19;;;;;;;;;;;;;;;;;;;;;;;;;44291:20;:47;;;;;44316:11;:22;44328:9;44316:22;;;;;;;;;;;;;;;;;;;;;;;;;44315:23;44291:47;44287:333;;;44355:44;44373:6;44381:9;44392:6;44355:17;:44::i;:::-;44287:333;;;44421:11;:19;44433:6;44421:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;44444:11;:22;44456:9;44444:22;;;;;;;;;;;;;;;;;;;;;;;;;44421:45;44417:203;;;44483:48;44505:6;44513:9;44524:6;44483:21;:48::i;:::-;44417:203;;;44564:44;44582:6;44590:9;44601:6;44564:17;:44::i;:::-;44417:203;44287:333;44156:464;44023:597;43853:776;;;;:::o;42391:293::-;42437:28;42468:24;42486:4;42468:9;:24::i;:::-;42437:55;;42539:17;;42516:20;:40;42513:111;;;42595:17;;42572:40;;42513:111;42634:39;42652:20;42634:17;:39::i;:::-;42424:260;42391:293::o;36730:552::-;36780:7;36789;36809:15;36827:7;;36809:25;;36845:15;36863:7;;36845:25;;36892:9;36887:283;36911:9;:16;;;;36907:1;:20;36887:283;;;36977:7;36953;:21;36961:9;36971:1;36961:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36953:21;;;;;;;;;;;;;;;;:31;:66;;;;37012:7;36988;:21;36996:9;37006:1;36996:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36988:21;;;;;;;;;;;;;;;;:31;36953:66;36949:97;;;37029:7;;37038;;37021:25;;;;;;;;;36949:97;37081:7;:21;37089:9;37099:1;37089:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37081:21;;;;;;;;;;;;;;;;37071:7;:31;;;;:::i;:::-;37061:41;;37137:7;:21;37145:9;37155:1;37145:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37137:21;;;;;;;;;;;;;;;;37127:7;:31;;;;:::i;:::-;37117:41;;36929:3;;;;;;;36887:283;;;;37204:7;;37194;;:17;;;;:::i;:::-;37184:7;:27;37180:58;;;37221:7;;37230;;37213:25;;;;;;;;37180:58;37257:7;37266;37249:25;;;;;;36730:552;;;:::o;34754:355::-;34814:7;34823;34832;34852:12;34867:24;34883:7;34867:15;:24::i;:::-;34852:39;;34902:18;34923:27;34942:7;34923:18;:27::i;:::-;34902:48;;34961:14;34985:10;34978:4;:17;;;;:::i;:::-;34961:34;;35006:23;35042:6;35032:7;:16;;;;:::i;:::-;35006:42;;35067:15;35084:4;35090:10;35059:42;;;;;;;;;;34754:355;;;;;:::o;35613:470::-;35707:7;35716;35725;35745:19;35767:10;:8;:10::i;:::-;35745:32;;35788:15;35816:11;35806:7;:21;;;;:::i;:::-;35788:39;;35838:12;35860:11;35853:4;:18;;;;:::i;:::-;35838:33;;35882:18;35916:11;35903:10;:24;;;;:::i;:::-;35882:45;;35938:14;35962:10;35955:4;:17;;;;:::i;:::-;35938:34;;35983:23;36019:6;36009:7;:16;;;;:::i;:::-;35983:42;;36044:7;36053:15;36070:4;36036:39;;;;;;;;;;;;35613:470;;;;;;;:::o;38269:85::-;38321:1;38312:6;:10;;;;38345:1;38333:9;:13;;;;38269:85::o;47880:603::-;47983:23;48008:12;48022:18;48044:19;48055:7;48044:10;:19::i;:::-;47982:81;;;;;;48075:15;48092:23;48117:12;48133:38;48145:7;48154:4;48160:10;48133:11;:38::i;:::-;48074:97;;;;;;48216:7;48200;:15;48208:6;48200:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;48182:7;:15;48190:6;48182:15;;;;;;;;;;;;;;;:41;;;;48268:7;48252;:15;48260:6;48252:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;48234:7;:15;48242:6;48234:15;;;;;;;;;;;;;;;:41;;;;48326:15;48307:7;:18;48315:9;48307:18;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;48286:7;:18;48294:9;48286:18;;;;;;;;;;;;;;;:55;;;;48355:23;48367:4;48373;48355:11;:23::i;:::-;48389:26;48404:10;48389:14;:26::i;:::-;48448:9;48431:44;;48440:6;48431:44;;;48459:15;48431:44;;;;;;:::i;:::-;;;;;;;;47971:512;;;;;;47880:603;;;:::o;46899:622::-;47000:23;47025:12;47039:18;47061:19;47072:7;47061:10;:19::i;:::-;46999:81;;;;;;47092:15;47109:23;47134:12;47150:37;47162:7;47171:4;47176:10;47150:11;:37::i;:::-;47091:96;;;;;;47232:7;47216;:15;47224:6;47216:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;47198:7;:15;47206:6;47198:15;;;;;;;;;;;;;;;:41;;;;47290:15;47271:7;:18;47279:9;47271:18;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;47250:7;:18;47258:9;47250:18;;;;;;;;;;;;;;;:55;;;;47356:15;47337:7;:18;47345:9;47337:18;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;47316:7;:18;47324:9;47316:18;;;;;;;;;;;;;;;:55;;;;47393:23;47405:4;47411;47393:11;:23::i;:::-;47427:26;47442:10;47427:14;:26::i;:::-;47486:9;47469:44;;47478:6;47469:44;;;47497:15;47469:44;;;;;;:::i;:::-;;;;;;;;46988:533;;;;;;46899:622;;;:::o;45989:545::-;46088:23;46113:12;46128:18;46150:19;46161:7;46150:10;:19::i;:::-;46087:82;;;;;;46181:15;46198:23;46223:12;46239:38;46251:7;46260:4;46266:10;46239:11;:38::i;:::-;46180:97;;;;;;46322:7;46306;:15;46314:6;46306:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;46288:7;:15;46296:6;46288:15;;;;;;;;;;;;;;;:41;;;;46380:15;46361:7;:18;46369:9;46361:18;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;46340:7;:18;46348:9;46340:18;;;;;;;;;;;;;;;:55;;;;46406:23;46418:4;46424;46406:11;:23::i;:::-;46440:26;46455:10;46440:14;:26::i;:::-;46499:9;46482:44;;46491:6;46482:44;;;46510:15;46482:44;;;;;;:::i;:::-;;;;;;;;46076:458;;;;;;45989:545;;;:::o;44964:674::-;45067:23;45092:12;45106:18;45128:19;45139:7;45128:10;:19::i;:::-;45066:81;;;;;;45159:15;45176:23;45201:12;45217:38;45229:7;45238:4;45244:10;45217:11;:38::i;:::-;45158:97;;;;;;45300:7;45284;:15;45292:6;45284:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;45266:7;:15;45274:6;45266:15;;;;;;;;;;;;;;;:41;;;;45352:7;45336;:15;45344:6;45336:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;45318:7;:15;45326:6;45318:15;;;;;;;;;;;;;;;:41;;;;45410:15;45391:7;:18;45399:9;45391:18;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;45370:7;:18;45378:9;45370:18;;;;;;;;;;;;;;;:55;;;;45476:15;45457:7;:18;45465:9;45457:18;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;45436:7;:18;45444:9;45436:18;;;;;;;;;;;;;;;:55;;;;45510:23;45522:4;45528;45510:11;:23::i;:::-;45544:26;45559:10;45544:14;:26::i;:::-;45603:9;45586:44;;45595:6;45586:44;;;45614:15;45586:44;;;;;;:::i;:::-;;;;;;;;45055:583;;;;;;44964:674;;;:::o;42913:498::-;42980:21;43018:1;43004:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42980:40;;43049:4;43031;43036:1;43031:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43075:11;43065:4;43070:1;43065:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;43099:62;43116:4;43131:15;43149:11;43099:8;:62::i;:::-;43200:15;:40;;;43255:11;43281:1;43326:4;43345:17;;;;;;;;;;;43377:15;43200:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42969:442;42913:498;:::o;37523:121::-;37586:7;37631:5;37622:6;;37613;:15;;;;:::i;:::-;:23;;;;:::i;:::-;37606:30;;37523:121;;;:::o;37894:127::-;37960:7;38008:5;37996:9;;37987:6;:18;;;;:::i;:::-;:26;;;;:::i;:::-;37980:33;;37894:127;;;:::o;33536:242::-;33595:7;33604;33613;33634:23;33659:12;33672:18;33694:20;33706:7;33694:11;:20::i;:::-;33633:81;;;;;;33735:15;33752:4;33759:10;33726:44;;;;;;;;;33536:242;;;;;:::o;32348:182::-;32436:4;32426:7;;:14;;;;:::i;:::-;32416:7;:24;;;;32478:4;32465:10;;:17;;;;:::i;:::-;32452:10;:30;;;;32500:18;32513:4;32500:18;;;;;;:::i;:::-;;;;;;;;32348:182;;:::o;32810:344::-;32873:19;32896:10;:8;:10::i;:::-;32873:33;;32917:18;32951:11;32938:10;:24;;;;:::i;:::-;32917:45;;33023:10;32998:7;:22;33014:4;32998:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;32973:7;:22;32989:4;32973:22;;;;;;;;;;;;;;;:60;;;;33047:11;:26;33067:4;33047:26;;;;;;;;;;;;;;;;;;;;;;;;;33044:102;;;33136:10;33111:7;:22;33127:4;33111:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;33086:7;:22;33102:4;33086:22;;;;;;;;;;;;;;;:60;;;;33044:102;32862:292;;32810:344;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:139::-;962:6;957:3;952;946:23;1003:1;994:6;989:3;985:16;978:27;873:139;;;:::o;1018:102::-;1059:6;1110:2;1106:7;1101:2;1094:5;1090:14;1086:28;1076:38;;1018:102;;;:::o;1126:377::-;1214:3;1242:39;1275:5;1242:39;:::i;:::-;1297:71;1361:6;1356:3;1297:71;:::i;:::-;1290:78;;1377:65;1435:6;1430:3;1423:4;1416:5;1412:16;1377:65;:::i;:::-;1467:29;1489:6;1467:29;:::i;:::-;1462:3;1458:39;1451:46;;1218:285;1126:377;;;;:::o;1509:313::-;1622:4;1660:2;1649:9;1645:18;1637:26;;1709:9;1703:4;1699:20;1695:1;1684:9;1680:17;1673:47;1737:78;1810:4;1801:6;1737:78;:::i;:::-;1729:86;;1509:313;;;;:::o;1828:75::-;1861:6;1894:2;1888:9;1878:19;;1828:75;:::o;1909:117::-;2018:1;2015;2008:12;2032:117;2141:1;2138;2131:12;2155:122;2228:24;2246:5;2228:24;:::i;:::-;2221:5;2218:35;2208:63;;2267:1;2264;2257:12;2208:63;2155:122;:::o;2283:139::-;2329:5;2367:6;2354:20;2345:29;;2383:33;2410:5;2383:33;:::i;:::-;2283:139;;;;:::o;2428:77::-;2465:7;2494:5;2483:16;;2428:77;;;:::o;2511:122::-;2584:24;2602:5;2584:24;:::i;:::-;2577:5;2574:35;2564:63;;2623:1;2620;2613:12;2564:63;2511:122;:::o;2639:139::-;2685:5;2723:6;2710:20;2701:29;;2739:33;2766:5;2739:33;:::i;:::-;2639:139;;;;:::o;2784:474::-;2852:6;2860;2909:2;2897:9;2888:7;2884:23;2880:32;2877:119;;;2915:79;;:::i;:::-;2877:119;3035:1;3060:53;3105:7;3096:6;3085:9;3081:22;3060:53;:::i;:::-;3050:63;;3006:117;3162:2;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3133:118;2784:474;;;;;:::o;3264:90::-;3298:7;3341:5;3334:13;3327:21;3316:32;;3264:90;;;:::o;3360:109::-;3441:21;3456:5;3441:21;:::i;:::-;3436:3;3429:34;3360:109;;:::o;3475:210::-;3562:4;3600:2;3589:9;3585:18;3577:26;;3613:65;3675:1;3664:9;3660:17;3651:6;3613:65;:::i;:::-;3475:210;;;;:::o;3691:118::-;3778:24;3796:5;3778:24;:::i;:::-;3773:3;3766:37;3691:118;;:::o;3815:222::-;3908:4;3946:2;3935:9;3931:18;3923:26;;3959:71;4027:1;4016:9;4012:17;4003:6;3959:71;:::i;:::-;3815:222;;;;:::o;4043:60::-;4071:3;4092:5;4085:12;;4043:60;;;:::o;4109:142::-;4159:9;4192:53;4210:34;4219:24;4237:5;4219:24;:::i;:::-;4210:34;:::i;:::-;4192:53;:::i;:::-;4179:66;;4109:142;;;:::o;4257:126::-;4307:9;4340:37;4371:5;4340:37;:::i;:::-;4327:50;;4257:126;;;:::o;4389:152::-;4465:9;4498:37;4529:5;4498:37;:::i;:::-;4485:50;;4389:152;;;:::o;4547:183::-;4660:63;4717:5;4660:63;:::i;:::-;4655:3;4648:76;4547:183;;:::o;4736:274::-;4855:4;4893:2;4882:9;4878:18;4870:26;;4906:97;5000:1;4989:9;4985:17;4976:6;4906:97;:::i;:::-;4736:274;;;;:::o;5016:329::-;5075:6;5124:2;5112:9;5103:7;5099:23;5095:32;5092:119;;;5130:79;;:::i;:::-;5092:119;5250:1;5275:53;5320:7;5311:6;5300:9;5296:22;5275:53;:::i;:::-;5265:63;;5221:117;5016:329;;;;:::o;5351:619::-;5428:6;5436;5444;5493:2;5481:9;5472:7;5468:23;5464:32;5461:119;;;5499:79;;:::i;:::-;5461:119;5619:1;5644:53;5689:7;5680:6;5669:9;5665:22;5644:53;:::i;:::-;5634:63;;5590:117;5746:2;5772:53;5817:7;5808:6;5797:9;5793:22;5772:53;:::i;:::-;5762:63;;5717:118;5874:2;5900:53;5945:7;5936:6;5925:9;5921:22;5900:53;:::i;:::-;5890:63;;5845:118;5351:619;;;;;:::o;5976:86::-;6011:7;6051:4;6044:5;6040:16;6029:27;;5976:86;;;:::o;6068:112::-;6151:22;6167:5;6151:22;:::i;:::-;6146:3;6139:35;6068:112;;:::o;6186:214::-;6275:4;6313:2;6302:9;6298:18;6290:26;;6326:67;6390:1;6379:9;6375:17;6366:6;6326:67;:::i;:::-;6186:214;;;;:::o;6406:329::-;6465:6;6514:2;6502:9;6493:7;6489:23;6485:32;6482:119;;;6520:79;;:::i;:::-;6482:119;6640:1;6665:53;6710:7;6701:6;6690:9;6686:22;6665:53;:::i;:::-;6655:63;;6611:117;6406:329;;;;:::o;6741:116::-;6811:21;6826:5;6811:21;:::i;:::-;6804:5;6801:32;6791:60;;6847:1;6844;6837:12;6791:60;6741:116;:::o;6863:133::-;6906:5;6944:6;6931:20;6922:29;;6960:30;6984:5;6960:30;:::i;:::-;6863:133;;;;:::o;7002:468::-;7067:6;7075;7124:2;7112:9;7103:7;7099:23;7095:32;7092:119;;;7130:79;;:::i;:::-;7092:119;7250:1;7275:53;7320:7;7311:6;7300:9;7296:22;7275:53;:::i;:::-;7265:63;;7221:117;7377:2;7403:50;7445:7;7436:6;7425:9;7421:22;7403:50;:::i;:::-;7393:60;;7348:115;7002:468;;;;;:::o;7476:323::-;7532:6;7581:2;7569:9;7560:7;7556:23;7552:32;7549:119;;;7587:79;;:::i;:::-;7549:119;7707:1;7732:50;7774:7;7765:6;7754:9;7750:22;7732:50;:::i;:::-;7722:60;;7678:114;7476:323;;;;:::o;7805:474::-;7873:6;7881;7930:2;7918:9;7909:7;7905:23;7901:32;7898:119;;;7936:79;;:::i;:::-;7898:119;8056:1;8081:53;8126:7;8117:6;8106:9;8102:22;8081:53;:::i;:::-;8071:63;;8027:117;8183:2;8209:53;8254:7;8245:6;8234:9;8230:22;8209:53;:::i;:::-;8199:63;;8154:118;7805:474;;;;;:::o;8285:182::-;8425:34;8421:1;8413:6;8409:14;8402:58;8285:182;:::o;8473:366::-;8615:3;8636:67;8700:2;8695:3;8636:67;:::i;:::-;8629:74;;8712:93;8801:3;8712:93;:::i;:::-;8830:2;8825:3;8821:12;8814:19;;8473:366;;;:::o;8845:419::-;9011:4;9049:2;9038:9;9034:18;9026:26;;9098:9;9092:4;9088:20;9084:1;9073:9;9069:17;9062:47;9126:131;9252:4;9126:131;:::i;:::-;9118:139;;8845:419;;;:::o;9270:241::-;9410:34;9406:1;9398:6;9394:14;9387:58;9479:24;9474:2;9466:6;9462:15;9455:49;9270:241;:::o;9517:366::-;9659:3;9680:67;9744:2;9739:3;9680:67;:::i;:::-;9673:74;;9756:93;9845:3;9756:93;:::i;:::-;9874:2;9869:3;9865:12;9858:19;;9517:366;;;:::o;9889:419::-;10055:4;10093:2;10082:9;10078:18;10070:26;;10142:9;10136:4;10132:20;10128:1;10117:9;10113:17;10106:47;10170:131;10296:4;10170:131;:::i;:::-;10162:139;;9889:419;;;:::o;10314:180::-;10362:77;10359:1;10352:88;10459:4;10456:1;10449:15;10483:4;10480:1;10473:15;10500:194;10540:4;10560:20;10578:1;10560:20;:::i;:::-;10555:25;;10594:20;10612:1;10594:20;:::i;:::-;10589:25;;10638:1;10635;10631:9;10623:17;;10662:1;10656:4;10653:11;10650:37;;;10667:18;;:::i;:::-;10650:37;10500:194;;;;:::o;10700:229::-;10840:34;10836:1;10828:6;10824:14;10817:58;10909:12;10904:2;10896:6;10892:15;10885:37;10700:229;:::o;10935:366::-;11077:3;11098:67;11162:2;11157:3;11098:67;:::i;:::-;11091:74;;11174:93;11263:3;11174:93;:::i;:::-;11292:2;11287:3;11283:12;11276:19;;10935:366;;;:::o;11307:419::-;11473:4;11511:2;11500:9;11496:18;11488:26;;11560:9;11554:4;11550:20;11546:1;11535:9;11531:17;11524:47;11588:131;11714:4;11588:131;:::i;:::-;11580:139;;11307:419;;;:::o;11732:180::-;11780:77;11777:1;11770:88;11877:4;11874:1;11867:15;11901:4;11898:1;11891:15;11918:185;11958:1;11975:20;11993:1;11975:20;:::i;:::-;11970:25;;12009:20;12027:1;12009:20;:::i;:::-;12004:25;;12048:1;12038:35;;12053:18;;:::i;:::-;12038:35;12095:1;12092;12088:9;12083:14;;11918:185;;;;:::o;12109:177::-;12249:29;12245:1;12237:6;12233:14;12226:53;12109:177;:::o;12292:366::-;12434:3;12455:67;12519:2;12514:3;12455:67;:::i;:::-;12448:74;;12531:93;12620:3;12531:93;:::i;:::-;12649:2;12644:3;12640:12;12633:19;;12292:366;;;:::o;12664:419::-;12830:4;12868:2;12857:9;12853:18;12845:26;;12917:9;12911:4;12907:20;12903:1;12892:9;12888:17;12881:47;12945:131;13071:4;12945:131;:::i;:::-;12937:139;;12664:419;;;:::o;13089:180::-;13137:77;13134:1;13127:88;13234:4;13231:1;13224:15;13258:4;13255:1;13248:15;13275:180;13323:77;13320:1;13313:88;13420:4;13417:1;13410:15;13444:4;13441:1;13434:15;13461:191;13501:3;13520:20;13538:1;13520:20;:::i;:::-;13515:25;;13554:20;13572:1;13554:20;:::i;:::-;13549:25;;13597:1;13594;13590:9;13583:16;;13618:3;13615:1;13612:10;13609:36;;;13625:18;;:::i;:::-;13609:36;13461:191;;;;:::o;13658:231::-;13798:34;13794:1;13786:6;13782:14;13775:58;13867:14;13862:2;13854:6;13850:15;13843:39;13658:231;:::o;13895:366::-;14037:3;14058:67;14122:2;14117:3;14058:67;:::i;:::-;14051:74;;14134:93;14223:3;14134:93;:::i;:::-;14252:2;14247:3;14243:12;14236:19;;13895:366;;;:::o;14267:419::-;14433:4;14471:2;14460:9;14456:18;14448:26;;14520:9;14514:4;14510:20;14506:1;14495:9;14491:17;14484:47;14548:131;14674:4;14548:131;:::i;:::-;14540:139;;14267:419;;;:::o;14692:174::-;14832:26;14828:1;14820:6;14816:14;14809:50;14692:174;:::o;14872:366::-;15014:3;15035:67;15099:2;15094:3;15035:67;:::i;:::-;15028:74;;15111:93;15200:3;15111:93;:::i;:::-;15229:2;15224:3;15220:12;15213:19;;14872:366;;;:::o;15244:419::-;15410:4;15448:2;15437:9;15433:18;15425:26;;15497:9;15491:4;15487:20;15483:1;15472:9;15468:17;15461:47;15525:131;15651:4;15525:131;:::i;:::-;15517:139;;15244:419;;;:::o;15669:181::-;15809:33;15805:1;15797:6;15793:14;15786:57;15669:181;:::o;15856:366::-;15998:3;16019:67;16083:2;16078:3;16019:67;:::i;:::-;16012:74;;16095:93;16184:3;16095:93;:::i;:::-;16213:2;16208:3;16204:12;16197:19;;15856:366;;;:::o;16228:419::-;16394:4;16432:2;16421:9;16417:18;16409:26;;16481:9;16475:4;16471:20;16467:1;16456:9;16452:17;16445:47;16509:131;16635:4;16509:131;:::i;:::-;16501:139;;16228:419;;;:::o;16653:177::-;16793:29;16789:1;16781:6;16777:14;16770:53;16653:177;:::o;16836:366::-;16978:3;16999:67;17063:2;17058:3;16999:67;:::i;:::-;16992:74;;17075:93;17164:3;17075:93;:::i;:::-;17193:2;17188:3;17184:12;17177:19;;16836:366;;;:::o;17208:419::-;17374:4;17412:2;17401:9;17397:18;17389:26;;17461:9;17455:4;17451:20;17447:1;17436:9;17432:17;17425:47;17489:131;17615:4;17489:131;:::i;:::-;17481:139;;17208:419;;;:::o;17633:226::-;17773:34;17769:1;17761:6;17757:14;17750:58;17842:9;17837:2;17829:6;17825:15;17818:34;17633:226;:::o;17865:366::-;18007:3;18028:67;18092:2;18087:3;18028:67;:::i;:::-;18021:74;;18104:93;18193:3;18104:93;:::i;:::-;18222:2;18217:3;18213:12;18206:19;;17865:366;;;:::o;18237:419::-;18403:4;18441:2;18430:9;18426:18;18418:26;;18490:9;18484:4;18480:20;18476:1;18465:9;18461:17;18454:47;18518:131;18644:4;18518:131;:::i;:::-;18510:139;;18237:419;;;:::o;18662:231::-;18802:34;18798:1;18790:6;18786:14;18779:58;18871:14;18866:2;18858:6;18854:15;18847:39;18662:231;:::o;18899:366::-;19041:3;19062:67;19126:2;19121:3;19062:67;:::i;:::-;19055:74;;19138:93;19227:3;19138:93;:::i;:::-;19256:2;19251:3;19247:12;19240:19;;18899:366;;;:::o;19271:419::-;19437:4;19475:2;19464:9;19460:18;19452:26;;19524:9;19518:4;19514:20;19510:1;19499:9;19495:17;19488:47;19552:131;19678:4;19552:131;:::i;:::-;19544:139;;19271:419;;;:::o;19696:230::-;19836:34;19832:1;19824:6;19820:14;19813:58;19905:13;19900:2;19892:6;19888:15;19881:38;19696:230;:::o;19932:366::-;20074:3;20095:67;20159:2;20154:3;20095:67;:::i;:::-;20088:74;;20171:93;20260:3;20171:93;:::i;:::-;20289:2;20284:3;20280:12;20273:19;;19932:366;;;:::o;20304:419::-;20470:4;20508:2;20497:9;20493:18;20485:26;;20557:9;20551:4;20547:20;20543:1;20532:9;20528:17;20521:47;20585:131;20711:4;20585:131;:::i;:::-;20577:139;;20304:419;;;:::o;20729:244::-;20869:34;20865:1;20857:6;20853:14;20846:58;20938:27;20933:2;20925:6;20921:15;20914:52;20729:244;:::o;20979:366::-;21121:3;21142:67;21206:2;21201:3;21142:67;:::i;:::-;21135:74;;21218:93;21307:3;21218:93;:::i;:::-;21336:2;21331:3;21327:12;21320:19;;20979:366;;;:::o;21351:419::-;21517:4;21555:2;21544:9;21540:18;21532:26;;21604:9;21598:4;21594:20;21590:1;21579:9;21575:17;21568:47;21632:131;21758:4;21632:131;:::i;:::-;21624:139;;21351:419;;;:::o;21776:172::-;21916:24;21912:1;21904:6;21900:14;21893:48;21776:172;:::o;21954:366::-;22096:3;22117:67;22181:2;22176:3;22117:67;:::i;:::-;22110:74;;22193:93;22282:3;22193:93;:::i;:::-;22311:2;22306:3;22302:12;22295:19;;21954:366;;;:::o;22326:419::-;22492:4;22530:2;22519:9;22515:18;22507:26;;22579:9;22573:4;22569:20;22565:1;22554:9;22550:17;22543:47;22607:131;22733:4;22607:131;:::i;:::-;22599:139;;22326:419;;;:::o;22751:172::-;22891:24;22887:1;22879:6;22875:14;22868:48;22751:172;:::o;22929:366::-;23071:3;23092:67;23156:2;23151:3;23092:67;:::i;:::-;23085:74;;23168:93;23257:3;23168:93;:::i;:::-;23286:2;23281:3;23277:12;23270:19;;22929:366;;;:::o;23301:419::-;23467:4;23505:2;23494:9;23490:18;23482:26;;23554:9;23548:4;23544:20;23540:1;23529:9;23525:17;23518:47;23582:131;23708:4;23582:131;:::i;:::-;23574:139;;23301:419;;;:::o;23726:225::-;23866:34;23862:1;23854:6;23850:14;23843:58;23935:8;23930:2;23922:6;23918:15;23911:33;23726:225;:::o;23957:366::-;24099:3;24120:67;24184:2;24179:3;24120:67;:::i;:::-;24113:74;;24196:93;24285:3;24196:93;:::i;:::-;24314:2;24309:3;24305:12;24298:19;;23957:366;;;:::o;24329:419::-;24495:4;24533:2;24522:9;24518:18;24510:26;;24582:9;24576:4;24572:20;24568:1;24557:9;24553:17;24546:47;24610:131;24736:4;24610:131;:::i;:::-;24602:139;;24329:419;;;:::o;24754:223::-;24894:34;24890:1;24882:6;24878:14;24871:58;24963:6;24958:2;24950:6;24946:15;24939:31;24754:223;:::o;24983:366::-;25125:3;25146:67;25210:2;25205:3;25146:67;:::i;:::-;25139:74;;25222:93;25311:3;25222:93;:::i;:::-;25340:2;25335:3;25331:12;25324:19;;24983:366;;;:::o;25355:419::-;25521:4;25559:2;25548:9;25544:18;25536:26;;25608:9;25602:4;25598:20;25594:1;25583:9;25579:17;25572:47;25636:131;25762:4;25636:131;:::i;:::-;25628:139;;25355:419;;;:::o;25780:221::-;25920:34;25916:1;25908:6;25904:14;25897:58;25989:4;25984:2;25976:6;25972:15;25965:29;25780:221;:::o;26007:366::-;26149:3;26170:67;26234:2;26229:3;26170:67;:::i;:::-;26163:74;;26246:93;26335:3;26246:93;:::i;:::-;26364:2;26359:3;26355:12;26348:19;;26007:366;;;:::o;26379:419::-;26545:4;26583:2;26572:9;26568:18;26560:26;;26632:9;26626:4;26622:20;26618:1;26607:9;26603:17;26596:47;26660:131;26786:4;26660:131;:::i;:::-;26652:139;;26379:419;;;:::o;26804:224::-;26944:34;26940:1;26932:6;26928:14;26921:58;27013:7;27008:2;27000:6;26996:15;26989:32;26804:224;:::o;27034:366::-;27176:3;27197:67;27261:2;27256:3;27197:67;:::i;:::-;27190:74;;27273:93;27362:3;27273:93;:::i;:::-;27391:2;27386:3;27382:12;27375:19;;27034:366;;;:::o;27406:419::-;27572:4;27610:2;27599:9;27595:18;27587:26;;27659:9;27653:4;27649:20;27645:1;27634:9;27630:17;27623:47;27687:131;27813:4;27687:131;:::i;:::-;27679:139;;27406:419;;;:::o;27831:222::-;27971:34;27967:1;27959:6;27955:14;27948:58;28040:5;28035:2;28027:6;28023:15;28016:30;27831:222;:::o;28059:366::-;28201:3;28222:67;28286:2;28281:3;28222:67;:::i;:::-;28215:74;;28298:93;28387:3;28298:93;:::i;:::-;28416:2;28411:3;28407:12;28400:19;;28059:366;;;:::o;28431:419::-;28597:4;28635:2;28624:9;28620:18;28612:26;;28684:9;28678:4;28674:20;28670:1;28659:9;28655:17;28648:47;28712:131;28838:4;28712:131;:::i;:::-;28704:139;;28431:419;;;:::o;28856:228::-;28996:34;28992:1;28984:6;28980:14;28973:58;29065:11;29060:2;29052:6;29048:15;29041:36;28856:228;:::o;29090:366::-;29232:3;29253:67;29317:2;29312:3;29253:67;:::i;:::-;29246:74;;29329:93;29418:3;29329:93;:::i;:::-;29447:2;29442:3;29438:12;29431:19;;29090:366;;;:::o;29462:419::-;29628:4;29666:2;29655:9;29651:18;29643:26;;29715:9;29709:4;29705:20;29701:1;29690:9;29686:17;29679:47;29743:131;29869:4;29743:131;:::i;:::-;29735:139;;29462:419;;;:::o;29887:174::-;30027:26;30023:1;30015:6;30011:14;30004:50;29887:174;:::o;30067:366::-;30209:3;30230:67;30294:2;30289:3;30230:67;:::i;:::-;30223:74;;30306:93;30395:3;30306:93;:::i;:::-;30424:2;30419:3;30415:12;30408:19;;30067:366;;;:::o;30439:419::-;30605:4;30643:2;30632:9;30628:18;30620:26;;30692:9;30686:4;30682:20;30678:1;30667:9;30663:17;30656:47;30720:131;30846:4;30720:131;:::i;:::-;30712:139;;30439:419;;;:::o;30864:410::-;30904:7;30927:20;30945:1;30927:20;:::i;:::-;30922:25;;30961:20;30979:1;30961:20;:::i;:::-;30956:25;;31016:1;31013;31009:9;31038:30;31056:11;31038:30;:::i;:::-;31027:41;;31217:1;31208:7;31204:15;31201:1;31198:22;31178:1;31171:9;31151:83;31128:139;;31247:18;;:::i;:::-;31128:139;30912:362;30864:410;;;;:::o;31280:180::-;31328:77;31325:1;31318:88;31425:4;31422:1;31415:15;31449:4;31446:1;31439:15;31466:85;31511:7;31540:5;31529:16;;31466:85;;;:::o;31557:158::-;31615:9;31648:61;31666:42;31675:32;31701:5;31675:32;:::i;:::-;31666:42;:::i;:::-;31648:61;:::i;:::-;31635:74;;31557:158;;;:::o;31721:147::-;31816:45;31855:5;31816:45;:::i;:::-;31811:3;31804:58;31721:147;;:::o;31874:114::-;31941:6;31975:5;31969:12;31959:22;;31874:114;;;:::o;31994:184::-;32093:11;32127:6;32122:3;32115:19;32167:4;32162:3;32158:14;32143:29;;31994:184;;;;:::o;32184:132::-;32251:4;32274:3;32266:11;;32304:4;32299:3;32295:14;32287:22;;32184:132;;;:::o;32322:108::-;32399:24;32417:5;32399:24;:::i;:::-;32394:3;32387:37;32322:108;;:::o;32436:179::-;32505:10;32526:46;32568:3;32560:6;32526:46;:::i;:::-;32604:4;32599:3;32595:14;32581:28;;32436:179;;;;:::o;32621:113::-;32691:4;32723;32718:3;32714:14;32706:22;;32621:113;;;:::o;32770:732::-;32889:3;32918:54;32966:5;32918:54;:::i;:::-;32988:86;33067:6;33062:3;32988:86;:::i;:::-;32981:93;;33098:56;33148:5;33098:56;:::i;:::-;33177:7;33208:1;33193:284;33218:6;33215:1;33212:13;33193:284;;;33294:6;33288:13;33321:63;33380:3;33365:13;33321:63;:::i;:::-;33314:70;;33407:60;33460:6;33407:60;:::i;:::-;33397:70;;33253:224;33240:1;33237;33233:9;33228:14;;33193:284;;;33197:14;33493:3;33486:10;;32894:608;;;32770:732;;;;:::o;33508:831::-;33771:4;33809:3;33798:9;33794:19;33786:27;;33823:71;33891:1;33880:9;33876:17;33867:6;33823:71;:::i;:::-;33904:80;33980:2;33969:9;33965:18;33956:6;33904:80;:::i;:::-;34031:9;34025:4;34021:20;34016:2;34005:9;34001:18;33994:48;34059:108;34162:4;34153:6;34059:108;:::i;:::-;34051:116;;34177:72;34245:2;34234:9;34230:18;34221:6;34177:72;:::i;:::-;34259:73;34327:3;34316:9;34312:19;34303:6;34259:73;:::i;:::-;33508:831;;;;;;;;:::o;34345:117::-;34454:1;34451;34444:12;34468:281;34551:27;34573:4;34551:27;:::i;:::-;34543:6;34539:40;34681:6;34669:10;34666:22;34645:18;34633:10;34630:34;34627:62;34624:88;;;34692:18;;:::i;:::-;34624:88;34732:10;34728:2;34721:22;34511:238;34468:281;;:::o;34755:129::-;34789:6;34816:20;;:::i;:::-;34806:30;;34845:33;34873:4;34865:6;34845:33;:::i;:::-;34755:129;;;:::o;34890:311::-;34967:4;35057:18;35049:6;35046:30;35043:56;;;35079:18;;:::i;:::-;35043:56;35129:4;35121:6;35117:17;35109:25;;35189:4;35183;35179:15;35171:23;;34890:311;;;:::o;35207:117::-;35316:1;35313;35306:12;35330:143;35387:5;35418:6;35412:13;35403:22;;35434:33;35461:5;35434:33;:::i;:::-;35330:143;;;;:::o;35496:732::-;35603:5;35628:81;35644:64;35701:6;35644:64;:::i;:::-;35628:81;:::i;:::-;35619:90;;35729:5;35758:6;35751:5;35744:21;35792:4;35785:5;35781:16;35774:23;;35845:4;35837:6;35833:17;35825:6;35821:30;35874:3;35866:6;35863:15;35860:122;;;35893:79;;:::i;:::-;35860:122;36008:6;35991:231;36025:6;36020:3;36017:15;35991:231;;;36100:3;36129:48;36173:3;36161:10;36129:48;:::i;:::-;36124:3;36117:61;36207:4;36202:3;36198:14;36191:21;;36067:155;36051:4;36046:3;36042:14;36035:21;;35991:231;;;35995:21;35609:619;;35496:732;;;;;:::o;36251:385::-;36333:5;36382:3;36375:4;36367:6;36363:17;36359:27;36349:122;;36390:79;;:::i;:::-;36349:122;36500:6;36494:13;36525:105;36626:3;36618:6;36611:4;36603:6;36599:17;36525:105;:::i;:::-;36516:114;;36339:297;36251:385;;;;:::o;36642:554::-;36737:6;36786:2;36774:9;36765:7;36761:23;36757:32;36754:119;;;36792:79;;:::i;:::-;36754:119;36933:1;36922:9;36918:17;36912:24;36963:18;36955:6;36952:30;36949:117;;;36985:79;;:::i;:::-;36949:117;37090:89;37171:7;37162:6;37151:9;37147:22;37090:89;:::i;:::-;37080:99;;36883:306;36642:554;;;;:::o
Swarm Source
ipfs://8be70300b9e73cec4472101880c67349ead0e8121072eaaffb5290beb25c221f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.