ETH Price: $2,674.83 (+0.23%)

Token

SHIBASTAR (SHIBAS)
 

Overview

Max Total Supply

100,000,000,000 SHIBAS

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: SHIBAS 12
Balance
0.000000000162909257 SHIBAS

Value
$0.00
0xdA60c1822864a1422ba49740f9A03791893f5974
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SHIBAS

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-09
*/

/**
CFG Factory Contract
*/
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;

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

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

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 Collection of functions related to the address type
 */
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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @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://consensys.net/diligence/blog/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"
        );

        (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
            functionCallWithValue(
                target,
                data,
                0,
                "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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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);
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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 SHIBAS is Context, IERC20, Ownable {
    using Address for address;
    //Contract Update Information
    string public constant contractVersion = "3.3";
    string public constant contractDev = "CFG";
    string public constant contractEdition = "Factory";
    //Definition of Wallets for Marketing or team.
    address payable public marketingWallet =
        payable(0xCEe901f9c6B9cF84c70ed251cE55F865c3d9d928);
    //adding customer wallet to send supply and exclude from fees.
    address payable public safuWallet =
        payable(0xCEe901f9c6B9cF84c70ed251cE55F865c3d9d928);

    //Dead Wallet for SAFU Contract
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;
    //Mapping section for better tracking.
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    //Loging and Event Information for better troubleshooting.
    event Log(string, uint256);
    event AuditLog(string, address);
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SwapTokensForETH(uint256 amountIn, address[] path);
    //Supply Definition.
    uint256 private _tTotal = 100_000_000_000 ether;
    uint256 private _tFeeTotal;
    //Token Definition.
    string public constant name = "SHIBASTAR";
    string public constant symbol = "SHIBAS";
    uint8 public constant decimals = 18;
    //Taxes Definition.
    uint public buyFee = 1;

    uint256 public sellFee = 2;

    uint256 public marketingTokensCollected = 0;
    uint256 public totalMarketingTokensCollected = 0;

    uint256 public minimumTokensBeforeSwap = 100_000 ether;

    //Oracle Price Update, Manual Process.
    uint256 public swapOutput = 0;
    //Router and Pair Configuration.
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address private immutable WETH;
    //Tracking of Automatic Swap vs Manual Swap.
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
//What is my router and exclude pinksale locker.
        address currentRouter;
        //Adding Variables for all the routers for easier deployment for our customers.
        if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
            _isExcludedFromFee[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true;
        } else if (block.chainid == 97) {
            currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
            _isExcludedFromFee[0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5] = true;
            safuWallet = payable(0x4c4DAFf8A144213896db1dD85730163d17EB6afe);
        } else if (block.chainid == 43114) {
            currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet
            _isExcludedFromFee[0x9479C6484a392113bB829A15E7c9E033C9e70D30] = true;
        } else if (block.chainid == 42161) {
            currentRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; //Arbitrum Sushi
            _isExcludedFromFee[0xeBb415084Ce323338CFD3174162964CC23753dFD] = true;
        } else if (block.chainid == 1 || block.chainid == 5) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet
            _isExcludedFromFee[0x71B5759d73262FBb223956913ecF4ecC51057641] = true;
        } else {
            revert("You're not Blade");
        }

        //End of Router Variables.
        //Owner of balance
        _tOwned[safuWallet] = _tTotal;
        //Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed.
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
        WETH = _uniswapV2Router.WETH();
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), WETH);
        uniswapV2Router = _uniswapV2Router;
        //Approve router to be used.
        _approve(msg.sender, address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        //Exclude from fees the owner, contract and SAFU.
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[safuWallet] = true;


        emit Transfer(address(0), safuWallet, _tTotal);
        _transferOwnership(safuWallet);
    }

    //Readable Functions.
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

    //ERC 20 Standard Transfer Functions
    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    //ERC 20 Standard Allowance Function
    function allowance(
        address _owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[_owner][spender];
    }

    //ERC 20 Standard Approve Function
    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    //ERC 20 Standard Transfer From
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

    //ERC 20 Standard increase Allowance
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    //ERC 20 Standard decrease Allowance
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - subtractedValue
        );
        return true;
    }

    //Approve Function
    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);
    }

    //Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            _tOwned[from] >= amount,
            "ERC20: transfer amount exceeds balance"
        );

        //Adding logic for automatic swap.
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;
        uint fee = 0;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance &&
            swapAndLiquifyEnabled
        ) {
            swapAndLiquify();
        }
        if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
            fee = (sellFee * amount) / 100;
        }
        if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
            fee = (buyFee * amount) / 100;
        }
        amount -= fee;
        if (fee > 0) {
            _tokenTransfer(from, address(this), fee);
            marketingTokensCollected += fee;
            totalMarketingTokensCollected += fee;
        }
        _tokenTransfer(from, to, amount);
    }

    //Swap Tokens for BNB or to add liquidity either automatically or manual, by default this is set to manual.
    //Corrected newBalance bug, it sending bnb to wallet and any remaining is on contract and can be recoverred.
    function swapAndLiquify() public lockTheSwap {
        uint256 totalTokens = balanceOf(address(this));
        swapTokensForEth(totalTokens);
        uint ethBalance = address(this).balance;

        transferToAddressETH(marketingWallet, ethBalance);

        marketingTokensCollected = 0;
    }

    //swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    //ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        _tOwned[sender] -= amount;
        _tOwned[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    //exclude wallets from fees, this is needed for launch or other contracts.
    function excludeFromFee(address account) external onlyOwner {
        require(_isExcludedFromFee[account] != true, "The wallet is already excluded!");
        _isExcludedFromFee[account] = true;
        emit AuditLog(
            "We have excluded the following walled in fees:",
            account
        );
    }

    //include wallet back in fees.
    function includeInFee(address account) external onlyOwner {
        require(_isExcludedFromFee[account] != false, "The wallet is already included!");
        _isExcludedFromFee[account] = false;
        emit AuditLog(
            "We have including the following walled in fees:",
            account
        );
    }

    //Automatic Swap Configuration.
    function setTokensToSwap(
        uint256 _minimumTokensBeforeSwap
    ) external onlyOwner {
        require(
            _minimumTokensBeforeSwap >= 100 ether,
            "You need to enter more than 100 tokens."
        );
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit Log(
            "We have updated minimunTokensBeforeSwap to:",
            minimumTokensBeforeSwap
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        require(swapAndLiquifyEnabled != _enabled, "Value already set");
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //set a new marketing wallet.
    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "setmarketingWallet: ZERO");
        marketingWallet = payable(_marketingWallet);
        emit AuditLog("We have Updated the MarketingWallet:", marketingWallet);
    }

    function setBuyFee(uint256 _buyFee) external onlyOwner {
        require(_buyFee <= 10, "Buy Fee cannot be more than 10%");
        buyFee = _buyFee;
        emit Log("We have updated the buy fee to:", buyFee);
    }

    function setSellFee(uint256 _sellFee) external onlyOwner {
        require(_sellFee <= 10, "Sell Fee cannot be more than 10%");
        sellFee = _sellFee;
        emit Log("We have updated the sell fee to:", sellFee);
    }

    function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        (bool succ, ) = recipient.call{value: amount}("");
        require(succ, "Transfer failed.");
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    /////---fallback--////
    //This cannot be removed as is a fallback to the swapAndLiquify
    event SwapETHForTokens(uint256 amountIn, address[] path);

    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            swapOutput, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp + 300
        );
        emit SwapETHForTokens(amount, path);
    }

    // Withdraw ETH that's potentially stuck in the Contract
    function recoverETHfromContract() external onlyOwner {
        uint ethBalance = address(this).balance;
        (bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
        require(succ, "Transfer failed");
        emit AuditLog(
            "We have recover the stuck eth from contract.",
            marketingWallet
        );
    }

    // Withdraw ERC20 tokens that are potentially stuck in Contract
    function recoverTokensFromContract(
        address _tokenAddress,
        uint256 _amount
    ) external onlyOwner {
        require(
            _tokenAddress != address(this),
            "Owner can't claim contract's balance of its own tokens"
        );
        bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
        require(succ, "Transfer failed");
        emit Log("We have recovered tokens from contract:", _amount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractDev","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractEdition","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safuWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405273cee901f9c6b9cf84c70ed251ce55f865c3d9d928600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cee901f9c6b9cf84c70ed251ce55f865c3d9d928600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506c01431e0fae6d7217caa0000000600655600160085560026009556000600a556000600b5569152d02c7e14af6800000600c556000600d556000600e60016101000a81548160ff0219169083151502179055503480156200010e57600080fd5b506200012f620001236200098960201b60201c565b6200099160201b60201c565b600060384603620001c3577310ed43c718714eb63d5aa57b78b54704e256024e905060016005600073407993575c91ce7643a4d4ccacc9a98c36ee1bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004b0565b60614603620002aa5773d99d1c33f9fc3444f8101754abc46c52416550d19050600160056000735e5b9be5fd939c578abe5800a90c566eeeba44a573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550734c4daff8a144213896db1dd85730163d17eb6afe600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004af565b61a86a46036200033d577360ae616a2155ee3d9a68541ba4544862310933d49050600160056000739479c6484a392113bb829a15e7c9e033c9e70d3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ae565b61a4b14603620003d057731b02da8cb0d097eb8d57a175b88c7d8b47997506905060016005600073ebb415084ce323338cfd3174162964cc23753dfd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ad565b6001461480620003e05750600546145b156200046f57737a250d5630b4cf539739df2c5dacb4c659f2488d90506001600560007371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ac565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a39062000cb0565b60405180910390fd5b5b5b5b5b60065460036000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008190508073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000569573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058f919062000d3c565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200060e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000634919062000d3c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b81526004016200067292919062000d7f565b6020604051808303816000875af115801562000692573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006b8919062000d3c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000754336080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a5560201b60201c565b62000789306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a5560201b60201c565b6001600560006200079f62000c2660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000946919062000dc7565b60405180910390a362000981600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200099160201b60201c565b505062000f14565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000abe9062000e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b309062000ef2565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c19919062000dc7565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082825260208201905092915050565b7f596f75277265206e6f7420426c61646500000000000000000000000000000000600082015250565b600062000c9860108362000c4f565b915062000ca58262000c60565b602082019050919050565b6000602082019050818103600083015262000ccb8162000c89565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d048262000cd7565b9050919050565b62000d168162000cf7565b811462000d2257600080fd5b50565b60008151905062000d368162000d0b565b92915050565b60006020828403121562000d555762000d5462000cd2565b5b600062000d658482850162000d25565b91505092915050565b62000d798162000cf7565b82525050565b600060408201905062000d96600083018562000d6e565b62000da5602083018462000d6e565b9392505050565b6000819050919050565b62000dc18162000dac565b82525050565b600060208201905062000dde600083018462000db6565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000e4260248362000c4f565b915062000e4f8262000de4565b604082019050919050565b6000602082019050818103600083015262000e758162000e33565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000eda60228362000c4f565b915062000ee78262000e7c565b604082019050919050565b6000602082019050818103600083015262000f0d8162000ecb565b9050919050565b60805160a05160c051613afa62000f67600039600061212c015260008181610e6401528181611d5501528181611dd50152611e9c015260008181610a630152818161219f01526121c60152613afa6000f3fe60806040526004361061024a5760003560e01c80636ca60bc611610139578063a457c2d7116100b6578063d1b236b41161007a578063d1b236b41461086d578063d2d7ad8314610898578063dd62ed3e146108c3578063e6be4a7214610900578063ea2f0b3714610929578063f2fde38b1461095257610251565b8063a457c2d71461079c578063a9059cbb146107d9578063b29ad50a14610816578063c49b9a801461082d578063ce831ed51461085657610251565b806385141a77116100fd57806385141a77146106c75780638b4cee08146106f25780638da5cb5b1461071b57806395d89b4114610746578063a0a8e4601461077157610251565b80636ca60bc6146105f257806370a082311461061d578063715018a61461065a57806375f0a874146106715780637724bad81461069c57610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e1461050b5780634a74bb02146105365780635342acb4146105615780635d098b381461059e5780635eaa8247146105c757610251565b806339509351146104265780634076350314610463578063437823ec1461048e578063461d9476146104b757806347062402146104e057610251565b8063220f66961161020e578063220f66961461033d57806323b872dd146103685780632a4a7ba8146103a55780632b14ca56146103d0578063313ce567146103fb57610251565b806306fdde0314610256578063095ea7b3146102815780630cc835a3146102be5780631694505e146102e757806318160ddd1461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61097b565b60405161027891906124ec565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906125a7565b6109b4565b6040516102b59190612602565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e0919061261d565b6109d2565b005b3480156102f357600080fd5b506102fc610a61565b60405161030991906126a9565b60405180910390f35b34801561031e57600080fd5b50610327610a85565b60405161033491906126d3565b60405180910390f35b34801561034957600080fd5b50610352610a8f565b60405161035f9190612602565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a91906126ee565b610aa2565b60405161039c9190612602565b60405180910390f35b3480156103b157600080fd5b506103ba610ba2565b6040516103c791906124ec565b60405180910390f35b3480156103dc57600080fd5b506103e5610bdb565b6040516103f291906126d3565b60405180910390f35b34801561040757600080fd5b50610410610be1565b60405161041d919061275d565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906125a7565b610be6565b60405161045a9190612602565b60405180910390f35b34801561046f57600080fd5b50610478610c92565b60405161048591906126d3565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612778565b610c98565b005b3480156104c357600080fd5b506104de60048036038101906104d9919061261d565b610dc5565b005b3480156104ec57600080fd5b506104f5610e5c565b60405161050291906126d3565b60405180910390f35b34801561051757600080fd5b50610520610e62565b60405161052d91906127b4565b60405180910390f35b34801561054257600080fd5b5061054b610e86565b6040516105589190612602565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612778565b610e99565b6040516105959190612602565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190612778565b610eef565b005b3480156105d357600080fd5b506105dc611003565b6040516105e991906126d3565b60405180910390f35b3480156105fe57600080fd5b50610607611009565b60405161061491906126d3565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190612778565b61100f565b60405161065191906126d3565b60405180910390f35b34801561066657600080fd5b5061066f611058565b005b34801561067d57600080fd5b5061068661106c565b60405161069391906127f0565b60405180910390f35b3480156106a857600080fd5b506106b1611092565b6040516106be91906124ec565b60405180910390f35b3480156106d357600080fd5b506106dc6110cb565b6040516106e991906127b4565b60405180910390f35b3480156106fe57600080fd5b506107196004803603810190610714919061261d565b6110d1565b005b34801561072757600080fd5b50610730611160565b60405161073d91906127b4565b60405180910390f35b34801561075257600080fd5b5061075b611189565b60405161076891906124ec565b60405180910390f35b34801561077d57600080fd5b506107866111c2565b60405161079391906124ec565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be91906125a7565b6111fb565b6040516107d09190612602565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb91906125a7565b6112a7565b60405161080d9190612602565b60405180910390f35b34801561082257600080fd5b5061082b6112c5565b005b34801561083957600080fd5b50610854600480360381019061084f9190612837565b61134e565b005b34801561086257600080fd5b5061086b6113ff565b005b34801561087957600080fd5b50610882611537565b60405161088f91906127f0565b60405180910390f35b3480156108a457600080fd5b506108ad61155d565b6040516108ba91906126d3565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190612864565b611563565b6040516108f791906126d3565b60405180910390f35b34801561090c57600080fd5b50610927600480360381019061092291906125a7565b6115ea565b005b34801561093557600080fd5b50610950600480360381019061094b9190612778565b611780565b005b34801561095e57600080fd5b5061097960048036038101906109749190612778565b6118ad565b005b6040518060400160405280600981526020017f534849424153544152000000000000000000000000000000000000000000000081525081565b60006109c86109c1611930565b8484611938565b6001905092915050565b6109da611b01565b600a811115610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a15906128f0565b60405180910390fd5b806008819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600854604051610a56919061295c565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600654905090565b600e60009054906101000a900460ff1681565b600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aee611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b65906129fc565b60405180910390fd5b610b79858585611b7f565b610b9685610b85611930565b8584610b919190612a4b565b611938565b60019150509392505050565b6040518060400160405280600781526020017f466163746f72790000000000000000000000000000000000000000000000000081525081565b60095481565b601281565b6000610c88610bf3611930565b848460046000610c01611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c839190612a7f565b611938565b6001905092915050565b600b5481565b610ca0611b01565b60011515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90612aff565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610dba9190612b91565b60405180910390a150565b610dcd611b01565b68056bc75e2d63100000811015610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090612c31565b60405180910390fd5b80600c819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600c54604051610e519190612cc3565b60405180910390a150565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ef7611b01565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612d3d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610ff89190612df0565b60405180910390a150565b600d5481565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611060611b01565b61106a6000611fc9565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600381526020017f434647000000000000000000000000000000000000000000000000000000000081525081565b61dead81565b6110d9611b01565b600a81111561111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490612e6a565b60405180910390fd5b806009819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b56009546040516111559190612ed6565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600681526020017f534849424153000000000000000000000000000000000000000000000000000081525081565b6040518060400160405280600381526020017f332e33000000000000000000000000000000000000000000000000000000000081525081565b600061129d611208611930565b848460046000611216611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112989190612a4b565b611938565b6001905092915050565b60006112bb6112b4611930565b8484611b7f565b6001905092915050565b6001600e60006101000a81548160ff02191690831515021790555060006112eb3061100f565b90506112f68161208d565b6000479050611327600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612295565b6000600a8190555050506000600e60006101000a81548160ff021916908315150217905550565b611356611b01565b801515600e60019054906101000a900460ff161515036113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290612f50565b60405180910390fd5b80600e60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113f49190612602565b60405180910390a150565b611407611b01565b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161145490612fa1565b60006040518083038185875af1925050503d8060008114611491576040519150601f19603f3d011682016040523d82523d6000602084013e611496565b606091505b50509050806114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190613002565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161152b9190613094565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115f2611b01565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613134565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016116bf929190613154565b6020604051808303816000875af11580156116de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117029190613192565b905080611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90613002565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5826040516117739190613231565b60405180910390a1505050565b611788611b01565b60001515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906132ab565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00816040516118a2919061333d565b60405180910390a150565b6118b5611b01565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906133dd565b60405180910390fd5b61192d81611fc9565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e9061346f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613501565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af491906126d3565b60405180910390a3505050565b611b09611930565b73ffffffffffffffffffffffffffffffffffffffff16611b27611160565b73ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061356d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be5906135ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613691565b60405180910390fd5b60008111611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9790613723565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d19906137b5565b60405180910390fd5b6000611d2d3061100f565b90506000600c5482101590506000600e60009054906101000a900460ff16158015611da457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611dad5750815b8015611dc55750600e60019054906101000a900460ff165b15611dd357611dd26112c5565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611e785750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e9a57606484600954611e8d91906137d5565b611e979190613846565b90505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f3f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f6157606484600854611f5491906137d5565b611f5e9190613846565b90505b8084611f6d9190612a4b565b93506000811115611fb657611f83863083612346565b80600a6000828254611f959190612a7f565b9250508190555080600b6000828254611fae9190612a7f565b925050819055505b611fc1868686612346565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156120aa576120a9613877565b5b6040519080825280602002602001820160405280156120d85781602001602082028036833780820191505090505b50905030816000815181106120f0576120ef6138a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061215f5761215e6138a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121c4307f000000000000000000000000000000000000000000000000000000000000000084611938565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122269594939291906139ce565b600060405180830381600087803b15801561224057600080fd5b505af1158015612254573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612289929190613a28565b60405180910390a15050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516122bb90612fa1565b60006040518083038185875af1925050503d80600081146122f8576040519150601f19603f3d011682016040523d82523d6000602084013e6122fd565b606091505b5050905080612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890613aa4565b60405180910390fd5b505050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123959190612a4b565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123eb9190612a7f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161244f91906126d3565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561249657808201518184015260208101905061247b565b60008484015250505050565b6000601f19601f8301169050919050565b60006124be8261245c565b6124c88185612467565b93506124d8818560208601612478565b6124e1816124a2565b840191505092915050565b6000602082019050818103600083015261250681846124b3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061253e82612513565b9050919050565b61254e81612533565b811461255957600080fd5b50565b60008135905061256b81612545565b92915050565b6000819050919050565b61258481612571565b811461258f57600080fd5b50565b6000813590506125a18161257b565b92915050565b600080604083850312156125be576125bd61250e565b5b60006125cc8582860161255c565b92505060206125dd85828601612592565b9150509250929050565b60008115159050919050565b6125fc816125e7565b82525050565b600060208201905061261760008301846125f3565b92915050565b6000602082840312156126335761263261250e565b5b600061264184828501612592565b91505092915050565b6000819050919050565b600061266f61266a61266584612513565b61264a565b612513565b9050919050565b600061268182612654565b9050919050565b600061269382612676565b9050919050565b6126a381612688565b82525050565b60006020820190506126be600083018461269a565b92915050565b6126cd81612571565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6000806000606084860312156127075761270661250e565b5b60006127158682870161255c565b93505060206127268682870161255c565b925050604061273786828701612592565b9150509250925092565b600060ff82169050919050565b61275781612741565b82525050565b6000602082019050612772600083018461274e565b92915050565b60006020828403121561278e5761278d61250e565b5b600061279c8482850161255c565b91505092915050565b6127ae81612533565b82525050565b60006020820190506127c960008301846127a5565b92915050565b60006127da82612513565b9050919050565b6127ea816127cf565b82525050565b600060208201905061280560008301846127e1565b92915050565b612814816125e7565b811461281f57600080fd5b50565b6000813590506128318161280b565b92915050565b60006020828403121561284d5761284c61250e565b5b600061285b84828501612822565b91505092915050565b6000806040838503121561287b5761287a61250e565b5b60006128898582860161255c565b925050602061289a8582860161255c565b9150509250929050565b7f427579204665652063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b60006128da601f83612467565b91506128e5826128a4565b602082019050919050565b60006020820190508181036000830152612909816128cd565b9050919050565b7f57652068617665207570646174656420746865206275792066656520746f3a00600082015250565b6000612946601f83612467565b915061295182612910565b602082019050919050565b6000604082019050818103600083015261297581612939565b905061298460208301846126c4565b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006129e6602883612467565b91506129f18261298a565b604082019050919050565b60006020820190508181036000830152612a15816129d9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a5682612571565b9150612a6183612571565b9250828203905081811115612a7957612a78612a1c565b5b92915050565b6000612a8a82612571565b9150612a9583612571565b9250828201905080821115612aad57612aac612a1c565b5b92915050565b7f5468652077616c6c657420697320616c7265616479206578636c756465642100600082015250565b6000612ae9601f83612467565b9150612af482612ab3565b602082019050919050565b60006020820190508181036000830152612b1881612adc565b9050919050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612b7b602e83612467565b9150612b8682612b1f565b604082019050919050565b60006040820190508181036000830152612baa81612b6e565b9050612bb960208301846127a5565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b6000612c1b602783612467565b9150612c2682612bbf565b604082019050919050565b60006020820190508181036000830152612c4a81612c0e565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b6000612cad602b83612467565b9150612cb882612c51565b604082019050919050565b60006040820190508181036000830152612cdc81612ca0565b9050612ceb60208301846126c4565b92915050565b7f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612d27601883612467565b9150612d3282612cf1565b602082019050919050565b60006020820190508181036000830152612d5681612d1a565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612db9602483612467565b9150612dc482612d5d565b604082019050919050565b6000612dda82612676565b9050919050565b612dea81612dcf565b82525050565b60006040820190508181036000830152612e0981612dac565b9050612e186020830184612de1565b92915050565b7f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20313025600082015250565b6000612e54602083612467565b9150612e5f82612e1e565b602082019050919050565b60006020820190508181036000830152612e8381612e47565b9050919050565b7f576520686176652075706461746564207468652073656c6c2066656520746f3a600082015250565b6000612ec0602083612467565b9150612ecb82612e8a565b602082019050919050565b60006040820190508181036000830152612eef81612eb3565b9050612efe60208301846126c4565b92915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000612f3a601183612467565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b600081905092915050565b50565b6000612f8b600083612f70565b9150612f9682612f7b565b600082019050919050565b6000612fac82612f7e565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612fec600f83612467565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f57652068617665207265636f7665722074686520737475636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b600061307e602c83612467565b915061308982613022565b604082019050919050565b600060408201905081810360008301526130ad81613071565b90506130bc6020830184612de1565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b600061311e603683612467565b9150613129826130c2565b604082019050919050565b6000602082019050818103600083015261314d81613111565b9050919050565b60006040820190506131696000830185612de1565b61317660208301846126c4565b9392505050565b60008151905061318c8161280b565b92915050565b6000602082840312156131a8576131a761250e565b5b60006131b68482850161317d565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b600061321b602783612467565b9150613226826131bf565b604082019050919050565b6000604082019050818103600083015261324a8161320e565b905061325960208301846126c4565b92915050565b7f5468652077616c6c657420697320616c726561647920696e636c756465642100600082015250565b6000613295601f83612467565b91506132a08261325f565b602082019050919050565b600060208201905081810360008301526132c481613288565b9050919050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b6000613327602f83612467565b9150613332826132cb565b604082019050919050565b600060408201905081810360008301526133568161331a565b905061336560208301846127a5565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133c7602683612467565b91506133d28261336b565b604082019050919050565b600060208201905081810360008301526133f6816133ba565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613459602483612467565b9150613464826133fd565b604082019050919050565b600060208201905081810360008301526134888161344c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006134eb602283612467565b91506134f68261348f565b604082019050919050565b6000602082019050818103600083015261351a816134de565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613557602083612467565b915061356282613521565b602082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135e9602583612467565b91506135f48261358d565b604082019050919050565b60006020820190508181036000830152613618816135dc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061367b602383612467565b91506136868261361f565b604082019050919050565b600060208201905081810360008301526136aa8161366e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061370d602983612467565b9150613718826136b1565b604082019050919050565b6000602082019050818103600083015261373c81613700565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061379f602683612467565b91506137aa82613743565b604082019050919050565b600060208201905081810360008301526137ce81613792565b9050919050565b60006137e082612571565b91506137eb83612571565b92508282026137f981612571565b915082820484148315176138105761380f612a1c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061385182612571565b915061385c83612571565b92508261386c5761386b613817565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006138fa6138f56138f0846138d5565b61264a565b612571565b9050919050565b61390a816138df565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61394581612533565b82525050565b6000613957838361393c565b60208301905092915050565b6000602082019050919050565b600061397b82613910565b613985818561391b565b93506139908361392c565b8060005b838110156139c15781516139a8888261394b565b97506139b383613963565b925050600181019050613994565b5085935050505092915050565b600060a0820190506139e360008301886126c4565b6139f06020830187613901565b8181036040830152613a028186613970565b9050613a1160608301856127a5565b613a1e60808301846126c4565b9695505050505050565b6000604082019050613a3d60008301856126c4565b8181036020830152613a4f8184613970565b90509392505050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613a8e601083612467565b9150613a9982613a58565b602082019050919050565b60006020820190508181036000830152613abd81613a81565b905091905056fea2646970667358221220556e8fdc5ad589f4d89b353df228ffa65bb635b78d00a89d6de72e276314753b64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636ca60bc611610139578063a457c2d7116100b6578063d1b236b41161007a578063d1b236b41461086d578063d2d7ad8314610898578063dd62ed3e146108c3578063e6be4a7214610900578063ea2f0b3714610929578063f2fde38b1461095257610251565b8063a457c2d71461079c578063a9059cbb146107d9578063b29ad50a14610816578063c49b9a801461082d578063ce831ed51461085657610251565b806385141a77116100fd57806385141a77146106c75780638b4cee08146106f25780638da5cb5b1461071b57806395d89b4114610746578063a0a8e4601461077157610251565b80636ca60bc6146105f257806370a082311461061d578063715018a61461065a57806375f0a874146106715780637724bad81461069c57610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e1461050b5780634a74bb02146105365780635342acb4146105615780635d098b381461059e5780635eaa8247146105c757610251565b806339509351146104265780634076350314610463578063437823ec1461048e578063461d9476146104b757806347062402146104e057610251565b8063220f66961161020e578063220f66961461033d57806323b872dd146103685780632a4a7ba8146103a55780632b14ca56146103d0578063313ce567146103fb57610251565b806306fdde0314610256578063095ea7b3146102815780630cc835a3146102be5780631694505e146102e757806318160ddd1461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61097b565b60405161027891906124ec565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906125a7565b6109b4565b6040516102b59190612602565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e0919061261d565b6109d2565b005b3480156102f357600080fd5b506102fc610a61565b60405161030991906126a9565b60405180910390f35b34801561031e57600080fd5b50610327610a85565b60405161033491906126d3565b60405180910390f35b34801561034957600080fd5b50610352610a8f565b60405161035f9190612602565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a91906126ee565b610aa2565b60405161039c9190612602565b60405180910390f35b3480156103b157600080fd5b506103ba610ba2565b6040516103c791906124ec565b60405180910390f35b3480156103dc57600080fd5b506103e5610bdb565b6040516103f291906126d3565b60405180910390f35b34801561040757600080fd5b50610410610be1565b60405161041d919061275d565b60405180910390f35b34801561043257600080fd5b5061044d600480360381019061044891906125a7565b610be6565b60405161045a9190612602565b60405180910390f35b34801561046f57600080fd5b50610478610c92565b60405161048591906126d3565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612778565b610c98565b005b3480156104c357600080fd5b506104de60048036038101906104d9919061261d565b610dc5565b005b3480156104ec57600080fd5b506104f5610e5c565b60405161050291906126d3565b60405180910390f35b34801561051757600080fd5b50610520610e62565b60405161052d91906127b4565b60405180910390f35b34801561054257600080fd5b5061054b610e86565b6040516105589190612602565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190612778565b610e99565b6040516105959190612602565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190612778565b610eef565b005b3480156105d357600080fd5b506105dc611003565b6040516105e991906126d3565b60405180910390f35b3480156105fe57600080fd5b50610607611009565b60405161061491906126d3565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190612778565b61100f565b60405161065191906126d3565b60405180910390f35b34801561066657600080fd5b5061066f611058565b005b34801561067d57600080fd5b5061068661106c565b60405161069391906127f0565b60405180910390f35b3480156106a857600080fd5b506106b1611092565b6040516106be91906124ec565b60405180910390f35b3480156106d357600080fd5b506106dc6110cb565b6040516106e991906127b4565b60405180910390f35b3480156106fe57600080fd5b506107196004803603810190610714919061261d565b6110d1565b005b34801561072757600080fd5b50610730611160565b60405161073d91906127b4565b60405180910390f35b34801561075257600080fd5b5061075b611189565b60405161076891906124ec565b60405180910390f35b34801561077d57600080fd5b506107866111c2565b60405161079391906124ec565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be91906125a7565b6111fb565b6040516107d09190612602565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb91906125a7565b6112a7565b60405161080d9190612602565b60405180910390f35b34801561082257600080fd5b5061082b6112c5565b005b34801561083957600080fd5b50610854600480360381019061084f9190612837565b61134e565b005b34801561086257600080fd5b5061086b6113ff565b005b34801561087957600080fd5b50610882611537565b60405161088f91906127f0565b60405180910390f35b3480156108a457600080fd5b506108ad61155d565b6040516108ba91906126d3565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190612864565b611563565b6040516108f791906126d3565b60405180910390f35b34801561090c57600080fd5b50610927600480360381019061092291906125a7565b6115ea565b005b34801561093557600080fd5b50610950600480360381019061094b9190612778565b611780565b005b34801561095e57600080fd5b5061097960048036038101906109749190612778565b6118ad565b005b6040518060400160405280600981526020017f534849424153544152000000000000000000000000000000000000000000000081525081565b60006109c86109c1611930565b8484611938565b6001905092915050565b6109da611b01565b600a811115610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a15906128f0565b60405180910390fd5b806008819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600854604051610a56919061295c565b60405180910390a150565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600654905090565b600e60009054906101000a900460ff1681565b600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aee611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b65906129fc565b60405180910390fd5b610b79858585611b7f565b610b9685610b85611930565b8584610b919190612a4b565b611938565b60019150509392505050565b6040518060400160405280600781526020017f466163746f72790000000000000000000000000000000000000000000000000081525081565b60095481565b601281565b6000610c88610bf3611930565b848460046000610c01611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c839190612a7f565b611938565b6001905092915050565b600b5481565b610ca0611b01565b60011515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90612aff565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610dba9190612b91565b60405180910390a150565b610dcd611b01565b68056bc75e2d63100000811015610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090612c31565b60405180910390fd5b80600c819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600c54604051610e519190612cc3565b60405180910390a150565b60085481565b7f000000000000000000000000da60c1822864a1422ba49740f9a03791893f597481565b600e60019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ef7611b01565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90612d3d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610ff89190612df0565b60405180910390a150565b600d5481565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611060611b01565b61106a6000611fc9565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600381526020017f434647000000000000000000000000000000000000000000000000000000000081525081565b61dead81565b6110d9611b01565b600a81111561111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490612e6a565b60405180910390fd5b806009819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b56009546040516111559190612ed6565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600681526020017f534849424153000000000000000000000000000000000000000000000000000081525081565b6040518060400160405280600381526020017f332e33000000000000000000000000000000000000000000000000000000000081525081565b600061129d611208611930565b848460046000611216611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112989190612a4b565b611938565b6001905092915050565b60006112bb6112b4611930565b8484611b7f565b6001905092915050565b6001600e60006101000a81548160ff02191690831515021790555060006112eb3061100f565b90506112f68161208d565b6000479050611327600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612295565b6000600a8190555050506000600e60006101000a81548160ff021916908315150217905550565b611356611b01565b801515600e60019054906101000a900460ff161515036113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290612f50565b60405180910390fd5b80600e60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113f49190612602565b60405180910390a150565b611407611b01565b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161145490612fa1565b60006040518083038185875af1925050503d8060008114611491576040519150601f19603f3d011682016040523d82523d6000602084013e611496565b606091505b50509050806114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190613002565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161152b9190613094565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115f2611b01565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613134565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016116bf929190613154565b6020604051808303816000875af11580156116de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117029190613192565b905080611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90613002565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5826040516117739190613231565b60405180910390a1505050565b611788611b01565b60001515600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906132ab565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00816040516118a2919061333d565b60405180910390a150565b6118b5611b01565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906133dd565b60405180910390fd5b61192d81611fc9565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e9061346f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613501565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af491906126d3565b60405180910390a3505050565b611b09611930565b73ffffffffffffffffffffffffffffffffffffffff16611b27611160565b73ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b749061356d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be5906135ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613691565b60405180910390fd5b60008111611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9790613723565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d19906137b5565b60405180910390fd5b6000611d2d3061100f565b90506000600c5482101590506000600e60009054906101000a900460ff16158015611da457507f000000000000000000000000da60c1822864a1422ba49740f9a03791893f597473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611dad5750815b8015611dc55750600e60019054906101000a900460ff165b15611dd357611dd26112c5565b5b7f000000000000000000000000da60c1822864a1422ba49740f9a03791893f597473ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611e785750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e9a57606484600954611e8d91906137d5565b611e979190613846565b90505b7f000000000000000000000000da60c1822864a1422ba49740f9a03791893f597473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f3f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f6157606484600854611f5491906137d5565b611f5e9190613846565b90505b8084611f6d9190612a4b565b93506000811115611fb657611f83863083612346565b80600a6000828254611f959190612a7f565b9250508190555080600b6000828254611fae9190612a7f565b925050819055505b611fc1868686612346565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156120aa576120a9613877565b5b6040519080825280602002602001820160405280156120d85781602001602082028036833780820191505090505b50905030816000815181106120f0576120ef6138a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061215f5761215e6138a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506121c4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611938565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122269594939291906139ce565b600060405180830381600087803b15801561224057600080fd5b505af1158015612254573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612289929190613a28565b60405180910390a15050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516122bb90612fa1565b60006040518083038185875af1925050503d80600081146122f8576040519150601f19603f3d011682016040523d82523d6000602084013e6122fd565b606091505b5050905080612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890613aa4565b60405180910390fd5b505050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123959190612a4b565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123eb9190612a7f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161244f91906126d3565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561249657808201518184015260208101905061247b565b60008484015250505050565b6000601f19601f8301169050919050565b60006124be8261245c565b6124c88185612467565b93506124d8818560208601612478565b6124e1816124a2565b840191505092915050565b6000602082019050818103600083015261250681846124b3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061253e82612513565b9050919050565b61254e81612533565b811461255957600080fd5b50565b60008135905061256b81612545565b92915050565b6000819050919050565b61258481612571565b811461258f57600080fd5b50565b6000813590506125a18161257b565b92915050565b600080604083850312156125be576125bd61250e565b5b60006125cc8582860161255c565b92505060206125dd85828601612592565b9150509250929050565b60008115159050919050565b6125fc816125e7565b82525050565b600060208201905061261760008301846125f3565b92915050565b6000602082840312156126335761263261250e565b5b600061264184828501612592565b91505092915050565b6000819050919050565b600061266f61266a61266584612513565b61264a565b612513565b9050919050565b600061268182612654565b9050919050565b600061269382612676565b9050919050565b6126a381612688565b82525050565b60006020820190506126be600083018461269a565b92915050565b6126cd81612571565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6000806000606084860312156127075761270661250e565b5b60006127158682870161255c565b93505060206127268682870161255c565b925050604061273786828701612592565b9150509250925092565b600060ff82169050919050565b61275781612741565b82525050565b6000602082019050612772600083018461274e565b92915050565b60006020828403121561278e5761278d61250e565b5b600061279c8482850161255c565b91505092915050565b6127ae81612533565b82525050565b60006020820190506127c960008301846127a5565b92915050565b60006127da82612513565b9050919050565b6127ea816127cf565b82525050565b600060208201905061280560008301846127e1565b92915050565b612814816125e7565b811461281f57600080fd5b50565b6000813590506128318161280b565b92915050565b60006020828403121561284d5761284c61250e565b5b600061285b84828501612822565b91505092915050565b6000806040838503121561287b5761287a61250e565b5b60006128898582860161255c565b925050602061289a8582860161255c565b9150509250929050565b7f427579204665652063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b60006128da601f83612467565b91506128e5826128a4565b602082019050919050565b60006020820190508181036000830152612909816128cd565b9050919050565b7f57652068617665207570646174656420746865206275792066656520746f3a00600082015250565b6000612946601f83612467565b915061295182612910565b602082019050919050565b6000604082019050818103600083015261297581612939565b905061298460208301846126c4565b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006129e6602883612467565b91506129f18261298a565b604082019050919050565b60006020820190508181036000830152612a15816129d9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a5682612571565b9150612a6183612571565b9250828203905081811115612a7957612a78612a1c565b5b92915050565b6000612a8a82612571565b9150612a9583612571565b9250828201905080821115612aad57612aac612a1c565b5b92915050565b7f5468652077616c6c657420697320616c7265616479206578636c756465642100600082015250565b6000612ae9601f83612467565b9150612af482612ab3565b602082019050919050565b60006020820190508181036000830152612b1881612adc565b9050919050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612b7b602e83612467565b9150612b8682612b1f565b604082019050919050565b60006040820190508181036000830152612baa81612b6e565b9050612bb960208301846127a5565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b6000612c1b602783612467565b9150612c2682612bbf565b604082019050919050565b60006020820190508181036000830152612c4a81612c0e565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b6000612cad602b83612467565b9150612cb882612c51565b604082019050919050565b60006040820190508181036000830152612cdc81612ca0565b9050612ceb60208301846126c4565b92915050565b7f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612d27601883612467565b9150612d3282612cf1565b602082019050919050565b60006020820190508181036000830152612d5681612d1a565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612db9602483612467565b9150612dc482612d5d565b604082019050919050565b6000612dda82612676565b9050919050565b612dea81612dcf565b82525050565b60006040820190508181036000830152612e0981612dac565b9050612e186020830184612de1565b92915050565b7f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20313025600082015250565b6000612e54602083612467565b9150612e5f82612e1e565b602082019050919050565b60006020820190508181036000830152612e8381612e47565b9050919050565b7f576520686176652075706461746564207468652073656c6c2066656520746f3a600082015250565b6000612ec0602083612467565b9150612ecb82612e8a565b602082019050919050565b60006040820190508181036000830152612eef81612eb3565b9050612efe60208301846126c4565b92915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000612f3a601183612467565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b600081905092915050565b50565b6000612f8b600083612f70565b9150612f9682612f7b565b600082019050919050565b6000612fac82612f7e565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612fec600f83612467565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f57652068617665207265636f7665722074686520737475636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b600061307e602c83612467565b915061308982613022565b604082019050919050565b600060408201905081810360008301526130ad81613071565b90506130bc6020830184612de1565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b600061311e603683612467565b9150613129826130c2565b604082019050919050565b6000602082019050818103600083015261314d81613111565b9050919050565b60006040820190506131696000830185612de1565b61317660208301846126c4565b9392505050565b60008151905061318c8161280b565b92915050565b6000602082840312156131a8576131a761250e565b5b60006131b68482850161317d565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b600061321b602783612467565b9150613226826131bf565b604082019050919050565b6000604082019050818103600083015261324a8161320e565b905061325960208301846126c4565b92915050565b7f5468652077616c6c657420697320616c726561647920696e636c756465642100600082015250565b6000613295601f83612467565b91506132a08261325f565b602082019050919050565b600060208201905081810360008301526132c481613288565b9050919050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b6000613327602f83612467565b9150613332826132cb565b604082019050919050565b600060408201905081810360008301526133568161331a565b905061336560208301846127a5565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133c7602683612467565b91506133d28261336b565b604082019050919050565b600060208201905081810360008301526133f6816133ba565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613459602483612467565b9150613464826133fd565b604082019050919050565b600060208201905081810360008301526134888161344c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006134eb602283612467565b91506134f68261348f565b604082019050919050565b6000602082019050818103600083015261351a816134de565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613557602083612467565b915061356282613521565b602082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135e9602583612467565b91506135f48261358d565b604082019050919050565b60006020820190508181036000830152613618816135dc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061367b602383612467565b91506136868261361f565b604082019050919050565b600060208201905081810360008301526136aa8161366e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061370d602983612467565b9150613718826136b1565b604082019050919050565b6000602082019050818103600083015261373c81613700565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061379f602683612467565b91506137aa82613743565b604082019050919050565b600060208201905081810360008301526137ce81613792565b9050919050565b60006137e082612571565b91506137eb83612571565b92508282026137f981612571565b915082820484148315176138105761380f612a1c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061385182612571565b915061385c83612571565b92508261386c5761386b613817565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006138fa6138f56138f0846138d5565b61264a565b612571565b9050919050565b61390a816138df565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61394581612533565b82525050565b6000613957838361393c565b60208301905092915050565b6000602082019050919050565b600061397b82613910565b613985818561391b565b93506139908361392c565b8060005b838110156139c15781516139a8888261394b565b97506139b383613963565b925050600181019050613994565b5085935050505092915050565b600060a0820190506139e360008301886126c4565b6139f06020830187613901565b8181036040830152613a028186613970565b9050613a1160608301856127a5565b613a1e60808301846126c4565b9695505050505050565b6000604082019050613a3d60008301856126c4565b8181036020830152613a4f8184613970565b90509392505050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613a8e601083612467565b9150613a9982613a58565b602082019050919050565b60006020820190508181036000830152613abd81613a81565b905091905056fea2646970667358221220556e8fdc5ad589f4d89b353df228ffa65bb635b78d00a89d6de72e276314753b64736f6c63430008130033

Deployed Bytecode Sourcemap

22928:15217:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24480:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28601:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35645:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24996:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27871:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25186:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28832:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23148:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24673:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24575:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29360:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24758:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33881:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34617:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24642:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25054:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33667:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35343:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24922:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24708:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27974:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13048:103;;;;;;;;;;;;;:::i;:::-;;23257:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23099:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23575:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35873:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12400:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24528:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23046:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29700:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28141:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32201:303;;;;;;;;;;;;;:::i;:::-;;35053:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37239:359;;;;;;;;;;;;;:::i;:::-;;23433:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24815:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28383:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37675:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34248:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13306:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24480:41;;;;;;;;;;;;;;;;;;;:::o;28601:186::-;28701:4;28718:39;28727:12;:10;:12::i;:::-;28741:7;28750:6;28718:8;:39::i;:::-;28775:4;28768:11;;28601:186;;;;:::o;35645:220::-;12286:13;:11;:13::i;:::-;35730:2:::1;35719:7;:13;;35711:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35788:7;35779:6;:16;;;;35811:46;35850:6;;35811:46;;;;;;:::i;:::-;;;;;;;;35645:220:::0;:::o;24996:51::-;;;:::o;27871:95::-;27924:7;27951;;27944:14;;27871:95;:::o;25186:28::-;;;;;;;;;;;;;:::o;28832:478::-;28964:4;28981:21;29005:11;:19;29017:6;29005:19;;;;;;;;;;;;;;;:33;29025:12;:10;:12::i;:::-;29005:33;;;;;;;;;;;;;;;;28981:57;;29091:6;29071:16;:26;;29049:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;29176:36;29186:6;29194:9;29205:6;29176:9;:36::i;:::-;29223:57;29232:6;29240:12;:10;:12::i;:::-;29273:6;29254:16;:25;;;;:::i;:::-;29223:8;:57::i;:::-;29298:4;29291:11;;;28832:478;;;;;:::o;23148:50::-;;;;;;;;;;;;;;;;;;;:::o;24673:26::-;;;;:::o;24575:35::-;24608:2;24575:35;:::o;29360:290::-;29473:4;29490:130;29513:12;:10;:12::i;:::-;29540:7;29599:10;29562:11;:25;29574:12;:10;:12::i;:::-;29562:25;;;;;;;;;;;;;;;:34;29588:7;29562:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;29490:8;:130::i;:::-;29638:4;29631:11;;29360:290;;;;:::o;24758:48::-;;;;:::o;33881:323::-;12286:13;:11;:13::i;:::-;33991:4:::1;33960:35;;:18;:27;33979:7;33960:27;;;;;;;;;;;;;;;;;;;;;;;;;:35;;::::0;33952:79:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34072:4;34042:18;:27;34061:7;34042:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34092:104;34178:7;34092:104;;;;;;:::i;:::-;;;;;;;;33881:323:::0;:::o;34617:428::-;12286:13;:11;:13::i;:::-;34772:9:::1;34744:24;:37;;34722:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;34885:24;34859:23;:50;;;;34925:112;35003:23;;34925:112;;;;;;:::i;:::-;;;;;;;;34617:428:::0;:::o;24642:22::-;;;;:::o;25054:38::-;;;:::o;25221:41::-;;;;;;;;;;;;;:::o;33667:126::-;33734:4;33758:18;:27;33777:7;33758:27;;;;;;;;;;;;;;;;;;;;;;;;;33751:34;;33667:126;;;:::o;35343:294::-;12286:13;:11;:13::i;:::-;35463:1:::1;35435:30;;:16;:30;;::::0;35427:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35531:16;35505:15;;:43;;;;;;;;;;;;;;;;;;35564:65;35613:15;;;;;;;;;;;35564:65;;;;;;:::i;:::-;;;;;;;;35343:294:::0;:::o;24922:29::-;;;;:::o;24708:43::-;;;;:::o;27974:117::-;28040:7;28067;:16;28075:7;28067:16;;;;;;;;;;;;;;;;28060:23;;27974:117;;;:::o;13048:103::-;12286:13;:11;:13::i;:::-;13113:30:::1;13140:1;13113:18;:30::i;:::-;13048:103::o:0;23257:101::-;;;;;;;;;;;;;:::o;23099:42::-;;;;;;;;;;;;;;;;;;;:::o;23575:88::-;23621:42;23575:88;:::o;35873:228::-;12286:13;:11;:13::i;:::-;35961:2:::1;35949:8;:14;;35941:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36021:8;36011:7;:18;;;;36045:48;36085:7;;36045:48;;;;;;:::i;:::-;;;;;;;;35873:228:::0;:::o;12400:87::-;12446:7;12473:6;;;;;;;;;;;12466:13;;12400:87;:::o;24528:40::-;;;;;;;;;;;;;;;;;;;:::o;23046:46::-;;;;;;;;;;;;;;;;;;;:::o;29700:300::-;29818:4;29835:135;29858:12;:10;:12::i;:::-;29885:7;29944:15;29907:11;:25;29919:12;:10;:12::i;:::-;29907:25;;;;;;;;;;;;;;;:34;29933:7;29907:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;29835:8;:135::i;:::-;29988:4;29981:11;;29700:300;;;;:::o;28141:192::-;28244:4;28261:42;28271:12;:10;:12::i;:::-;28285:9;28296:6;28261:9;:42::i;:::-;28321:4;28314:11;;28141:192;;;;:::o;32201:303::-;25324:4;25305:16;;:23;;;;;;;;;;;;;;;;;;32257:19:::1;32279:24;32297:4;32279:9;:24::i;:::-;32257:46;;32314:29;32331:11;32314:16;:29::i;:::-;32354:15;32372:21;32354:39;;32406:49;32427:15;;;;;;;;;;;32444:10;32406:20;:49::i;:::-;32495:1;32468:24;:28;;;;32246:258;;25370:5:::0;25351:16;;:24;;;;;;;;;;;;;;;;;;32201:303::o;35053:247::-;12286:13;:11;:13::i;:::-;35165:8:::1;35140:33;;:21;;;;;;;;;;;:33;;::::0;35132:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35230:8;35206:21;;:32;;;;;;;;;;;;;;;;;;35254:38;35283:8;35254:38;;;;;;:::i;:::-;;;;;;;;35053:247:::0;:::o;37239:359::-;12286:13;:11;:13::i;:::-;37303:15:::1;37321:21;37303:39;;37354:9;37377:15;;;;;;;;;;;37369:29;;37406:10;37369:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37353:68;;;37440:4;37432:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;37480:110;37564:15;;;;;;;;;;;37480:110;;;;;;:::i;:::-;;;;;;;;37292:306;;37239:359::o:0;23433:96::-;;;;;;;;;;;;;:::o;24815:54::-;;;;:::o;28383:170::-;28490:7;28517:11;:19;28529:6;28517:19;;;;;;;;;;;;;;;:28;28537:7;28517:28;;;;;;;;;;;;;;;;28510:35;;28383:170;;;;:::o;37675:465::-;12286:13;:11;:13::i;:::-;37852:4:::1;37827:30;;:13;:30;;::::0;37805:134:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37950:9;37969:13;37962:30;;;37993:15;;;;;;;;;;;38010:7;37962:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37950:68;;38037:4;38029:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;38077:55;38124:7;38077:55;;;;;;:::i;:::-;;;;;;;;37794:346;37675:465:::0;;:::o;34248:324::-;12286:13;:11;:13::i;:::-;34356:5:::1;34325:36;;:18;:27;34344:7;34325:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;::::0;34317:80:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34438:5;34408:18;:27;34427:7;34408:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34459:105;34546:7;34459:105;;;;;;:::i;:::-;;;;;;;;34248:324:::0;:::o;13306:238::-;12286:13;:11;:13::i;:::-;13429:1:::1;13409:22;;:8;:22;;::::0;13387:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13508:28;13527:8;13508:18;:28::i;:::-;13306:238:::0;:::o;131:98::-;184:7;211:10;204:17;;131:98;:::o;30032:341::-;30144:1;30126:20;;:6;:20;;;30118:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30225:1;30206:21;;:7;:21;;;30198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30310:6;30279:11;:19;30291:6;30279:19;;;;;;;;;;;;;;;:28;30299:7;30279:28;;;;;;;;;;;;;;;:37;;;;30349:7;30332:33;;30341:6;30332:33;;;30358:6;30332:33;;;;;;:::i;:::-;;;;;;;;30032:341;;;:::o;12565:132::-;12640:12;:10;:12::i;:::-;12629:23;;:7;:5;:7::i;:::-;:23;;;12621:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12565:132::o;30506:1460::-;30610:1;30594:18;;:4;:18;;;30586:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30687:1;30673:16;;:2;:16;;;30665:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30757:1;30748:6;:10;30740:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30854:6;30837:7;:13;30845:4;30837:13;;;;;;;;;;;;;;;;:23;;30815:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30983:28;31014:24;31032:4;31014:9;:24::i;:::-;30983:55;;31049:28;31117:23;;31080:20;:60;;31049:91;;31151:8;31277:16;;;;;;;;;;;31276:17;:55;;;;;31318:13;31310:21;;:4;:21;;;;31276:55;:95;;;;;31348:23;31276:95;:133;;;;;31388:21;;;;;;;;;;;31276:133;31258:206;;;31436:16;:14;:16::i;:::-;31258:206;31484:13;31478:19;;:2;:19;;;:48;;;;;31502:18;:24;31521:4;31502:24;;;;;;;;;;;;;;;;;;;;;;;;;31501:25;31478:48;31474:111;;;31570:3;31560:6;31550:7;;:16;;;;:::i;:::-;31549:24;;;;:::i;:::-;31543:30;;31474:111;31607:13;31599:21;;:4;:21;;;:48;;;;;31625:18;:22;31644:2;31625:22;;;;;;;;;;;;;;;;;;;;;;;;;31624:23;31599:48;31595:110;;;31690:3;31680:6;31671;;:15;;;;:::i;:::-;31670:23;;;;:::i;:::-;31664:29;;31595:110;31725:3;31715:13;;;;;:::i;:::-;;;31749:1;31743:3;:7;31739:177;;;31767:40;31782:4;31796;31803:3;31767:14;:40::i;:::-;31850:3;31822:24;;:31;;;;;;;:::i;:::-;;;;;;;;31901:3;31868:29;;:36;;;;;;;:::i;:::-;;;;;;;;31739:177;31926:32;31941:4;31947:2;31951:6;31926:14;:32::i;:::-;30575:1391;;;30506:1460;;;:::o;13704:191::-;13778:16;13797:6;;;;;;;;;;;13778:25;;13823:8;13814:6;;:17;;;;;;;;;;;;;;;;;;13878:8;13847:40;;13868:8;13847:40;;;;;;;;;;;;13767:128;13704:191;:::o;32632:638::-;32758:21;32796:1;32782:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32758:40;;32827:4;32809;32814:1;32809:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32853:4;32843;32848:1;32843:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;32868:62;32885:4;32900:15;32918:11;32868:8;:62::i;:::-;32969:15;:66;;;33050:11;33076:1;33120:4;33147;33183:15;32969:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33227:35;33244:11;33257:4;33227:35;;;;;;;:::i;:::-;;;;;;;;32687:583;32632:638;:::o;36109:218::-;36227:9;36242;:14;;36264:6;36242:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36226:49;;;36294:4;36286:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;36215:112;36109:218;;:::o;33406:253::-;33553:6;33534:7;:15;33542:6;33534:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;33592:6;33570:7;:18;33578:9;33570:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;33633:9;33616:35;;33625:6;33616:35;;;33644:6;33616:35;;;;;;:::i;:::-;;;;;;;;33406:253;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:329::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:104::-;6898:7;6927:24;6945:5;6927:24;:::i;:::-;6916:35;;6853:104;;;:::o;6963:142::-;7066:32;7092:5;7066:32;:::i;:::-;7061:3;7054:45;6963:142;;:::o;7111:254::-;7220:4;7258:2;7247:9;7243:18;7235:26;;7271:87;7355:1;7344:9;7340:17;7331:6;7271:87;:::i;:::-;7111:254;;;;:::o;7371:116::-;7441:21;7456:5;7441:21;:::i;:::-;7434:5;7431:32;7421:60;;7477:1;7474;7467:12;7421:60;7371:116;:::o;7493:133::-;7536:5;7574:6;7561:20;7552:29;;7590:30;7614:5;7590:30;:::i;:::-;7493:133;;;;:::o;7632:323::-;7688:6;7737:2;7725:9;7716:7;7712:23;7708:32;7705:119;;;7743:79;;:::i;:::-;7705:119;7863:1;7888:50;7930:7;7921:6;7910:9;7906:22;7888:50;:::i;:::-;7878:60;;7834:114;7632:323;;;;:::o;7961:474::-;8029:6;8037;8086:2;8074:9;8065:7;8061:23;8057:32;8054:119;;;8092:79;;:::i;:::-;8054:119;8212:1;8237:53;8282:7;8273:6;8262:9;8258:22;8237:53;:::i;:::-;8227:63;;8183:117;8339:2;8365:53;8410:7;8401:6;8390:9;8386:22;8365:53;:::i;:::-;8355:63;;8310:118;7961:474;;;;;:::o;8441:181::-;8581:33;8577:1;8569:6;8565:14;8558:57;8441:181;:::o;8628:366::-;8770:3;8791:67;8855:2;8850:3;8791:67;:::i;:::-;8784:74;;8867:93;8956:3;8867:93;:::i;:::-;8985:2;8980:3;8976:12;8969:19;;8628:366;;;:::o;9000:419::-;9166:4;9204:2;9193:9;9189:18;9181:26;;9253:9;9247:4;9243:20;9239:1;9228:9;9224:17;9217:47;9281:131;9407:4;9281:131;:::i;:::-;9273:139;;9000:419;;;:::o;9425:181::-;9565:33;9561:1;9553:6;9549:14;9542:57;9425:181;:::o;9612:366::-;9754:3;9775:67;9839:2;9834:3;9775:67;:::i;:::-;9768:74;;9851:93;9940:3;9851:93;:::i;:::-;9969:2;9964:3;9960:12;9953:19;;9612:366;;;:::o;9984:529::-;10178:4;10216:2;10205:9;10201:18;10193:26;;10265:9;10259:4;10255:20;10251:1;10240:9;10236:17;10229:47;10293:131;10419:4;10293:131;:::i;:::-;10285:139;;10434:72;10502:2;10491:9;10487:18;10478:6;10434:72;:::i;:::-;9984:529;;;;:::o;10519:227::-;10659:34;10655:1;10647:6;10643:14;10636:58;10728:10;10723:2;10715:6;10711:15;10704:35;10519:227;:::o;10752:366::-;10894:3;10915:67;10979:2;10974:3;10915:67;:::i;:::-;10908:74;;10991:93;11080:3;10991:93;:::i;:::-;11109:2;11104:3;11100:12;11093:19;;10752:366;;;:::o;11124:419::-;11290:4;11328:2;11317:9;11313:18;11305:26;;11377:9;11371:4;11367:20;11363:1;11352:9;11348:17;11341:47;11405:131;11531:4;11405:131;:::i;:::-;11397:139;;11124:419;;;:::o;11549:180::-;11597:77;11594:1;11587:88;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;11735:194;11775:4;11795:20;11813:1;11795:20;:::i;:::-;11790:25;;11829:20;11847:1;11829:20;:::i;:::-;11824:25;;11873:1;11870;11866:9;11858:17;;11897:1;11891:4;11888:11;11885:37;;;11902:18;;:::i;:::-;11885:37;11735:194;;;;:::o;11935:191::-;11975:3;11994:20;12012:1;11994:20;:::i;:::-;11989:25;;12028:20;12046:1;12028:20;:::i;:::-;12023:25;;12071:1;12068;12064:9;12057:16;;12092:3;12089:1;12086:10;12083:36;;;12099:18;;:::i;:::-;12083:36;11935:191;;;;:::o;12132:181::-;12272:33;12268:1;12260:6;12256:14;12249:57;12132:181;:::o;12319:366::-;12461:3;12482:67;12546:2;12541:3;12482:67;:::i;:::-;12475:74;;12558:93;12647:3;12558:93;:::i;:::-;12676:2;12671:3;12667:12;12660:19;;12319:366;;;:::o;12691:419::-;12857:4;12895:2;12884:9;12880:18;12872:26;;12944:9;12938:4;12934:20;12930:1;12919:9;12915:17;12908:47;12972:131;13098:4;12972:131;:::i;:::-;12964:139;;12691:419;;;:::o;13116:233::-;13256:34;13252:1;13244:6;13240:14;13233:58;13325:16;13320:2;13312:6;13308:15;13301:41;13116:233;:::o;13355:366::-;13497:3;13518:67;13582:2;13577:3;13518:67;:::i;:::-;13511:74;;13594:93;13683:3;13594:93;:::i;:::-;13712:2;13707:3;13703:12;13696:19;;13355:366;;;:::o;13727:529::-;13921:4;13959:2;13948:9;13944:18;13936:26;;14008:9;14002:4;13998:20;13994:1;13983:9;13979:17;13972:47;14036:131;14162:4;14036:131;:::i;:::-;14028:139;;14177:72;14245:2;14234:9;14230:18;14221:6;14177:72;:::i;:::-;13727:529;;;;:::o;14262:226::-;14402:34;14398:1;14390:6;14386:14;14379:58;14471:9;14466:2;14458:6;14454:15;14447:34;14262:226;:::o;14494:366::-;14636:3;14657:67;14721:2;14716:3;14657:67;:::i;:::-;14650:74;;14733:93;14822:3;14733:93;:::i;:::-;14851:2;14846:3;14842:12;14835:19;;14494:366;;;:::o;14866:419::-;15032:4;15070:2;15059:9;15055:18;15047:26;;15119:9;15113:4;15109:20;15105:1;15094:9;15090:17;15083:47;15147:131;15273:4;15147:131;:::i;:::-;15139:139;;14866:419;;;:::o;15291:230::-;15431:34;15427:1;15419:6;15415:14;15408:58;15500:13;15495:2;15487:6;15483:15;15476:38;15291:230;:::o;15527:366::-;15669:3;15690:67;15754:2;15749:3;15690:67;:::i;:::-;15683:74;;15766:93;15855:3;15766:93;:::i;:::-;15884:2;15879:3;15875:12;15868:19;;15527:366;;;:::o;15899:529::-;16093:4;16131:2;16120:9;16116:18;16108:26;;16180:9;16174:4;16170:20;16166:1;16155:9;16151:17;16144:47;16208:131;16334:4;16208:131;:::i;:::-;16200:139;;16349:72;16417:2;16406:9;16402:18;16393:6;16349:72;:::i;:::-;15899:529;;;;:::o;16434:174::-;16574:26;16570:1;16562:6;16558:14;16551:50;16434:174;:::o;16614:366::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:419::-;17152:4;17190:2;17179:9;17175:18;17167:26;;17239:9;17233:4;17229:20;17225:1;17214:9;17210:17;17203:47;17267:131;17393:4;17267:131;:::i;:::-;17259:139;;16986:419;;;:::o;17411:223::-;17551:34;17547:1;17539:6;17535:14;17528:58;17620:6;17615:2;17607:6;17603:15;17596:31;17411:223;:::o;17640:366::-;17782:3;17803:67;17867:2;17862:3;17803:67;:::i;:::-;17796:74;;17879:93;17968:3;17879:93;:::i;:::-;17997:2;17992:3;17988:12;17981:19;;17640:366;;;:::o;18012:134::-;18070:9;18103:37;18134:5;18103:37;:::i;:::-;18090:50;;18012:134;;;:::o;18152:147::-;18247:45;18286:5;18247:45;:::i;:::-;18242:3;18235:58;18152:147;;:::o;18305:545::-;18507:4;18545:2;18534:9;18530:18;18522:26;;18594:9;18588:4;18584:20;18580:1;18569:9;18565:17;18558:47;18622:131;18748:4;18622:131;:::i;:::-;18614:139;;18763:80;18839:2;18828:9;18824:18;18815:6;18763:80;:::i;:::-;18305:545;;;;:::o;18856:182::-;18996:34;18992:1;18984:6;18980:14;18973:58;18856:182;:::o;19044:366::-;19186:3;19207:67;19271:2;19266:3;19207:67;:::i;:::-;19200:74;;19283:93;19372:3;19283:93;:::i;:::-;19401:2;19396:3;19392:12;19385:19;;19044:366;;;:::o;19416:419::-;19582:4;19620:2;19609:9;19605:18;19597:26;;19669:9;19663:4;19659:20;19655:1;19644:9;19640:17;19633:47;19697:131;19823:4;19697:131;:::i;:::-;19689:139;;19416:419;;;:::o;19841:182::-;19981:34;19977:1;19969:6;19965:14;19958:58;19841:182;:::o;20029:366::-;20171:3;20192:67;20256:2;20251:3;20192:67;:::i;:::-;20185:74;;20268:93;20357:3;20268:93;:::i;:::-;20386:2;20381:3;20377:12;20370:19;;20029:366;;;:::o;20401:529::-;20595:4;20633:2;20622:9;20618:18;20610:26;;20682:9;20676:4;20672:20;20668:1;20657:9;20653:17;20646:47;20710:131;20836:4;20710:131;:::i;:::-;20702:139;;20851:72;20919:2;20908:9;20904:18;20895:6;20851:72;:::i;:::-;20401:529;;;;:::o;20936:167::-;21076:19;21072:1;21064:6;21060:14;21053:43;20936:167;:::o;21109:366::-;21251:3;21272:67;21336:2;21331:3;21272:67;:::i;:::-;21265:74;;21348:93;21437:3;21348:93;:::i;:::-;21466:2;21461:3;21457:12;21450:19;;21109:366;;;:::o;21481:419::-;21647:4;21685:2;21674:9;21670:18;21662:26;;21734:9;21728:4;21724:20;21720:1;21709:9;21705:17;21698:47;21762:131;21888:4;21762:131;:::i;:::-;21754:139;;21481:419;;;:::o;21906:147::-;22007:11;22044:3;22029:18;;21906:147;;;;:::o;22059:114::-;;:::o;22179:398::-;22338:3;22359:83;22440:1;22435:3;22359:83;:::i;:::-;22352:90;;22451:93;22540:3;22451:93;:::i;:::-;22569:1;22564:3;22560:11;22553:18;;22179:398;;;:::o;22583:379::-;22767:3;22789:147;22932:3;22789:147;:::i;:::-;22782:154;;22953:3;22946:10;;22583:379;;;:::o;22968:165::-;23108:17;23104:1;23096:6;23092:14;23085:41;22968:165;:::o;23139:366::-;23281:3;23302:67;23366:2;23361:3;23302:67;:::i;:::-;23295:74;;23378:93;23467:3;23378:93;:::i;:::-;23496:2;23491:3;23487:12;23480:19;;23139:366;;;:::o;23511:419::-;23677:4;23715:2;23704:9;23700:18;23692:26;;23764:9;23758:4;23754:20;23750:1;23739:9;23735:17;23728:47;23792:131;23918:4;23792:131;:::i;:::-;23784:139;;23511:419;;;:::o;23936:231::-;24076:34;24072:1;24064:6;24060:14;24053:58;24145:14;24140:2;24132:6;24128:15;24121:39;23936:231;:::o;24173:366::-;24315:3;24336:67;24400:2;24395:3;24336:67;:::i;:::-;24329:74;;24412:93;24501:3;24412:93;:::i;:::-;24530:2;24525:3;24521:12;24514:19;;24173:366;;;:::o;24545:545::-;24747:4;24785:2;24774:9;24770:18;24762:26;;24834:9;24828:4;24824:20;24820:1;24809:9;24805:17;24798:47;24862:131;24988:4;24862:131;:::i;:::-;24854:139;;25003:80;25079:2;25068:9;25064:18;25055:6;25003:80;:::i;:::-;24545:545;;;;:::o;25096:241::-;25236:34;25232:1;25224:6;25220:14;25213:58;25305:24;25300:2;25292:6;25288:15;25281:49;25096:241;:::o;25343:366::-;25485:3;25506:67;25570:2;25565:3;25506:67;:::i;:::-;25499:74;;25582:93;25671:3;25582:93;:::i;:::-;25700:2;25695:3;25691:12;25684:19;;25343:366;;;:::o;25715:419::-;25881:4;25919:2;25908:9;25904:18;25896:26;;25968:9;25962:4;25958:20;25954:1;25943:9;25939:17;25932:47;25996:131;26122:4;25996:131;:::i;:::-;25988:139;;25715:419;;;:::o;26140:348::-;26269:4;26307:2;26296:9;26292:18;26284:26;;26320:79;26396:1;26385:9;26381:17;26372:6;26320:79;:::i;:::-;26409:72;26477:2;26466:9;26462:18;26453:6;26409:72;:::i;:::-;26140:348;;;;;:::o;26494:137::-;26548:5;26579:6;26573:13;26564:22;;26595:30;26619:5;26595:30;:::i;:::-;26494:137;;;;:::o;26637:345::-;26704:6;26753:2;26741:9;26732:7;26728:23;26724:32;26721:119;;;26759:79;;:::i;:::-;26721:119;26879:1;26904:61;26957:7;26948:6;26937:9;26933:22;26904:61;:::i;:::-;26894:71;;26850:125;26637:345;;;;:::o;26988:226::-;27128:34;27124:1;27116:6;27112:14;27105:58;27197:9;27192:2;27184:6;27180:15;27173:34;26988:226;:::o;27220:366::-;27362:3;27383:67;27447:2;27442:3;27383:67;:::i;:::-;27376:74;;27459:93;27548:3;27459:93;:::i;:::-;27577:2;27572:3;27568:12;27561:19;;27220:366;;;:::o;27592:529::-;27786:4;27824:2;27813:9;27809:18;27801:26;;27873:9;27867:4;27863:20;27859:1;27848:9;27844:17;27837:47;27901:131;28027:4;27901:131;:::i;:::-;27893:139;;28042:72;28110:2;28099:9;28095:18;28086:6;28042:72;:::i;:::-;27592:529;;;;:::o;28127:181::-;28267:33;28263:1;28255:6;28251:14;28244:57;28127:181;:::o;28314:366::-;28456:3;28477:67;28541:2;28536:3;28477:67;:::i;:::-;28470:74;;28553:93;28642:3;28553:93;:::i;:::-;28671:2;28666:3;28662:12;28655:19;;28314:366;;;:::o;28686:419::-;28852:4;28890:2;28879:9;28875:18;28867:26;;28939:9;28933:4;28929:20;28925:1;28914:9;28910:17;28903:47;28967:131;29093:4;28967:131;:::i;:::-;28959:139;;28686:419;;;:::o;29111:234::-;29251:34;29247:1;29239:6;29235:14;29228:58;29320:17;29315:2;29307:6;29303:15;29296:42;29111:234;:::o;29351:366::-;29493:3;29514:67;29578:2;29573:3;29514:67;:::i;:::-;29507:74;;29590:93;29679:3;29590:93;:::i;:::-;29708:2;29703:3;29699:12;29692:19;;29351:366;;;:::o;29723:529::-;29917:4;29955:2;29944:9;29940:18;29932:26;;30004:9;29998:4;29994:20;29990:1;29979:9;29975:17;29968:47;30032:131;30158:4;30032:131;:::i;:::-;30024:139;;30173:72;30241:2;30230:9;30226:18;30217:6;30173:72;:::i;:::-;29723:529;;;;:::o;30258:225::-;30398:34;30394:1;30386:6;30382:14;30375:58;30467:8;30462:2;30454:6;30450:15;30443:33;30258:225;:::o;30489:366::-;30631:3;30652:67;30716:2;30711:3;30652:67;:::i;:::-;30645:74;;30728:93;30817:3;30728:93;:::i;:::-;30846:2;30841:3;30837:12;30830:19;;30489:366;;;:::o;30861:419::-;31027:4;31065:2;31054:9;31050:18;31042:26;;31114:9;31108:4;31104:20;31100:1;31089:9;31085:17;31078:47;31142:131;31268:4;31142:131;:::i;:::-;31134:139;;30861:419;;;:::o;31286:223::-;31426:34;31422:1;31414:6;31410:14;31403:58;31495:6;31490:2;31482:6;31478:15;31471:31;31286:223;:::o;31515:366::-;31657:3;31678:67;31742:2;31737:3;31678:67;:::i;:::-;31671:74;;31754:93;31843:3;31754:93;:::i;:::-;31872:2;31867:3;31863:12;31856:19;;31515:366;;;:::o;31887:419::-;32053:4;32091:2;32080:9;32076:18;32068:26;;32140:9;32134:4;32130:20;32126:1;32115:9;32111:17;32104:47;32168:131;32294:4;32168:131;:::i;:::-;32160:139;;31887:419;;;:::o;32312:221::-;32452:34;32448:1;32440:6;32436:14;32429:58;32521:4;32516:2;32508:6;32504:15;32497:29;32312:221;:::o;32539:366::-;32681:3;32702:67;32766:2;32761:3;32702:67;:::i;:::-;32695:74;;32778:93;32867:3;32778:93;:::i;:::-;32896:2;32891:3;32887:12;32880:19;;32539:366;;;:::o;32911:419::-;33077:4;33115:2;33104:9;33100:18;33092:26;;33164:9;33158:4;33154:20;33150:1;33139:9;33135:17;33128:47;33192:131;33318:4;33192:131;:::i;:::-;33184:139;;32911:419;;;:::o;33336:182::-;33476:34;33472:1;33464:6;33460:14;33453:58;33336:182;:::o;33524:366::-;33666:3;33687:67;33751:2;33746:3;33687:67;:::i;:::-;33680:74;;33763:93;33852:3;33763:93;:::i;:::-;33881:2;33876:3;33872:12;33865:19;;33524:366;;;:::o;33896:419::-;34062:4;34100:2;34089:9;34085:18;34077:26;;34149:9;34143:4;34139:20;34135:1;34124:9;34120:17;34113:47;34177:131;34303:4;34177:131;:::i;:::-;34169:139;;33896:419;;;:::o;34321:224::-;34461:34;34457:1;34449:6;34445:14;34438:58;34530:7;34525:2;34517:6;34513:15;34506:32;34321:224;:::o;34551:366::-;34693:3;34714:67;34778:2;34773:3;34714:67;:::i;:::-;34707:74;;34790:93;34879:3;34790:93;:::i;:::-;34908:2;34903:3;34899:12;34892:19;;34551:366;;;:::o;34923:419::-;35089:4;35127:2;35116:9;35112:18;35104:26;;35176:9;35170:4;35166:20;35162:1;35151:9;35147:17;35140:47;35204:131;35330:4;35204:131;:::i;:::-;35196:139;;34923:419;;;:::o;35348:222::-;35488:34;35484:1;35476:6;35472:14;35465:58;35557:5;35552:2;35544:6;35540:15;35533:30;35348:222;:::o;35576:366::-;35718:3;35739:67;35803:2;35798:3;35739:67;:::i;:::-;35732:74;;35815:93;35904:3;35815:93;:::i;:::-;35933:2;35928:3;35924:12;35917:19;;35576:366;;;:::o;35948:419::-;36114:4;36152:2;36141:9;36137:18;36129:26;;36201:9;36195:4;36191:20;36187:1;36176:9;36172:17;36165:47;36229:131;36355:4;36229:131;:::i;:::-;36221:139;;35948:419;;;:::o;36373:228::-;36513:34;36509:1;36501:6;36497:14;36490:58;36582:11;36577:2;36569:6;36565:15;36558:36;36373:228;:::o;36607:366::-;36749:3;36770:67;36834:2;36829:3;36770:67;:::i;:::-;36763:74;;36846:93;36935:3;36846:93;:::i;:::-;36964:2;36959:3;36955:12;36948:19;;36607:366;;;:::o;36979:419::-;37145:4;37183:2;37172:9;37168:18;37160:26;;37232:9;37226:4;37222:20;37218:1;37207:9;37203:17;37196:47;37260:131;37386:4;37260:131;:::i;:::-;37252:139;;36979:419;;;:::o;37404:225::-;37544:34;37540:1;37532:6;37528:14;37521:58;37613:8;37608:2;37600:6;37596:15;37589:33;37404:225;:::o;37635:366::-;37777:3;37798:67;37862:2;37857:3;37798:67;:::i;:::-;37791:74;;37874:93;37963:3;37874:93;:::i;:::-;37992:2;37987:3;37983:12;37976:19;;37635:366;;;:::o;38007:419::-;38173:4;38211:2;38200:9;38196:18;38188:26;;38260:9;38254:4;38250:20;38246:1;38235:9;38231:17;38224:47;38288:131;38414:4;38288:131;:::i;:::-;38280:139;;38007:419;;;:::o;38432:410::-;38472:7;38495:20;38513:1;38495:20;:::i;:::-;38490:25;;38529:20;38547:1;38529:20;:::i;:::-;38524:25;;38584:1;38581;38577:9;38606:30;38624:11;38606:30;:::i;:::-;38595:41;;38785:1;38776:7;38772:15;38769:1;38766:22;38746:1;38739:9;38719:83;38696:139;;38815:18;;:::i;:::-;38696:139;38480:362;38432:410;;;;:::o;38848:180::-;38896:77;38893:1;38886:88;38993:4;38990:1;38983:15;39017:4;39014:1;39007:15;39034:185;39074:1;39091:20;39109:1;39091:20;:::i;:::-;39086:25;;39125:20;39143:1;39125:20;:::i;:::-;39120:25;;39164:1;39154:35;;39169:18;;:::i;:::-;39154:35;39211:1;39208;39204:9;39199:14;;39034:185;;;;:::o;39225:180::-;39273:77;39270:1;39263:88;39370:4;39367:1;39360:15;39394:4;39391:1;39384:15;39411:180;39459:77;39456:1;39449:88;39556:4;39553:1;39546:15;39580:4;39577:1;39570:15;39597:85;39642:7;39671:5;39660:16;;39597:85;;;:::o;39688:158::-;39746:9;39779:61;39797:42;39806:32;39832:5;39806:32;:::i;:::-;39797:42;:::i;:::-;39779:61;:::i;:::-;39766:74;;39688:158;;;:::o;39852:147::-;39947:45;39986:5;39947:45;:::i;:::-;39942:3;39935:58;39852:147;;:::o;40005:114::-;40072:6;40106:5;40100:12;40090:22;;40005:114;;;:::o;40125:184::-;40224:11;40258:6;40253:3;40246:19;40298:4;40293:3;40289:14;40274:29;;40125:184;;;;:::o;40315:132::-;40382:4;40405:3;40397:11;;40435:4;40430:3;40426:14;40418:22;;40315:132;;;:::o;40453:108::-;40530:24;40548:5;40530:24;:::i;:::-;40525:3;40518:37;40453:108;;:::o;40567:179::-;40636:10;40657:46;40699:3;40691:6;40657:46;:::i;:::-;40735:4;40730:3;40726:14;40712:28;;40567:179;;;;:::o;40752:113::-;40822:4;40854;40849:3;40845:14;40837:22;;40752:113;;;:::o;40901:732::-;41020:3;41049:54;41097:5;41049:54;:::i;:::-;41119:86;41198:6;41193:3;41119:86;:::i;:::-;41112:93;;41229:56;41279:5;41229:56;:::i;:::-;41308:7;41339:1;41324:284;41349:6;41346:1;41343:13;41324:284;;;41425:6;41419:13;41452:63;41511:3;41496:13;41452:63;:::i;:::-;41445:70;;41538:60;41591:6;41538:60;:::i;:::-;41528:70;;41384:224;41371:1;41368;41364:9;41359:14;;41324:284;;;41328:14;41624:3;41617:10;;41025:608;;;40901:732;;;;:::o;41639:831::-;41902:4;41940:3;41929:9;41925:19;41917:27;;41954:71;42022:1;42011:9;42007:17;41998:6;41954:71;:::i;:::-;42035:80;42111:2;42100:9;42096:18;42087:6;42035:80;:::i;:::-;42162:9;42156:4;42152:20;42147:2;42136:9;42132:18;42125:48;42190:108;42293:4;42284:6;42190:108;:::i;:::-;42182:116;;42308:72;42376:2;42365:9;42361:18;42352:6;42308:72;:::i;:::-;42390:73;42458:3;42447:9;42443:19;42434:6;42390:73;:::i;:::-;41639:831;;;;;;;;:::o;42476:483::-;42647:4;42685:2;42674:9;42670:18;42662:26;;42698:71;42766:1;42755:9;42751:17;42742:6;42698:71;:::i;:::-;42816:9;42810:4;42806:20;42801:2;42790:9;42786:18;42779:48;42844:108;42947:4;42938:6;42844:108;:::i;:::-;42836:116;;42476:483;;;;;:::o;42965:166::-;43105:18;43101:1;43093:6;43089:14;43082:42;42965:166;:::o;43137:366::-;43279:3;43300:67;43364:2;43359:3;43300:67;:::i;:::-;43293:74;;43376:93;43465:3;43376:93;:::i;:::-;43494:2;43489:3;43485:12;43478:19;;43137:366;;;:::o;43509:419::-;43675:4;43713:2;43702:9;43698:18;43690:26;;43762:9;43756:4;43752:20;43748:1;43737:9;43733:17;43726:47;43790:131;43916:4;43790:131;:::i;:::-;43782:139;;43509:419;;;:::o

Swarm Source

ipfs://556e8fdc5ad589f4d89b353df228ffa65bb635b78d00a89d6de72e276314753b
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.