ETH Price: $3,625.63 (+7.81%)

Token

Tia Token (TIA)
 

Overview

Max Total Supply

1,010,000,000 TIA

Holders

2,387 (0.00%)

Market

Price

$0.01 @ 0.000002 ETH (+4.91%)

Onchain Market Cap

$8,179,010.30

Circulating Supply Market Cap

$1,647,415.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
605.341034708 TIA

Value
$4.90 ( ~0.00135149052746935 Eth) [0.0001%]
0x5A70937A7be09258001682e76993D7430043AA36
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

TIA token is a deflationary cryptocurrency: Reflection, Rebalancing and Burn. 10% fee in every on-chain transaction. 5% automatically distributed to all token holders. Tiamonds NFTs are asset backed NFTs that represent real-world diamonds, owners get TIA Tokens in an Own to Earn model.

Market

Volume (24H):$90,281.00
Market Capitalization:$1,647,415.00
Circulating Supply:203,460,882.00 TIA
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TIA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-23
*/

// SPDX-License-Identifier: Unlicensed
// Inspired by https://reflect.finance/
pragma solidity 0.8.0;



library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract TIA is Context, IERC20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;

    struct Fees {
        uint256 reflectFee;
        uint256 rebalanceFee;
        uint256 burnFee;
    }

    address private TiamondsAddress;
    address private immutable LCX; 

    IUniswapV2Router02 public immutable UniswapV2Router;
    // IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    address private constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1.01e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Tia Token";
    string private constant _symbol = "TIA";
    uint8 private constant _decimals = 9;

    uint256 private _reflectionFee = 50;
    uint256 private _rebalancingFee = 25;
    uint256 private _burningFee = 25;

    event RebalanceAndBurn(uint256, uint256, uint256);
    event SetTiamondsAddress(address);
    event ApproveTiamondsAddress(address, address, uint256);
    event ExcludeAccount(address);
    event IncludeAccount(address);
    event ChangeReflectionFee(uint256);
    event ChangeReBalancingFee(uint256);
    event ChangeBurnFee(uint256);
    event ExcludeFromFee(address);
    event IncludeInFee(address);

    constructor(address _lcxAddress, address _uniswapV2Address) {
        require(_lcxAddress != address(0), "Address should not be zero address");
        require(_uniswapV2Address != address(0), "Address should not be zero address");
        LCX = _lcxAddress;
        UniswapV2Router = IUniswapV2Router02(_uniswapV2Address);
        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_uniswapV2Address] = true;
        emit Transfer(address(0), owner(), _tTotal);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {   
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function setTiamondsAddress(address _tiamonds) external onlyOwner {
        require(_tiamonds != address(0), "Address should not be zero address");
        TiamondsAddress = address(_tiamonds);
        emit SetTiamondsAddress(_tiamonds);
    }

    function approveTiamondSC() external onlyOwner returns (bool) {
        _approve(msg.sender, TiamondsAddress, _tTotal);
        emit ApproveTiamondsAddress(msg.sender, TiamondsAddress, _tTotal);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcluded(address account) external view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }

    function reflect(uint256 tAmount) external {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
        emit ExcludeAccount(account);
    }

    function includeAccount(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
        emit IncludeAccount(account);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 currentReflectionFee = _reflectionFee;
        uint256 currentRebalancingFee = _rebalancingFee;
        uint256 currentBurningFee = _burningFee;
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            _reflectionFee = 0;
            _rebalancingFee = 0;
            _burningFee = 0;
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            _reflectionFee = currentReflectionFee;
            _rebalancingFee = currentRebalancingFee;
            _burningFee = currentBurningFee;
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees,
            uint256 tTransferAmount,
            Fees memory tFees
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFees.reflectFee, tFees.reflectFee);
        _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee);
        _burnFee(rFees.burnFee, tFees.burnFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rReflectFee, uint256 tReflectFee) private {
        _rTotal = _rTotal.sub(rReflectFee);
        _tFeeTotal = _tFeeTotal.add(tReflectFee);
    }

    function _reBalanceFee(uint256 rRebalanceFee, uint256 tRebalanceFee)
        private
    {
        _rOwned[address(this)] = _rOwned[address(this)].add(rRebalanceFee);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tRebalanceFee);
    }

    function _burnFee(uint256 rBurnFee, uint256 tBurnFee) private {
        _rOwned[address(this)] = _rOwned[address(this)].add(rBurnFee);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tBurnFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            Fees memory,
            uint256,
            Fees memory
        )
    {
        (uint256 tTransferAmount, Fees memory tFees) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            Fees memory rFees
        ) = _getRValues(tAmount, tFees, currentRate);
        return (rAmount, rTransferAmount, rFees, tTransferAmount, tFees);
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (uint256, Fees memory)
    {
        Fees memory tFees;
        tFees.reflectFee = tAmount.mul(_reflectionFee).div(1000);
        tFees.rebalanceFee = tAmount.mul(_rebalancingFee).div(1000);
        tFees.burnFee = tAmount.mul(_burningFee).div(1000);
        uint256 tTransferAmount = tAmount
            .sub(tFees.reflectFee)
            .sub(tFees.rebalanceFee)
            .sub(tFees.burnFee);
        return (tTransferAmount, tFees);
    }

    function _getRValues(
        uint256 tAmount,
        Fees memory tFees,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            Fees memory
        )
    {
        Fees memory rFees;
        uint256 rAmount = tAmount.mul(currentRate);
        rFees.reflectFee = tFees.reflectFee.mul(currentRate);
        rFees.rebalanceFee = tFees.rebalanceFee.mul(currentRate);
        rFees.burnFee = tFees.burnFee.mul(currentRate);
        uint256 rTransferAmount = rAmount
            .sub(rFees.reflectFee)
            .sub(rFees.rebalanceFee)
            .sub(rFees.burnFee);
        return (rAmount, rTransferAmount, rFees);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function reflectionFee() external view returns (uint256) {
        return _reflectionFee;
    }

    function changeReflectionFee(uint256 _newFee)
        external
        onlyOwner
        returns (bool)
    {
        _reflectionFee = _newFee;
        emit ChangeReflectionFee(_newFee);
        return true;
    }

    function rebalancingFee() external view returns (uint256) {
        return _rebalancingFee;
    }

    function changeReBalancingFee(uint256 _newFee)
        external
        onlyOwner
        returns (bool)
    {
        _rebalancingFee = _newFee;
        emit ChangeReBalancingFee(_newFee);
        return true;
    }

    function burningFee() external view returns (uint256) {
        return _burningFee;
    }

    function changeBurnFee(uint256 _newFee) external onlyOwner returns (bool) {
        _burningFee = _newFee;
        emit ChangeBurnFee(_newFee);
        return true;
    }

    function excludeFromFee(address account) external onlyOwner returns (bool) {
        require(account != address(0), "ERC20: account is the zero address");
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
        return true;
    }

    function includeInFee(address account) external onlyOwner returns (bool) {
        require(account != address(0), "ERC20: account is the zero address");
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
        return true;
    }

    function rebalanceAndBurn() external nonReentrant returns (bool) {
        uint256 balanceInContract = balanceOf(address(this));
        uint256 rebalanceAmount = balanceInContract.mul(
            _rebalancingFee).div(_rebalancingFee.add(_burningFee));
        uint256 burnAmount = balanceInContract.mul(
            _burningFee).div(_rebalancingFee.add(_burningFee));
        emit RebalanceAndBurn(balanceInContract, rebalanceAmount, burnAmount);
        _swap(rebalanceAmount);
        _burn(burnAmount);
        return true;
    }

    function _swap(uint256 rebalanceAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = LCX;
        _approve(address(this), address(UniswapV2Router), rebalanceAmount);
        UniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            rebalanceAmount,
            0, // Accept any amount
            path,
            owner(),
            block.timestamp
        );
    }

    function _burn(uint256 burnAmount) internal {
        _transfer(address(this), deadWallet, burnAmount);
        emit Transfer(address(this), deadWallet, burnAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lcxAddress","type":"address"},{"internalType":"address","name":"_uniswapV2Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ApproveTiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReBalancingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReflectionFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RebalanceAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"SetTiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveTiamondSC","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":"burningFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeBurnFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReBalancingFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReflectionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceAndBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalancingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tiamonds","type":"address"}],"name":"setTiamondsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"}]

