ETH Price: $3,469.75 (-0.64%)

Token

Marge Simpson (MSimp)
 

Overview

Max Total Supply

420,000,000,000 MSimp

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
749,133,692.843570205650386919 MSimp

Value
$0.00
0xe802522235b3913c94d2f8d8bd3f898ec06d39fb
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:
Margesimpson

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-22
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract Margesimpson  is ERC20, Ownable {
    using Address for address payable;
    using Address for address;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 public  walletToWalletTransferFee;

    address public  marketingWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event UpdateBuyFees(uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 marketingFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("Marge Simpson", "MSimp") {   
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        marketingFeeOnBuy  = 0;
        marketingFeeOnSell = 0;

        walletToWalletTransferFee = 0;

        marketingWallet = 0x6BCD0a3528bB1C65A48234562BE0eD1ffacF3176;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingWallet] = true;

        _mint(owner(), 420000000000 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 1000;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateBuyFees(uint256 _marketingFeeOnBuy) external onlyOwner {
        marketingFeeOnBuy = _marketingFeeOnBuy;
        emit UpdateBuyFees(marketingFeeOnBuy);
    }

    function updateSellFees(uint256 _marketingFeeOnSell) external onlyOwner {
        marketingFeeOnSell = _marketingFeeOnSell;
        emit UpdateSellFees(marketingFeeOnSell);
    }

    function updateFees(uint256 _marketingFeeOnBuy, uint256 _marketingFeeOnSell ) external onlyOwner {
        marketingFeeOnBuy = _marketingFeeOnBuy;
        marketingFeeOnSell = _marketingFeeOnSell;
    }

    function updateWalletToWalletTransferFee(uint256 _walletToWalletTransferFee) external onlyOwner{
        walletToWalletTransferFee = _walletToWalletTransferFee;
        emit UpdateWalletToWalletTransferFee(walletToWalletTransferFee);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

    //------------------Transfer------------------//
    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance > 0 && !swapping && to == uniswapV2Pair) {
            swapping = true;
            swapAndSendMarketing(contractTokenBalance);
            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]|| swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = marketingFeeOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = marketingFeeOnSell;
        } else {
            _totalFees = walletToWalletTransferFee;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        super._transfer(from, to, amount);
    }

    //------------------Swap------------------//
    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1000000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","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":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"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"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletToWalletTransferFee","type":"uint256"}],"name":"updateWalletToWalletTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletToWalletTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600d81526020017f4d617267652053696d70736f6e000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d53696d7000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000c3d565b508060049081620000a1919062000c3d565b5050506000620000b66200062b60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000d8e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000270919062000d8e565b6040518363ffffffff1660e01b81526004016200028f92919062000dd1565b6020604051808303816000875af1158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d5919062000d8e565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ae30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200063360201b60201c565b60006009819055506000600a819055506000600b81905550736bcd0a3528bb1c65a48234562be0ed1ffacf3176600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000620004316200080460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005fe620005c26200080460201b60201c565b620005d26200082e60201b60201c565b600a620005e0919062000f8e565b6461c9f36800620005f2919062000fdf565b6200083760201b60201c565b6103e862000611620009af60201b60201c565b6200061d919062001059565b600d819055505050620012ad565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069c9062001118565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000717576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070e90620011b0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620007f79190620011e3565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a09062001250565b60405180910390fd5b620008bd60008383620009b960201b60201c565b8060026000828254620008d1919062001272565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000928919062001272565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200098f9190620011e3565b60405180910390a3620009ab60008383620009be60201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a4557607f821691505b60208210810362000a5b5762000a5a620009fd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ac57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a86565b62000ad1868362000a86565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b1e62000b1862000b128462000ae9565b62000af3565b62000ae9565b9050919050565b6000819050919050565b62000b3a8362000afd565b62000b5262000b498262000b25565b84845462000a93565b825550505050565b600090565b62000b6962000b5a565b62000b7681848462000b2f565b505050565b5b8181101562000b9e5762000b9260008262000b5f565b60018101905062000b7c565b5050565b601f82111562000bed5762000bb78162000a61565b62000bc28462000a76565b8101602085101562000bd2578190505b62000bea62000be18562000a76565b83018262000b7b565b50505b505050565b600082821c905092915050565b600062000c126000198460080262000bf2565b1980831691505092915050565b600062000c2d838362000bff565b9150826002028217905092915050565b62000c4882620009c3565b67ffffffffffffffff81111562000c645762000c63620009ce565b5b62000c70825462000a2c565b62000c7d82828562000ba2565b600060209050601f83116001811462000cb5576000841562000ca0578287015190505b62000cac858262000c1f565b86555062000d1c565b601f19841662000cc58662000a61565b60005b8281101562000cef5784890151825560018201915060208501945060208101905062000cc8565b8683101562000d0f578489015162000d0b601f89168262000bff565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d568262000d29565b9050919050565b62000d688162000d49565b811462000d7457600080fd5b50565b60008151905062000d888162000d5d565b92915050565b60006020828403121562000da75762000da662000d24565b5b600062000db78482850162000d77565b91505092915050565b62000dcb8162000d49565b82525050565b600060408201905062000de8600083018562000dc0565b62000df7602083018462000dc0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e8c5780860481111562000e645762000e6362000dfe565b5b600185161562000e745780820291505b808102905062000e848562000e2d565b945062000e44565b94509492505050565b60008262000ea7576001905062000f7a565b8162000eb7576000905062000f7a565b816001811462000ed0576002811462000edb5762000f11565b600191505062000f7a565b60ff84111562000ef05762000eef62000dfe565b5b8360020a91508482111562000f0a5762000f0962000dfe565b5b5062000f7a565b5060208310610133831016604e8410600b841016171562000f4b5782820a90508381111562000f455762000f4462000dfe565b5b62000f7a565b62000f5a848484600162000e3a565b9250905081840481111562000f745762000f7362000dfe565b5b81810290505b9392505050565b600060ff82169050919050565b600062000f9b8262000ae9565b915062000fa88362000f81565b925062000fd77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e95565b905092915050565b600062000fec8262000ae9565b915062000ff98362000ae9565b9250828202620010098162000ae9565b9150828204841483151762001023576200102262000dfe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010668262000ae9565b9150620010738362000ae9565b9250826200108657620010856200102a565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200110060248362001091565b91506200110d82620010a2565b604082019050919050565b600060208201905081810360008301526200113381620010f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200119860228362001091565b9150620011a5826200113a565b604082019050919050565b60006020820190508181036000830152620011cb8162001189565b9050919050565b620011dd8162000ae9565b82525050565b6000602082019050620011fa6000830184620011d2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001238601f8362001091565b9150620012458262001200565b602082019050919050565b600060208201905081810360008301526200126b8162001229565b9050919050565b60006200127f8262000ae9565b91506200128c8362000ae9565b9250828201905080821115620012a757620012a662000dfe565b5b92915050565b6138fd80620012bd6000396000f3fe6080604052600436106101d15760003560e01c806371fc4688116100f7578063bb85c6d111610095578063e2f4560511610064578063e2f45605146106ab578063eba4c333146106d6578063f2fde38b146106ff578063f9d0831a14610728576101d8565b8063bb85c6d1146105f1578063c02466681461061a578063dc4c7dbc14610643578063dd62ed3e1461066e576101d8565b806395d89b41116100d157806395d89b4114610523578063a457c2d71461054e578063a9059cbb1461058b578063afa4f3b2146105c8576101d8565b806371fc4688146104a457806375f0a874146104cd5780638da5cb5b146104f8576101d8565b806349bd5a5e1161016f5780636db794371161013e5780636db79437146103fc578063702509fd1461042557806370a0823114610450578063715018a61461048d576101d8565b806349bd5a5e146103405780634fbee1931461036b5780635fc2e596146103a857806364c98c44146103d3576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b578063313ce567146102d85780633950935114610303576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610751565b6040516101ff919061277c565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612837565b6107e3565b60405161023c9190612892565b60405180910390f35b34801561025157600080fd5b5061025a610801565b604051610267919061290c565b60405180910390f35b34801561027c57600080fd5b50610285610827565b6040516102929190612936565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612951565b610831565b6040516102cf9190612892565b60405180910390f35b3480156102e457600080fd5b506102ed610950565b6040516102fa91906129c0565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190612837565b610959565b6040516103379190612892565b60405180910390f35b34801561034c57600080fd5b50610355610a05565b60405161036291906129ea565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612a05565b610a2b565b60405161039f9190612892565b60405180910390f35b3480156103b457600080fd5b506103bd610a81565b6040516103ca9190612936565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190612a32565b610a87565b005b34801561040857600080fd5b50610423600480360381019061041e9190612a5f565b610b61565b005b34801561043157600080fd5b5061043a610c0a565b6040516104479190612936565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612a05565b610c10565b6040516104849190612936565b60405180910390f35b34801561049957600080fd5b506104a2610c58565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190612a32565b610db0565b005b3480156104d957600080fd5b506104e2610e8a565b6040516104ef91906129ea565b60405180910390f35b34801561050457600080fd5b5061050d610eb0565b60405161051a91906129ea565b60405180910390f35b34801561052f57600080fd5b50610538610eda565b604051610545919061277c565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190612837565b610f6c565b6040516105829190612892565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190612837565b611057565b6040516105bf9190612892565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612a32565b611075565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612a05565b6111a6565b005b34801561062657600080fd5b50610641600480360381019061063c9190612acb565b6113d9565b005b34801561064f57600080fd5b506106586115ab565b6040516106659190612936565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612b0b565b6115b1565b6040516106a29190612936565b60405180910390f35b3480156106b757600080fd5b506106c0611638565b6040516106cd9190612936565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190612a32565b61163e565b005b34801561070b57600080fd5b5061072660048036038101906107219190612a05565b611718565b005b34801561073457600080fd5b5061074f600480360381019061074a9190612a05565b6118de565b005b60606003805461076090612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90612b7a565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f0611b4d565b8484611b55565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061087d611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109395782811015610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b90612c1d565b60405180910390fd5b61093885610930611b4d565b858403611b55565b5b610944858585611d1e565b60019150509392505050565b60006012905090565b60006109fb610966611b4d565b848460016000610974611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109f69190612c6c565b611b55565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b610a8f611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612cec565b60405180910390fd5b80600b819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b600b54604051610b569190612936565b60405180910390a150565b610b69611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612cec565b60405180910390fd5b8160098190555080600a819055505050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c60611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610db8611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90612cec565b60405180910390fd5b806009819055507f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da9600954604051610e7f9190612936565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ee990612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1590612b7a565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b5050505050905090565b60008060016000610f7b611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90612d7e565b60405180910390fd5b61104c611043611b4d565b85858403611b55565b600191505092915050565b600061106b611064611b4d565b8484611d1e565b6001905092915050565b61107d611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390612cec565b60405180910390fd5b620f4240611118610827565b6111229190612dcd565b8111611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90612e70565b60405180910390fd5b80600d819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600d5460405161119b9190612936565b60405180910390a150565b6111ae611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612cec565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490612f02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390612f94565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516113ce91906129ea565b60405180910390a150565b6113e1611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612cec565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990613026565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161159f9190612892565b60405180910390a25050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b611646611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90612cec565b60405180910390fd5b80600a819055507fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb7600a5460405161170d9190612936565b60405180910390a150565b611720611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690612cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611815906130b8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e6611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90612cec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061314a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4557611a40473373ffffffffffffffffffffffffffffffffffffffff166120be90919063ffffffff16565b611b4a565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a8591906129ea565b602060405180830381865afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac6919061317f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611b039291906131ac565b6020604051808303816000875af1158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4691906131ea565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90613289565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061331b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d119190612936565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d84906133ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df39061343f565b60405180910390fd5b60008103611e1557611e10838360006121b2565b6120b9565b6000611e2030610c10565b9050600081118015611e3f5750600e60009054906101000a900460ff16155b8015611e985750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611edd576001600e60006101000a81548160ff021916908315150217905550611ec181612431565b6000600e60006101000a81548160ff0219169083151502179055505b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f805750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611f975750600e60009054906101000a900460ff165b15611fa5576000905061206b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361200457600954905061206a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361206357600a549050612069565b600b5490505b5b5b60008111156120ab57600060648285612084919061345f565b61208e9190612dcd565b9050808461209c91906134a1565b93506120a98630836121b2565b505b6120b68585856121b2565b50505b505050565b80471015612101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f890613521565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161212790613572565b60006040518083038185875af1925050503d8060008114612164576040519150601f19603f3d011682016040523d82523d6000602084013e612169565b606091505b50509050806121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906135f9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612218906133ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061343f565b60405180910390fd5b61229b8383836126e2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123189061368b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b49190612c6c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124189190612936565b60405180910390a361242b8484846126e7565b50505050565b60004790506000600267ffffffffffffffff811115612453576124526136ab565b5b6040519080825280602002602001820160405280156124815781602001602082028036833780820191505090505b5090503081600081518110612499576124986136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612540573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612564919061371e565b81600181518110612578576125776136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401612616959493929190613844565b600060405180830381600087803b15801561263057600080fd5b505af1158015612644573d6000803e3d6000fd5b505050506000824761265691906134a1565b90506126a381600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120be90919063ffffffff16565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299984826040516126d492919061389e565b60405180910390a150505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272657808201518184015260208101905061270b565b60008484015250505050565b6000601f19601f8301169050919050565b600061274e826126ec565b61275881856126f7565b9350612768818560208601612708565b61277181612732565b840191505092915050565b600060208201905081810360008301526127968184612743565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127ce826127a3565b9050919050565b6127de816127c3565b81146127e957600080fd5b50565b6000813590506127fb816127d5565b92915050565b6000819050919050565b61281481612801565b811461281f57600080fd5b50565b6000813590506128318161280b565b92915050565b6000806040838503121561284e5761284d61279e565b5b600061285c858286016127ec565b925050602061286d85828601612822565b9150509250929050565b60008115159050919050565b61288c81612877565b82525050565b60006020820190506128a76000830184612883565b92915050565b6000819050919050565b60006128d26128cd6128c8846127a3565b6128ad565b6127a3565b9050919050565b60006128e4826128b7565b9050919050565b60006128f6826128d9565b9050919050565b612906816128eb565b82525050565b600060208201905061292160008301846128fd565b92915050565b61293081612801565b82525050565b600060208201905061294b6000830184612927565b92915050565b60008060006060848603121561296a5761296961279e565b5b6000612978868287016127ec565b9350506020612989868287016127ec565b925050604061299a86828701612822565b9150509250925092565b600060ff82169050919050565b6129ba816129a4565b82525050565b60006020820190506129d560008301846129b1565b92915050565b6129e4816127c3565b82525050565b60006020820190506129ff60008301846129db565b92915050565b600060208284031215612a1b57612a1a61279e565b5b6000612a29848285016127ec565b91505092915050565b600060208284031215612a4857612a4761279e565b5b6000612a5684828501612822565b91505092915050565b60008060408385031215612a7657612a7561279e565b5b6000612a8485828601612822565b9250506020612a9585828601612822565b9150509250929050565b612aa881612877565b8114612ab357600080fd5b50565b600081359050612ac581612a9f565b92915050565b60008060408385031215612ae257612ae161279e565b5b6000612af0858286016127ec565b9250506020612b0185828601612ab6565b9150509250929050565b60008060408385031215612b2257612b2161279e565b5b6000612b30858286016127ec565b9250506020612b41858286016127ec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9257607f821691505b602082108103612ba557612ba4612b4b565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612c076028836126f7565b9150612c1282612bab565b604082019050919050565b60006020820190508181036000830152612c3681612bfa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c7782612801565b9150612c8283612801565b9250828201905080821115612c9a57612c99612c3d565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cd66020836126f7565b9150612ce182612ca0565b602082019050919050565b60006020820190508181036000830152612d0581612cc9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612d686025836126f7565b9150612d7382612d0c565b604082019050919050565b60006020820190508181036000830152612d9781612d5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612dd882612801565b9150612de383612801565b925082612df357612df2612d9e565b5b828204905092915050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000612e5a603f836126f7565b9150612e6582612dfe565b604082019050919050565b60006020820190508181036000830152612e8981612e4d565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000612eec6028836126f7565b9150612ef782612e90565b604082019050919050565b60006020820190508181036000830152612f1b81612edf565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612f7e602b836126f7565b9150612f8982612f22565b604082019050919050565b60006020820190508181036000830152612fad81612f71565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613010602a836126f7565b915061301b82612fb4565b604082019050919050565b6000602082019050818103600083015261303f81613003565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130a26026836126f7565b91506130ad82613046565b604082019050919050565b600060208201905081810360008301526130d181613095565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b60006131346037836126f7565b915061313f826130d8565b604082019050919050565b6000602082019050818103600083015261316381613127565b9050919050565b6000815190506131798161280b565b92915050565b6000602082840312156131955761319461279e565b5b60006131a38482850161316a565b91505092915050565b60006040820190506131c160008301856129db565b6131ce6020830184612927565b9392505050565b6000815190506131e481612a9f565b92915050565b600060208284031215613200576131ff61279e565b5b600061320e848285016131d5565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132736024836126f7565b915061327e82613217565b604082019050919050565b600060208201905081810360008301526132a281613266565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133056022836126f7565b9150613310826132a9565b604082019050919050565b60006020820190508181036000830152613334816132f8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006133976025836126f7565b91506133a28261333b565b604082019050919050565b600060208201905081810360008301526133c68161338a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134296023836126f7565b9150613434826133cd565b604082019050919050565b600060208201905081810360008301526134588161341c565b9050919050565b600061346a82612801565b915061347583612801565b925082820261348381612801565b9150828204841483151761349a57613499612c3d565b5b5092915050565b60006134ac82612801565b91506134b783612801565b92508282039050818111156134cf576134ce612c3d565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061350b601d836126f7565b9150613516826134d5565b602082019050919050565b6000602082019050818103600083015261353a816134fe565b9050919050565b600081905092915050565b50565b600061355c600083613541565b91506135678261354c565b600082019050919050565b600061357d8261354f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006135e3603a836126f7565b91506135ee82613587565b604082019050919050565b60006020820190508181036000830152613612816135d6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006136756026836126f7565b915061368082613619565b604082019050919050565b600060208201905081810360008301526136a481613668565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613718816127d5565b92915050565b6000602082840312156137345761373361279e565b5b600061374284828501613709565b91505092915050565b6000819050919050565b600061377061376b6137668461374b565b6128ad565b612801565b9050919050565b61378081613755565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137bb816127c3565b82525050565b60006137cd83836137b2565b60208301905092915050565b6000602082019050919050565b60006137f182613786565b6137fb8185613791565b9350613806836137a2565b8060005b8381101561383757815161381e88826137c1565b9750613829836137d9565b92505060018101905061380a565b5085935050505092915050565b600060a0820190506138596000830188612927565b6138666020830187613777565b818103604083015261387881866137e6565b905061388760608301856129db565b6138946080830184612927565b9695505050505050565b60006040820190506138b36000830185612927565b6138c06020830184612927565b939250505056fea264697066735822122045cee6f77246d67fc48c9aa78d3381295f06e6716fdb8bb974c0be9a7c6add7d64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c806371fc4688116100f7578063bb85c6d111610095578063e2f4560511610064578063e2f45605146106ab578063eba4c333146106d6578063f2fde38b146106ff578063f9d0831a14610728576101d8565b8063bb85c6d1146105f1578063c02466681461061a578063dc4c7dbc14610643578063dd62ed3e1461066e576101d8565b806395d89b41116100d157806395d89b4114610523578063a457c2d71461054e578063a9059cbb1461058b578063afa4f3b2146105c8576101d8565b806371fc4688146104a457806375f0a874146104cd5780638da5cb5b146104f8576101d8565b806349bd5a5e1161016f5780636db794371161013e5780636db79437146103fc578063702509fd1461042557806370a0823114610450578063715018a61461048d576101d8565b806349bd5a5e146103405780634fbee1931461036b5780635fc2e596146103a857806364c98c44146103d3576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b578063313ce567146102d85780633950935114610303576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610751565b6040516101ff919061277c565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612837565b6107e3565b60405161023c9190612892565b60405180910390f35b34801561025157600080fd5b5061025a610801565b604051610267919061290c565b60405180910390f35b34801561027c57600080fd5b50610285610827565b6040516102929190612936565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612951565b610831565b6040516102cf9190612892565b60405180910390f35b3480156102e457600080fd5b506102ed610950565b6040516102fa91906129c0565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190612837565b610959565b6040516103379190612892565b60405180910390f35b34801561034c57600080fd5b50610355610a05565b60405161036291906129ea565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612a05565b610a2b565b60405161039f9190612892565b60405180910390f35b3480156103b457600080fd5b506103bd610a81565b6040516103ca9190612936565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190612a32565b610a87565b005b34801561040857600080fd5b50610423600480360381019061041e9190612a5f565b610b61565b005b34801561043157600080fd5b5061043a610c0a565b6040516104479190612936565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612a05565b610c10565b6040516104849190612936565b60405180910390f35b34801561049957600080fd5b506104a2610c58565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190612a32565b610db0565b005b3480156104d957600080fd5b506104e2610e8a565b6040516104ef91906129ea565b60405180910390f35b34801561050457600080fd5b5061050d610eb0565b60405161051a91906129ea565b60405180910390f35b34801561052f57600080fd5b50610538610eda565b604051610545919061277c565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190612837565b610f6c565b6040516105829190612892565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad9190612837565b611057565b6040516105bf9190612892565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612a32565b611075565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612a05565b6111a6565b005b34801561062657600080fd5b50610641600480360381019061063c9190612acb565b6113d9565b005b34801561064f57600080fd5b506106586115ab565b6040516106659190612936565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612b0b565b6115b1565b6040516106a29190612936565b60405180910390f35b3480156106b757600080fd5b506106c0611638565b6040516106cd9190612936565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190612a32565b61163e565b005b34801561070b57600080fd5b5061072660048036038101906107219190612a05565b611718565b005b34801561073457600080fd5b5061074f600480360381019061074a9190612a05565b6118de565b005b60606003805461076090612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90612b7a565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f0611b4d565b8484611b55565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061087d611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109395782811015610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b90612c1d565b60405180910390fd5b61093885610930611b4d565b858403611b55565b5b610944858585611d1e565b60019150509392505050565b60006012905090565b60006109fb610966611b4d565b848460016000610974611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109f69190612c6c565b611b55565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b610a8f611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612cec565b60405180910390fd5b80600b819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b600b54604051610b569190612936565b60405180910390a150565b610b69611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612cec565b60405180910390fd5b8160098190555080600a819055505050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c60611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610db8611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90612cec565b60405180910390fd5b806009819055507f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da9600954604051610e7f9190612936565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ee990612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1590612b7a565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b5050505050905090565b60008060016000610f7b611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90612d7e565b60405180910390fd5b61104c611043611b4d565b85858403611b55565b600191505092915050565b600061106b611064611b4d565b8484611d1e565b6001905092915050565b61107d611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390612cec565b60405180910390fd5b620f4240611118610827565b6111229190612dcd565b8111611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90612e70565b60405180910390fd5b80600d819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600d5460405161119b9190612936565b60405180910390a150565b6111ae611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612cec565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490612f02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390612f94565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516113ce91906129ea565b60405180910390a150565b6113e1611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612cec565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990613026565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161159f9190612892565b60405180910390a25050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b611646611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90612cec565b60405180910390fd5b80600a819055507fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb7600a5460405161170d9190612936565b60405180910390a150565b611720611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690612cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611815906130b8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e6611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90612cec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061314a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4557611a40473373ffffffffffffffffffffffffffffffffffffffff166120be90919063ffffffff16565b611b4a565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a8591906129ea565b602060405180830381865afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac6919061317f565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611b039291906131ac565b6020604051808303816000875af1158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4691906131ea565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90613289565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061331b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d119190612936565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d84906133ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df39061343f565b60405180910390fd5b60008103611e1557611e10838360006121b2565b6120b9565b6000611e2030610c10565b9050600081118015611e3f5750600e60009054906101000a900460ff16155b8015611e985750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611edd576001600e60006101000a81548160ff021916908315150217905550611ec181612431565b6000600e60006101000a81548160ff0219169083151502179055505b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f805750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611f975750600e60009054906101000a900460ff165b15611fa5576000905061206b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361200457600954905061206a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361206357600a549050612069565b600b5490505b5b5b60008111156120ab57600060648285612084919061345f565b61208e9190612dcd565b9050808461209c91906134a1565b93506120a98630836121b2565b505b6120b68585856121b2565b50505b505050565b80471015612101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f890613521565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161212790613572565b60006040518083038185875af1925050503d8060008114612164576040519150601f19603f3d011682016040523d82523d6000602084013e612169565b606091505b50509050806121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906135f9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612218906133ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061343f565b60405180910390fd5b61229b8383836126e2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123189061368b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b49190612c6c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124189190612936565b60405180910390a361242b8484846126e7565b50505050565b60004790506000600267ffffffffffffffff811115612453576124526136ab565b5b6040519080825280602002602001820160405280156124815781602001602082028036833780820191505090505b5090503081600081518110612499576124986136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612540573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612564919061371e565b81600181518110612578576125776136da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401612616959493929190613844565b600060405180830381600087803b15801561263057600080fd5b505af1158015612644573d6000803e3d6000fd5b505050506000824761265691906134a1565b90506126a381600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120be90919063ffffffff16565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299984826040516126d492919061389e565b60405180910390a150505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272657808201518184015260208101905061270b565b60008484015250505050565b6000601f19601f8301169050919050565b600061274e826126ec565b61275881856126f7565b9350612768818560208601612708565b61277181612732565b840191505092915050565b600060208201905081810360008301526127968184612743565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127ce826127a3565b9050919050565b6127de816127c3565b81146127e957600080fd5b50565b6000813590506127fb816127d5565b92915050565b6000819050919050565b61281481612801565b811461281f57600080fd5b50565b6000813590506128318161280b565b92915050565b6000806040838503121561284e5761284d61279e565b5b600061285c858286016127ec565b925050602061286d85828601612822565b9150509250929050565b60008115159050919050565b61288c81612877565b82525050565b60006020820190506128a76000830184612883565b92915050565b6000819050919050565b60006128d26128cd6128c8846127a3565b6128ad565b6127a3565b9050919050565b60006128e4826128b7565b9050919050565b60006128f6826128d9565b9050919050565b612906816128eb565b82525050565b600060208201905061292160008301846128fd565b92915050565b61293081612801565b82525050565b600060208201905061294b6000830184612927565b92915050565b60008060006060848603121561296a5761296961279e565b5b6000612978868287016127ec565b9350506020612989868287016127ec565b925050604061299a86828701612822565b9150509250925092565b600060ff82169050919050565b6129ba816129a4565b82525050565b60006020820190506129d560008301846129b1565b92915050565b6129e4816127c3565b82525050565b60006020820190506129ff60008301846129db565b92915050565b600060208284031215612a1b57612a1a61279e565b5b6000612a29848285016127ec565b91505092915050565b600060208284031215612a4857612a4761279e565b5b6000612a5684828501612822565b91505092915050565b60008060408385031215612a7657612a7561279e565b5b6000612a8485828601612822565b9250506020612a9585828601612822565b9150509250929050565b612aa881612877565b8114612ab357600080fd5b50565b600081359050612ac581612a9f565b92915050565b60008060408385031215612ae257612ae161279e565b5b6000612af0858286016127ec565b9250506020612b0185828601612ab6565b9150509250929050565b60008060408385031215612b2257612b2161279e565b5b6000612b30858286016127ec565b9250506020612b41858286016127ec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9257607f821691505b602082108103612ba557612ba4612b4b565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612c076028836126f7565b9150612c1282612bab565b604082019050919050565b60006020820190508181036000830152612c3681612bfa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c7782612801565b9150612c8283612801565b9250828201905080821115612c9a57612c99612c3d565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cd66020836126f7565b9150612ce182612ca0565b602082019050919050565b60006020820190508181036000830152612d0581612cc9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612d686025836126f7565b9150612d7382612d0c565b604082019050919050565b60006020820190508181036000830152612d9781612d5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612dd882612801565b9150612de383612801565b925082612df357612df2612d9e565b5b828204905092915050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000612e5a603f836126f7565b9150612e6582612dfe565b604082019050919050565b60006020820190508181036000830152612e8981612e4d565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000612eec6028836126f7565b9150612ef782612e90565b604082019050919050565b60006020820190508181036000830152612f1b81612edf565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612f7e602b836126f7565b9150612f8982612f22565b604082019050919050565b60006020820190508181036000830152612fad81612f71565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613010602a836126f7565b915061301b82612fb4565b604082019050919050565b6000602082019050818103600083015261303f81613003565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130a26026836126f7565b91506130ad82613046565b604082019050919050565b600060208201905081810360008301526130d181613095565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b60006131346037836126f7565b915061313f826130d8565b604082019050919050565b6000602082019050818103600083015261316381613127565b9050919050565b6000815190506131798161280b565b92915050565b6000602082840312156131955761319461279e565b5b60006131a38482850161316a565b91505092915050565b60006040820190506131c160008301856129db565b6131ce6020830184612927565b9392505050565b6000815190506131e481612a9f565b92915050565b600060208284031215613200576131ff61279e565b5b600061320e848285016131d5565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132736024836126f7565b915061327e82613217565b604082019050919050565b600060208201905081810360008301526132a281613266565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133056022836126f7565b9150613310826132a9565b604082019050919050565b60006020820190508181036000830152613334816132f8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006133976025836126f7565b91506133a28261333b565b604082019050919050565b600060208201905081810360008301526133c68161338a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134296023836126f7565b9150613434826133cd565b604082019050919050565b600060208201905081810360008301526134588161341c565b9050919050565b600061346a82612801565b915061347583612801565b925082820261348381612801565b9150828204841483151761349a57613499612c3d565b5b5092915050565b60006134ac82612801565b91506134b783612801565b92508282039050818111156134cf576134ce612c3d565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061350b601d836126f7565b9150613516826134d5565b602082019050919050565b6000602082019050818103600083015261353a816134fe565b9050919050565b600081905092915050565b50565b600061355c600083613541565b91506135678261354c565b600082019050919050565b600061357d8261354f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006135e3603a836126f7565b91506135ee82613587565b604082019050919050565b60006020820190508181036000830152613612816135d6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006136756026836126f7565b915061368082613619565b604082019050919050565b600060208201905081810360008301526136a481613668565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613718816127d5565b92915050565b6000602082840312156137345761373361279e565b5b600061374284828501613709565b91505092915050565b6000819050919050565b600061377061376b6137668461374b565b6128ad565b612801565b9050919050565b61378081613755565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137bb816127c3565b82525050565b60006137cd83836137b2565b60208301905092915050565b6000602082019050919050565b60006137f182613786565b6137fb8185613791565b9350613806836137a2565b8060005b8381101561383757815161381e88826137c1565b9750613829836137d9565b92505060018101905061380a565b5085935050505092915050565b600060a0820190506138596000830188612927565b6138666020830187613777565b818103604083015261387881866137e6565b905061388760608301856129db565b6138946080830184612927565b9695505050505050565b60006040820190506138b36000830185612927565b6138c06020830184612927565b939250505056fea264697066735822122045cee6f77246d67fc48c9aa78d3381295f06e6716fdb8bb974c0be9a7c6add7d64736f6c63430008110033

