ETH Price: $2,787.49 (+3.45%)

Token

Frog Lives Matter (FLM)
 

Overview

Max Total Supply

100,000,000 FLM

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
304,598.918242035103388897 FLM

Value
$0.00
0x023066ba830e848d3eade036a033f87c7c8971aa
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FLM

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : FLM.sol
/**
░█▀▀░█▀▄░█▀█░█▀▀░░░█░░░▀█▀░█░█░█▀▀░█▀▀░░░█▄█░█▀█░▀█▀░▀█▀░█▀▀░█▀▄
░█▀▀░█▀▄░█░█░█░█░░░█░░░░█░░▀▄▀░█▀▀░▀▀█░░░█░█░█▀█░░█░░░█░░█▀▀░█▀▄
░▀░░░▀░▀░▀▀▀░▀▀▀░░░▀▀▀░▀▀▀░░▀░░▀▀▀░▀▀▀░░░▀░▀░▀░▀░░▀░░░▀░░▀▀▀░▀░▀
**/
 // Medium -- https://medium.com/@froglivesmatter

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.17;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}



interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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 FLM is ERC20, Ownable {

        // Variables
    
    uint256 private maxSupply;
   
    uint256 private denominator = 1000;

    uint256 public swapThreshold = 1 ether; // The contract will only swap to ETH, once the fee tokens reach the specified threshold
    
    uint256 private burnTaxBuy;
    uint256 private marketingTaxBuy;
    uint256 private liquidityTaxBuy;
    uint256 private charityTaxBuy;
    
    uint256 private burnTaxSell;
    uint256 private marketingTaxSell;
    uint256 private liquidityTaxSell;
    uint256 private charityTaxSell;
    uint256 public launchBlock;
   


    uint256 public maxWallet; // Max wallet limit (Antiwhale)
    uint256 public maxBuyPerTx; //max Buy per transaction
    uint256 public maxSellPerTx; //max sell per transaction
    
    address private burnTaxWallet;
    address private marketingTaxWallet;
    address private liquidityTaxWallet;
    address private charityTaxWallet;
    
                //Mapping
    
   
    mapping (address => bool) private excludeList;
    mapping (address => bool) private isSniper;
    mapping (string => uint256) private buyTaxes;
    mapping (string => uint256) private sellTaxes;
    mapping (string => address) private taxWallets;
    
    bool public taxStatus = true;
    
    IUniswapV2Router02 private uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    IUniswapV2Pair private uniswapV2Pair;
    
    constructor() ERC20("Frog Lives Matter", "FLM") 
    {
        maxSupply = 100000000 * (10**18);
        _setOwner(msg.sender);
        uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
                                   
                                      //taxWallets
        taxWallets["liquidity"] = owner();
        taxWallets["marketing"] = address(0xC0bD080951A3B361Cf32d1E07DA5e0D75057cDf6);
        taxWallets["charity"] = address(0xd67dF99568C9f0EdB099B22cAb4ece901e171380);
        taxWallets["burn"] = address(0xdead);
                                     
                                //taxes
        setBuyTax(10,15,10,15); // 1% burn, 1.5% marketing, 1% LP, 1.5% charity
        setSellTax(10,15,10,15); //1% burn, 1.5% marketing, 1% LP, 1.5% charity
        exclude(msg.sender);
        exclude(address(this));
        exclude(0x6FF418358be5D15d2217f4b0a2C624b20f8Eea00);

                                 //Limits
        maxBuyPerTx = maxSupply/100; // 1% of the supply
        maxSellPerTx = maxSupply/100;  // 1% of the supply
        maxWallet = maxSupply/100 ; // 1% of the supply
        _mint(msg.sender, maxSupply);
    }
    
    uint256 private marketingTokens;
    uint256 private burnTokens;
    uint256 private liquidityTokens;
    uint256 private charityTokens;
    
    /**
     * @dev Calculates the tax, transfer it to the contract. If the user is selling, and the swap threshold is met, it executes the tax.
     */
    function handleTax(address from, address to, uint256 amount) private returns (uint256) {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();
        
        if(!isExcluded(from) && !isExcluded(to)) {
            uint256 tax;
            uint256 baseUnit = amount / denominator;
            if(from == address(uniswapV2Pair)) {
                 require(amount <= maxBuyPerTx, "Buy exceeds per transaction limit");
                 if (block.number < launchBlock + 4){
                     isSniper[to] = true;
                 }
                tax += baseUnit * buyTaxes["marketing"];
                tax += baseUnit * buyTaxes["burn"];
                tax += baseUnit * buyTaxes["liquidity"];
                tax += baseUnit * buyTaxes["charity"];
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
                marketingTokens += baseUnit * buyTaxes["marketing"];
                burnTokens += baseUnit * buyTaxes["burn"];
                liquidityTokens += baseUnit * buyTaxes["liquidity"];
                charityTokens += baseUnit * buyTaxes["charity"];
            } else if(to == address(uniswapV2Pair)) {
                require(!isSniper[from], "Snipers are not Allowed");
                require(amount <= maxSellPerTx, "Sell exceeds per transaction limit");
                tax += baseUnit * sellTaxes["marketing"];
                tax += baseUnit * sellTaxes["burn"];
                tax += baseUnit * sellTaxes["liquidity"];
                tax += baseUnit * sellTaxes["charity"];
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
                marketingTokens += baseUnit * sellTaxes["marketing"];
                burnTokens += baseUnit * sellTaxes["burn"];
                liquidityTokens += baseUnit * sellTaxes["liquidity"];
                charityTokens += baseUnit * sellTaxes["charity"];
                
                uint256 taxSum = marketingTokens  + liquidityTokens + charityTokens;
                
                if(taxSum == 0) return amount;
                
                uint256 ethValue = uniswapV2Router02.getAmountsOut(marketingTokens  + liquidityTokens + charityTokens, sellPath)[1];
                
                if(ethValue >= swapThreshold) {
                    uint256 startBalance = swapThreshold;

                    uint256 toSell = marketingTokens  + liquidityTokens / 2 + charityTokens;
                    
                    _approve(address(this), address(uniswapV2Router02), toSell);
            
                    uniswapV2Router02.swapExactTokensForETH(
                        toSell,
                        0,
                        sellPath,
                        address(this),
                        block.timestamp
                    );
                    
                    uint256 ethGained = address(this).balance - startBalance;
                    
                    uint256 liquidityToken = liquidityTokens / 2;
                    uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10**18) / taxSum)) / 10**18;
                    
                    uint256 marketingETH = (ethGained * ((marketingTokens * 10**18) / taxSum)) / 10**18;
                    uint256 charityETH = (ethGained * ((charityTokens * 10**18) / taxSum)) / 10**18;
                    // adding auto LP
                    _approve(address(this), address(uniswapV2Router02), liquidityToken);
                    
                     uniswapV2Router02.addLiquidityETH{value: liquidityETH}(
                        address(this),
                        liquidityToken,
                        0,
                        0,
                        taxWallets["liquidity"],
                        block.timestamp
                    );
                    // Sending burn part to dead (burn) address (0xdead)
                    _transfer(address(this), taxWallets["burn"], burnTokens);
                    
                    //sending eth fee to marketing and charity
                  (bool market,) =  taxWallets["marketing"].call{value: marketingETH}("");
                  require (market, "eth transfer to marketing wallet failed");
                   (bool charity,) = taxWallets["charity"].call{value: charityETH}("");
                    require (charity, "eth transfer to charity wallet failed");
                    
                   
                    
                    marketingTokens = 0;
                    burnTokens = 0;
                    liquidityTokens = 0;
                    charityTokens = 0;
                }
                
            }
            
            amount -= tax;
            if (to != address(uniswapV2Pair)){
                require(balanceOf(to) + amount <= maxWallet, "maxWallet limit exceeded");
            }
        }
        
        return amount;
    }
    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {
         if (recipient == address(uniswapV2Pair) && launchBlock == 0) {
            launchBlock = block.number;
        }
       
        if(taxStatus) {
            amount = handleTax(sender, recipient, amount);   
        }

        
        super._transfer(sender, recipient, amount);
    }
    
    
    
   /**
     * @dev set swap Threshold in ETH.
     */

    function setETHThresholdAmount (uint256 amount) external onlyOwner {
        require(amount > 0, "amount should be greator than zero");
        swapThreshold = amount;
    }

    /**
     * @dev Claim stucked ether.
     */
    function claimStuckedETHER () external onlyOwner {
        (bool os,) = owner().call{value: address(this).balance}("");
        require (os,"eth transfer to owner failed");
    }

    /**
     * @dev claim any stucked ERC20 Token.
     */
    function claimStuckTokens(address _token) external onlyOwner {
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }

    /**
     * @dev increase buy/sell per transaction amount
     */
    function setMaxBuySellPerTx (uint256 _newMaxBuy, uint256 _newMaxSell) external onlyOwner {
        require (_newMaxBuy  >= totalSupply()/1000, "max buy per tx should be greator than 0.1%");
        require (_newMaxSell  >= totalSupply()/1000, "max sell per tx should be greator than 0.1%");
        maxBuyPerTx = _newMaxBuy;
        maxSellPerTx = _newMaxSell;

    }

   /**
     * @dev set MaxWallet amount
     */
     function setMaxWalletAmount (uint256 _newMaxWalletAmount) external onlyOwner {
      require (_newMaxWalletAmount >= totalSupply()/100, " can't set below 1% of the supply");
      maxWallet = _newMaxWalletAmount;
     }

    
    /**
     * @dev Excludes the specified account from tax.
     */
    function exclude(address account) public onlyOwner {
        require(!isExcluded(account), "FLM: Account is already excluded");
        excludeList[account] = true;
    }
    
    /**
     * @dev Re-enables tax on the specified account.
     */
    function removeExclude(address account) public onlyOwner {
        require(isExcluded(account), "FLM: Account is not excluded");
        excludeList[account] = false;
    }
                          //We have used 1000 as denominator for tax calculation 
                          // see line number 835
                          // so 10 represent 1 percent
    /**
     * @dev Sets tax for buys.
     */
    function setBuyTax(uint256 burn, uint256 marketing, uint256 liquidity, uint256 charity) public onlyOwner {
        require (burn + marketing + liquidity + charity <= 100, "buy tax must be less than equal to 10 percent");
        buyTaxes["burn"] = burn;
        buyTaxes["marketing"] = marketing;
        buyTaxes["liquidity"] = liquidity;
        buyTaxes["charity"] = charity;

        
    }
    
    /**
     * @dev Sets tax for sells.
     */
    function setSellTax(uint256 burn, uint256 marketing, uint256 liquidity, uint256 charity) public onlyOwner {
        require (burn + marketing + liquidity + charity <= 100, "sell tax must be less than equal to 10 percent");
        sellTaxes["burn"] = burn;
        sellTaxes["marketing"] = marketing;
        sellTaxes["liquidity"] = liquidity;
        sellTaxes["charity"] = charity;
    }
    
    /**
     * @dev Sets wallets for taxes.
     */
    function setTaxWallets( address marketing, address charity, address liquidity) public onlyOwner {
       
        taxWallets["marketing"] = marketing;
        taxWallets["charity"] = charity;
        taxWallets["liquidity"] = liquidity;
    }
    
    
    
    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }
                                
                                //getter functions

    function buyFees() external view returns (uint256 fees1, uint256 fees2, uint256 fees3, uint256 fees4){
        return ( buyTaxes["burn"],
        buyTaxes["marketing"],
        buyTaxes["liquidity"] ,
        buyTaxes["charity"]);
    }

    function sellFees() external view returns  (uint256 fees1, uint256 fees2, uint256 fees3, uint256 fees4){
         return ( sellTaxes["burn"],
        sellTaxes["marketing"],
        sellTaxes["liquidity"] ,
        sellTaxes["charity"]);
    }

    function checkFeeWallets () external view returns (address burn, address liquidity, address marketing, address charity){
        return (taxWallets["burn"],
                taxWallets["liquidity"],
                taxWallets["marketing"],
                taxWallets["charity"]);
    }
    
    receive() external payable {}
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"buyFees","outputs":[{"internalType":"uint256","name":"fees1","type":"uint256"},{"internalType":"uint256","name":"fees2","type":"uint256"},{"internalType":"uint256","name":"fees3","type":"uint256"},{"internalType":"uint256","name":"fees4","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkFeeWallets","outputs":[{"internalType":"address","name":"burn","type":"address"},{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"charity","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStuckedETHER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"fees1","type":"uint256"},{"internalType":"uint256","name":"fees2","type":"uint256"},{"internalType":"uint256","name":"fees3","type":"uint256"},{"internalType":"uint256","name":"fees4","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setETHThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"_newMaxSell","type":"uint256"}],"name":"setMaxBuySellPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"charity","type":"address"},{"internalType":"address","name":"liquidity","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526103e8600755670de0b6b3a76400006008556001601e60006101000a81548160ff0219169083151502179055503480156200003e57600080fd5b506040518060400160405280601181526020017f46726f67204c69766573204d61747465720000000000000000000000000000008152506040518060400160405280600381526020017f464c4d00000000000000000000000000000000000000000000000000000000008152508160039081620000bc919062000fbe565b508060049081620000ce919062000fbe565b5050506a52b7d2dcc80cd2e4000000600681905550620000f4336200061860201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d601e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd91906200110f565b601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f091906200110f565b6040518363ffffffff1660e01b81526004016200030f92919062001152565b6020604051808303816000875af11580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035591906200110f565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003a5620006de60201b60201c565b601d604051620003b590620011da565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c0bd080951a3b361cf32d1e07da5e0d75057cdf6601d604051620004269062001241565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d67df99568c9f0edb099b22cab4ece901e171380601d6040516200049790620012a8565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601d604051620004f6906200130f565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055a600a600f600a600f6200070860201b60201c565b62000572600a600f600a600f6200089760201b60201c565b620005833362000a2660201b60201c565b620005943062000a2660201b60201c565b620005b9736ff418358be5d15d2217f4b0a2c624b20f8eea0062000a2660201b60201c565b6064600654620005ca919062001384565b6013819055506064600654620005e1919062001384565b6014819055506064600654620005f8919062001384565b601281905550620006123360065462000b6460201b60201c565b620016bc565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200071862000cdc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200073e620006de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000797576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078e906200141d565b60405180910390fd5b606481838587620007a991906200143f565b620007b591906200143f565b620007c191906200143f565b111562000805576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007fc90620014f0565b60405180910390fd5b83601b60405162000816906200130f565b90815260200160405180910390208190555082601b604051620008399062001241565b90815260200160405180910390208190555081601b6040516200085c90620011da565b90815260200160405180910390208190555080601b6040516200087f90620012a8565b90815260200160405180910390208190555050505050565b620008a762000cdc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008cd620006de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000926576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091d906200141d565b60405180910390fd5b6064818385876200093891906200143f565b6200094491906200143f565b6200095091906200143f565b111562000994576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098b9062001588565b60405180910390fd5b83601c604051620009a5906200130f565b90815260200160405180910390208190555082601c604051620009c89062001241565b90815260200160405180910390208190555081601c604051620009eb90620011da565b90815260200160405180910390208190555080601c60405162000a0e90620012a8565b90815260200160405180910390208190555050505050565b62000a3662000cdc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a5c620006de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aac906200141d565b60405180910390fd5b62000ac68162000ce460201b60201c565b1562000b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b0090620015fa565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bcd906200166c565b60405180910390fd5b62000bea6000838362000d3a60201b60201c565b806002600082825462000bfe91906200143f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c5591906200143f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cbc91906200169f565b60405180910390a362000cd86000838362000d3f60201b60201c565b5050565b600033905090565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dc657607f821691505b60208210810362000ddc5762000ddb62000d7e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e07565b62000e52868362000e07565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e9f62000e9962000e938462000e6a565b62000e74565b62000e6a565b9050919050565b6000819050919050565b62000ebb8362000e7e565b62000ed362000eca8262000ea6565b84845462000e14565b825550505050565b600090565b62000eea62000edb565b62000ef781848462000eb0565b505050565b5b8181101562000f1f5762000f1360008262000ee0565b60018101905062000efd565b5050565b601f82111562000f6e5762000f388162000de2565b62000f438462000df7565b8101602085101562000f53578190505b62000f6b62000f628562000df7565b83018262000efc565b50505b505050565b600082821c905092915050565b600062000f936000198460080262000f73565b1980831691505092915050565b600062000fae838362000f80565b9150826002028217905092915050565b62000fc98262000d44565b67ffffffffffffffff81111562000fe55762000fe462000d4f565b5b62000ff1825462000dad565b62000ffe82828562000f23565b600060209050601f83116001811462001036576000841562001021578287015190505b6200102d858262000fa0565b8655506200109d565b601f198416620010468662000de2565b60005b82811015620010705784890151825560018201915060208501945060208101905062001049565b868310156200109057848901516200108c601f89168262000f80565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010d782620010aa565b9050919050565b620010e981620010ca565b8114620010f557600080fd5b50565b6000815190506200110981620010de565b92915050565b600060208284031215620011285762001127620010a5565b5b60006200113884828501620010f8565b91505092915050565b6200114c81620010ca565b82525050565b600060408201905062001169600083018562001141565b62001178602083018462001141565b9392505050565b600081905092915050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b6000620011c26009836200117f565b9150620011cf826200118a565b600982019050919050565b6000620011e782620011b3565b9150819050919050565b7f6d61726b6574696e670000000000000000000000000000000000000000000000600082015250565b6000620012296009836200117f565b91506200123682620011f1565b600982019050919050565b60006200124e826200121a565b9150819050919050565b7f6368617269747900000000000000000000000000000000000000000000000000600082015250565b6000620012906007836200117f565b91506200129d8262001258565b600782019050919050565b6000620012b58262001281565b9150819050919050565b7f6275726e00000000000000000000000000000000000000000000000000000000600082015250565b6000620012f76004836200117f565b91506200130482620012bf565b600482019050919050565b60006200131c82620012e8565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620013918262000e6a565b91506200139e8362000e6a565b925082620013b157620013b062001326565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001405602083620013bc565b91506200141282620013cd565b602082019050919050565b600060208201905081810360008301526200143881620013f6565b9050919050565b60006200144c8262000e6a565b9150620014598362000e6a565b925082820190508082111562001474576200147362001355565b5b92915050565b7f62757920746178206d757374206265206c657373207468616e20657175616c2060008201527f746f2031302070657263656e7400000000000000000000000000000000000000602082015250565b6000620014d8602d83620013bc565b9150620014e5826200147a565b604082019050919050565b600060208201905081810360008301526200150b81620014c9565b9050919050565b7f73656c6c20746178206d757374206265206c657373207468616e20657175616c60008201527f20746f2031302070657263656e74000000000000000000000000000000000000602082015250565b600062001570602e83620013bc565b91506200157d8262001512565b604082019050919050565b60006020820190508181036000830152620015a38162001561565b9050919050565b7f464c4d3a204163636f756e7420697320616c7265616479206578636c75646564600082015250565b6000620015e2602083620013bc565b9150620015ef82620015aa565b602082019050919050565b600060208201905081810360008301526200161581620015d3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001654601f83620013bc565b915062001661826200161c565b602082019050919050565b60006020820190508181036000830152620016878162001645565b9050919050565b620016998162000e6a565b82525050565b6000602082019050620016b660008301846200168e565b92915050565b614c7d80620016cc6000396000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063cba0e996116100a0578063e0f3ccf51161006f578063e0f3ccf514610743578063e4748b9e14610771578063f2fde38b1461079f578063f8b45b05146107c8578063f9d0831a146107f357610204565b8063cba0e99614610670578063d00efb2f146106ad578063d306a34b146106d8578063dd62ed3e1461070657610204565b8063a82cfe8b116100dc578063a82cfe8b146105ca578063a9059cbb146105f3578063abe4f11d14610630578063b22e520c1461065957610204565b80638da5cb5b1461050e57806395d89b41146105395780639fda058114610564578063a457c2d71461058d57610204565b8063313ce567116101905780634febf53d1161015f5780634febf53d1461043f57806370a0823114610468578063715018a6146104a557806378d931f4146104bc57806384666b08146104e557610204565b8063313ce5671461038357806339509351146103ae5780634482b20b146103eb5780634f7bbb721461041657610204565b806318160ddd116101cc57806318160ddd146102c757806323a38a38146102f257806323b872dd1461031d57806327a14fc21461035a57610204565b80630445b6671461020957806306fdde0314610234578063095ea7b31461025f578063177320a61461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e61081c565b60405161022b9190613253565b60405180910390f35b34801561024057600080fd5b50610249610822565b60405161025691906132fe565b60405180910390f35b34801561026b57600080fd5b50610286600480360381019061028191906133be565b6108b4565b6040516102939190613419565b60405180910390f35b3480156102a857600080fd5b506102b16108d2565b6040516102be9190613253565b60405180910390f35b3480156102d357600080fd5b506102dc6108d8565b6040516102e99190613253565b60405180910390f35b3480156102fe57600080fd5b506103076108e2565b6040516103149190613419565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613434565b6108f5565b6040516103519190613419565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613487565b6109ed565b005b34801561038f57600080fd5b50610398610ac9565b6040516103a591906134d0565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906133be565b610ad2565b6040516103e29190613419565b60405180910390f35b3480156103f757600080fd5b50610400610b7e565b60405161040d9190613253565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613487565b610b84565b005b34801561044b57600080fd5b50610466600480360381019061046191906134eb565b610c4d565b005b34801561047457600080fd5b5061048f600480360381019061048a91906134eb565b610d6d565b60405161049c9190613253565b60405180910390f35b3480156104b157600080fd5b506104ba610db5565b005b3480156104c857600080fd5b506104e360048036038101906104de9190613518565b610e3d565b005b3480156104f157600080fd5b5061050c60048036038101906105079190613558565b610f79565b005b34801561051a57600080fd5b506105236110e4565b60405161053091906135ce565b60405180910390f35b34801561054557600080fd5b5061054e61110e565b60405161055b91906132fe565b60405180910390f35b34801561057057600080fd5b5061058b600480360381019061058691906135e9565b6111a0565b005b34801561059957600080fd5b506105b460048036038101906105af91906133be565b611332565b6040516105c19190613419565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613558565b61141d565b005b3480156105ff57600080fd5b5061061a600480360381019061061591906133be565b611588565b6040516106279190613419565b60405180910390f35b34801561063c57600080fd5b50610657600480360381019061065291906134eb565b6115a6565b005b34801561066557600080fd5b5061066e6116c5565b005b34801561067c57600080fd5b50610697600480360381019061069291906134eb565b6117f7565b6040516106a49190613419565b60405180910390f35b3480156106b957600080fd5b506106c261184d565b6040516106cf9190613253565b60405180910390f35b3480156106e457600080fd5b506106ed611853565b6040516106fd949392919061363c565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190613681565b61195b565b60405161073a9190613253565b60405180910390f35b34801561074f57600080fd5b506107586119e2565b60405161076894939291906136c1565b60405180910390f35b34801561077d57600080fd5b50610786611a6a565b60405161079694939291906136c1565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c191906134eb565b611af2565b005b3480156107d457600080fd5b506107dd611be9565b6040516107ea9190613253565b60405180910390f35b3480156107ff57600080fd5b5061081a600480360381019061081591906134eb565b611bef565b005b60085481565b60606003805461083190613735565b80601f016020809104026020016040519081016040528092919081815260200182805461085d90613735565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c86108c1611d79565b8484611d81565b6001905092915050565b60135481565b6000600254905090565b601e60009054906101000a900460ff1681565b6000610902848484611f4a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094d611d79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c4906137d8565b60405180910390fd5b6109e1856109d9611d79565b858403611d81565b60019150509392505050565b6109f5611d79565b73ffffffffffffffffffffffffffffffffffffffff16610a136110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090613844565b60405180910390fd5b6064610a736108d8565b610a7d91906138c2565b811015610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690613965565b60405180910390fd5b8060128190555050565b60006012905090565b6000610b74610adf611d79565b848460016000610aed611d79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6f9190613985565b611d81565b6001905092915050565b60145481565b610b8c611d79565b73ffffffffffffffffffffffffffffffffffffffff16610baa6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613844565b60405180910390fd5b60008111610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90613a2b565b60405180910390fd5b8060088190555050565b610c55611d79565b73ffffffffffffffffffffffffffffffffffffffff16610c736110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090613844565b60405180910390fd5b610cd2816117f7565b15610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990613a97565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dbd611d79565b73ffffffffffffffffffffffffffffffffffffffff16610ddb6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2890613844565b60405180910390fd5b610e3b6000611fe9565b565b610e45611d79565b73ffffffffffffffffffffffffffffffffffffffff16610e636110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090613844565b60405180910390fd5b6103e8610ec46108d8565b610ece91906138c2565b821015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790613b29565b60405180910390fd5b6103e8610f1b6108d8565b610f2591906138c2565b811015610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90613bbb565b60405180910390fd5b81601381905550806014819055505050565b610f81611d79565b73ffffffffffffffffffffffffffffffffffffffff16610f9f6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613844565b60405180910390fd5b6064818385876110059190613985565b61100f9190613985565b6110199190613985565b111561105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190613c4d565b60405180910390fd5b83601c60405161106990613cc4565b90815260200160405180910390208190555082601c60405161108a90613d25565b90815260200160405180910390208190555081601c6040516110ab90613d86565b90815260200160405180910390208190555080601c6040516110cc90613de7565b90815260200160405180910390208190555050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461111d90613735565b80601f016020809104026020016040519081016040528092919081815260200182805461114990613735565b80156111965780601f1061116b57610100808354040283529160200191611196565b820191906000526020600020905b81548152906001019060200180831161117957829003601f168201915b5050505050905090565b6111a8611d79565b73ffffffffffffffffffffffffffffffffffffffff166111c66110e4565b73ffffffffffffffffffffffffffffffffffffffff161461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390613844565b60405180910390fd5b82601d60405161122b90613d25565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601d60405161128690613de7565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d6040516112e190613d86565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008060016000611341611d79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590613e6e565b60405180910390fd5b611412611409611d79565b85858403611d81565b600191505092915050565b611425611d79565b73ffffffffffffffffffffffffffffffffffffffff166114436110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613844565b60405180910390fd5b6064818385876114a99190613985565b6114b39190613985565b6114bd9190613985565b11156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590613f00565b60405180910390fd5b83601b60405161150d90613cc4565b90815260200160405180910390208190555082601b60405161152e90613d25565b90815260200160405180910390208190555081601b60405161154f90613d86565b90815260200160405180910390208190555080601b60405161157090613de7565b90815260200160405180910390208190555050505050565b600061159c611595611d79565b8484611f4a565b6001905092915050565b6115ae611d79565b73ffffffffffffffffffffffffffffffffffffffff166115cc6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613844565b60405180910390fd5b61162b816117f7565b61166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190613f6c565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116cd611d79565b73ffffffffffffffffffffffffffffffffffffffff166116eb6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890613844565b60405180910390fd5b600061174b6110e4565b73ffffffffffffffffffffffffffffffffffffffff164760405161176e90613fbd565b60006040518083038185875af1925050503d80600081146117ab576040519150601f19603f3d011682016040523d82523d6000602084013e6117b0565b606091505b50509050806117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb9061401e565b60405180910390fd5b50565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600080600080601d60405161186790613cc4565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d6040516118a490613d86565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d6040516118e190613d25565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d60405161191e90613de7565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600080601c6040516119f690613cc4565b908152602001604051809103902054601c604051611a1390613d25565b908152602001604051809103902054601c604051611a3090613d86565b908152602001604051809103902054601c604051611a4d90613de7565b908152602001604051809103902054935093509350935090919293565b600080600080601b604051611a7e90613cc4565b908152602001604051809103902054601b604051611a9b90613d25565b908152602001604051809103902054601b604051611ab890613d86565b908152602001604051809103902054601b604051611ad590613de7565b908152602001604051809103902054935093509350935090919293565b611afa611d79565b73ffffffffffffffffffffffffffffffffffffffff16611b186110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd4906140b0565b60405180910390fd5b611be681611fe9565b50565b60125481565b611bf7611d79565b73ffffffffffffffffffffffffffffffffffffffff16611c156110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290613844565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cab91906135ce565b602060405180830381865afa158015611cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cec91906140e5565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d126110e4565b836040518363ffffffff1660e01b8152600401611d30929190614112565b6020604051808303816000875af1158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d739190614167565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de790614206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690614298565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f3d9190613253565b60405180910390a3505050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611fa957506000601154145b15611fb657436011819055505b601e60009054906101000a900460ff1615611fd957611fd68383836120af565b90505b611fe4838383612fb1565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600267ffffffffffffffff8111156120cd576120cc6142b8565b5b6040519080825280602002602001820160405280156120fb5781602001602082028036833780820191505090505b5090503081600081518110612113576121126142e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121de919061432b565b816001815181106121f2576121f16142e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612235856117f7565b1580156122485750612246846117f7565b155b15612fa5576000806007548561225e91906138c2565b9050602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612557576013548511156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906143ca565b60405180910390fd5b60046011546123099190613985565b431015612369576001601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601b60405161237790613d25565b9081526020016040518091039020548161239191906143ea565b8261239c9190613985565b9150601b6040516123ac90613cc4565b908152602001604051809103902054816123c691906143ea565b826123d19190613985565b9150601b6040516123e190613d86565b908152602001604051809103902054816123fb91906143ea565b826124069190613985565b9150601b60405161241690613de7565b9081526020016040518091039020548161243091906143ea565b8261243b9190613985565b9150600082111561245257612451873084611f4a565b5b601b60405161246090613d25565b9081526020016040518091039020548161247a91906143ea565b6021600082825461248b9190613985565b92505081905550601b6040516124a090613cc4565b908152602001604051809103902054816124ba91906143ea565b602260008282546124cb9190613985565b92505081905550601b6040516124e090613d86565b908152602001604051809103902054816124fa91906143ea565b6023600082825461250b9190613985565b92505081905550601b60405161252090613de7565b9081526020016040518091039020548161253a91906143ea565b6024600082825461254b9190613985565b92505081905550612ee6565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612ee557601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614478565b60405180910390fd5b60145485111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061450a565b60405180910390fd5b601c60405161268c90613d25565b908152602001604051809103902054816126a691906143ea565b826126b19190613985565b9150601c6040516126c190613cc4565b908152602001604051809103902054816126db91906143ea565b826126e69190613985565b9150601c6040516126f690613d86565b9081526020016040518091039020548161271091906143ea565b8261271b9190613985565b9150601c60405161272b90613de7565b9081526020016040518091039020548161274591906143ea565b826127509190613985565b9150600082111561276757612766873084611f4a565b5b601c60405161277590613d25565b9081526020016040518091039020548161278f91906143ea565b602160008282546127a09190613985565b92505081905550601c6040516127b590613cc4565b908152602001604051809103902054816127cf91906143ea565b602260008282546127e09190613985565b92505081905550601c6040516127f590613d86565b9081526020016040518091039020548161280f91906143ea565b602360008282546128209190613985565b92505081905550601c60405161283590613de7565b9081526020016040518091039020548161284f91906143ea565b602460008282546128609190613985565b92505081905550600060245460235460215461287c9190613985565b6128869190613985565b90506000810361289c5785945050505050612faa565b6000601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f6024546023546021546128ef9190613985565b6128f99190613985565b876040518363ffffffff1660e01b81526004016129179291906145e8565b600060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061295d9190614731565b6001815181106129705761296f6142e7565b5b602002602001015190506008548110612ee257600060085490506000602454600260235461299e91906138c2565b6021546129ab9190613985565b6129b59190613985565b90506129e430601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611d81565b601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008a30426040518663ffffffff1660e01b8152600401612a489594939291906147bf565b6000604051808303816000875af1158015612a67573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a909190614731565b5060008247612a9f9190614819565b905060006002602354612ab291906138c2565b90506000670de0b6b3a764000087670de0b6b3a76400006002602354612ad891906138c2565b612ae291906143ea565b612aec91906138c2565b84612af791906143ea565b612b0191906138c2565b90506000670de0b6b3a764000088670de0b6b3a7640000602154612b2591906143ea565b612b2f91906138c2565b85612b3a91906143ea565b612b4491906138c2565b90506000670de0b6b3a764000089670de0b6b3a7640000602454612b6891906143ea565b612b7291906138c2565b86612b7d91906143ea565b612b8791906138c2565b9050612bb630601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611d81565b601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719843087600080601d604051612c0890613d86565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612c599695949392919061484d565b60606040518083038185885af1158015612c77573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9c91906148ae565b505050612ce830601d604051612cb190613cc4565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602254611f4a565b6000601d604051612cf890613d25565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612d4a90613fbd565b60006040518083038185875af1925050503d8060008114612d87576040519150601f19603f3d011682016040523d82523d6000602084013e612d8c565b606091505b5050905080612dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc790614973565b60405180910390fd5b6000601d604051612de090613de7565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612e3290613fbd565b60006040518083038185875af1925050503d8060008114612e6f576040519150601f19603f3d011682016040523d82523d6000602084013e612e74565b606091505b5050905080612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614a05565b60405180910390fd5b60006021819055506000602281905550600060238190555060006024819055505050505050505050505b50505b5b8185612ef29190614819565b9450602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612fa25760125485612f5688610d6d565b612f609190613985565b1115612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9890614a71565b60405180910390fd5b5b50505b829150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301790614b03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361308f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308690614b95565b60405180910390fd5b61309a838383613230565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311790614c27565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131b39190613985565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132179190613253565b60405180910390a361322a848484613235565b50505050565b505050565b505050565b6000819050919050565b61324d8161323a565b82525050565b60006020820190506132686000830184613244565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132a857808201518184015260208101905061328d565b60008484015250505050565b6000601f19601f8301169050919050565b60006132d08261326e565b6132da8185613279565b93506132ea81856020860161328a565b6132f3816132b4565b840191505092915050565b6000602082019050818103600083015261331881846132c5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061335f82613334565b9050919050565b61336f81613354565b811461337a57600080fd5b50565b60008135905061338c81613366565b92915050565b61339b8161323a565b81146133a657600080fd5b50565b6000813590506133b881613392565b92915050565b600080604083850312156133d5576133d461332a565b5b60006133e38582860161337d565b92505060206133f4858286016133a9565b9150509250929050565b60008115159050919050565b613413816133fe565b82525050565b600060208201905061342e600083018461340a565b92915050565b60008060006060848603121561344d5761344c61332a565b5b600061345b8682870161337d565b935050602061346c8682870161337d565b925050604061347d868287016133a9565b9150509250925092565b60006020828403121561349d5761349c61332a565b5b60006134ab848285016133a9565b91505092915050565b600060ff82169050919050565b6134ca816134b4565b82525050565b60006020820190506134e560008301846134c1565b92915050565b6000602082840312156135015761350061332a565b5b600061350f8482850161337d565b91505092915050565b6000806040838503121561352f5761352e61332a565b5b600061353d858286016133a9565b925050602061354e858286016133a9565b9150509250929050565b600080600080608085870312156135725761357161332a565b5b6000613580878288016133a9565b9450506020613591878288016133a9565b93505060406135a2878288016133a9565b92505060606135b3878288016133a9565b91505092959194509250565b6135c881613354565b82525050565b60006020820190506135e360008301846135bf565b92915050565b6000806000606084860312156136025761360161332a565b5b60006136108682870161337d565b93505060206136218682870161337d565b92505060406136328682870161337d565b9150509250925092565b600060808201905061365160008301876135bf565b61365e60208301866135bf565b61366b60408301856135bf565b61367860608301846135bf565b95945050505050565b600080604083850312156136985761369761332a565b5b60006136a68582860161337d565b92505060206136b78582860161337d565b9150509250929050565b60006080820190506136d66000830187613244565b6136e36020830186613244565b6136f06040830185613244565b6136fd6060830184613244565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061374d57607f821691505b6020821081036137605761375f613706565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006137c2602883613279565b91506137cd82613766565b604082019050919050565b600060208201905081810360008301526137f1816137b5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061382e602083613279565b9150613839826137f8565b602082019050919050565b6000602082019050818103600083015261385d81613821565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138cd8261323a565b91506138d88361323a565b9250826138e8576138e7613864565b5b828204905092915050565b7f2063616e2774207365742062656c6f77203125206f662074686520737570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b600061394f602183613279565b915061395a826138f3565b604082019050919050565b6000602082019050818103600083015261397e81613942565b9050919050565b60006139908261323a565b915061399b8361323a565b92508282019050808211156139b3576139b2613893565b5b92915050565b7f616d6f756e742073686f756c642062652067726561746f72207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a15602283613279565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b7f464c4d3a204163636f756e7420697320616c7265616479206578636c75646564600082015250565b6000613a81602083613279565b9150613a8c82613a4b565b602082019050919050565b60006020820190508181036000830152613ab081613a74565b9050919050565b7f6d617820627579207065722074782073686f756c642062652067726561746f7260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000613b13602a83613279565b9150613b1e82613ab7565b604082019050919050565b60006020820190508181036000830152613b4281613b06565b9050919050565b7f6d61782073656c6c207065722074782073686f756c642062652067726561746f60008201527f72207468616e20302e3125000000000000000000000000000000000000000000602082015250565b6000613ba5602b83613279565b9150613bb082613b49565b604082019050919050565b60006020820190508181036000830152613bd481613b98565b9050919050565b7f73656c6c20746178206d757374206265206c657373207468616e20657175616c60008201527f20746f2031302070657263656e74000000000000000000000000000000000000602082015250565b6000613c37602e83613279565b9150613c4282613bdb565b604082019050919050565b60006020820190508181036000830152613c6681613c2a565b9050919050565b600081905092915050565b7f6275726e00000000000000000000000000000000000000000000000000000000600082015250565b6000613cae600483613c6d565b9150613cb982613c78565b600482019050919050565b6000613ccf82613ca1565b9150819050919050565b7f6d61726b6574696e670000000000000000000000000000000000000000000000600082015250565b6000613d0f600983613c6d565b9150613d1a82613cd9565b600982019050919050565b6000613d3082613d02565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b6000613d70600983613c6d565b9150613d7b82613d3a565b600982019050919050565b6000613d9182613d63565b9150819050919050565b7f6368617269747900000000000000000000000000000000000000000000000000600082015250565b6000613dd1600783613c6d565b9150613ddc82613d9b565b600782019050919050565b6000613df282613dc4565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613e58602583613279565b9150613e6382613dfc565b604082019050919050565b60006020820190508181036000830152613e8781613e4b565b9050919050565b7f62757920746178206d757374206265206c657373207468616e20657175616c2060008201527f746f2031302070657263656e7400000000000000000000000000000000000000602082015250565b6000613eea602d83613279565b9150613ef582613e8e565b604082019050919050565b60006020820190508181036000830152613f1981613edd565b9050919050565b7f464c4d3a204163636f756e74206973206e6f74206578636c7564656400000000600082015250565b6000613f56601c83613279565b9150613f6182613f20565b602082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b600081905092915050565b50565b6000613fa7600083613f8c565b9150613fb282613f97565b600082019050919050565b6000613fc882613f9a565b9150819050919050565b7f657468207472616e7366657220746f206f776e6572206661696c656400000000600082015250565b6000614008601c83613279565b915061401382613fd2565b602082019050919050565b6000602082019050818103600083015261403781613ffb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061409a602683613279565b91506140a58261403e565b604082019050919050565b600060208201905081810360008301526140c98161408d565b9050919050565b6000815190506140df81613392565b92915050565b6000602082840312156140fb576140fa61332a565b5b6000614109848285016140d0565b91505092915050565b600060408201905061412760008301856135bf565b6141346020830184613244565b9392505050565b614144816133fe565b811461414f57600080fd5b50565b6000815190506141618161413b565b92915050565b60006020828403121561417d5761417c61332a565b5b600061418b84828501614152565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f0602483613279565b91506141fb82614194565b604082019050919050565b6000602082019050818103600083015261421f816141e3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614282602283613279565b915061428d82614226565b604082019050919050565b600060208201905081810360008301526142b181614275565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061432581613366565b92915050565b6000602082840312156143415761434061332a565b5b600061434f84828501614316565b91505092915050565b7f427579206578636565647320706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006143b4602183613279565b91506143bf82614358565b604082019050919050565b600060208201905081810360008301526143e3816143a7565b9050919050565b60006143f58261323a565b91506144008361323a565b925082820261440e8161323a565b9150828204841483151761442557614424613893565b5b5092915050565b7f536e697065727320617265206e6f7420416c6c6f776564000000000000000000600082015250565b6000614462601783613279565b915061446d8261442c565b602082019050919050565b6000602082019050818103600083015261449181614455565b9050919050565b7f53656c6c206578636565647320706572207472616e73616374696f6e206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f4602283613279565b91506144ff82614498565b604082019050919050565b60006020820190508181036000830152614523816144e7565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61455f81613354565b82525050565b60006145718383614556565b60208301905092915050565b6000602082019050919050565b60006145958261452a565b61459f8185614535565b93506145aa83614546565b8060005b838110156145db5781516145c28882614565565b97506145cd8361457d565b9250506001810190506145ae565b5085935050505092915050565b60006040820190506145fd6000830185613244565b818103602083015261460f818461458a565b90509392505050565b600080fd5b614626826132b4565b810181811067ffffffffffffffff82111715614645576146446142b8565b5b80604052505050565b6000614658613320565b9050614664828261461d565b919050565b600067ffffffffffffffff821115614684576146836142b8565b5b602082029050602081019050919050565b600080fd5b60006146ad6146a884614669565b61464e565b905080838252602082019050602084028301858111156146d0576146cf614695565b5b835b818110156146f957806146e588826140d0565b8452602084019350506020810190506146d2565b5050509392505050565b600082601f83011261471857614717614618565b5b815161472884826020860161469a565b91505092915050565b6000602082840312156147475761474661332a565b5b600082015167ffffffffffffffff8111156147655761476461332f565b5b61477184828501614703565b91505092915050565b6000819050919050565b6000819050919050565b60006147a96147a461479f8461477a565b614784565b61323a565b9050919050565b6147b98161478e565b82525050565b600060a0820190506147d46000830188613244565b6147e160208301876147b0565b81810360408301526147f3818661458a565b905061480260608301856135bf565b61480f6080830184613244565b9695505050505050565b60006148248261323a565b915061482f8361323a565b925082820390508181111561484757614846613893565b5b92915050565b600060c08201905061486260008301896135bf565b61486f6020830188613244565b61487c60408301876147b0565b61488960608301866147b0565b61489660808301856135bf565b6148a360a0830184613244565b979650505050505050565b6000806000606084860312156148c7576148c661332a565b5b60006148d5868287016140d0565b93505060206148e6868287016140d0565b92505060406148f7868287016140d0565b9150509250925092565b7f657468207472616e7366657220746f206d61726b6574696e672077616c6c657460008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b600061495d602783613279565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b7f657468207472616e7366657220746f20636861726974792077616c6c6574206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b60006149ef602583613279565b91506149fa82614993565b604082019050919050565b60006020820190508181036000830152614a1e816149e2565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b6000614a5b601883613279565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614aed602583613279565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7f602383613279565b9150614b8a82614b23565b604082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c11602683613279565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b905091905056fea264697066735822122050e5bc3979465178d2cbebd6ed802fba6ed0535d07ce4cce844364e701bd749564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063cba0e996116100a0578063e0f3ccf51161006f578063e0f3ccf514610743578063e4748b9e14610771578063f2fde38b1461079f578063f8b45b05146107c8578063f9d0831a146107f357610204565b8063cba0e99614610670578063d00efb2f146106ad578063d306a34b146106d8578063dd62ed3e1461070657610204565b8063a82cfe8b116100dc578063a82cfe8b146105ca578063a9059cbb146105f3578063abe4f11d14610630578063b22e520c1461065957610204565b80638da5cb5b1461050e57806395d89b41146105395780639fda058114610564578063a457c2d71461058d57610204565b8063313ce567116101905780634febf53d1161015f5780634febf53d1461043f57806370a0823114610468578063715018a6146104a557806378d931f4146104bc57806384666b08146104e557610204565b8063313ce5671461038357806339509351146103ae5780634482b20b146103eb5780634f7bbb721461041657610204565b806318160ddd116101cc57806318160ddd146102c757806323a38a38146102f257806323b872dd1461031d57806327a14fc21461035a57610204565b80630445b6671461020957806306fdde0314610234578063095ea7b31461025f578063177320a61461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e61081c565b60405161022b9190613253565b60405180910390f35b34801561024057600080fd5b50610249610822565b60405161025691906132fe565b60405180910390f35b34801561026b57600080fd5b50610286600480360381019061028191906133be565b6108b4565b6040516102939190613419565b60405180910390f35b3480156102a857600080fd5b506102b16108d2565b6040516102be9190613253565b60405180910390f35b3480156102d357600080fd5b506102dc6108d8565b6040516102e99190613253565b60405180910390f35b3480156102fe57600080fd5b506103076108e2565b6040516103149190613419565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613434565b6108f5565b6040516103519190613419565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613487565b6109ed565b005b34801561038f57600080fd5b50610398610ac9565b6040516103a591906134d0565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906133be565b610ad2565b6040516103e29190613419565b60405180910390f35b3480156103f757600080fd5b50610400610b7e565b60405161040d9190613253565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613487565b610b84565b005b34801561044b57600080fd5b50610466600480360381019061046191906134eb565b610c4d565b005b34801561047457600080fd5b5061048f600480360381019061048a91906134eb565b610d6d565b60405161049c9190613253565b60405180910390f35b3480156104b157600080fd5b506104ba610db5565b005b3480156104c857600080fd5b506104e360048036038101906104de9190613518565b610e3d565b005b3480156104f157600080fd5b5061050c60048036038101906105079190613558565b610f79565b005b34801561051a57600080fd5b506105236110e4565b60405161053091906135ce565b60405180910390f35b34801561054557600080fd5b5061054e61110e565b60405161055b91906132fe565b60405180910390f35b34801561057057600080fd5b5061058b600480360381019061058691906135e9565b6111a0565b005b34801561059957600080fd5b506105b460048036038101906105af91906133be565b611332565b6040516105c19190613419565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613558565b61141d565b005b3480156105ff57600080fd5b5061061a600480360381019061061591906133be565b611588565b6040516106279190613419565b60405180910390f35b34801561063c57600080fd5b50610657600480360381019061065291906134eb565b6115a6565b005b34801561066557600080fd5b5061066e6116c5565b005b34801561067c57600080fd5b50610697600480360381019061069291906134eb565b6117f7565b6040516106a49190613419565b60405180910390f35b3480156106b957600080fd5b506106c261184d565b6040516106cf9190613253565b60405180910390f35b3480156106e457600080fd5b506106ed611853565b6040516106fd949392919061363c565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190613681565b61195b565b60405161073a9190613253565b60405180910390f35b34801561074f57600080fd5b506107586119e2565b60405161076894939291906136c1565b60405180910390f35b34801561077d57600080fd5b50610786611a6a565b60405161079694939291906136c1565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c191906134eb565b611af2565b005b3480156107d457600080fd5b506107dd611be9565b6040516107ea9190613253565b60405180910390f35b3480156107ff57600080fd5b5061081a600480360381019061081591906134eb565b611bef565b005b60085481565b60606003805461083190613735565b80601f016020809104026020016040519081016040528092919081815260200182805461085d90613735565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c86108c1611d79565b8484611d81565b6001905092915050565b60135481565b6000600254905090565b601e60009054906101000a900460ff1681565b6000610902848484611f4a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094d611d79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c4906137d8565b60405180910390fd5b6109e1856109d9611d79565b858403611d81565b60019150509392505050565b6109f5611d79565b73ffffffffffffffffffffffffffffffffffffffff16610a136110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090613844565b60405180910390fd5b6064610a736108d8565b610a7d91906138c2565b811015610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690613965565b60405180910390fd5b8060128190555050565b60006012905090565b6000610b74610adf611d79565b848460016000610aed611d79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6f9190613985565b611d81565b6001905092915050565b60145481565b610b8c611d79565b73ffffffffffffffffffffffffffffffffffffffff16610baa6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613844565b60405180910390fd5b60008111610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90613a2b565b60405180910390fd5b8060088190555050565b610c55611d79565b73ffffffffffffffffffffffffffffffffffffffff16610c736110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090613844565b60405180910390fd5b610cd2816117f7565b15610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990613a97565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dbd611d79565b73ffffffffffffffffffffffffffffffffffffffff16610ddb6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2890613844565b60405180910390fd5b610e3b6000611fe9565b565b610e45611d79565b73ffffffffffffffffffffffffffffffffffffffff16610e636110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090613844565b60405180910390fd5b6103e8610ec46108d8565b610ece91906138c2565b821015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790613b29565b60405180910390fd5b6103e8610f1b6108d8565b610f2591906138c2565b811015610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90613bbb565b60405180910390fd5b81601381905550806014819055505050565b610f81611d79565b73ffffffffffffffffffffffffffffffffffffffff16610f9f6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613844565b60405180910390fd5b6064818385876110059190613985565b61100f9190613985565b6110199190613985565b111561105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190613c4d565b60405180910390fd5b83601c60405161106990613cc4565b90815260200160405180910390208190555082601c60405161108a90613d25565b90815260200160405180910390208190555081601c6040516110ab90613d86565b90815260200160405180910390208190555080601c6040516110cc90613de7565b90815260200160405180910390208190555050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461111d90613735565b80601f016020809104026020016040519081016040528092919081815260200182805461114990613735565b80156111965780601f1061116b57610100808354040283529160200191611196565b820191906000526020600020905b81548152906001019060200180831161117957829003601f168201915b5050505050905090565b6111a8611d79565b73ffffffffffffffffffffffffffffffffffffffff166111c66110e4565b73ffffffffffffffffffffffffffffffffffffffff161461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390613844565b60405180910390fd5b82601d60405161122b90613d25565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601d60405161128690613de7565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d6040516112e190613d86565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008060016000611341611d79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590613e6e565b60405180910390fd5b611412611409611d79565b85858403611d81565b600191505092915050565b611425611d79565b73ffffffffffffffffffffffffffffffffffffffff166114436110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613844565b60405180910390fd5b6064818385876114a99190613985565b6114b39190613985565b6114bd9190613985565b11156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590613f00565b60405180910390fd5b83601b60405161150d90613cc4565b90815260200160405180910390208190555082601b60405161152e90613d25565b90815260200160405180910390208190555081601b60405161154f90613d86565b90815260200160405180910390208190555080601b60405161157090613de7565b90815260200160405180910390208190555050505050565b600061159c611595611d79565b8484611f4a565b6001905092915050565b6115ae611d79565b73ffffffffffffffffffffffffffffffffffffffff166115cc6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990613844565b60405180910390fd5b61162b816117f7565b61166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190613f6c565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116cd611d79565b73ffffffffffffffffffffffffffffffffffffffff166116eb6110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890613844565b60405180910390fd5b600061174b6110e4565b73ffffffffffffffffffffffffffffffffffffffff164760405161176e90613fbd565b60006040518083038185875af1925050503d80600081146117ab576040519150601f19603f3d011682016040523d82523d6000602084013e6117b0565b606091505b50509050806117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb9061401e565b60405180910390fd5b50565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600080600080601d60405161186790613cc4565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d6040516118a490613d86565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d6040516118e190613d25565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d60405161191e90613de7565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600080601c6040516119f690613cc4565b908152602001604051809103902054601c604051611a1390613d25565b908152602001604051809103902054601c604051611a3090613d86565b908152602001604051809103902054601c604051611a4d90613de7565b908152602001604051809103902054935093509350935090919293565b600080600080601b604051611a7e90613cc4565b908152602001604051809103902054601b604051611a9b90613d25565b908152602001604051809103902054601b604051611ab890613d86565b908152602001604051809103902054601b604051611ad590613de7565b908152602001604051809103902054935093509350935090919293565b611afa611d79565b73ffffffffffffffffffffffffffffffffffffffff16611b186110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd4906140b0565b60405180910390fd5b611be681611fe9565b50565b60125481565b611bf7611d79565b73ffffffffffffffffffffffffffffffffffffffff16611c156110e4565b73ffffffffffffffffffffffffffffffffffffffff1614611c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6290613844565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cab91906135ce565b602060405180830381865afa158015611cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cec91906140e5565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d126110e4565b836040518363ffffffff1660e01b8152600401611d30929190614112565b6020604051808303816000875af1158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d739190614167565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de790614206565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690614298565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f3d9190613253565b60405180910390a3505050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611fa957506000601154145b15611fb657436011819055505b601e60009054906101000a900460ff1615611fd957611fd68383836120af565b90505b611fe4838383612fb1565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600267ffffffffffffffff8111156120cd576120cc6142b8565b5b6040519080825280602002602001820160405280156120fb5781602001602082028036833780820191505090505b5090503081600081518110612113576121126142e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121de919061432b565b816001815181106121f2576121f16142e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612235856117f7565b1580156122485750612246846117f7565b155b15612fa5576000806007548561225e91906138c2565b9050602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612557576013548511156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906143ca565b60405180910390fd5b60046011546123099190613985565b431015612369576001601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601b60405161237790613d25565b9081526020016040518091039020548161239191906143ea565b8261239c9190613985565b9150601b6040516123ac90613cc4565b908152602001604051809103902054816123c691906143ea565b826123d19190613985565b9150601b6040516123e190613d86565b908152602001604051809103902054816123fb91906143ea565b826124069190613985565b9150601b60405161241690613de7565b9081526020016040518091039020548161243091906143ea565b8261243b9190613985565b9150600082111561245257612451873084611f4a565b5b601b60405161246090613d25565b9081526020016040518091039020548161247a91906143ea565b6021600082825461248b9190613985565b92505081905550601b6040516124a090613cc4565b908152602001604051809103902054816124ba91906143ea565b602260008282546124cb9190613985565b92505081905550601b6040516124e090613d86565b908152602001604051809103902054816124fa91906143ea565b6023600082825461250b9190613985565b92505081905550601b60405161252090613de7565b9081526020016040518091039020548161253a91906143ea565b6024600082825461254b9190613985565b92505081905550612ee6565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612ee557601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614478565b60405180910390fd5b60145485111561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061450a565b60405180910390fd5b601c60405161268c90613d25565b908152602001604051809103902054816126a691906143ea565b826126b19190613985565b9150601c6040516126c190613cc4565b908152602001604051809103902054816126db91906143ea565b826126e69190613985565b9150601c6040516126f690613d86565b9081526020016040518091039020548161271091906143ea565b8261271b9190613985565b9150601c60405161272b90613de7565b9081526020016040518091039020548161274591906143ea565b826127509190613985565b9150600082111561276757612766873084611f4a565b5b601c60405161277590613d25565b9081526020016040518091039020548161278f91906143ea565b602160008282546127a09190613985565b92505081905550601c6040516127b590613cc4565b908152602001604051809103902054816127cf91906143ea565b602260008282546127e09190613985565b92505081905550601c6040516127f590613d86565b9081526020016040518091039020548161280f91906143ea565b602360008282546128209190613985565b92505081905550601c60405161283590613de7565b9081526020016040518091039020548161284f91906143ea565b602460008282546128609190613985565b92505081905550600060245460235460215461287c9190613985565b6128869190613985565b90506000810361289c5785945050505050612faa565b6000601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f6024546023546021546128ef9190613985565b6128f99190613985565b876040518363ffffffff1660e01b81526004016129179291906145e8565b600060405180830381865afa158015612934573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061295d9190614731565b6001815181106129705761296f6142e7565b5b602002602001015190506008548110612ee257600060085490506000602454600260235461299e91906138c2565b6021546129ab9190613985565b6129b59190613985565b90506129e430601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611d81565b601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008a30426040518663ffffffff1660e01b8152600401612a489594939291906147bf565b6000604051808303816000875af1158015612a67573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a909190614731565b5060008247612a9f9190614819565b905060006002602354612ab291906138c2565b90506000670de0b6b3a764000087670de0b6b3a76400006002602354612ad891906138c2565b612ae291906143ea565b612aec91906138c2565b84612af791906143ea565b612b0191906138c2565b90506000670de0b6b3a764000088670de0b6b3a7640000602154612b2591906143ea565b612b2f91906138c2565b85612b3a91906143ea565b612b4491906138c2565b90506000670de0b6b3a764000089670de0b6b3a7640000602454612b6891906143ea565b612b7291906138c2565b86612b7d91906143ea565b612b8791906138c2565b9050612bb630601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611d81565b601e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719843087600080601d604051612c0890613d86565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612c599695949392919061484d565b60606040518083038185885af1158015612c77573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9c91906148ae565b505050612ce830601d604051612cb190613cc4565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602254611f4a565b6000601d604051612cf890613d25565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612d4a90613fbd565b60006040518083038185875af1925050503d8060008114612d87576040519150601f19603f3d011682016040523d82523d6000602084013e612d8c565b606091505b5050905080612dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc790614973565b60405180910390fd5b6000601d604051612de090613de7565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612e3290613fbd565b60006040518083038185875af1925050503d8060008114612e6f576040519150601f19603f3d011682016040523d82523d6000602084013e612e74565b606091505b5050905080612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614a05565b60405180910390fd5b60006021819055506000602281905550600060238190555060006024819055505050505050505050505b50505b5b8185612ef29190614819565b9450602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612fa25760125485612f5688610d6d565b612f609190613985565b1115612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9890614a71565b60405180910390fd5b5b50505b829150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301790614b03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361308f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308690614b95565b60405180910390fd5b61309a838383613230565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311790614c27565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131b39190613985565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132179190613253565b60405180910390a361322a848484613235565b50505050565b505050565b505050565b6000819050919050565b61324d8161323a565b82525050565b60006020820190506132686000830184613244565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132a857808201518184015260208101905061328d565b60008484015250505050565b6000601f19601f8301169050919050565b60006132d08261326e565b6132da8185613279565b93506132ea81856020860161328a565b6132f3816132b4565b840191505092915050565b6000602082019050818103600083015261331881846132c5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061335f82613334565b9050919050565b61336f81613354565b811461337a57600080fd5b50565b60008135905061338c81613366565b92915050565b61339b8161323a565b81146133a657600080fd5b50565b6000813590506133b881613392565b92915050565b600080604083850312156133d5576133d461332a565b5b60006133e38582860161337d565b92505060206133f4858286016133a9565b9150509250929050565b60008115159050919050565b613413816133fe565b82525050565b600060208201905061342e600083018461340a565b92915050565b60008060006060848603121561344d5761344c61332a565b5b600061345b8682870161337d565b935050602061346c8682870161337d565b925050604061347d868287016133a9565b9150509250925092565b60006020828403121561349d5761349c61332a565b5b60006134ab848285016133a9565b91505092915050565b600060ff82169050919050565b6134ca816134b4565b82525050565b60006020820190506134e560008301846134c1565b92915050565b6000602082840312156135015761350061332a565b5b600061350f8482850161337d565b91505092915050565b6000806040838503121561352f5761352e61332a565b5b600061353d858286016133a9565b925050602061354e858286016133a9565b9150509250929050565b600080600080608085870312156135725761357161332a565b5b6000613580878288016133a9565b9450506020613591878288016133a9565b93505060406135a2878288016133a9565b92505060606135b3878288016133a9565b91505092959194509250565b6135c881613354565b82525050565b60006020820190506135e360008301846135bf565b92915050565b6000806000606084860312156136025761360161332a565b5b60006136108682870161337d565b93505060206136218682870161337d565b92505060406136328682870161337d565b9150509250925092565b600060808201905061365160008301876135bf565b61365e60208301866135bf565b61366b60408301856135bf565b61367860608301846135bf565b95945050505050565b600080604083850312156136985761369761332a565b5b60006136a68582860161337d565b92505060206136b78582860161337d565b9150509250929050565b60006080820190506136d66000830187613244565b6136e36020830186613244565b6136f06040830185613244565b6136fd6060830184613244565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061374d57607f821691505b6020821081036137605761375f613706565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006137c2602883613279565b91506137cd82613766565b604082019050919050565b600060208201905081810360008301526137f1816137b5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061382e602083613279565b9150613839826137f8565b602082019050919050565b6000602082019050818103600083015261385d81613821565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138cd8261323a565b91506138d88361323a565b9250826138e8576138e7613864565b5b828204905092915050565b7f2063616e2774207365742062656c6f77203125206f662074686520737570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b600061394f602183613279565b915061395a826138f3565b604082019050919050565b6000602082019050818103600083015261397e81613942565b9050919050565b60006139908261323a565b915061399b8361323a565b92508282019050808211156139b3576139b2613893565b5b92915050565b7f616d6f756e742073686f756c642062652067726561746f72207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a15602283613279565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b7f464c4d3a204163636f756e7420697320616c7265616479206578636c75646564600082015250565b6000613a81602083613279565b9150613a8c82613a4b565b602082019050919050565b60006020820190508181036000830152613ab081613a74565b9050919050565b7f6d617820627579207065722074782073686f756c642062652067726561746f7260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000613b13602a83613279565b9150613b1e82613ab7565b604082019050919050565b60006020820190508181036000830152613b4281613b06565b9050919050565b7f6d61782073656c6c207065722074782073686f756c642062652067726561746f60008201527f72207468616e20302e3125000000000000000000000000000000000000000000602082015250565b6000613ba5602b83613279565b9150613bb082613b49565b604082019050919050565b60006020820190508181036000830152613bd481613b98565b9050919050565b7f73656c6c20746178206d757374206265206c657373207468616e20657175616c60008201527f20746f2031302070657263656e74000000000000000000000000000000000000602082015250565b6000613c37602e83613279565b9150613c4282613bdb565b604082019050919050565b60006020820190508181036000830152613c6681613c2a565b9050919050565b600081905092915050565b7f6275726e00000000000000000000000000000000000000000000000000000000600082015250565b6000613cae600483613c6d565b9150613cb982613c78565b600482019050919050565b6000613ccf82613ca1565b9150819050919050565b7f6d61726b6574696e670000000000000000000000000000000000000000000000600082015250565b6000613d0f600983613c6d565b9150613d1a82613cd9565b600982019050919050565b6000613d3082613d02565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b6000613d70600983613c6d565b9150613d7b82613d3a565b600982019050919050565b6000613d9182613d63565b9150819050919050565b7f6368617269747900000000000000000000000000000000000000000000000000600082015250565b6000613dd1600783613c6d565b9150613ddc82613d9b565b600782019050919050565b6000613df282613dc4565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613e58602583613279565b9150613e6382613dfc565b604082019050919050565b60006020820190508181036000830152613e8781613e4b565b9050919050565b7f62757920746178206d757374206265206c657373207468616e20657175616c2060008201527f746f2031302070657263656e7400000000000000000000000000000000000000602082015250565b6000613eea602d83613279565b9150613ef582613e8e565b604082019050919050565b60006020820190508181036000830152613f1981613edd565b9050919050565b7f464c4d3a204163636f756e74206973206e6f74206578636c7564656400000000600082015250565b6000613f56601c83613279565b9150613f6182613f20565b602082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b600081905092915050565b50565b6000613fa7600083613f8c565b9150613fb282613f97565b600082019050919050565b6000613fc882613f9a565b9150819050919050565b7f657468207472616e7366657220746f206f776e6572206661696c656400000000600082015250565b6000614008601c83613279565b915061401382613fd2565b602082019050919050565b6000602082019050818103600083015261403781613ffb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061409a602683613279565b91506140a58261403e565b604082019050919050565b600060208201905081810360008301526140c98161408d565b9050919050565b6000815190506140df81613392565b92915050565b6000602082840312156140fb576140fa61332a565b5b6000614109848285016140d0565b91505092915050565b600060408201905061412760008301856135bf565b6141346020830184613244565b9392505050565b614144816133fe565b811461414f57600080fd5b50565b6000815190506141618161413b565b92915050565b60006020828403121561417d5761417c61332a565b5b600061418b84828501614152565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f0602483613279565b91506141fb82614194565b604082019050919050565b6000602082019050818103600083015261421f816141e3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614282602283613279565b915061428d82614226565b604082019050919050565b600060208201905081810360008301526142b181614275565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061432581613366565b92915050565b6000602082840312156143415761434061332a565b5b600061434f84828501614316565b91505092915050565b7f427579206578636565647320706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006143b4602183613279565b91506143bf82614358565b604082019050919050565b600060208201905081810360008301526143e3816143a7565b9050919050565b60006143f58261323a565b91506144008361323a565b925082820261440e8161323a565b9150828204841483151761442557614424613893565b5b5092915050565b7f536e697065727320617265206e6f7420416c6c6f776564000000000000000000600082015250565b6000614462601783613279565b915061446d8261442c565b602082019050919050565b6000602082019050818103600083015261449181614455565b9050919050565b7f53656c6c206578636565647320706572207472616e73616374696f6e206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f4602283613279565b91506144ff82614498565b604082019050919050565b60006020820190508181036000830152614523816144e7565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61455f81613354565b82525050565b60006145718383614556565b60208301905092915050565b6000602082019050919050565b60006145958261452a565b61459f8185614535565b93506145aa83614546565b8060005b838110156145db5781516145c28882614565565b97506145cd8361457d565b9250506001810190506145ae565b5085935050505092915050565b60006040820190506145fd6000830185613244565b818103602083015261460f818461458a565b90509392505050565b600080fd5b614626826132b4565b810181811067ffffffffffffffff82111715614645576146446142b8565b5b80604052505050565b6000614658613320565b9050614664828261461d565b919050565b600067ffffffffffffffff821115614684576146836142b8565b5b602082029050602081019050919050565b600080fd5b60006146ad6146a884614669565b61464e565b905080838252602082019050602084028301858111156146d0576146cf614695565b5b835b818110156146f957806146e588826140d0565b8452602084019350506020810190506146d2565b5050509392505050565b600082601f83011261471857614717614618565b5b815161472884826020860161469a565b91505092915050565b6000602082840312156147475761474661332a565b5b600082015167ffffffffffffffff8111156147655761476461332f565b5b61477184828501614703565b91505092915050565b6000819050919050565b6000819050919050565b60006147a96147a461479f8461477a565b614784565b61323a565b9050919050565b6147b98161478e565b82525050565b600060a0820190506147d46000830188613244565b6147e160208301876147b0565b81810360408301526147f3818661458a565b905061480260608301856135bf565b61480f6080830184613244565b9695505050505050565b60006148248261323a565b915061482f8361323a565b925082820390508181111561484757614846613893565b5b92915050565b600060c08201905061486260008301896135bf565b61486f6020830188613244565b61487c60408301876147b0565b61488960608301866147b0565b61489660808301856135bf565b6148a360a0830184613244565b979650505050505050565b6000806000606084860312156148c7576148c661332a565b5b60006148d5868287016140d0565b93505060206148e6868287016140d0565b92505060406148f7868287016140d0565b9150509250925092565b7f657468207472616e7366657220746f206d61726b6574696e672077616c6c657460008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b600061495d602783613279565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b7f657468207472616e7366657220746f20636861726974792077616c6c6574206660008201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b60006149ef602583613279565b91506149fa82614993565b604082019050919050565b60006020820190508181036000830152614a1e816149e2565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b6000614a5b601883613279565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614aed602583613279565b9150614af882614a91565b604082019050919050565b60006020820190508181036000830152614b1c81614ae0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7f602383613279565b9150614b8a82614b23565b604082019050919050565b60006020820190508181036000830152614bae81614b72565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c11602683613279565b9150614c1c82614bb5565b604082019050919050565b60006020820190508181036000830152614c4081614c04565b905091905056fea264697066735822122050e5bc3979465178d2cbebd6ed802fba6ed0535d07ce4cce844364e701bd749564736f6c63430008110033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.