60c0604052670e043da6172500006000196200001c91906200066d565b6000196200002b9190620005f4565b6009556032600b556019600c556019600d553480156200004a57600080fd5b50604051620056de380380620056de8339818101604052810190620000709190620004ea565b6200009062000084620003de60201b60201c565b620003e660201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200010a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010190620005a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200017d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017490620005a4565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506009546003600062000202620004aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600062000256620004aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000367620004aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670e043da617250000604051620003ce9190620005c6565b60405180910390a350506200071d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620004e48162000703565b92915050565b60008060408385031215620004fe57600080fd5b60006200050e85828601620004d3565b92505060206200052185828601620004d3565b9150509250929050565b60006200053a602283620005e3565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6200059e8162000663565b82525050565b60006020820190508181036000830152620005bf816200052b565b9050919050565b6000602082019050620005dd600083018462000593565b92915050565b600082825260208201905092915050565b6000620006018262000663565b91506200060e8362000663565b925082821015620006245762000623620006a5565b5b828203905092915050565b60006200063c8262000643565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006200067a8262000663565b9150620006878362000663565b9250826200069a5762000699620006d4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6200070e816200062f565b81146200071a57600080fd5b50565b60805160601c60a05160601c614f87620007576000396000818161084a01528181612b840152612bab01526000612aeb0152614f876000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063cba0e996116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063cba0e99614610580578063db5f06db146105b0578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b806390f712cc116100e957806390f712cc146104e457806395d89b4114610502578063a457c2d714610520578063a9059cbb14610550576101fb565b8063715018a6146104805780637f6adbfe1461048a57806383ad7994146104a85780638da5cb5b146104c6576101fb565b80632d83811911610192578063437823ec11610161578063437823ec146103d25780634549b0391461040257806345c2b1ab1461043257806370a0823114610450576101fb565b80632d83811914610324578063313ce5671461035457806339509351146103725780633a94a68a146103a2576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a600480360381019061021591906140ef565b6106ce565b005b610224610848565b60405161023191906148bb565b60405180910390f35b61024261086c565b60405161024f91906148d6565b60405180910390f35b610272600480360381019061026d91906140b3565b6108a9565b60405161027f91906148a0565b60405180910390f35b6102906108c7565b60405161029d9190614b18565b60405180910390f35b6102ae6108d1565b6040516102bb9190614b18565b60405180910390f35b6102de60048036038101906102d99190614064565b6108e1565b6040516102eb91906148a0565b60405180910390f35b61030e600480360381019061030991906140ef565b6109ba565b60405161031b91906148a0565b60405180910390f35b61033e600480360381019061033991906140ef565b610a7f565b60405161034b9190614b18565b60405180910390f35b61035c610aed565b6040516103699190614bc4565b60405180910390f35b61038c600480360381019061038791906140b3565b610af6565b60405161039991906148a0565b60405180910390f35b6103bc60048036038101906103b791906140ef565b610ba9565b6040516103c991906148a0565b60405180910390f35b6103ec60048036038101906103e79190613fff565b610c6e565b6040516103f991906148a0565b60405180910390f35b61041c60048036038101906104179190614118565b610df4565b6040516104299190614b18565b60405180910390f35b61043a610e7c565b60405161044791906148a0565b60405180910390f35b61046a60048036038101906104659190613fff565b610f9b565b6040516104779190614b18565b60405180910390f35b610488611086565b005b61049261110e565b60405161049f91906148a0565b60405180910390f35b6104b061124b565b6040516104bd9190614b18565b60405180910390f35b6104ce611255565b6040516104db919061484e565b60405180910390f35b6104ec61127e565b6040516104f99190614b18565b60405180910390f35b61050a611288565b60405161051791906148d6565b60405180910390f35b61053a600480360381019061053591906140b3565b6112c5565b60405161054791906148a0565b60405180910390f35b61056a600480360381019061056591906140b3565b611392565b60405161057791906148a0565b60405180910390f35b61059a60048036038101906105959190613fff565b6113b0565b6040516105a791906148a0565b60405180910390f35b6105ca60048036038101906105c59190613fff565b611406565b005b6105e660048036038101906105e19190614028565b61156d565b6040516105f39190614b18565b60405180910390f35b61061660048036038101906106119190613fff565b6115f4565b60405161062391906148a0565b60405180910390f35b61064660048036038101906106419190613fff565b61177a565b005b610662600480360381019061065d9190613fff565b611a4c565b005b61067e60048036038101906106799190613fff565b611b44565b005b610688611f49565b6040516106959190614b18565b60405180910390f35b6106b860048036038101906106b391906140ef565b611f53565b6040516106c591906148a0565b60405180910390f35b60006106d8612018565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614af8565b60405180910390fd5b600061077283612020565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208590919063ffffffff16565b60098190555061083d83600a546120cf90919063ffffffff16565b600a81905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606040518060400160405280600981526020017f54696120546f6b656e0000000000000000000000000000000000000000000000815250905090565b60006108bd6108b6612018565b848461212d565b6001905092915050565b6000600a54905090565b6000670e043da617250000905090565b60006108ee8484846122f8565b6109af846108fa612018565b6109aa85604051806060016040528060288152602001614f0560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610960612018565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e89092919063ffffffff16565b61212d565b600190509392505050565b60006109c4612018565b73ffffffffffffffffffffffffffffffffffffffff166109e2611255565b73ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90614a58565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6e9190614b18565b60405180910390a160019050919050565b6000600954821115610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd90614918565b60405180910390fd5b6000610ad061284c565b9050610ae5818461287790919063ffffffff16565b915050919050565b60006009905090565b6000610b9f610b03612018565b84610b9a8560056000610b14612018565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b61212d565b6001905092915050565b6000610bb3612018565b73ffffffffffffffffffffffffffffffffffffffff16610bd1611255565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90614a58565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610c5d9190614b18565b60405180910390a160019050919050565b6000610c78612018565b73ffffffffffffffffffffffffffffffffffffffff16610c96611255565b73ffffffffffffffffffffffffffffffffffffffff1614610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390614a18565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610de3919061484e565b60405180910390a160019050919050565b6000670e043da617250000831115610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e38906149f8565b60405180910390fd5b81610e60576000610e5184612020565b50505050905080915050610e76565b6000610e6b84612020565b505050915050809150505b92915050565b6000610e86612018565b73ffffffffffffffffffffffffffffffffffffffff16610ea4611255565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190614a58565b60405180910390fd5b610f2f33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670e043da61725000061212d565b7f90159e5555d07a22e4805e2b4155e9b795fec73fb5bed7d09e03146c2fc89a7033600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670e043da617250000604051610f8c93929190614869565b60405180910390a16001905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561103657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611081565b61107e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a7f565b90505b919050565b61108e612018565b73ffffffffffffffffffffffffffffffffffffffff166110ac611255565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990614a58565b60405180910390fd5b61110c60006128c1565b565b600060026001541415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614ad8565b60405180910390fd5b6002600181905550600061116930610f9b565b905060006111aa611187600d54600c546120cf90919063ffffffff16565b61119c600c548561298590919063ffffffff16565b61287790919063ffffffff16565b905060006111eb6111c8600d54600c546120cf90919063ffffffff16565b6111dd600d548661298590919063ffffffff16565b61287790919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161122093929190614b8d565b60405180910390a161123182612a00565b61123a81612c48565b600193505050506001808190555090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600381526020017f5449410000000000000000000000000000000000000000000000000000000000815250905090565b60006113886112d2612018565b8461138385604051806060016040528060258152602001614f2d60259139600560006112fc612018565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e89092919063ffffffff16565b61212d565b6001905092915050565b60006113a661139f612018565b84846122f8565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61140e612018565b73ffffffffffffffffffffffffffffffffffffffff1661142c611255565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990614978565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2c2d030012101086774a23aa76874edc7131c76fce54a4bad659e4acde8e73a481604051611562919061484e565b60405180910390a150565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006115fe612018565b73ffffffffffffffffffffffffffffffffffffffff1661161c611255565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614a18565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e82604051611769919061484e565b60405180910390a160019050919050565b611782612018565b73ffffffffffffffffffffffffffffffffffffffff166117a0611255565b73ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90614a58565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a906149b8565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195757611913600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a7f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a41919061484e565b60405180910390a150565b611a54612018565b73ffffffffffffffffffffffffffffffffffffffff16611a72611255565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90614938565b60405180910390fd5b611b41816128c1565b50565b611b4c612018565b73ffffffffffffffffffffffffffffffffffffffff16611b6a611255565b73ffffffffffffffffffffffffffffffffffffffff1614611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614a58565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906149d8565b60405180910390fd5b60005b600880549050811015611f0e578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611efb5760086001600880549050611d089190614d15565b81548110611d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611da4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f0e565b8080611f0690614e07565b915050611c4f565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f3e919061484e565b60405180910390a150565b6000600c54905090565b6000611f5d612018565b73ffffffffffffffffffffffffffffffffffffffff16611f7b611255565b73ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890614a58565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f826040516120079190614b18565b60405180910390a160019050919050565b600033905090565b60008061202b613f9f565b6000612035613f9f565b60008061204188612cbf565b91509150600061204f61284c565b905060008060006120618c8686612dbb565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e8565b905092915050565b60008082846120de9190614c34565b905083811015612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a90614998565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561219d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219490614ab8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561220d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220490614958565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122eb9190614b18565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906148f8565b60405180910390fd5b6000811161241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241290614a78565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d15750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124ef576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125925750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125a7576125a2868686612ea1565b612724565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561264a5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561265f5761265a868686613120565b612723565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127015750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127165761271186868661339f565b612722565b6127218686866136b3565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c55750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127e05782600b8190555081600c8190555080600d819055505b505050505050565b6000838311158290612830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282791906148d6565b60405180910390fd5b506000838561283f9190614d15565b9050809150509392505050565b600080600061285961389d565b91509150612870818361287790919063ffffffff16565b9250505090565b60006128b983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c00565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561299857600090506129fa565b600082846129a69190614cbb565b90508284826129b59190614c8a565b146129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614a38565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff811115612a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a715781602001602082028036833780820191505090505b5090503081600081518110612aaf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612b44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ba9307f00000000000000000000000000000000000000000000000000000000000000008461212d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612bf1611255565b426040518663ffffffff1660e01b8152600401612c12959493929190614b33565b600060405180830381600087803b158015612c2c57600080fd5b505af1158015612c40573d6000803e3d6000fd5b505050505050565b612c553061dead836122f8565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cb49190614b18565b60405180910390a350565b6000612cc9613f9f565b612cd1613f9f565b612cfa6103e8612cec600b548761298590919063ffffffff16565b61287790919063ffffffff16565b816000018181525050612d2c6103e8612d1e600c548761298590919063ffffffff16565b61287790919063ffffffff16565b816020018181525050612d5e6103e8612d50600d548761298590919063ffffffff16565b61287790919063ffffffff16565b8160400181815250506000612dac8260400151612d9e8460200151612d9086600001518a61208590919063ffffffff16565b61208590919063ffffffff16565b61208590919063ffffffff16565b90508082935093505050915091565b600080612dc6613f9f565b612dce613f9f565b6000612de3868961298590919063ffffffff16565b9050612dfc86886000015161298590919063ffffffff16565b826000018181525050612e1c86886020015161298590919063ffffffff16565b826020018181525050612e3c86886040015161298590919063ffffffff16565b8260400181815250506000612e8a8360400151612e7c8560200151612e6e87600001518761208590919063ffffffff16565b61208590919063ffffffff16565b61208590919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612eb286612020565b94509450945094509450612f0e86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303884600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061308d83600001518260000151613c63565b61309f83602001518260200151613c9d565b6130b183604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161310e9190614b18565b60405180910390a35050505050505050565b600080600080600061313186612020565b9450945094509450945061318d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322282600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330c83600001518260000151613c63565b61331e83602001518260200151613c9d565b61333083604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161338d9190614b18565b60405180910390a35050505050505050565b60008060008060006133b086612020565b9450945094509450945061340c86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134a185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353682600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135cb84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362083600001518260000151613c63565b61363283602001518260200151613c9d565b61364483604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136a19190614b18565b60405180910390a35050505050505050565b60008060008060006136c486612020565b9450945094509450945061372085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b584600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380a83600001518260000151613c63565b61381c83602001518260200151613c9d565b61382e83604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388b9190614b18565b60405180910390a35050505050505050565b600080600060095490506000670e043da617250000905060005b600880549050811015613bb757826003600060088481548110613903577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a1757508160046000600884815481106139af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a3457600954670e043da61725000094509450505050613bfc565b613aea6003600060088481548110613a75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208590919063ffffffff16565b9250613ba26004600060088481548110613b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208590919063ffffffff16565b91508080613baf90614e07565b9150506138b7565b50613bd5670e043da61725000060095461287790919063ffffffff16565b821015613bf357600954670e043da617250000935093505050613bfc565b81819350935050505b9091565b60008083118290613c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3e91906148d6565b60405180910390fd5b5060008385613c569190614c8a565b9050809150509392505050565b613c788260095461208590919063ffffffff16565b600981905550613c9381600a546120cf90919063ffffffff16565b600a819055505050565b613cef82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e1a57613dd681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e7082600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f9b57613f5781600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613fcf81614ebf565b92915050565b600081359050613fe481614ed6565b92915050565b600081359050613ff981614eed565b92915050565b60006020828403121561401157600080fd5b600061401f84828501613fc0565b91505092915050565b6000806040838503121561403b57600080fd5b600061404985828601613fc0565b925050602061405a85828601613fc0565b9150509250929050565b60008060006060848603121561407957600080fd5b600061408786828701613fc0565b935050602061409886828701613fc0565b92505060406140a986828701613fea565b9150509250925092565b600080604083850312156140c657600080fd5b60006140d485828601613fc0565b92505060206140e585828601613fea565b9150509250929050565b60006020828403121561410157600080fd5b600061410f84828501613fea565b91505092915050565b6000806040838503121561412b57600080fd5b600061413985828601613fea565b925050602061414a85828601613fd5565b9150509250929050565b6000614160838361416c565b60208301905092915050565b61417581614d49565b82525050565b61418481614d49565b82525050565b600061419582614bef565b61419f8185614c12565b93506141aa83614bdf565b8060005b838110156141db5781516141c28882614154565b97506141cd83614c05565b9250506001810190506141ae565b5085935050505092915050565b6141f181614d5b565b82525050565b61420081614d9e565b82525050565b61420f81614dc2565b82525050565b600061422082614bfa565b61422a8185614c23565b935061423a818560208601614dd4565b61424381614eae565b840191505092915050565b600061425b602383614c23565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c1602a83614c23565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b6000614327602683614c23565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061438d602283614c23565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143f3602283614c23565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614459601b83614c23565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614499601b83614c23565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006144d9601783614c23565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b6000614519601f83614c23565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614559602283614c23565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145bf602183614c23565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614625602083614c23565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614665602983614c23565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cb602583614c23565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614731602483614c23565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614797601f83614c23565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006147d7602c83614c23565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61483981614d87565b82525050565b61484881614d91565b82525050565b6000602082019050614863600083018461417b565b92915050565b600060608201905061487e600083018661417b565b61488b602083018561417b565b6148986040830184614830565b949350505050565b60006020820190506148b560008301846141e8565b92915050565b60006020820190506148d060008301846141f7565b92915050565b600060208201905081810360008301526148f08184614215565b905092915050565b600060208201905081810360008301526149118161424e565b9050919050565b60006020820190508181036000830152614931816142b4565b9050919050565b600060208201905081810360008301526149518161431a565b9050919050565b6000602082019050818103600083015261497181614380565b9050919050565b60006020820190508181036000830152614991816143e6565b9050919050565b600060208201905081810360008301526149b18161444c565b9050919050565b600060208201905081810360008301526149d18161448c565b9050919050565b600060208201905081810360008301526149f1816144cc565b9050919050565b60006020820190508181036000830152614a118161450c565b9050919050565b60006020820190508181036000830152614a318161454c565b9050919050565b60006020820190508181036000830152614a51816145b2565b9050919050565b60006020820190508181036000830152614a7181614618565b9050919050565b60006020820190508181036000830152614a9181614658565b9050919050565b60006020820190508181036000830152614ab1816146be565b9050919050565b60006020820190508181036000830152614ad181614724565b9050919050565b60006020820190508181036000830152614af18161478a565b9050919050565b60006020820190508181036000830152614b11816147ca565b9050919050565b6000602082019050614b2d6000830184614830565b92915050565b600060a082019050614b486000830188614830565b614b556020830187614206565b8181036040830152614b67818661418a565b9050614b76606083018561417b565b614b836080830184614830565b9695505050505050565b6000606082019050614ba26000830186614830565b614baf6020830185614830565b614bbc6040830184614830565b949350505050565b6000602082019050614bd9600083018461483f565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c3f82614d87565b9150614c4a83614d87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7f57614c7e614e50565b5b828201905092915050565b6000614c9582614d87565b9150614ca083614d87565b925082614cb057614caf614e7f565b5b828204905092915050565b6000614cc682614d87565b9150614cd183614d87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0a57614d09614e50565b5b828202905092915050565b6000614d2082614d87565b9150614d2b83614d87565b925082821015614d3e57614d3d614e50565b5b828203905092915050565b6000614d5482614d67565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614da982614db0565b9050919050565b6000614dbb82614d67565b9050919050565b6000614dcd82614d87565b9050919050565b60005b83811015614df2578082015181840152602081019050614dd7565b83811115614e01576000848401525b50505050565b6000614e1282614d87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e4557614e44614e50565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614ec881614d49565b8114614ed357600080fd5b50565b614edf81614d5b565b8114614eea57600080fd5b50565b614ef681614d87565b8114614f0157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206b53f94b6ad08e24686bd14135cd981d26a4e6b35798acbcab42f496f145e1d064736f6c63430008000033000000000000000000000000037a54aab062628c9bbae1fdb1583c195585fe410000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063cba0e996116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063cba0e99614610580578063db5f06db146105b0578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b806390f712cc116100e957806390f712cc146104e457806395d89b4114610502578063a457c2d714610520578063a9059cbb14610550576101fb565b8063715018a6146104805780637f6adbfe1461048a57806383ad7994146104a85780638da5cb5b146104c6576101fb565b80632d83811911610192578063437823ec11610161578063437823ec146103d25780634549b0391461040257806345c2b1ab1461043257806370a0823114610450576101fb565b80632d83811914610324578063313ce5671461035457806339509351146103725780633a94a68a146103a2576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a600480360381019061021591906140ef565b6106ce565b005b610224610848565b60405161023191906148bb565b60405180910390f35b61024261086c565b60405161024f91906148d6565b60405180910390f35b610272600480360381019061026d91906140b3565b6108a9565b60405161027f91906148a0565b60405180910390f35b6102906108c7565b60405161029d9190614b18565b60405180910390f35b6102ae6108d1565b6040516102bb9190614b18565b60405180910390f35b6102de60048036038101906102d99190614064565b6108e1565b6040516102eb91906148a0565b60405180910390f35b61030e600480360381019061030991906140ef565b6109ba565b60405161031b91906148a0565b60405180910390f35b61033e600480360381019061033991906140ef565b610a7f565b60405161034b9190614b18565b60405180910390f35b61035c610aed565b6040516103699190614bc4565b60405180910390f35b61038c600480360381019061038791906140b3565b610af6565b60405161039991906148a0565b60405180910390f35b6103bc60048036038101906103b791906140ef565b610ba9565b6040516103c991906148a0565b60405180910390f35b6103ec60048036038101906103e79190613fff565b610c6e565b6040516103f991906148a0565b60405180910390f35b61041c60048036038101906104179190614118565b610df4565b6040516104299190614b18565b60405180910390f35b61043a610e7c565b60405161044791906148a0565b60405180910390f35b61046a60048036038101906104659190613fff565b610f9b565b6040516104779190614b18565b60405180910390f35b610488611086565b005b61049261110e565b60405161049f91906148a0565b60405180910390f35b6104b061124b565b6040516104bd9190614b18565b60405180910390f35b6104ce611255565b6040516104db919061484e565b60405180910390f35b6104ec61127e565b6040516104f99190614b18565b60405180910390f35b61050a611288565b60405161051791906148d6565b60405180910390f35b61053a600480360381019061053591906140b3565b6112c5565b60405161054791906148a0565b60405180910390f35b61056a600480360381019061056591906140b3565b611392565b60405161057791906148a0565b60405180910390f35b61059a60048036038101906105959190613fff565b6113b0565b6040516105a791906148a0565b60405180910390f35b6105ca60048036038101906105c59190613fff565b611406565b005b6105e660048036038101906105e19190614028565b61156d565b6040516105f39190614b18565b60405180910390f35b61061660048036038101906106119190613fff565b6115f4565b60405161062391906148a0565b60405180910390f35b61064660048036038101906106419190613fff565b61177a565b005b610662600480360381019061065d9190613fff565b611a4c565b005b61067e60048036038101906106799190613fff565b611b44565b005b610688611f49565b6040516106959190614b18565b60405180910390f35b6106b860048036038101906106b391906140ef565b611f53565b6040516106c591906148a0565b60405180910390f35b60006106d8612018565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614af8565b60405180910390fd5b600061077283612020565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208590919063ffffffff16565b60098190555061083d83600a546120cf90919063ffffffff16565b600a81905550505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60606040518060400160405280600981526020017f54696120546f6b656e0000000000000000000000000000000000000000000000815250905090565b60006108bd6108b6612018565b848461212d565b6001905092915050565b6000600a54905090565b6000670e043da617250000905090565b60006108ee8484846122f8565b6109af846108fa612018565b6109aa85604051806060016040528060288152602001614f0560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610960612018565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e89092919063ffffffff16565b61212d565b600190509392505050565b60006109c4612018565b73ffffffffffffffffffffffffffffffffffffffff166109e2611255565b73ffffffffffffffffffffffffffffffffffffffff1614610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f90614a58565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6e9190614b18565b60405180910390a160019050919050565b6000600954821115610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd90614918565b60405180910390fd5b6000610ad061284c565b9050610ae5818461287790919063ffffffff16565b915050919050565b60006009905090565b6000610b9f610b03612018565b84610b9a8560056000610b14612018565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b61212d565b6001905092915050565b6000610bb3612018565b73ffffffffffffffffffffffffffffffffffffffff16610bd1611255565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90614a58565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610c5d9190614b18565b60405180910390a160019050919050565b6000610c78612018565b73ffffffffffffffffffffffffffffffffffffffff16610c96611255565b73ffffffffffffffffffffffffffffffffffffffff1614610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390614a18565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610de3919061484e565b60405180910390a160019050919050565b6000670e043da617250000831115610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e38906149f8565b60405180910390fd5b81610e60576000610e5184612020565b50505050905080915050610e76565b6000610e6b84612020565b505050915050809150505b92915050565b6000610e86612018565b73ffffffffffffffffffffffffffffffffffffffff16610ea4611255565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190614a58565b60405180910390fd5b610f2f33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670e043da61725000061212d565b7f90159e5555d07a22e4805e2b4155e9b795fec73fb5bed7d09e03146c2fc89a7033600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670e043da617250000604051610f8c93929190614869565b60405180910390a16001905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561103657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611081565b61107e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a7f565b90505b919050565b61108e612018565b73ffffffffffffffffffffffffffffffffffffffff166110ac611255565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990614a58565b60405180910390fd5b61110c60006128c1565b565b600060026001541415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614ad8565b60405180910390fd5b6002600181905550600061116930610f9b565b905060006111aa611187600d54600c546120cf90919063ffffffff16565b61119c600c548561298590919063ffffffff16565b61287790919063ffffffff16565b905060006111eb6111c8600d54600c546120cf90919063ffffffff16565b6111dd600d548661298590919063ffffffff16565b61287790919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161122093929190614b8d565b60405180910390a161123182612a00565b61123a81612c48565b600193505050506001808190555090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600381526020017f5449410000000000000000000000000000000000000000000000000000000000815250905090565b60006113886112d2612018565b8461138385604051806060016040528060258152602001614f2d60259139600560006112fc612018565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127e89092919063ffffffff16565b61212d565b6001905092915050565b60006113a661139f612018565b84846122f8565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61140e612018565b73ffffffffffffffffffffffffffffffffffffffff1661142c611255565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990614978565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f2c2d030012101086774a23aa76874edc7131c76fce54a4bad659e4acde8e73a481604051611562919061484e565b60405180910390a150565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006115fe612018565b73ffffffffffffffffffffffffffffffffffffffff1661161c611255565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614a18565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e82604051611769919061484e565b60405180910390a160019050919050565b611782612018565b73ffffffffffffffffffffffffffffffffffffffff166117a0611255565b73ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90614a58565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a906149b8565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195757611913600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a7f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a41919061484e565b60405180910390a150565b611a54612018565b73ffffffffffffffffffffffffffffffffffffffff16611a72611255565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614a58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90614938565b60405180910390fd5b611b41816128c1565b50565b611b4c612018565b73ffffffffffffffffffffffffffffffffffffffff16611b6a611255565b73ffffffffffffffffffffffffffffffffffffffff1614611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614a58565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906149d8565b60405180910390fd5b60005b600880549050811015611f0e578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611efb5760086001600880549050611d089190614d15565b81548110611d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611da4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f0e565b8080611f0690614e07565b915050611c4f565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f3e919061484e565b60405180910390a150565b6000600c54905090565b6000611f5d612018565b73ffffffffffffffffffffffffffffffffffffffff16611f7b611255565b73ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890614a58565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f826040516120079190614b18565b60405180910390a160019050919050565b600033905090565b60008061202b613f9f565b6000612035613f9f565b60008061204188612cbf565b91509150600061204f61284c565b905060008060006120618c8686612dbb565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e8565b905092915050565b60008082846120de9190614c34565b905083811015612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a90614998565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561219d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219490614ab8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561220d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220490614958565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122eb9190614b18565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906148f8565b60405180910390fd5b6000811161241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241290614a78565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124d15750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124ef576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125925750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125a7576125a2868686612ea1565b612724565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561264a5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561265f5761265a868686613120565b612723565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127015750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127165761271186868661339f565b612722565b6127218686866136b3565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c55750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127e05782600b8190555081600c8190555080600d819055505b505050505050565b6000838311158290612830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282791906148d6565b60405180910390fd5b506000838561283f9190614d15565b9050809150509392505050565b600080600061285961389d565b91509150612870818361287790919063ffffffff16565b9250505090565b60006128b983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c00565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561299857600090506129fa565b600082846129a69190614cbb565b90508284826129b59190614c8a565b146129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614a38565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff811115612a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a715781602001602082028036833780820191505090505b5090503081600081518110612aaf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000037a54aab062628c9bbae1fdb1583c195585fe4181600181518110612b44577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ba9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461212d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612bf1611255565b426040518663ffffffff1660e01b8152600401612c12959493929190614b33565b600060405180830381600087803b158015612c2c57600080fd5b505af1158015612c40573d6000803e3d6000fd5b505050505050565b612c553061dead836122f8565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cb49190614b18565b60405180910390a350565b6000612cc9613f9f565b612cd1613f9f565b612cfa6103e8612cec600b548761298590919063ffffffff16565b61287790919063ffffffff16565b816000018181525050612d2c6103e8612d1e600c548761298590919063ffffffff16565b61287790919063ffffffff16565b816020018181525050612d5e6103e8612d50600d548761298590919063ffffffff16565b61287790919063ffffffff16565b8160400181815250506000612dac8260400151612d9e8460200151612d9086600001518a61208590919063ffffffff16565b61208590919063ffffffff16565b61208590919063ffffffff16565b90508082935093505050915091565b600080612dc6613f9f565b612dce613f9f565b6000612de3868961298590919063ffffffff16565b9050612dfc86886000015161298590919063ffffffff16565b826000018181525050612e1c86886020015161298590919063ffffffff16565b826020018181525050612e3c86886040015161298590919063ffffffff16565b8260400181815250506000612e8a8360400151612e7c8560200151612e6e87600001518761208590919063ffffffff16565b61208590919063ffffffff16565b61208590919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612eb286612020565b94509450945094509450612f0e86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303884600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061308d83600001518260000151613c63565b61309f83602001518260200151613c9d565b6130b183604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161310e9190614b18565b60405180910390a35050505050505050565b600080600080600061313186612020565b9450945094509450945061318d85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322282600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330c83600001518260000151613c63565b61331e83602001518260200151613c9d565b61333083604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161338d9190614b18565b60405180910390a35050505050505050565b60008060008060006133b086612020565b9450945094509450945061340c86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134a185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353682600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135cb84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362083600001518260000151613c63565b61363283602001518260200151613c9d565b61364483604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136a19190614b18565b60405180910390a35050505050505050565b60008060008060006136c486612020565b9450945094509450945061372085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b584600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380a83600001518260000151613c63565b61381c83602001518260200151613c9d565b61382e83604001518260400151613e1e565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388b9190614b18565b60405180910390a35050505050505050565b600080600060095490506000670e043da617250000905060005b600880549050811015613bb757826003600060088481548110613903577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a1757508160046000600884815481106139af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a3457600954670e043da61725000094509450505050613bfc565b613aea6003600060088481548110613a75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208590919063ffffffff16565b9250613ba26004600060088481548110613b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208590919063ffffffff16565b91508080613baf90614e07565b9150506138b7565b50613bd5670e043da61725000060095461287790919063ffffffff16565b821015613bf357600954670e043da617250000935093505050613bfc565b81819350935050505b9091565b60008083118290613c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3e91906148d6565b60405180910390fd5b5060008385613c569190614c8a565b9050809150509392505050565b613c788260095461208590919063ffffffff16565b600981905550613c9381600a546120cf90919063ffffffff16565b600a819055505050565b613cef82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e1a57613dd681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e7082600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f9b57613f5781600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613fcf81614ebf565b92915050565b600081359050613fe481614ed6565b92915050565b600081359050613ff981614eed565b92915050565b60006020828403121561401157600080fd5b600061401f84828501613fc0565b91505092915050565b6000806040838503121561403b57600080fd5b600061404985828601613fc0565b925050602061405a85828601613fc0565b9150509250929050565b60008060006060848603121561407957600080fd5b600061408786828701613fc0565b935050602061409886828701613fc0565b92505060406140a986828701613fea565b9150509250925092565b600080604083850312156140c657600080fd5b60006140d485828601613fc0565b92505060206140e585828601613fea565b9150509250929050565b60006020828403121561410157600080fd5b600061410f84828501613fea565b91505092915050565b6000806040838503121561412b57600080fd5b600061413985828601613fea565b925050602061414a85828601613fd5565b9150509250929050565b6000614160838361416c565b60208301905092915050565b61417581614d49565b82525050565b61418481614d49565b82525050565b600061419582614bef565b61419f8185614c12565b93506141aa83614bdf565b8060005b838110156141db5781516141c28882614154565b97506141cd83614c05565b9250506001810190506141ae565b5085935050505092915050565b6141f181614d5b565b82525050565b61420081614d9e565b82525050565b61420f81614dc2565b82525050565b600061422082614bfa565b61422a8185614c23565b935061423a818560208601614dd4565b61424381614eae565b840191505092915050565b600061425b602383614c23565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c1602a83614c23565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b6000614327602683614c23565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061438d602283614c23565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143f3602283614c23565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614459601b83614c23565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614499601b83614c23565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006144d9601783614c23565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b6000614519601f83614c23565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614559602283614c23565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145bf602183614c23565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614625602083614c23565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614665602983614c23565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006146cb602583614c23565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614731602483614c23565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614797601f83614c23565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006147d7602c83614c23565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61483981614d87565b82525050565b61484881614d91565b82525050565b6000602082019050614863600083018461417b565b92915050565b600060608201905061487e600083018661417b565b61488b602083018561417b565b6148986040830184614830565b949350505050565b60006020820190506148b560008301846141e8565b92915050565b60006020820190506148d060008301846141f7565b92915050565b600060208201905081810360008301526148f08184614215565b905092915050565b600060208201905081810360008301526149118161424e565b9050919050565b60006020820190508181036000830152614931816142b4565b9050919050565b600060208201905081810360008301526149518161431a565b9050919050565b6000602082019050818103600083015261497181614380565b9050919050565b60006020820190508181036000830152614991816143e6565b9050919050565b600060208201905081810360008301526149b18161444c565b9050919050565b600060208201905081810360008301526149d18161448c565b9050919050565b600060208201905081810360008301526149f1816144cc565b9050919050565b60006020820190508181036000830152614a118161450c565b9050919050565b60006020820190508181036000830152614a318161454c565b9050919050565b60006020820190508181036000830152614a51816145b2565b9050919050565b60006020820190508181036000830152614a7181614618565b9050919050565b60006020820190508181036000830152614a9181614658565b9050919050565b60006020820190508181036000830152614ab1816146be565b9050919050565b60006020820190508181036000830152614ad181614724565b9050919050565b60006020820190508181036000830152614af18161478a565b9050919050565b60006020820190508181036000830152614b11816147ca565b9050919050565b6000602082019050614b2d6000830184614830565b92915050565b600060a082019050614b486000830188614830565b614b556020830187614206565b8181036040830152614b67818661418a565b9050614b76606083018561417b565b614b836080830184614830565b9695505050505050565b6000606082019050614ba26000830186614830565b614baf6020830185614830565b614bbc6040830184614830565b949350505050565b6000602082019050614bd9600083018461483f565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c3f82614d87565b9150614c4a83614d87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7f57614c7e614e50565b5b828201905092915050565b6000614c9582614d87565b9150614ca083614d87565b925082614cb057614caf614e7f565b5b828204905092915050565b6000614cc682614d87565b9150614cd183614d87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0a57614d09614e50565b5b828202905092915050565b6000614d2082614d87565b9150614d2b83614d87565b925082821015614d3e57614d3d614e50565b5b828203905092915050565b6000614d5482614d67565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614da982614db0565b9050919050565b6000614dbb82614d67565b9050919050565b6000614dcd82614d87565b9050919050565b60005b83811015614df2578082015181840152602081019050614dd7565b83811115614e01576000848401525b50505050565b6000614e1282614d87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e4557614e44614e50565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614ec881614d49565b8114614ed357600080fd5b50565b614edf81614d5b565b8114614eea57600080fd5b50565b614ef681614d87565b8114614f0157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206b53f94b6ad08e24686bd14135cd981d26a4e6b35798acbcab42f496f145e1d064736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000037a54aab062628c9bbae1fdb1583c195585fe410000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _lcxAddress (address): 0x037A54AaB062628C9Bbae1FDB1583c195585fe41
Arg [1] : _uniswapV2Address (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000037a54aab062628c9bbae1fdb1583c195585fe41
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

23152:18597:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28559:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23475:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25475:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26475:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28462:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25758:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27166:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39142:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29471:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25665:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27622:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39478:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39991:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28986:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26933:225;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25863:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14071:103;;;:::i;:::-;;40540:544;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39037:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13420:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39710:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25568:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27932:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26069:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28342:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26678:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26281:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40267:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29801:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14329:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30179:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39371:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39809:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28559:419;28613:14;28630:12;:10;:12::i;:::-;28613:29;;28676:11;:19;28688:6;28676:19;;;;;;;;;;;;;;;;;;;;;;;;;28675:20;28653:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;28779:15;28806:19;28817:7;28806:10;:19::i;:::-;28778:47;;;;;;28854:28;28874:7;28854;:15;28862:6;28854:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28836:7;:15;28844:6;28836:15;;;;;;;;;;;;;;;:46;;;;28903:20;28915:7;28903;;:11;;:20;;;;:::i;:::-;28893:7;:30;;;;28947:23;28962:7;28947:10;;:14;;:23;;;;:::i;:::-;28934:10;:36;;;;28559:419;;;:::o;23475:51::-;;;:::o;25475:85::-;25514:13;25547:5;;;;;;;;;;;;;;;;;25540:12;;25475:85;:::o;26475:195::-;26579:4;26601:39;26610:12;:10;:12::i;:::-;26624:7;26633:6;26601:8;:39::i;:::-;26658:4;26651:11;;26475:195;;;;:::o;28462:89::-;28506:7;28533:10;;28526:17;;28462:89;:::o;25758:97::-;25813:7;24099;25833:14;;25758:97;:::o;27166:448::-;27300:4;27317:36;27327:6;27335:9;27346:6;27317:9;:36::i;:::-;27364:220;27387:6;27408:12;:10;:12::i;:::-;27435:138;27491:6;27435:138;;;;;;;;;;;;;;;;;:11;:19;27447:6;27435:19;;;;;;;;;;;;;;;:33;27455:12;:10;:12::i;:::-;27435:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;27364:8;:220::i;:::-;27602:4;27595:11;;27166:448;;;;;:::o;39142:221::-;39243:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39282:7:::1;39265:14;:24;;;;39305:28;39325:7;39305:28;;;;;;:::i;:::-;;;;;;;;39351:4;39344:11;;39142:221:::0;;;:::o;29471:322::-;29565:7;29623;;29612;:18;;29590:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29711:19;29733:10;:8;:10::i;:::-;29711:32;;29761:24;29773:11;29761:7;:11;;:24;;;;:::i;:::-;29754:31;;;29471:322;;;:::o;25665:85::-;25708:5;24335:1;25726:16;;25665:85;:::o;27622:302::-;27739:4;27761:133;27784:12;:10;:12::i;:::-;27811:7;27833:50;27872:10;27833:11;:25;27845:12;:10;:12::i;:::-;27833:25;;;;;;;;;;;;;;;:34;27859:7;27833:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27761:8;:133::i;:::-;27912:4;27905:11;;27622:302;;;;:::o;39478:224::-;39580:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39620:7:::1;39602:15;:25;;;;39643:29;39664:7;39643:29;;;;;;:::i;:::-;;;;;;;;39690:4;39683:11;;39478:224:::0;;;:::o;39991:268::-;40060:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40104:1:::1;40085:21;;:7;:21;;;;40077:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40186:4;40156:18;:27;40175:7;40156:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40206:23;40221:7;40206:23;;;;;;:::i;:::-;;;;;;;;40247:4;40240:11;;39991:268:::0;;;:::o;28986:477::-;29106:7;24099;29139;:18;;29131:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29209:17;29204:252;;29244:15;29271:19;29282:7;29271:10;:19::i;:::-;29243:47;;;;;;29312:7;29305:14;;;;;29204:252;29355:23;29388:19;29399:7;29388:10;:19::i;:::-;29352:55;;;;;;29429:15;29422:22;;;28986:477;;;;;:::o;26933:225::-;26989:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27006:46:::1;27015:10;27027:15;;;;;;;;;;;24099:7;27006:8;:46::i;:::-;27068:60;27091:10;27103:15;;;;;;;;;;;24099:7;27068:60;;;;;;;;:::i;:::-;;;;;;;;27146:4;27139:11;;26933:225:::0;:::o;25863:198::-;25929:7;25953:11;:20;25965:7;25953:20;;;;;;;;;;;;;;;;;;;;;;;;;25949:49;;;25982:7;:16;25990:7;25982:16;;;;;;;;;;;;;;;;25975:23;;;;25949:49;26016:37;26036:7;:16;26044:7;26036:16;;;;;;;;;;;;;;;;26016:19;:37::i;:::-;26009:44;;25863:198;;;;:::o;14071:103::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14136:30:::1;14163:1;14136:18;:30::i;:::-;14071:103::o:0;40540:544::-;40599:4;16539:1;17137:7;;:19;;17129:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16539:1;17270:7;:18;;;;40616:25:::1;40644:24;40662:4;40644:9;:24::i;:::-;40616:52;;40679:23;40705:90;40762:32;40782:11;;40762:15;;:19;;:32;;;;:::i;:::-;40705:52;40741:15;;40705:17;:21;;:52;;;;:::i;:::-;:56;;:90;;;;:::i;:::-;40679:116;;40806:18;40827:86;40880:32;40900:11;;40880:15;;:19;;:32;;;;:::i;:::-;40827:48;40863:11;;40827:17;:21;;:48;;;;:::i;:::-;:52;;:86;;;;:::i;:::-;40806:107;;40929:64;40946:17;40965:15;40982:10;40929:64;;;;;;;;:::i;:::-;;;;;;;;41004:22;41010:15;41004:5;:22::i;:::-;41037:17;41043:10;41037:5;:17::i;:::-;41072:4;41065:11;;;;;16495:1:::0;17449:7;:22;;;;40540:544;:::o;39037:97::-;39085:7;39112:14;;39105:21;;39037:97;:::o;13420:87::-;13466:7;13493:6;;;;;;;;;;;13486:13;;13420:87;:::o;39710:91::-;39755:7;39782:11;;39775:18;;39710:91;:::o;25568:89::-;25609:13;25642:7;;;;;;;;;;;;;;;;;25635:14;;25568:89;:::o;27932:402::-;28054:4;28076:228;28099:12;:10;:12::i;:::-;28126:7;28148:145;28205:15;28148:145;;;;;;;;;;;;;;;;;:11;:25;28160:12;:10;:12::i;:::-;28148:25;;;;;;;;;;;;;;;:34;28174:7;28148:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;28076:8;:228::i;:::-;28322:4;28315:11;;27932:402;;;;:::o;26069:204::-;26176:4;26201:42;26211:12;:10;:12::i;:::-;26225:9;26236:6;26201:9;:42::i;:::-;26261:4;26254:11;;26069:204;;;;:::o;28342:112::-;28402:4;28426:11;:20;28438:7;28426:20;;;;;;;;;;;;;;;;;;;;;;;;;28419:27;;28342:112;;;:::o;26678:247::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26784:1:::1;26763:23;;:9;:23;;;;26755:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26862:9;26836:15;;:36;;;;;;;;;;;;;;;;;;26888:29;26907:9;26888:29;;;;;;:::i;:::-;;;;;;;;26678:247:::0;:::o;26281:186::-;26400:7;26432:11;:18;26444:5;26432:18;;;;;;;;;;;;;;;:27;26451:7;26432:27;;;;;;;;;;;;;;;;26425:34;;26281:186;;;;:::o;40267:265::-;40334:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40378:1:::1;40359:21;;:7;:21;;;;40351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40460:5;40430:18;:27;40449:7;40430:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;40481:21;40494:7;40481:21;;;;;;:::i;:::-;;;;;;;;40520:4;40513:11;;40267:265:::0;;;:::o;29801:370::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29881:11:::1;:20;29893:7;29881:20;;;;;;;;;;;;;;;;;;;;;;;;;29880:21;29872:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29967:1;29948:7;:16;29956:7;29948:16;;;;;;;;;;;;;;;;:20;29944:109;;;30004:37;30024:7;:16;30032:7;30024:16;;;;;;;;;;;;;;;;30004:19;:37::i;:::-;29985:7;:16;29993:7;29985:16;;;;;;;;;;;;;;;:56;;;;29944:109;30086:4;30063:11;:20;30075:7;30063:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30101:9;30116:7;30101:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30140;30155:7;30140:23;;;;;;:::i;:::-;;;;;;;;29801:370:::0;:::o;14329:201::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14438:1:::1;14418:22;;:8;:22;;;;14410:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14494:28;14513:8;14494:18;:28::i;:::-;14329:201:::0;:::o;30179:511::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30258:11:::1;:20;30270:7;30258:20;;;;;;;;;;;;;;;;;;;;;;;;;30250:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30322:9;30317:327;30341:9;:16;;;;30337:1;:20;30317:327;;;30399:7;30383:23;;:9;30393:1;30383:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30379:254;;;30442:9;30471:1;30452:9;:16;;;;:20;;;;:::i;:::-;30442:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30427:9;30437:1;30427:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30511:1;30492:7;:16;30500:7;30492:16;;;;;;;;;;;;;;;:20;;;;30554:5;30531:11;:20;30543:7;30531:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30578:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30612:5;;30379:254;30359:3;;;;;:::i;:::-;;;;30317:327;;;;30659:23;30674:7;30659:23;;;;;;:::i;:::-;;;;;;;;30179:511:::0;:::o;39371:99::-;39420:7;39447:15;;39440:22;;39371:99;:::o;39809:174::-;39877:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39908:7:::1;39894:11;:21;;;;39931:22;39945:7;39931:22;;;;;;:::i;:::-;;;;;;;;39971:4;39964:11;;39809:174:::0;;;:::o;4969:98::-;5022:7;5049:10;5042:17;;4969:98;:::o;36373:589::-;36473:7;36495;36517:11;;:::i;:::-;36543:7;36565:11;;:::i;:::-;36605:23;36630:17;36651:20;36663:7;36651:11;:20::i;:::-;36604:67;;;;36682:19;36704:10;:8;:10::i;:::-;36682:32;;36740:15;36770:23;36808:17;36839:40;36851:7;36860:5;36867:11;36839;:40::i;:::-;36725:154;;;;;;36898:7;36907:15;36924:5;36931:15;36948:5;36890:64;;;;;;;;;;;;;;;;36373:589;;;;;;;:::o;838:136::-;896:7;923:43;927:1;930;923:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;916:50;;838:136;;;;:::o;374:181::-;432:7;452:9;468:1;464;:5;;;;:::i;:::-;452:17;;493:1;488;:6;;480:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;546:1;539:8;;;374:181;;;;:::o;30698:371::-;30842:1;30825:19;;:5;:19;;;;30817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30923:1;30904:21;;:7;:21;;;;30896:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31007:6;30977:11;:18;30989:5;30977:18;;;;;;;;;;;;;;;:27;30996:7;30977:27;;;;;;;;;;;;;;;:36;;;;31045:7;31029:32;;31038:5;31029:32;;;31054:6;31029:32;;;;;;:::i;:::-;;;;;;;;30698:371;;;:::o;31077:1426::-;31226:1;31208:20;;:6;:20;;;;31200:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31310:1;31289:23;;:9;:23;;;;31281:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31380:1;31371:6;:10;31363:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31438:28;31469:14;;31438:45;;31494:29;31526:15;;31494:47;;31552:25;31580:11;;31552:39;;31606:18;:26;31625:6;31606:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;31636:18;:29;31655:9;31636:29;;;;;;;;;;;;;;;;;;;;;;;;;31606:59;31602:174;;;31699:1;31682:14;:18;;;;31733:1;31715:15;:19;;;;31763:1;31749:11;:15;;;;31602:174;31792:11;:19;31804:6;31792:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31816:11;:22;31828:9;31816:22;;;;;;;;;;;;;;;;;;;;;;;;;31815:23;31792:46;31788:467;;;31855:48;31877:6;31885:9;31896:6;31855:21;:48::i;:::-;31788:467;;;31926:11;:19;31938:6;31926:19;;;;;;;;;;;;;;;;;;;;;;;;;31925:20;:46;;;;;31949:11;:22;31961:9;31949:22;;;;;;;;;;;;;;;;;;;;;;;;;31925:46;31921:334;;;31988:46;32008:6;32016:9;32027:6;31988:19;:46::i;:::-;31921:334;;;32056:11;:19;32068:6;32056:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32079:11;:22;32091:9;32079:22;;;;;;;;;;;;;;;;;;;;;;;;;32056:45;32052:203;;;32118:48;32140:6;32148:9;32159:6;32118:21;:48::i;:::-;32052:203;;;32199:44;32217:6;32225:9;32236:6;32199:17;:44::i;:::-;32052:203;31921:334;31788:467;32271:18;:26;32290:6;32271:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;32301:18;:29;32320:9;32301:29;;;;;;;;;;;;;;;;;;;;;;;;;32271:59;32267:229;;;32364:20;32347:14;:37;;;;32417:21;32399:15;:39;;;;32467:17;32453:11;:31;;;;32267:229;31077:1426;;;;;;:::o;1277:226::-;1397:7;1430:1;1425;:6;;1433:12;1417:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1457:9;1473:1;1469;:5;;;;:::i;:::-;1457:17;;1494:1;1487:8;;;1277:226;;;;;:::o;38252:164::-;38294:7;38315:15;38332;38351:19;:17;:19::i;:::-;38314:56;;;;38388:20;38400:7;38388;:11;;:20;;;;:::i;:::-;38381:27;;;;38252:164;:::o;2709:132::-;2767:7;2794:39;2798:1;2801;2794:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2787:46;;2709:132;;;;:::o;14690:191::-;14764:16;14783:6;;;;;;;;;;;14764:25;;14809:8;14800:6;;:17;;;;;;;;;;;;;;;;;;14864:8;14833:40;;14854:8;14833:40;;;;;;;;;;;;14690:191;;:::o;1762:471::-;1820:7;2070:1;2065;:6;2061:47;;;2095:1;2088:8;;;;2061:47;2120:9;2136:1;2132;:5;;;;:::i;:::-;2120:17;;2165:1;2160;2156;:5;;;;:::i;:::-;:10;2148:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2224:1;2217:8;;;1762:471;;;;;:::o;41092:472::-;41152:21;41190:1;41176:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41152:40;;41221:4;41203;41208:1;41203:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;41247:3;41237:4;41242:1;41237:7;;;;;;;;;;;;;;;;;;;;;:13;;;;;;;;;;;41261:66;41278:4;41293:15;41311;41261:8;:66::i;:::-;41338:15;:69;;;41422:15;41452:1;41489:4;41508:7;:5;:7::i;:::-;41530:15;41338:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41092:472;;:::o;41572:174::-;41627:48;41645:4;23964:42;41664:10;41627:9;:48::i;:::-;23964:42;41691:47;;41708:4;41691:47;;;41727:10;41691:47;;;;;;:::i;:::-;;;;;;;;41572:174;:::o;36970:541::-;37057:7;37066:11;;:::i;:::-;37095:17;;:::i;:::-;37142:37;37174:4;37142:27;37154:14;;37142:7;:11;;:27;;;;:::i;:::-;:31;;:37;;;;:::i;:::-;37123:5;:16;;:56;;;;;37211:38;37244:4;37211:28;37223:15;;37211:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;37190:5;:18;;:59;;;;;37276:34;37305:4;37276:24;37288:11;;37276:7;:11;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;37260:5;:13;;:50;;;;;37321:23;37347:114;37447:5;:13;;;37347:81;37409:5;:18;;;37347:43;37373:5;:16;;;37347:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;37321:140;;37480:15;37497:5;37472:31;;;;;;36970:541;;;:::o;37519:725::-;37694:7;37716;37738:11;;:::i;:::-;37777:17;;:::i;:::-;37805:15;37823:24;37835:11;37823:7;:11;;:24;;;;:::i;:::-;37805:42;;37877:33;37898:11;37877:5;:16;;;:20;;:33;;;;:::i;:::-;37858:5;:16;;:52;;;;;37942:35;37965:11;37942:5;:18;;;:22;;:35;;;;:::i;:::-;37921:5;:18;;:56;;;;;38004:30;38022:11;38004:5;:13;;;:17;;:30;;;;:::i;:::-;37988:5;:13;;:46;;;;;38045:23;38071:114;38171:5;:13;;;38071:81;38133:5;:18;;;38071:43;38097:5;:16;;;38071:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;38045:140;;38204:7;38213:15;38230:5;38196:40;;;;;;;;;37519:725;;;;;;;:::o;34004:763::-;34155:15;34185:23;34223:17;34255:23;34293:17;34324:19;34335:7;34324:10;:19::i;:::-;34140:203;;;;;;;;;;34372:28;34392:7;34372;:15;34380:6;34372:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34354:7;:15;34362:6;34354:15;;;;;;;;;;;;;;;:46;;;;34429:28;34449:7;34429;:15;34437:6;34429:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34411:7;:15;34419:6;34411:15;;;;;;;;;;;;;;;:46;;;;34489:39;34512:15;34489:7;:18;34497:9;34489:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34468:7;:18;34476:9;34468:18;;;;;;;;;;;;;;;:60;;;;34539:47;34551:5;:16;;;34569:5;:16;;;34539:11;:47::i;:::-;34597:53;34611:5;:18;;;34631:5;:18;;;34597:13;:53::i;:::-;34661:38;34670:5;:13;;;34685:5;:13;;;34661:8;:38::i;:::-;34732:9;34715:44;;34724:6;34715:44;;;34743:15;34715:44;;;;;;:::i;:::-;;;;;;;;34004:763;;;;;;;;:::o;33221:775::-;33370:15;33400:23;33438:17;33470:23;33508:17;33539:19;33550:7;33539:10;:19::i;:::-;33355:203;;;;;;;;;;33587:28;33607:7;33587;:15;33595:6;33587:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33569:7;:15;33577:6;33569:15;;;;;;;;;;;;;;;:46;;;;33647:39;33670:15;33647:7;:18;33655:9;33647:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33626:7;:18;33634:9;33626:18;;;;;;;;;;;;;;;:60;;;;33718:39;33741:15;33718:7;:18;33726:9;33718:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33697:7;:18;33705:9;33697:18;;;;;;;;;;;;;;;:60;;;;33768:47;33780:5;:16;;;33798:5;:16;;;33768:11;:47::i;:::-;33826:53;33840:5;:18;;;33860:5;:18;;;33826:13;:53::i;:::-;33890:38;33899:5;:13;;;33914:5;:13;;;33890:8;:38::i;:::-;33961:9;33944:44;;33953:6;33944:44;;;33972:15;33944:44;;;;;;:::i;:::-;;;;;;;;33221:775;;;;;;;;:::o;34775:834::-;34926:15;34956:23;34994:17;35026:23;35064:17;35095:19;35106:7;35095:10;:19::i;:::-;34911:203;;;;;;;;;;35143:28;35163:7;35143;:15;35151:6;35143:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35125:7;:15;35133:6;35125:15;;;;;;;;;;;;;;;:46;;;;35200:28;35220:7;35200;:15;35208:6;35200:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35182:7;:15;35190:6;35182:15;;;;;;;;;;;;;;;:46;;;;35260:39;35283:15;35260:7;:18;35268:9;35260:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35239:7;:18;35247:9;35239:18;;;;;;;;;;;;;;;:60;;;;35331:39;35354:15;35331:7;:18;35339:9;35331:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35310:7;:18;35318:9;35310:18;;;;;;;;;;;;;;;:60;;;;35381:47;35393:5;:16;;;35411:5;:16;;;35381:11;:47::i;:::-;35439:53;35453:5;:18;;;35473:5;:18;;;35439:13;:53::i;:::-;35503:38;35512:5;:13;;;35527:5;:13;;;35503:8;:38::i;:::-;35574:9;35557:44;;35566:6;35557:44;;;35585:15;35557:44;;;;;;:::i;:::-;;;;;;;;34775:834;;;;;;;;:::o;32511:702::-;32658:15;32688:23;32726:17;32758:23;32796:17;32827:19;32838:7;32827:10;:19::i;:::-;32643:203;;;;;;;;;;32875:28;32895:7;32875;:15;32883:6;32875:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32857:7;:15;32865:6;32857:15;;;;;;;;;;;;;;;:46;;;;32935:39;32958:15;32935:7;:18;32943:9;32935:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32914:7;:18;32922:9;32914:18;;;;;;;;;;;;;;;:60;;;;32985:47;32997:5;:16;;;33015:5;:16;;;32985:11;:47::i;:::-;33043:53;33057:5;:18;;;33077:5;:18;;;33043:13;:53::i;:::-;33107:38;33116:5;:13;;;33131:5;:13;;;33107:8;:38::i;:::-;33178:9;33161:44;;33170:6;33161:44;;;33189:15;33161:44;;;;;;:::i;:::-;;;;;;;;32511:702;;;;;;;;:::o;38424:605::-;38475:7;38484;38504:15;38522:7;;38504:25;;38540:15;24099:7;38540:25;;38581:9;38576:338;38600:9;:16;;;;38596:1;:20;38576:338;;;38684:7;38660;:21;38668:9;38678:1;38668:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38660:21;;;;;;;;;;;;;;;;:31;:83;;;;38736:7;38712;:21;38720:9;38730:1;38720:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38712:21;;;;;;;;;;;;;;;;:31;38660:83;38638:146;;;38767:7;;24099;38759:25;;;;;;;;;38638:146;38809:34;38821:7;:21;38829:9;38839:1;38829:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38821:21;;;;;;;;;;;;;;;;38809:7;:11;;:34;;;;:::i;:::-;38799:44;;38868:34;38880:7;:21;38888:9;38898:1;38888:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38880:21;;;;;;;;;;;;;;;;38868:7;:11;;:34;;;;:::i;:::-;38858:44;;38618:3;;;;;:::i;:::-;;;;38576:338;;;;38938:20;24099:7;38938;;:11;;:20;;;;:::i;:::-;38928:7;:30;38924:61;;;38968:7;;24099;38960:25;;;;;;;;38924:61;39004:7;39013;38996:25;;;;;;38424:605;;;:::o;3337:312::-;3457:7;3489:1;3485;:5;3492:12;3477:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3516:9;3532:1;3528;:5;;;;:::i;:::-;3516:17;;3640:1;3633:8;;;3337:312;;;;;:::o;35617:175::-;35709:24;35721:11;35709:7;;:11;;:24;;;;:::i;:::-;35699:7;:34;;;;35757:27;35772:11;35757:10;;:14;;:27;;;;:::i;:::-;35744:10;:40;;;;35617:175;;:::o;35800:298::-;35927:41;35954:13;35927:7;:22;35943:4;35927:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;35902:7;:22;35918:4;35902:22;;;;;;;;;;;;;;;:66;;;;35983:11;:26;36003:4;35983:26;;;;;;;;;;;;;;;;;;;;;;;;;35979:111;;;36049:41;36076:13;36049:7;:22;36065:4;36049:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;36024:7;:22;36040:4;36024:22;;;;;;;;;;;;;;;:66;;;;35979:111;35800:298;;:::o;36106:259::-;36204:36;36231:8;36204:7;:22;36220:4;36204:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36179:7;:22;36195:4;36179:22;;;;;;;;;;;;;;;:61;;;;36255:11;:26;36275:4;36255:26;;;;;;;;;;;;;;;;;;;;;;;;;36251:106;;;36321:36;36348:8;36321:7;:22;36337:4;36321:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36296:7;:22;36312:4;36296:22;;;;;;;;;;;;;;;:61;;;;36251:106;36106:259;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;;;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:179::-;;2853:46;2895:3;2887:6;2853:46;:::i;:::-;2931:4;2926:3;2922:14;2908:28;;2843:99;;;;:::o;2948:108::-;3025:24;3043:5;3025:24;:::i;:::-;3020:3;3013:37;3003:53;;:::o;3062:118::-;3149:24;3167:5;3149:24;:::i;:::-;3144:3;3137:37;3127:53;;:::o;3216:732::-;;3364:54;3412:5;3364:54;:::i;:::-;3434:86;3513:6;3508:3;3434:86;:::i;:::-;3427:93;;3544:56;3594:5;3544:56;:::i;:::-;3623:7;3654:1;3639:284;3664:6;3661:1;3658:13;3639:284;;;3740:6;3734:13;3767:63;3826:3;3811:13;3767:63;:::i;:::-;3760:70;;3853:60;3906:6;3853:60;:::i;:::-;3843:70;;3699:224;3686:1;3683;3679:9;3674:14;;3639:284;;;3643:14;3939:3;3932:10;;3340:608;;;;;;;:::o;3954:109::-;4035:21;4050:5;4035:21;:::i;:::-;4030:3;4023:34;4013:50;;:::o;4069:185::-;4183:64;4241:5;4183:64;:::i;:::-;4178:3;4171:77;4161:93;;:::o;4260:147::-;4355:45;4394:5;4355:45;:::i;:::-;4350:3;4343:58;4333:74;;:::o;4413:364::-;;4529:39;4562:5;4529:39;:::i;:::-;4584:71;4648:6;4643:3;4584:71;:::i;:::-;4577:78;;4664:52;4709:6;4704:3;4697:4;4690:5;4686:16;4664:52;:::i;:::-;4741:29;4763:6;4741:29;:::i;:::-;4736:3;4732:39;4725:46;;4505:272;;;;;:::o;4783:367::-;;4946:67;5010:2;5005:3;4946:67;:::i;:::-;4939:74;;5043:34;5039:1;5034:3;5030:11;5023:55;5109:5;5104:2;5099:3;5095:12;5088:27;5141:2;5136:3;5132:12;5125:19;;4929:221;;;:::o;5156:374::-;;5319:67;5383:2;5378:3;5319:67;:::i;:::-;5312:74;;5416:34;5412:1;5407:3;5403:11;5396:55;5482:12;5477:2;5472:3;5468:12;5461:34;5521:2;5516:3;5512:12;5505:19;;5302:228;;;:::o;5536:370::-;;5699:67;5763:2;5758:3;5699:67;:::i;:::-;5692:74;;5796:34;5792:1;5787:3;5783:11;5776:55;5862:8;5857:2;5852:3;5848:12;5841:30;5897:2;5892:3;5888:12;5881:19;;5682:224;;;:::o;5912:366::-;;6075:67;6139:2;6134:3;6075:67;:::i;:::-;6068:74;;6172:34;6168:1;6163:3;6159:11;6152:55;6238:4;6233:2;6228:3;6224:12;6217:26;6269:2;6264:3;6260:12;6253:19;;6058:220;;;:::o;6284:366::-;;6447:67;6511:2;6506:3;6447:67;:::i;:::-;6440:74;;6544:34;6540:1;6535:3;6531:11;6524:55;6610:4;6605:2;6600:3;6596:12;6589:26;6641:2;6636:3;6632:12;6625:19;;6430:220;;;:::o;6656:325::-;;6819:67;6883:2;6878:3;6819:67;:::i;:::-;6812:74;;6916:29;6912:1;6907:3;6903:11;6896:50;6972:2;6967:3;6963:12;6956:19;;6802:179;;;:::o;6987:325::-;;7150:67;7214:2;7209:3;7150:67;:::i;:::-;7143:74;;7247:29;7243:1;7238:3;7234:11;7227:50;7303:2;7298:3;7294:12;7287:19;;7133:179;;;:::o;7318:321::-;;7481:67;7545:2;7540:3;7481:67;:::i;:::-;7474:74;;7578:25;7574:1;7569:3;7565:11;7558:46;7630:2;7625:3;7621:12;7614:19;;7464:175;;;:::o;7645:329::-;;7808:67;7872:2;7867:3;7808:67;:::i;:::-;7801:74;;7905:33;7901:1;7896:3;7892:11;7885:54;7965:2;7960:3;7956:12;7949:19;;7791:183;;;:::o;7980:366::-;;8143:67;8207:2;8202:3;8143:67;:::i;:::-;8136:74;;8240:34;8236:1;8231:3;8227:11;8220:55;8306:4;8301:2;8296:3;8292:12;8285:26;8337:2;8332:3;8328:12;8321:19;;8126:220;;;:::o;8352:365::-;;8515:67;8579:2;8574:3;8515:67;:::i;:::-;8508:74;;8612:34;8608:1;8603:3;8599:11;8592:55;8678:3;8673:2;8668:3;8664:12;8657:25;8708:2;8703:3;8699:12;8692:19;;8498:219;;;:::o;8723:330::-;;8886:67;8950:2;8945:3;8886:67;:::i;:::-;8879:74;;8983:34;8979:1;8974:3;8970:11;8963:55;9044:2;9039:3;9035:12;9028:19;;8869:184;;;:::o;9059:373::-;;9222:67;9286:2;9281:3;9222:67;:::i;:::-;9215:74;;9319:34;9315:1;9310:3;9306:11;9299:55;9385:11;9380:2;9375:3;9371:12;9364:33;9423:2;9418:3;9414:12;9407:19;;9205:227;;;:::o;9438:369::-;;9601:67;9665:2;9660:3;9601:67;:::i;:::-;9594:74;;9698:34;9694:1;9689:3;9685:11;9678:55;9764:7;9759:2;9754:3;9750:12;9743:29;9798:2;9793:3;9789:12;9782:19;;9584:223;;;:::o;9813:368::-;;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10073:34;10069:1;10064:3;10060:11;10053:55;10139:6;10134:2;10129:3;10125:12;10118:28;10172:2;10167:3;10163:12;10156:19;;9959:222;;;:::o;10187:329::-;;10350:67;10414:2;10409:3;10350:67;:::i;:::-;10343:74;;10447:33;10443:1;10438:3;10434:11;10427:54;10507:2;10502:3;10498:12;10491:19;;10333:183;;;:::o;10522:376::-;;10685:67;10749:2;10744:3;10685:67;:::i;:::-;10678:74;;10782:34;10778:1;10773:3;10769:11;10762:55;10848:14;10843:2;10838:3;10834:12;10827:36;10889:2;10884:3;10880:12;10873:19;;10668:230;;;:::o;10904:118::-;10991:24;11009:5;10991:24;:::i;:::-;10986:3;10979:37;10969:53;;:::o;11028:112::-;11111:22;11127:5;11111:22;:::i;:::-;11106:3;11099:35;11089:51;;:::o;11146:222::-;;11277:2;11266:9;11262:18;11254:26;;11290:71;11358:1;11347:9;11343:17;11334:6;11290:71;:::i;:::-;11244:124;;;;:::o;11374:442::-;;11561:2;11550:9;11546:18;11538:26;;11574:71;11642:1;11631:9;11627:17;11618:6;11574:71;:::i;:::-;11655:72;11723:2;11712:9;11708:18;11699:6;11655:72;:::i;:::-;11737;11805:2;11794:9;11790:18;11781:6;11737:72;:::i;:::-;11528:288;;;;;;:::o;11822:210::-;;11947:2;11936:9;11932:18;11924:26;;11960:65;12022:1;12011:9;12007:17;11998:6;11960:65;:::i;:::-;11914:118;;;;:::o;12038:276::-;;12196:2;12185:9;12181:18;12173:26;;12209:98;12304:1;12293:9;12289:17;12280:6;12209:98;:::i;:::-;12163:151;;;;:::o;12320:313::-;;12471:2;12460:9;12456:18;12448:26;;12520:9;12514:4;12510:20;12506:1;12495:9;12491:17;12484:47;12548:78;12621:4;12612:6;12548:78;:::i;:::-;12540:86;;12438:195;;;;:::o;12639:419::-;;12843:2;12832:9;12828:18;12820:26;;12892:9;12886:4;12882:20;12878:1;12867:9;12863:17;12856:47;12920:131;13046:4;12920:131;:::i;:::-;12912:139;;12810:248;;;:::o;13064:419::-;;13268:2;13257:9;13253:18;13245:26;;13317:9;13311:4;13307:20;13303:1;13292:9;13288:17;13281:47;13345:131;13471:4;13345:131;:::i;:::-;13337:139;;13235:248;;;:::o;13489:419::-;;13693:2;13682:9;13678:18;13670:26;;13742:9;13736:4;13732:20;13728:1;13717:9;13713:17;13706:47;13770:131;13896:4;13770:131;:::i;:::-;13762:139;;13660:248;;;:::o;13914:419::-;;14118:2;14107:9;14103:18;14095:26;;14167:9;14161:4;14157:20;14153:1;14142:9;14138:17;14131:47;14195:131;14321:4;14195:131;:::i;:::-;14187:139;;14085:248;;;:::o;14339:419::-;;14543:2;14532:9;14528:18;14520:26;;14592:9;14586:4;14582:20;14578:1;14567:9;14563:17;14556:47;14620:131;14746:4;14620:131;:::i;:::-;14612:139;;14510:248;;;:::o;14764:419::-;;14968:2;14957:9;14953:18;14945:26;;15017:9;15011:4;15007:20;15003:1;14992:9;14988:17;14981:47;15045:131;15171:4;15045:131;:::i;:::-;15037:139;;14935:248;;;:::o;15189:419::-;;15393:2;15382:9;15378:18;15370:26;;15442:9;15436:4;15432:20;15428:1;15417:9;15413:17;15406:47;15470:131;15596:4;15470:131;:::i;:::-;15462:139;;15360:248;;;:::o;15614:419::-;;15818:2;15807:9;15803:18;15795:26;;15867:9;15861:4;15857:20;15853:1;15842:9;15838:17;15831:47;15895:131;16021:4;15895:131;:::i;:::-;15887:139;;15785:248;;;:::o;16039:419::-;;16243:2;16232:9;16228:18;16220:26;;16292:9;16286:4;16282:20;16278:1;16267:9;16263:17;16256:47;16320:131;16446:4;16320:131;:::i;:::-;16312:139;;16210:248;;;:::o;16464:419::-;;16668:2;16657:9;16653:18;16645:26;;16717:9;16711:4;16707:20;16703:1;16692:9;16688:17;16681:47;16745:131;16871:4;16745:131;:::i;:::-;16737:139;;16635:248;;;:::o;16889:419::-;;17093:2;17082:9;17078:18;17070:26;;17142:9;17136:4;17132:20;17128:1;17117:9;17113:17;17106:47;17170:131;17296:4;17170:131;:::i;:::-;17162:139;;17060:248;;;:::o;17314:419::-;;17518:2;17507:9;17503:18;17495:26;;17567:9;17561:4;17557:20;17553:1;17542:9;17538:17;17531:47;17595:131;17721:4;17595:131;:::i;:::-;17587:139;;17485:248;;;:::o;17739:419::-;;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17910:248;;;:::o;18164:419::-;;18368:2;18357:9;18353:18;18345:26;;18417:9;18411:4;18407:20;18403:1;18392:9;18388:17;18381:47;18445:131;18571:4;18445:131;:::i;:::-;18437:139;;18335:248;;;:::o;18589:419::-;;18793:2;18782:9;18778:18;18770:26;;18842:9;18836:4;18832:20;18828:1;18817:9;18813:17;18806:47;18870:131;18996:4;18870:131;:::i;:::-;18862:139;;18760:248;;;:::o;19014:419::-;;19218:2;19207:9;19203:18;19195:26;;19267:9;19261:4;19257:20;19253:1;19242:9;19238:17;19231:47;19295:131;19421:4;19295:131;:::i;:::-;19287:139;;19185:248;;;:::o;19439:419::-;;19643:2;19632:9;19628:18;19620:26;;19692:9;19686:4;19682:20;19678:1;19667:9;19663:17;19656:47;19720:131;19846:4;19720:131;:::i;:::-;19712:139;;19610:248;;;:::o;19864:222::-;;19995:2;19984:9;19980:18;19972:26;;20008:71;20076:1;20065:9;20061:17;20052:6;20008:71;:::i;:::-;19962:124;;;;:::o;20092:831::-;;20393:3;20382:9;20378:19;20370:27;;20407:71;20475:1;20464:9;20460:17;20451:6;20407:71;:::i;:::-;20488:80;20564:2;20553:9;20549:18;20540:6;20488:80;:::i;:::-;20615:9;20609:4;20605:20;20600:2;20589:9;20585:18;20578:48;20643:108;20746:4;20737:6;20643:108;:::i;:::-;20635:116;;20761:72;20829:2;20818:9;20814:18;20805:6;20761:72;:::i;:::-;20843:73;20911:3;20900:9;20896:19;20887:6;20843:73;:::i;:::-;20360:563;;;;;;;;:::o;20929:442::-;;21116:2;21105:9;21101:18;21093:26;;21129:71;21197:1;21186:9;21182:17;21173:6;21129:71;:::i;:::-;21210:72;21278:2;21267:9;21263:18;21254:6;21210:72;:::i;:::-;21292;21360:2;21349:9;21345:18;21336:6;21292:72;:::i;:::-;21083:288;;;;;;:::o;21377:214::-;;21504:2;21493:9;21489:18;21481:26;;21517:67;21581:1;21570:9;21566:17;21557:6;21517:67;:::i;:::-;21471:120;;;;:::o;21597:132::-;;21687:3;21679:11;;21717:4;21712:3;21708:14;21700:22;;21669:60;;;:::o;21735:114::-;;21836:5;21830:12;21820:22;;21809:40;;;:::o;21855:99::-;;21941:5;21935:12;21925:22;;21914:40;;;:::o;21960:113::-;;22062:4;22057:3;22053:14;22045:22;;22035:38;;;:::o;22079:184::-;;22212:6;22207:3;22200:19;22252:4;22247:3;22243:14;22228:29;;22190:73;;;;:::o;22269:169::-;;22387:6;22382:3;22375:19;22427:4;22422:3;22418:14;22403:29;;22365:73;;;;:::o;22444:305::-;;22503:20;22521:1;22503:20;:::i;:::-;22498:25;;22537:20;22555:1;22537:20;:::i;:::-;22532:25;;22691:1;22623:66;22619:74;22616:1;22613:81;22610:2;;;22697:18;;:::i;:::-;22610:2;22741:1;22738;22734:9;22727:16;;22488:261;;;;:::o;22755:185::-;;22812:20;22830:1;22812:20;:::i;:::-;22807:25;;22846:20;22864:1;22846:20;:::i;:::-;22841:25;;22885:1;22875:2;;22890:18;;:::i;:::-;22875:2;22932:1;22929;22925:9;22920:14;;22797:143;;;;:::o;22946:348::-;;23009:20;23027:1;23009:20;:::i;:::-;23004:25;;23043:20;23061:1;23043:20;:::i;:::-;23038:25;;23231:1;23163:66;23159:74;23156:1;23153:81;23148:1;23141:9;23134:17;23130:105;23127:2;;;23238:18;;:::i;:::-;23127:2;23286:1;23283;23279:9;23268:20;;22994:300;;;;:::o;23300:191::-;;23360:20;23378:1;23360:20;:::i;:::-;23355:25;;23394:20;23412:1;23394:20;:::i;:::-;23389:25;;23433:1;23430;23427:8;23424:2;;;23438:18;;:::i;:::-;23424:2;23483:1;23480;23476:9;23468:17;;23345:146;;;;:::o;23497:96::-;;23563:24;23581:5;23563:24;:::i;:::-;23552:35;;23542:51;;;:::o;23599:90::-;;23676:5;23669:13;23662:21;23651:32;;23641:48;;;:::o;23695:126::-;;23772:42;23765:5;23761:54;23750:65;;23740:81;;;:::o;23827:77::-;;23893:5;23882:16;;23872:32;;;:::o;23910:86::-;;23985:4;23978:5;23974:16;23963:27;;23953:43;;;:::o;24002:180::-;;24112:64;24170:5;24112:64;:::i;:::-;24099:77;;24089:93;;;:::o;24188:140::-;;24298:24;24316:5;24298:24;:::i;:::-;24285:37;;24275:53;;;:::o;24334:121::-;;24425:24;24443:5;24425:24;:::i;:::-;24412:37;;24402:53;;;:::o;24461:307::-;24529:1;24539:113;24553:6;24550:1;24547:13;24539:113;;;24638:1;24633:3;24629:11;24623:18;24619:1;24614:3;24610:11;24603:39;24575:2;24572:1;24568:10;24563:15;;24539:113;;;24670:6;24667:1;24664:13;24661:2;;;24750:1;24741:6;24736:3;24732:16;24725:27;24661:2;24510:258;;;;:::o;24774:233::-;;24836:24;24854:5;24836:24;:::i;:::-;24827:33;;24882:66;24875:5;24872:77;24869:2;;;24952:18;;:::i;:::-;24869:2;24999:1;24992:5;24988:13;24981:20;;24817:190;;;:::o;25013:180::-;25061:77;25058:1;25051:88;25158:4;25155:1;25148:15;25182:4;25179:1;25172:15;25199:180;25247:77;25244:1;25237:88;25344:4;25341:1;25334:15;25368:4;25365:1;25358:15;25385:102;;25477:2;25473:7;25468:2;25461:5;25457:14;25453:28;25443:38;;25433:54;;;:::o;25493:122::-;25566:24;25584:5;25566:24;:::i;:::-;25559:5;25556:35;25546:2;;25605:1;25602;25595:12;25546:2;25536:79;:::o;25621:116::-;25691:21;25706:5;25691:21;:::i;:::-;25684:5;25681:32;25671:2;;25727:1;25724;25717:12;25671:2;25661:76;:::o;25743:122::-;25816:24;25834:5;25816:24;:::i;:::-;25809:5;25806:35;25796:2;;25855:1;25852;25845:12;25796:2;25786:79;:::o

Swarm Source

ipfs://6b53f94b6ad08e24686bd14135cd981d26a4e6b35798acbcab42f496f145e1d0
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.