Deployed Bytecode Sourcemap

24611:6476:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19896:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20810:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24733:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20217:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20987:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20116:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21568:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24781:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27400:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24881:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28118:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27905:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24964:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20333:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19083:148;;;;;;;;;;;;;:::i;:::-;;27533:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25014:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18869:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20004:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21791:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20468:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30129:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28368:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27102:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24921:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20651:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25054:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27716:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19239:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26629:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19896:100;19950:13;19983:5;19976:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19896:100;:::o;20810:169::-;20893:4;20910:39;20919:12;:10;:12::i;:::-;20933:7;20942:6;20910:8;:39::i;:::-;20967:4;20960:11;;20810:169;;;;:::o;24733:41::-;;;;;;;;;;;;;:::o;20217:108::-;20278:7;20305:12;;20298:19;;20217:108;:::o;20987:573::-;21127:4;21144:24;21171:11;:19;21183:6;21171:19;;;;;;;;;;;;;;;:33;21191:12;:10;:12::i;:::-;21171:33;;;;;;;;;;;;;;;;21144:60;;21239:17;21219:16;:37;21215:265;;21301:6;21281:16;:26;;21273:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21396:57;21405:6;21413:12;:10;:12::i;:::-;21446:6;21427:16;:25;21396:8;:57::i;:::-;21215:265;21492:36;21502:6;21510:9;21521:6;21492:9;:36::i;:::-;21548:4;21541:11;;;20987:573;;;;;:::o;20116:93::-;20174:5;20199:2;20192:9;;20116:93;:::o;21568:215::-;21656:4;21673:80;21682:12;:10;:12::i;:::-;21696:7;21742:10;21705:11;:25;21717:12;:10;:12::i;:::-;21705:25;;;;;;;;;;;;;;;:34;21731:7;21705:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;21673:8;:80::i;:::-;21771:4;21764:11;;21568:215;;;;:::o;24781:29::-;;;;;;;;;;;;;:::o;27400:125::-;27465:4;27489:19;:28;27509:7;27489:28;;;;;;;;;;;;;;;;;;;;;;;;;27482:35;;27400:125;;;:::o;24881:33::-;;;;:::o;28118:242::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28252:26:::1;28224:25;:54;;;;28294:58;28326:25;;28294:58;;;;;;:::i;:::-;;;;;;;;28118:242:::0;:::o;27905:205::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28033:18:::1;28013:17;:38;;;;28083:19;28062:18;:40;;;;27905:205:::0;;:::o;24964:41::-;;;;:::o;20333:127::-;20407:7;20434:9;:18;20444:7;20434:18;;;;;;;;;;;;;;;;20427:25;;20333:127;;;:::o;19083:148::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19190:1:::1;19153:40;;19174:6;;;;;;;;;;;19153:40;;;;;;;;;;;;19221:1;19204:6;;:19;;;;;;;;;;;;;;;;;;19083:148::o:0;27533:175::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27634:18:::1;27614:17;:38;;;;27668:32;27682:17;;27668:32;;;;;;:::i;:::-;;;;;;;;27533:175:::0;:::o;25014:31::-;;;;;;;;;;;;;:::o;18869:79::-;18907:7;18934:6;;;;;;;;;;;18927:13;;18869:79;:::o;20004:104::-;20060:13;20093:7;20086:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20004:104;:::o;21791:413::-;21884:4;21901:24;21928:11;:25;21940:12;:10;:12::i;:::-;21928:25;;;;;;;;;;;;;;;:34;21954:7;21928:34;;;;;;;;;;;;;;;;21901:61;;22001:15;21981:16;:35;;21973:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22094:67;22103:12;:10;:12::i;:::-;22117:7;22145:15;22126:16;:34;22094:8;:67::i;:::-;22192:4;22185:11;;;21791:413;;;;:::o;20468:175::-;20554:4;20571:42;20581:12;:10;:12::i;:::-;20595:9;20606:6;20571:9;:42::i;:::-;20631:4;20624:11;;20468:175;;;;:::o;30129:300::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30244:7:::1;30228:13;:11;:13::i;:::-;:23;;;;:::i;:::-;30216:9;:35;30208:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30351:9;30330:18;:30;;;;30376:45;30402:18;;30376:45;;;;;;:::i;:::-;;;;;;;;30129:300:::0;:::o;28368:377::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28482:15:::1;;;;;;;;;;;28462:35;;:16;:35;;::::0;28454:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28588:1;28560:30;;:16;:30;;::::0;28552:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28666:16;28648:15;;:34;;;;;;;;;;;;;;;;;;28698:39;28721:15;;;;;;;;;;;28698:39;;;;;;:::i;:::-;;;;;;;;28368:377:::0;:::o;27102:290::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27228:8:::1;27196:40;;:19;:28;27216:7;27196:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;27188:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27324:8;27293:19;:28;27313:7;27293:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27366:7;27350:34;;;27375:8;27350:34;;;;;;:::i;:::-;;;;;;;;27102:290:::0;;:::o;24921:34::-;;;;:::o;20651:151::-;20740:7;20767:11;:18;20779:5;20767:18;;;;;;;;;;;;;;;:27;20786:7;20767:27;;;;;;;;;;;;;;;;20760:34;;20651:151;;;;:::o;25054:34::-;;;;:::o;27716:181::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27820:19:::1;27799:18;:40;;;;27855:34;27870:18;;27855:34;;;;;;:::i;:::-;;;;;;;;27716:181:::0;:::o;19239:244::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19348:1:::1;19328:22;;:8;:22;;::::0;19320:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19438:8;19409:38;;19430:6;;;;;;;;;;;19409:38;;;;;;;;;;;;19467:8;19458:6;;:17;;;;;;;;;;;;;;;;;;19239:244:::0;:::o;26629:465::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26725:4:::1;26708:22;;:5;:22;;::::0;26700:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26822:3;26805:21;;:5;:21;;::::0;26801:127:::1;;26843:52;26873:21;26851:10;26843:29;;;;:52;;;;:::i;:::-;26910:7;;26801:127;26938:17;26965:5;26938:33;;26982:15;27000:10;:20;;;27029:4;27000:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26982:53;;27046:10;:19;;;27066:10;27078:7;27046:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26689:405;;19066:1;26629:465:::0;:::o;18192:98::-;18245:7;18272:10;18265:17;;18192:98;:::o;23959:380::-;24112:1;24095:19;;:5;:19;;;24087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24193:1;24174:21;;:7;:21;;;24166:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24277:6;24247:11;:18;24259:5;24247:18;;;;;;;;;;;;;;;:27;24266:7;24247:27;;;;;;;;;;;;;;;:36;;;;24315:7;24299:32;;24308:5;24299:32;;;24324:6;24299:32;;;;;;:::i;:::-;;;;;;;;23959:380;;;:::o;28807:1264::-;28920:1;28904:18;;:4;:18;;;28896:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28997:1;28983:16;;:2;:16;;;28975:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29073:1;29063:6;:11;29059:93;;29091:28;29107:4;29113:2;29117:1;29091:15;:28::i;:::-;29134:7;;29059:93;29158:28;29189:24;29207:4;29189:9;:24::i;:::-;29158:55;;29253:1;29230:20;:24;:37;;;;;29259:8;;;;;;;;;;;29258:9;29230:37;:60;;;;;29277:13;;;;;;;;;;;29271:19;;:2;:19;;;29230:60;29226:196;;;29318:4;29307:8;;:15;;;;;;;;;;;;;;;;;;29337:42;29358:20;29337;:42::i;:::-;29405:5;29394:8;;:16;;;;;;;;;;;;;;;;;;29226:196;29434:18;29467:19;:25;29487:4;29467:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29496:19;:23;29516:2;29496:23;;;;;;;;;;;;;;;;;;;;;;;;;29467:52;:63;;;;29522:8;;;;;;;;;;;29467:63;29463:360;;;29560:1;29547:14;;29463:360;;;29591:13;;;;;;;;;;;29583:21;;:4;:21;;;29579:244;;29634:17;;29621:30;;29579:244;;;29679:13;;;;;;;;;;;29673:19;;:2;:19;;;29669:154;;29722:18;;29709:31;;29669:154;;;29786:25;;29773:38;;29669:154;29579:244;29463:360;29852:1;29839:10;:14;29835:183;;;29870:12;29909:3;29895:10;29886:6;:19;;;;:::i;:::-;29885:27;;;;:::i;:::-;29870:42;;29945:4;29936:6;:13;;;;:::i;:::-;29927:22;;29964:42;29980:4;29994;30001;29964:15;:42::i;:::-;29855:163;29835:183;30030:33;30046:4;30052:2;30056:6;30030:15;:33::i;:::-;28885:1186;;28807:1264;;;;:::o;11225:317::-;11340:6;11315:21;:31;;11307:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11394:12;11412:9;:14;;11434:6;11412:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11393:52;;;11464:7;11456:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;11296:246;11225:317;;:::o;22212:733::-;22370:1;22352:20;;:6;:20;;;22344:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22454:1;22433:23;;:9;:23;;;22425:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22509:47;22530:6;22538:9;22549:6;22509:20;:47::i;:::-;22569:21;22593:9;:17;22603:6;22593:17;;;;;;;;;;;;;;;;22569:41;;22646:6;22629:13;:23;;22621:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22767:6;22751:13;:22;22731:9;:17;22741:6;22731:17;;;;;;;;;;;;;;;:42;;;;22819:6;22795:9;:20;22805:9;22795:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;22860:9;22843:35;;22852:6;22843:35;;;22871:6;22843:35;;;;;;:::i;:::-;;;;;;;;22891:46;22911:6;22919:9;22930:6;22891:19;:46::i;:::-;22333:612;22212:733;;;:::o;30437:647::-;30507:22;30532:21;30507:46;;30566:21;30604:1;30590:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30566:40;;30635:4;30617;30622:1;30617:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30661:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30651:4;30656:1;30651:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30696:15;;;;;;;;;;;:66;;;30777:11;30803:1;30819:4;30846;30866:15;30696:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30895:18;30940:14;30916:21;:38;;;;:::i;:::-;30895:59;;30967:46;31002:10;30975:15;;;;;;;;;;;30967:34;;;;:46;;;;:::i;:::-;31031:45;31052:11;31065:10;31031:45;;;;;;;:::i;:::-;;;;;;;;30496:588;;;30437:647;:::o;24347:125::-;;;;:::o;24480:124::-;;;;:::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:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:118::-;5913:24;5931:5;5913:24;:::i;:::-;5908:3;5901:37;5826:118;;:::o;5950:222::-;6043:4;6081:2;6070:9;6066:18;6058:26;;6094:71;6162:1;6151:9;6147:17;6138:6;6094:71;:::i;:::-;5950:222;;;;:::o;6178:329::-;6237:6;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6178:329;;;;:::o;6513:::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:474::-;6916:6;6924;6973:2;6961:9;6952:7;6948:23;6944:32;6941:119;;;6979:79;;:::i;:::-;6941:119;7099:1;7124:53;7169:7;7160:6;7149:9;7145:22;7124:53;:::i;:::-;7114:63;;7070:117;7226:2;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7197:118;6848:474;;;;;:::o;7328:116::-;7398:21;7413:5;7398:21;:::i;:::-;7391:5;7388:32;7378:60;;7434:1;7431;7424:12;7378:60;7328:116;:::o;7450:133::-;7493:5;7531:6;7518:20;7509:29;;7547:30;7571:5;7547:30;:::i;:::-;7450:133;;;;:::o;7589:468::-;7654:6;7662;7711:2;7699:9;7690:7;7686:23;7682:32;7679:119;;;7717:79;;:::i;:::-;7679:119;7837:1;7862:53;7907:7;7898:6;7887:9;7883:22;7862:53;:::i;:::-;7852:63;;7808:117;7964:2;7990:50;8032:7;8023:6;8012:9;8008:22;7990:50;:::i;:::-;7980:60;;7935:115;7589:468;;;;;:::o;8063:474::-;8131:6;8139;8188:2;8176:9;8167:7;8163:23;8159:32;8156:119;;;8194:79;;:::i;:::-;8156:119;8314:1;8339:53;8384:7;8375:6;8364:9;8360:22;8339:53;:::i;:::-;8329:63;;8285:117;8441:2;8467:53;8512:7;8503:6;8492:9;8488:22;8467:53;:::i;:::-;8457:63;;8412:118;8063:474;;;;;:::o;8543:180::-;8591:77;8588:1;8581:88;8688:4;8685:1;8678:15;8712:4;8709:1;8702:15;8729:320;8773:6;8810:1;8804:4;8800:12;8790:22;;8857:1;8851:4;8847:12;8878:18;8868:81;;8934:4;8926:6;8922:17;8912:27;;8868:81;8996:2;8988:6;8985:14;8965:18;8962:38;8959:84;;9015:18;;:::i;:::-;8959:84;8780:269;8729:320;;;:::o;9055:227::-;9195:34;9191:1;9183:6;9179:14;9172:58;9264:10;9259:2;9251:6;9247:15;9240:35;9055:227;:::o;9288:366::-;9430:3;9451:67;9515:2;9510:3;9451:67;:::i;:::-;9444:74;;9527:93;9616:3;9527:93;:::i;:::-;9645:2;9640:3;9636:12;9629:19;;9288:366;;;:::o;9660:419::-;9826:4;9864:2;9853:9;9849:18;9841:26;;9913:9;9907:4;9903:20;9899:1;9888:9;9884:17;9877:47;9941:131;10067:4;9941:131;:::i;:::-;9933:139;;9660:419;;;:::o;10085:180::-;10133:77;10130:1;10123:88;10230:4;10227:1;10220:15;10254:4;10251:1;10244:15;10271:191;10311:3;10330:20;10348:1;10330:20;:::i;:::-;10325:25;;10364:20;10382:1;10364:20;:::i;:::-;10359:25;;10407:1;10404;10400:9;10393:16;;10428:3;10425:1;10422:10;10419:36;;;10435:18;;:::i;:::-;10419:36;10271:191;;;;:::o;10468:182::-;10608:34;10604:1;10596:6;10592:14;10585:58;10468:182;:::o;10656:366::-;10798:3;10819:67;10883:2;10878:3;10819:67;:::i;:::-;10812:74;;10895:93;10984:3;10895:93;:::i;:::-;11013:2;11008:3;11004:12;10997:19;;10656:366;;;:::o;11028:419::-;11194:4;11232:2;11221:9;11217:18;11209:26;;11281:9;11275:4;11271:20;11267:1;11256:9;11252:17;11245:47;11309:131;11435:4;11309:131;:::i;:::-;11301:139;;11028:419;;;:::o;11453:224::-;11593:34;11589:1;11581:6;11577:14;11570:58;11662:7;11657:2;11649:6;11645:15;11638:32;11453:224;:::o;11683:366::-;11825:3;11846:67;11910:2;11905:3;11846:67;:::i;:::-;11839:74;;11922:93;12011:3;11922:93;:::i;:::-;12040:2;12035:3;12031:12;12024:19;;11683:366;;;:::o;12055:419::-;12221:4;12259:2;12248:9;12244:18;12236:26;;12308:9;12302:4;12298:20;12294:1;12283:9;12279:17;12272:47;12336:131;12462:4;12336:131;:::i;:::-;12328:139;;12055:419;;;:::o;12480:180::-;12528:77;12525:1;12518:88;12625:4;12622:1;12615:15;12649:4;12646:1;12639:15;12666:185;12706:1;12723:20;12741:1;12723:20;:::i;:::-;12718:25;;12757:20;12775:1;12757:20;:::i;:::-;12752:25;;12796:1;12786:35;;12801:18;;:::i;:::-;12786:35;12843:1;12840;12836:9;12831:14;;12666:185;;;;:::o;12857:250::-;12997:34;12993:1;12985:6;12981:14;12974:58;13066:33;13061:2;13053:6;13049:15;13042:58;12857:250;:::o;13113:366::-;13255:3;13276:67;13340:2;13335:3;13276:67;:::i;:::-;13269:74;;13352:93;13441:3;13352:93;:::i;:::-;13470:2;13465:3;13461:12;13454:19;;13113:366;;;:::o;13485:419::-;13651:4;13689:2;13678:9;13674:18;13666:26;;13738:9;13732:4;13728:20;13724:1;13713:9;13709:17;13702:47;13766:131;13892:4;13766:131;:::i;:::-;13758:139;;13485:419;;;:::o;13910:227::-;14050:34;14046:1;14038:6;14034:14;14027:58;14119:10;14114:2;14106:6;14102:15;14095:35;13910:227;:::o;14143:366::-;14285:3;14306:67;14370:2;14365:3;14306:67;:::i;:::-;14299:74;;14382:93;14471:3;14382:93;:::i;:::-;14500:2;14495:3;14491:12;14484:19;;14143:366;;;:::o;14515:419::-;14681:4;14719:2;14708:9;14704:18;14696:26;;14768:9;14762:4;14758:20;14754:1;14743:9;14739:17;14732:47;14796:131;14922:4;14796:131;:::i;:::-;14788:139;;14515:419;;;:::o;14940:230::-;15080:34;15076:1;15068:6;15064:14;15057:58;15149:13;15144:2;15136:6;15132:15;15125:38;14940:230;:::o;15176:366::-;15318:3;15339:67;15403:2;15398:3;15339:67;:::i;:::-;15332:74;;15415:93;15504:3;15415:93;:::i;:::-;15533:2;15528:3;15524:12;15517:19;;15176:366;;;:::o;15548:419::-;15714:4;15752:2;15741:9;15737:18;15729:26;;15801:9;15795:4;15791:20;15787:1;15776:9;15772:17;15765:47;15829:131;15955:4;15829:131;:::i;:::-;15821:139;;15548:419;;;:::o;15973:229::-;16113:34;16109:1;16101:6;16097:14;16090:58;16182:12;16177:2;16169:6;16165:15;16158:37;15973:229;:::o;16208:366::-;16350:3;16371:67;16435:2;16430:3;16371:67;:::i;:::-;16364:74;;16447:93;16536:3;16447:93;:::i;:::-;16565:2;16560:3;16556:12;16549:19;;16208:366;;;:::o;16580:419::-;16746:4;16784:2;16773:9;16769:18;16761:26;;16833:9;16827:4;16823:20;16819:1;16808:9;16804:17;16797:47;16861:131;16987:4;16861:131;:::i;:::-;16853:139;;16580:419;;;:::o;17005:225::-;17145:34;17141:1;17133:6;17129:14;17122:58;17214:8;17209:2;17201:6;17197:15;17190:33;17005:225;:::o;17236:366::-;17378:3;17399:67;17463:2;17458:3;17399:67;:::i;:::-;17392:74;;17475:93;17564:3;17475:93;:::i;:::-;17593:2;17588:3;17584:12;17577:19;;17236:366;;;:::o;17608:419::-;17774:4;17812:2;17801:9;17797:18;17789:26;;17861:9;17855:4;17851:20;17847:1;17836:9;17832:17;17825:47;17889:131;18015:4;17889:131;:::i;:::-;17881:139;;17608:419;;;:::o;18033:242::-;18173:34;18169:1;18161:6;18157:14;18150:58;18242:25;18237:2;18229:6;18225:15;18218:50;18033:242;:::o;18281:366::-;18423:3;18444:67;18508:2;18503:3;18444:67;:::i;:::-;18437:74;;18520:93;18609:3;18520:93;:::i;:::-;18638:2;18633:3;18629:12;18622:19;;18281:366;;;:::o;18653:419::-;18819:4;18857:2;18846:9;18842:18;18834:26;;18906:9;18900:4;18896:20;18892:1;18881:9;18877:17;18870:47;18934:131;19060:4;18934:131;:::i;:::-;18926:139;;18653:419;;;:::o;19078:143::-;19135:5;19166:6;19160:13;19151:22;;19182:33;19209:5;19182:33;:::i;:::-;19078:143;;;;:::o;19227:351::-;19297:6;19346:2;19334:9;19325:7;19321:23;19317:32;19314:119;;;19352:79;;:::i;:::-;19314:119;19472:1;19497:64;19553:7;19544:6;19533:9;19529:22;19497:64;:::i;:::-;19487:74;;19443:128;19227:351;;;;:::o;19584:332::-;19705:4;19743:2;19732:9;19728:18;19720:26;;19756:71;19824:1;19813:9;19809:17;19800:6;19756:71;:::i;:::-;19837:72;19905:2;19894:9;19890:18;19881:6;19837:72;:::i;:::-;19584:332;;;;;:::o;19922:137::-;19976:5;20007:6;20001:13;19992:22;;20023:30;20047:5;20023:30;:::i;:::-;19922:137;;;;:::o;20065:345::-;20132:6;20181:2;20169:9;20160:7;20156:23;20152:32;20149:119;;;20187:79;;:::i;:::-;20149:119;20307:1;20332:61;20385:7;20376:6;20365:9;20361:22;20332:61;:::i;:::-;20322:71;;20278:125;20065:345;;;;:::o;20416:223::-;20556:34;20552:1;20544:6;20540:14;20533:58;20625:6;20620:2;20612:6;20608:15;20601:31;20416:223;:::o;20645:366::-;20787:3;20808:67;20872:2;20867:3;20808:67;:::i;:::-;20801:74;;20884:93;20973:3;20884:93;:::i;:::-;21002:2;20997:3;20993:12;20986:19;;20645:366;;;:::o;21017:419::-;21183:4;21221:2;21210:9;21206:18;21198:26;;21270:9;21264:4;21260:20;21256:1;21245:9;21241:17;21234:47;21298:131;21424:4;21298:131;:::i;:::-;21290:139;;21017:419;;;:::o;21442:221::-;21582:34;21578:1;21570:6;21566:14;21559:58;21651:4;21646:2;21638:6;21634:15;21627:29;21442:221;:::o;21669:366::-;21811:3;21832:67;21896:2;21891:3;21832:67;:::i;:::-;21825:74;;21908:93;21997:3;21908:93;:::i;:::-;22026:2;22021:3;22017:12;22010:19;;21669:366;;;:::o;22041:419::-;22207:4;22245:2;22234:9;22230:18;22222:26;;22294:9;22288:4;22284:20;22280:1;22269:9;22265:17;22258:47;22322:131;22448:4;22322:131;:::i;:::-;22314:139;;22041:419;;;:::o;22466:224::-;22606:34;22602:1;22594:6;22590:14;22583:58;22675:7;22670:2;22662:6;22658:15;22651:32;22466:224;:::o;22696:366::-;22838:3;22859:67;22923:2;22918:3;22859:67;:::i;:::-;22852:74;;22935:93;23024:3;22935:93;:::i;:::-;23053:2;23048:3;23044:12;23037:19;;22696:366;;;:::o;23068:419::-;23234:4;23272:2;23261:9;23257:18;23249:26;;23321:9;23315:4;23311:20;23307:1;23296:9;23292:17;23285:47;23349:131;23475:4;23349:131;:::i;:::-;23341:139;;23068:419;;;:::o;23493:222::-;23633:34;23629:1;23621:6;23617:14;23610:58;23702:5;23697:2;23689:6;23685:15;23678:30;23493:222;:::o;23721:366::-;23863:3;23884:67;23948:2;23943:3;23884:67;:::i;:::-;23877:74;;23960:93;24049:3;23960:93;:::i;:::-;24078:2;24073:3;24069:12;24062:19;;23721:366;;;:::o;24093:419::-;24259:4;24297:2;24286:9;24282:18;24274:26;;24346:9;24340:4;24336:20;24332:1;24321:9;24317:17;24310:47;24374:131;24500:4;24374:131;:::i;:::-;24366:139;;24093:419;;;:::o;24518:410::-;24558:7;24581:20;24599:1;24581:20;:::i;:::-;24576:25;;24615:20;24633:1;24615:20;:::i;:::-;24610:25;;24670:1;24667;24663:9;24692:30;24710:11;24692:30;:::i;:::-;24681:41;;24871:1;24862:7;24858:15;24855:1;24852:22;24832:1;24825:9;24805:83;24782:139;;24901:18;;:::i;:::-;24782:139;24566:362;24518:410;;;;:::o;24934:194::-;24974:4;24994:20;25012:1;24994:20;:::i;:::-;24989:25;;25028:20;25046:1;25028:20;:::i;:::-;25023:25;;25072:1;25069;25065:9;25057:17;;25096:1;25090:4;25087:11;25084:37;;;25101:18;;:::i;:::-;25084:37;24934:194;;;;:::o;25134:179::-;25274:31;25270:1;25262:6;25258:14;25251:55;25134:179;:::o;25319:366::-;25461:3;25482:67;25546:2;25541:3;25482:67;:::i;:::-;25475:74;;25558:93;25647:3;25558:93;:::i;:::-;25676:2;25671:3;25667:12;25660:19;;25319:366;;;:::o;25691:419::-;25857:4;25895:2;25884:9;25880:18;25872:26;;25944:9;25938:4;25934:20;25930:1;25919:9;25915:17;25908:47;25972:131;26098:4;25972:131;:::i;:::-;25964:139;;25691:419;;;:::o;26116:147::-;26217:11;26254:3;26239:18;;26116:147;;;;:::o;26269:114::-;;:::o;26389:398::-;26548:3;26569:83;26650:1;26645:3;26569:83;:::i;:::-;26562:90;;26661:93;26750:3;26661:93;:::i;:::-;26779:1;26774:3;26770:11;26763:18;;26389:398;;;:::o;26793:379::-;26977:3;26999:147;27142:3;26999:147;:::i;:::-;26992:154;;27163:3;27156:10;;26793:379;;;:::o;27178:245::-;27318:34;27314:1;27306:6;27302:14;27295:58;27387:28;27382:2;27374:6;27370:15;27363:53;27178:245;:::o;27429:366::-;27571:3;27592:67;27656:2;27651:3;27592:67;:::i;:::-;27585:74;;27668:93;27757:3;27668:93;:::i;:::-;27786:2;27781:3;27777:12;27770:19;;27429:366;;;:::o;27801:419::-;27967:4;28005:2;27994:9;27990:18;27982:26;;28054:9;28048:4;28044:20;28040:1;28029:9;28025:17;28018:47;28082:131;28208:4;28082:131;:::i;:::-;28074:139;;27801:419;;;:::o;28226:225::-;28366:34;28362:1;28354:6;28350:14;28343:58;28435:8;28430:2;28422:6;28418:15;28411:33;28226:225;:::o;28457:366::-;28599:3;28620:67;28684:2;28679:3;28620:67;:::i;:::-;28613:74;;28696:93;28785:3;28696:93;:::i;:::-;28814:2;28809:3;28805:12;28798:19;;28457:366;;;:::o;28829:419::-;28995:4;29033:2;29022:9;29018:18;29010:26;;29082:9;29076:4;29072:20;29068:1;29057:9;29053:17;29046:47;29110:131;29236:4;29110:131;:::i;:::-;29102:139;;28829:419;;;:::o;29254:180::-;29302:77;29299:1;29292:88;29399:4;29396:1;29389:15;29423:4;29420:1;29413:15;29440:180;29488:77;29485:1;29478:88;29585:4;29582:1;29575:15;29609:4;29606:1;29599:15;29626:143;29683:5;29714:6;29708:13;29699:22;;29730:33;29757:5;29730:33;:::i;:::-;29626:143;;;;:::o;29775:351::-;29845:6;29894:2;29882:9;29873:7;29869:23;29865:32;29862:119;;;29900:79;;:::i;:::-;29862:119;30020:1;30045:64;30101:7;30092:6;30081:9;30077:22;30045:64;:::i;:::-;30035:74;;29991:128;29775:351;;;;:::o;30132:85::-;30177:7;30206:5;30195:16;;30132:85;;;:::o;30223:158::-;30281:9;30314:61;30332:42;30341:32;30367:5;30341:32;:::i;:::-;30332:42;:::i;:::-;30314:61;:::i;:::-;30301:74;;30223:158;;;:::o;30387:147::-;30482:45;30521:5;30482:45;:::i;:::-;30477:3;30470:58;30387:147;;:::o;30540:114::-;30607:6;30641:5;30635:12;30625:22;;30540:114;;;:::o;30660:184::-;30759:11;30793:6;30788:3;30781:19;30833:4;30828:3;30824:14;30809:29;;30660:184;;;;:::o;30850:132::-;30917:4;30940:3;30932:11;;30970:4;30965:3;30961:14;30953:22;;30850:132;;;:::o;30988:108::-;31065:24;31083:5;31065:24;:::i;:::-;31060:3;31053:37;30988:108;;:::o;31102:179::-;31171:10;31192:46;31234:3;31226:6;31192:46;:::i;:::-;31270:4;31265:3;31261:14;31247:28;;31102:179;;;;:::o;31287:113::-;31357:4;31389;31384:3;31380:14;31372:22;;31287:113;;;:::o;31436:732::-;31555:3;31584:54;31632:5;31584:54;:::i;:::-;31654:86;31733:6;31728:3;31654:86;:::i;:::-;31647:93;;31764:56;31814:5;31764:56;:::i;:::-;31843:7;31874:1;31859:284;31884:6;31881:1;31878:13;31859:284;;;31960:6;31954:13;31987:63;32046:3;32031:13;31987:63;:::i;:::-;31980:70;;32073:60;32126:6;32073:60;:::i;:::-;32063:70;;31919:224;31906:1;31903;31899:9;31894:14;;31859:284;;;31863:14;32159:3;32152:10;;31560:608;;;31436:732;;;;:::o;32174:831::-;32437:4;32475:3;32464:9;32460:19;32452:27;;32489:71;32557:1;32546:9;32542:17;32533:6;32489:71;:::i;:::-;32570:80;32646:2;32635:9;32631:18;32622:6;32570:80;:::i;:::-;32697:9;32691:4;32687:20;32682:2;32671:9;32667:18;32660:48;32725:108;32828:4;32819:6;32725:108;:::i;:::-;32717:116;;32843:72;32911:2;32900:9;32896:18;32887:6;32843:72;:::i;:::-;32925:73;32993:3;32982:9;32978:19;32969:6;32925:73;:::i;:::-;32174:831;;;;;;;;:::o;33011:332::-;33132:4;33170:2;33159:9;33155:18;33147:26;;33183:71;33251:1;33240:9;33236:17;33227:6;33183:71;:::i;:::-;33264:72;33332:2;33321:9;33317:18;33308:6;33264:72;:::i;:::-;33011:332;;;;;:::o

Swarm Source

ipfs://45cee6f77246d67fc48c9aa78d3381295f06e6716fdb8bb974c0be9a7c6add7d
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.