ETH Price: $3,937.74 (+5.75%)

Token

ERC-20: Shibarium Hunter (SHIBH)
 

Overview

Max Total Supply

1,000,000,000 SHIBH

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,094,670.314802847524803979 SHIBH

Value
$0.00
0x831f77bb13a31c5a908c723f8ddfc9193afa1b05
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:
Shibhunter

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-03-11
*/

// 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 Shibhunter 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("Shibarium Hunter", "SHIBH") 
    {   
        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  = 6;
        marketingFeeOnSell = 6;

        walletToWalletTransferFee = 0;

        marketingWallet = 0x4A0c6A578fE36cd998aA4cC77F34653461E7b900;

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

        _mint(owner(), 1e9 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5000;
    }

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

//------------------FeeManagement------------------//
    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));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !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"}]

60806040523480156200001157600080fd5b506040518060400160405280601081526020017f53686962617269756d2048756e746572000000000000000000000000000000008152506040518060400160405280600581526020017f534849424800000000000000000000000000000000000000000000000000000081525081600390816200008f919062000c3c565b508060049081620000a1919062000c3c565b5050506000620000b66200062a60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000d8d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000270919062000d8d565b6040518363ffffffff1660e01b81526004016200028f92919062000dd0565b6020604051808303816000875af1158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d5919062000d8d565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ae30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200063260201b60201c565b60066009819055506006600a819055506000600b81905550734a0c6a578fe36cd998aa4cc77f34653461e7b900600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000620004316200080360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005fd620005c26200080360201b60201c565b620005d26200082d60201b60201c565b600a620005e0919062000f8d565b633b9aca00620005f1919062000fde565b6200083660201b60201c565b61138862000610620009ae60201b60201c565b6200061c919062001058565b600d819055505050620012ac565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069b9062001117565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000716576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070d90620011af565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620007f69190620011e2565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089f906200124f565b60405180910390fd5b620008bc60008383620009b860201b60201c565b8060026000828254620008d0919062001271565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000927919062001271565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200098e9190620011e2565b60405180910390a3620009aa60008383620009bd60201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a4457607f821691505b60208210810362000a5a5762000a59620009fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ac47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a85565b62000ad0868362000a85565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b1d62000b1762000b118462000ae8565b62000af2565b62000ae8565b9050919050565b6000819050919050565b62000b398362000afc565b62000b5162000b488262000b24565b84845462000a92565b825550505050565b600090565b62000b6862000b59565b62000b7581848462000b2e565b505050565b5b8181101562000b9d5762000b9160008262000b5e565b60018101905062000b7b565b5050565b601f82111562000bec5762000bb68162000a60565b62000bc18462000a75565b8101602085101562000bd1578190505b62000be962000be08562000a75565b83018262000b7a565b50505b505050565b600082821c905092915050565b600062000c116000198460080262000bf1565b1980831691505092915050565b600062000c2c838362000bfe565b9150826002028217905092915050565b62000c4782620009c2565b67ffffffffffffffff81111562000c635762000c62620009cd565b5b62000c6f825462000a2b565b62000c7c82828562000ba1565b600060209050601f83116001811462000cb4576000841562000c9f578287015190505b62000cab858262000c1e565b86555062000d1b565b601f19841662000cc48662000a60565b60005b8281101562000cee5784890151825560018201915060208501945060208101905062000cc7565b8683101562000d0e578489015162000d0a601f89168262000bfe565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d558262000d28565b9050919050565b62000d678162000d48565b811462000d7357600080fd5b50565b60008151905062000d878162000d5c565b92915050565b60006020828403121562000da65762000da562000d23565b5b600062000db68482850162000d76565b91505092915050565b62000dca8162000d48565b82525050565b600060408201905062000de7600083018562000dbf565b62000df6602083018462000dbf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e8b5780860481111562000e635762000e6262000dfd565b5b600185161562000e735780820291505b808102905062000e838562000e2c565b945062000e43565b94509492505050565b60008262000ea6576001905062000f79565b8162000eb6576000905062000f79565b816001811462000ecf576002811462000eda5762000f10565b600191505062000f79565b60ff84111562000eef5762000eee62000dfd565b5b8360020a91508482111562000f095762000f0862000dfd565b5b5062000f79565b5060208310610133831016604e8410600b841016171562000f4a5782820a90508381111562000f445762000f4362000dfd565b5b62000f79565b62000f59848484600162000e39565b9250905081840481111562000f735762000f7262000dfd565b5b81810290505b9392505050565b600060ff82169050919050565b600062000f9a8262000ae8565b915062000fa78362000f80565b925062000fd67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e94565b905092915050565b600062000feb8262000ae8565b915062000ff88362000ae8565b9250828202620010088162000ae8565b9150828204841483151762001022576200102162000dfd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010658262000ae8565b9150620010728362000ae8565b92508262001085576200108462001029565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620010ff60248362001090565b91506200110c82620010a1565b604082019050919050565b600060208201905081810360008301526200113281620010f0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200119760228362001090565b9150620011a48262001139565b604082019050919050565b60006020820190508181036000830152620011ca8162001188565b9050919050565b620011dc8162000ae8565b82525050565b6000602082019050620011f96000830184620011d1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001237601f8362001090565b91506200124482620011ff565b602082019050919050565b600060208201905081810360008301526200126a8162001228565b9050919050565b60006200127e8262000ae8565b91506200128b8362000ae8565b9250828201905080821115620012a657620012a562000dfd565b5b92915050565b61390580620012bc6000396000f3fe6080604052600436106101d15760003560e01c806371fc4688116100f7578063bb85c6d111610095578063e2f4560511610064578063e2f45605146106ab578063eba4c333146106d6578063f2fde38b146106ff578063f9d0831a14610728576101d8565b8063bb85c6d1146105f1578063c02466681461061a578063dc4c7dbc14610643578063dd62ed3e1461066e576101d8565b806395d89b41116100d157806395d89b4114610523578063a457c2d71461054e578063a9059cbb1461058b578063afa4f3b2146105c8576101d8565b806371fc4688146104a457806375f0a874146104cd5780638da5cb5b146104f8576101d8565b806349bd5a5e1161016f5780636db794371161013e5780636db79437146103fc578063702509fd1461042557806370a0823114610450578063715018a61461048d576101d8565b806349bd5a5e146103405780634fbee1931461036b5780635fc2e596146103a857806364c98c44146103d3576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b578063313ce567146102d85780633950935114610303576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610751565b6040516101ff9190612784565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061283f565b6107e3565b60405161023c919061289a565b60405180910390f35b34801561025157600080fd5b5061025a610801565b6040516102679190612914565b60405180910390f35b34801561027c57600080fd5b50610285610827565b604051610292919061293e565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612959565b610831565b6040516102cf919061289a565b60405180910390f35b3480156102e457600080fd5b506102ed610950565b6040516102fa91906129c8565b60405180910390f35b34801561030f57600080fd5b5061032a6004803603810190610325919061283f565b610959565b604051610337919061289a565b60405180910390f35b34801561034c57600080fd5b50610355610a05565b60405161036291906129f2565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612a0d565b610a2b565b60405161039f919061289a565b60405180910390f35b3480156103b457600080fd5b506103bd610a81565b6040516103ca919061293e565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190612a3a565b610a87565b005b34801561040857600080fd5b50610423600480360381019061041e9190612a67565b610b61565b005b34801561043157600080fd5b5061043a610c0a565b604051610447919061293e565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612a0d565b610c10565b604051610484919061293e565b60405180910390f35b34801561049957600080fd5b506104a2610c58565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190612a3a565b610db0565b005b3480156104d957600080fd5b506104e2610e8a565b6040516104ef91906129f2565b60405180910390f35b34801561050457600080fd5b5061050d610eb0565b60405161051a91906129f2565b60405180910390f35b34801561052f57600080fd5b50610538610eda565b6040516105459190612784565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061283f565b610f6c565b604051610582919061289a565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad919061283f565b611057565b6040516105bf919061289a565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612a3a565b611075565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612a0d565b6111a6565b005b34801561062657600080fd5b50610641600480360381019061063c9190612ad3565b6113d9565b005b34801561064f57600080fd5b506106586115ab565b604051610665919061293e565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612b13565b6115b1565b6040516106a2919061293e565b60405180910390f35b3480156106b757600080fd5b506106c0611638565b6040516106cd919061293e565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190612a3a565b61163e565b005b34801561070b57600080fd5b5061072660048036038101906107219190612a0d565b611718565b005b34801561073457600080fd5b5061074f600480360381019061074a9190612a0d565b6118de565b005b60606003805461076090612b82565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90612b82565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f0611b4d565b8484611b55565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061087d611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109395782811015610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b90612c25565b60405180910390fd5b61093885610930611b4d565b858403611b55565b5b610944858585611d1e565b60019150509392505050565b60006012905090565b60006109fb610966611b4d565b848460016000610974611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109f69190612c74565b611b55565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b610a8f611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612cf4565b60405180910390fd5b80600b819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b600b54604051610b56919061293e565b60405180910390a150565b610b69611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612cf4565b60405180910390fd5b8160098190555080600a819055505050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c60611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612cf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610db8611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90612cf4565b60405180910390fd5b806009819055507f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da9600954604051610e7f919061293e565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ee990612b82565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1590612b82565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b5050505050905090565b60008060016000610f7b611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90612d86565b60405180910390fd5b61104c611043611b4d565b85858403611b55565b600191505092915050565b600061106b611064611b4d565b8484611d1e565b6001905092915050565b61107d611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390612cf4565b60405180910390fd5b620f4240611118610827565b6111229190612dd5565b8111611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90612e78565b60405180910390fd5b80600d819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600d5460405161119b919061293e565b60405180910390a150565b6111ae611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612cf4565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390612f9c565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516113ce91906129f2565b60405180910390a150565b6113e1611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612cf4565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f99061302e565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161159f919061289a565b60405180910390a25050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b611646611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90612cf4565b60405180910390fd5b80600a819055507fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb7600a5460405161170d919061293e565b60405180910390a150565b611720611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690612cf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611815906130c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e6611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90612cf4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613152565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4557611a40473373ffffffffffffffffffffffffffffffffffffffff166120c690919063ffffffff16565b611b4a565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a8591906129f2565b602060405180830381865afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac69190613187565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611b039291906131b4565b6020604051808303816000875af1158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4691906131f2565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90613291565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90613323565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d11919061293e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d84906133b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613447565b60405180910390fd5b60008103611e1557611e10838360006121ba565b6120c1565b6000611e2030610c10565b90506000600d548210159050808015611e465750600e60009054906101000a900460ff16155b8015611e9f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15611ee4576001600e60006101000a81548160ff021916908315150217905550611ec882612439565b6000600e60006101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f875750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611f9e5750600e60009054906101000a900460ff165b15611fac5760009050612072565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361200b576009549050612071565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361206a57600a549050612070565b600b5490505b5b5b60008111156120b25760006064828661208b9190613467565b6120959190612dd5565b905080856120a391906134a9565b94506120b08730836121ba565b505b6120bd8686866121ba565b5050505b505050565b80471015612109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210090613529565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161212f9061357a565b60006040518083038185875af1925050503d806000811461216c576040519150601f19603f3d011682016040523d82523d6000602084013e612171565b606091505b50509050806121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90613601565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612220906133b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228f90613447565b60405180910390fd5b6122a38383836126ea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090613693565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123bc9190612c74565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612420919061293e565b60405180910390a36124338484846126ef565b50505050565b60004790506000600267ffffffffffffffff81111561245b5761245a6136b3565b5b6040519080825280602002602001820160405280156124895781602001602082028036833780820191505090505b50905030816000815181106124a1576124a06136e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190613726565b816001815181106125805761257f6136e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161261e95949392919061384c565b600060405180830381600087803b15801561263857600080fd5b505af115801561264c573d6000803e3d6000fd5b505050506000824761265e91906134a9565b90506126ab81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120c690919063ffffffff16565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299984826040516126dc9291906138a6565b60405180910390a150505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272e578082015181840152602081019050612713565b60008484015250505050565b6000601f19601f8301169050919050565b6000612756826126f4565b61276081856126ff565b9350612770818560208601612710565b6127798161273a565b840191505092915050565b6000602082019050818103600083015261279e818461274b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d6826127ab565b9050919050565b6127e6816127cb565b81146127f157600080fd5b50565b600081359050612803816127dd565b92915050565b6000819050919050565b61281c81612809565b811461282757600080fd5b50565b60008135905061283981612813565b92915050565b60008060408385031215612856576128556127a6565b5b6000612864858286016127f4565b92505060206128758582860161282a565b9150509250929050565b60008115159050919050565b6128948161287f565b82525050565b60006020820190506128af600083018461288b565b92915050565b6000819050919050565b60006128da6128d56128d0846127ab565b6128b5565b6127ab565b9050919050565b60006128ec826128bf565b9050919050565b60006128fe826128e1565b9050919050565b61290e816128f3565b82525050565b60006020820190506129296000830184612905565b92915050565b61293881612809565b82525050565b6000602082019050612953600083018461292f565b92915050565b600080600060608486031215612972576129716127a6565b5b6000612980868287016127f4565b9350506020612991868287016127f4565b92505060406129a28682870161282a565b9150509250925092565b600060ff82169050919050565b6129c2816129ac565b82525050565b60006020820190506129dd60008301846129b9565b92915050565b6129ec816127cb565b82525050565b6000602082019050612a0760008301846129e3565b92915050565b600060208284031215612a2357612a226127a6565b5b6000612a31848285016127f4565b91505092915050565b600060208284031215612a5057612a4f6127a6565b5b6000612a5e8482850161282a565b91505092915050565b60008060408385031215612a7e57612a7d6127a6565b5b6000612a8c8582860161282a565b9250506020612a9d8582860161282a565b9150509250929050565b612ab08161287f565b8114612abb57600080fd5b50565b600081359050612acd81612aa7565b92915050565b60008060408385031215612aea57612ae96127a6565b5b6000612af8858286016127f4565b9250506020612b0985828601612abe565b9150509250929050565b60008060408385031215612b2a57612b296127a6565b5b6000612b38858286016127f4565b9250506020612b49858286016127f4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9a57607f821691505b602082108103612bad57612bac612b53565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612c0f6028836126ff565b9150612c1a82612bb3565b604082019050919050565b60006020820190508181036000830152612c3e81612c02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c7f82612809565b9150612c8a83612809565b9250828201905080821115612ca257612ca1612c45565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cde6020836126ff565b9150612ce982612ca8565b602082019050919050565b60006020820190508181036000830152612d0d81612cd1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612d706025836126ff565b9150612d7b82612d14565b604082019050919050565b60006020820190508181036000830152612d9f81612d63565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612de082612809565b9150612deb83612809565b925082612dfb57612dfa612da6565b5b828204905092915050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000612e62603f836126ff565b9150612e6d82612e06565b604082019050919050565b60006020820190508181036000830152612e9181612e55565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000612ef46028836126ff565b9150612eff82612e98565b604082019050919050565b60006020820190508181036000830152612f2381612ee7565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612f86602b836126ff565b9150612f9182612f2a565b604082019050919050565b60006020820190508181036000830152612fb581612f79565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613018602a836126ff565b915061302382612fbc565b604082019050919050565b600060208201905081810360008301526130478161300b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130aa6026836126ff565b91506130b58261304e565b604082019050919050565b600060208201905081810360008301526130d98161309d565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b600061313c6037836126ff565b9150613147826130e0565b604082019050919050565b6000602082019050818103600083015261316b8161312f565b9050919050565b60008151905061318181612813565b92915050565b60006020828403121561319d5761319c6127a6565b5b60006131ab84828501613172565b91505092915050565b60006040820190506131c960008301856129e3565b6131d6602083018461292f565b9392505050565b6000815190506131ec81612aa7565b92915050565b600060208284031215613208576132076127a6565b5b6000613216848285016131dd565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061327b6024836126ff565b91506132868261321f565b604082019050919050565b600060208201905081810360008301526132aa8161326e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061330d6022836126ff565b9150613318826132b1565b604082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061339f6025836126ff565b91506133aa82613343565b604082019050919050565b600060208201905081810360008301526133ce81613392565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134316023836126ff565b915061343c826133d5565b604082019050919050565b6000602082019050818103600083015261346081613424565b9050919050565b600061347282612809565b915061347d83612809565b925082820261348b81612809565b915082820484148315176134a2576134a1612c45565b5b5092915050565b60006134b482612809565b91506134bf83612809565b92508282039050818111156134d7576134d6612c45565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613513601d836126ff565b915061351e826134dd565b602082019050919050565b6000602082019050818103600083015261354281613506565b9050919050565b600081905092915050565b50565b6000613564600083613549565b915061356f82613554565b600082019050919050565b600061358582613557565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006135eb603a836126ff565b91506135f68261358f565b604082019050919050565b6000602082019050818103600083015261361a816135de565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061367d6026836126ff565b915061368882613621565b604082019050919050565b600060208201905081810360008301526136ac81613670565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613720816127dd565b92915050565b60006020828403121561373c5761373b6127a6565b5b600061374a84828501613711565b91505092915050565b6000819050919050565b600061377861377361376e84613753565b6128b5565b612809565b9050919050565b6137888161375d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137c3816127cb565b82525050565b60006137d583836137ba565b60208301905092915050565b6000602082019050919050565b60006137f98261378e565b6138038185613799565b935061380e836137aa565b8060005b8381101561383f57815161382688826137c9565b9750613831836137e1565b925050600181019050613812565b5085935050505092915050565b600060a082019050613861600083018861292f565b61386e602083018761377f565b818103604083015261388081866137ee565b905061388f60608301856129e3565b61389c608083018461292f565b9695505050505050565b60006040820190506138bb600083018561292f565b6138c8602083018461292f565b939250505056fea26469706673582212209c67523d58ba591320c137976ca6c9ab3e4d65b5f54439bd7c76495eccf193e364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c806371fc4688116100f7578063bb85c6d111610095578063e2f4560511610064578063e2f45605146106ab578063eba4c333146106d6578063f2fde38b146106ff578063f9d0831a14610728576101d8565b8063bb85c6d1146105f1578063c02466681461061a578063dc4c7dbc14610643578063dd62ed3e1461066e576101d8565b806395d89b41116100d157806395d89b4114610523578063a457c2d71461054e578063a9059cbb1461058b578063afa4f3b2146105c8576101d8565b806371fc4688146104a457806375f0a874146104cd5780638da5cb5b146104f8576101d8565b806349bd5a5e1161016f5780636db794371161013e5780636db79437146103fc578063702509fd1461042557806370a0823114610450578063715018a61461048d576101d8565b806349bd5a5e146103405780634fbee1931461036b5780635fc2e596146103a857806364c98c44146103d3576101d8565b806318160ddd116101ab57806318160ddd1461027057806323b872dd1461029b578063313ce567146102d85780633950935114610303576101d8565b806306fdde03146101dd578063095ea7b3146102085780631694505e14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610751565b6040516101ff9190612784565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061283f565b6107e3565b60405161023c919061289a565b60405180910390f35b34801561025157600080fd5b5061025a610801565b6040516102679190612914565b60405180910390f35b34801561027c57600080fd5b50610285610827565b604051610292919061293e565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd9190612959565b610831565b6040516102cf919061289a565b60405180910390f35b3480156102e457600080fd5b506102ed610950565b6040516102fa91906129c8565b60405180910390f35b34801561030f57600080fd5b5061032a6004803603810190610325919061283f565b610959565b604051610337919061289a565b60405180910390f35b34801561034c57600080fd5b50610355610a05565b60405161036291906129f2565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612a0d565b610a2b565b60405161039f919061289a565b60405180910390f35b3480156103b457600080fd5b506103bd610a81565b6040516103ca919061293e565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190612a3a565b610a87565b005b34801561040857600080fd5b50610423600480360381019061041e9190612a67565b610b61565b005b34801561043157600080fd5b5061043a610c0a565b604051610447919061293e565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612a0d565b610c10565b604051610484919061293e565b60405180910390f35b34801561049957600080fd5b506104a2610c58565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190612a3a565b610db0565b005b3480156104d957600080fd5b506104e2610e8a565b6040516104ef91906129f2565b60405180910390f35b34801561050457600080fd5b5061050d610eb0565b60405161051a91906129f2565b60405180910390f35b34801561052f57600080fd5b50610538610eda565b6040516105459190612784565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061283f565b610f6c565b604051610582919061289a565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad919061283f565b611057565b6040516105bf919061289a565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612a3a565b611075565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612a0d565b6111a6565b005b34801561062657600080fd5b50610641600480360381019061063c9190612ad3565b6113d9565b005b34801561064f57600080fd5b506106586115ab565b604051610665919061293e565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612b13565b6115b1565b6040516106a2919061293e565b60405180910390f35b3480156106b757600080fd5b506106c0611638565b6040516106cd919061293e565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190612a3a565b61163e565b005b34801561070b57600080fd5b5061072660048036038101906107219190612a0d565b611718565b005b34801561073457600080fd5b5061074f600480360381019061074a9190612a0d565b6118de565b005b60606003805461076090612b82565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90612b82565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b5050505050905090565b60006107f76107f0611b4d565b8484611b55565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061087d611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109395782811015610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b90612c25565b60405180910390fd5b61093885610930611b4d565b858403611b55565b5b610944858585611d1e565b60019150509392505050565b60006012905090565b60006109fb610966611b4d565b848460016000610974611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109f69190612c74565b611b55565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b610a8f611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612cf4565b60405180910390fd5b80600b819055507f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b600b54604051610b56919061293e565b60405180910390a150565b610b69611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612cf4565b60405180910390fd5b8160098190555080600a819055505050565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c60611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690612cf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610db8611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90612cf4565b60405180910390fd5b806009819055507f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da9600954604051610e7f919061293e565b60405180910390a150565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ee990612b82565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1590612b82565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b5050505050905090565b60008060016000610f7b611b4d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90612d86565b60405180910390fd5b61104c611043611b4d565b85858403611b55565b600191505092915050565b600061106b611064611b4d565b8484611d1e565b6001905092915050565b61107d611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390612cf4565b60405180910390fd5b620f4240611118610827565b6111229190612dd5565b8111611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90612e78565b60405180910390fd5b80600d819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600d5460405161119b919061293e565b60405180910390a150565b6111ae611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612cf4565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390612f9c565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516113ce91906129f2565b60405180910390a150565b6113e1611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612cf4565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f99061302e565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161159f919061289a565b60405180910390a25050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b611646611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90612cf4565b60405180910390fd5b80600a819055507fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb7600a5460405161170d919061293e565b60405180910390a150565b611720611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690612cf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611815906130c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e6611b4d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90612cf4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613152565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4557611a40473373ffffffffffffffffffffffffffffffffffffffff166120c690919063ffffffff16565b611b4a565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a8591906129f2565b602060405180830381865afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac69190613187565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611b039291906131b4565b6020604051808303816000875af1158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4691906131f2565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90613291565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90613323565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d11919061293e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d84906133b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390613447565b60405180910390fd5b60008103611e1557611e10838360006121ba565b6120c1565b6000611e2030610c10565b90506000600d548210159050808015611e465750600e60009054906101000a900460ff16155b8015611e9f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15611ee4576001600e60006101000a81548160ff021916908315150217905550611ec882612439565b6000600e60006101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f875750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611f9e5750600e60009054906101000a900460ff165b15611fac5760009050612072565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361200b576009549050612071565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361206a57600a549050612070565b600b5490505b5b5b60008111156120b25760006064828661208b9190613467565b6120959190612dd5565b905080856120a391906134a9565b94506120b08730836121ba565b505b6120bd8686866121ba565b5050505b505050565b80471015612109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210090613529565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161212f9061357a565b60006040518083038185875af1925050503d806000811461216c576040519150601f19603f3d011682016040523d82523d6000602084013e612171565b606091505b50509050806121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90613601565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612220906133b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228f90613447565b60405180910390fd5b6122a38383836126ea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090613693565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123bc9190612c74565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612420919061293e565b60405180910390a36124338484846126ef565b50505050565b60004790506000600267ffffffffffffffff81111561245b5761245a6136b3565b5b6040519080825280602002602001820160405280156124895781602001602082028036833780820191505090505b50905030816000815181106124a1576124a06136e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256c9190613726565b816001815181106125805761257f6136e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161261e95949392919061384c565b600060405180830381600087803b15801561263857600080fd5b505af115801561264c573d6000803e3d6000fd5b505050506000824761265e91906134a9565b90506126ab81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120c690919063ffffffff16565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299984826040516126dc9291906138a6565b60405180910390a150505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561272e578082015181840152602081019050612713565b60008484015250505050565b6000601f19601f8301169050919050565b6000612756826126f4565b61276081856126ff565b9350612770818560208601612710565b6127798161273a565b840191505092915050565b6000602082019050818103600083015261279e818461274b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127d6826127ab565b9050919050565b6127e6816127cb565b81146127f157600080fd5b50565b600081359050612803816127dd565b92915050565b6000819050919050565b61281c81612809565b811461282757600080fd5b50565b60008135905061283981612813565b92915050565b60008060408385031215612856576128556127a6565b5b6000612864858286016127f4565b92505060206128758582860161282a565b9150509250929050565b60008115159050919050565b6128948161287f565b82525050565b60006020820190506128af600083018461288b565b92915050565b6000819050919050565b60006128da6128d56128d0846127ab565b6128b5565b6127ab565b9050919050565b60006128ec826128bf565b9050919050565b60006128fe826128e1565b9050919050565b61290e816128f3565b82525050565b60006020820190506129296000830184612905565b92915050565b61293881612809565b82525050565b6000602082019050612953600083018461292f565b92915050565b600080600060608486031215612972576129716127a6565b5b6000612980868287016127f4565b9350506020612991868287016127f4565b92505060406129a28682870161282a565b9150509250925092565b600060ff82169050919050565b6129c2816129ac565b82525050565b60006020820190506129dd60008301846129b9565b92915050565b6129ec816127cb565b82525050565b6000602082019050612a0760008301846129e3565b92915050565b600060208284031215612a2357612a226127a6565b5b6000612a31848285016127f4565b91505092915050565b600060208284031215612a5057612a4f6127a6565b5b6000612a5e8482850161282a565b91505092915050565b60008060408385031215612a7e57612a7d6127a6565b5b6000612a8c8582860161282a565b9250506020612a9d8582860161282a565b9150509250929050565b612ab08161287f565b8114612abb57600080fd5b50565b600081359050612acd81612aa7565b92915050565b60008060408385031215612aea57612ae96127a6565b5b6000612af8858286016127f4565b9250506020612b0985828601612abe565b9150509250929050565b60008060408385031215612b2a57612b296127a6565b5b6000612b38858286016127f4565b9250506020612b49858286016127f4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9a57607f821691505b602082108103612bad57612bac612b53565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612c0f6028836126ff565b9150612c1a82612bb3565b604082019050919050565b60006020820190508181036000830152612c3e81612c02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c7f82612809565b9150612c8a83612809565b9250828201905080821115612ca257612ca1612c45565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612cde6020836126ff565b9150612ce982612ca8565b602082019050919050565b60006020820190508181036000830152612d0d81612cd1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612d706025836126ff565b9150612d7b82612d14565b604082019050919050565b60006020820190508181036000830152612d9f81612d63565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612de082612809565b9150612deb83612809565b925082612dfb57612dfa612da6565b5b828204905092915050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000612e62603f836126ff565b9150612e6d82612e06565b604082019050919050565b60006020820190508181036000830152612e9181612e55565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000612ef46028836126ff565b9150612eff82612e98565b604082019050919050565b60006020820190508181036000830152612f2381612ee7565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612f86602b836126ff565b9150612f9182612f2a565b604082019050919050565b60006020820190508181036000830152612fb581612f79565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613018602a836126ff565b915061302382612fbc565b604082019050919050565b600060208201905081810360008301526130478161300b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130aa6026836126ff565b91506130b58261304e565b604082019050919050565b600060208201905081810360008301526130d98161309d565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b600061313c6037836126ff565b9150613147826130e0565b604082019050919050565b6000602082019050818103600083015261316b8161312f565b9050919050565b60008151905061318181612813565b92915050565b60006020828403121561319d5761319c6127a6565b5b60006131ab84828501613172565b91505092915050565b60006040820190506131c960008301856129e3565b6131d6602083018461292f565b9392505050565b6000815190506131ec81612aa7565b92915050565b600060208284031215613208576132076127a6565b5b6000613216848285016131dd565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061327b6024836126ff565b91506132868261321f565b604082019050919050565b600060208201905081810360008301526132aa8161326e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061330d6022836126ff565b9150613318826132b1565b604082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061339f6025836126ff565b91506133aa82613343565b604082019050919050565b600060208201905081810360008301526133ce81613392565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134316023836126ff565b915061343c826133d5565b604082019050919050565b6000602082019050818103600083015261346081613424565b9050919050565b600061347282612809565b915061347d83612809565b925082820261348b81612809565b915082820484148315176134a2576134a1612c45565b5b5092915050565b60006134b482612809565b91506134bf83612809565b92508282039050818111156134d7576134d6612c45565b5b92915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000613513601d836126ff565b915061351e826134dd565b602082019050919050565b6000602082019050818103600083015261354281613506565b9050919050565b600081905092915050565b50565b6000613564600083613549565b915061356f82613554565b600082019050919050565b600061358582613557565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006135eb603a836126ff565b91506135f68261358f565b604082019050919050565b6000602082019050818103600083015261361a816135de565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061367d6026836126ff565b915061368882613621565b604082019050919050565b600060208201905081810360008301526136ac81613670565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613720816127dd565b92915050565b60006020828403121561373c5761373b6127a6565b5b600061374a84828501613711565b91505092915050565b6000819050919050565b600061377861377361376e84613753565b6128b5565b612809565b9050919050565b6137888161375d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137c3816127cb565b82525050565b60006137d583836137ba565b60208301905092915050565b6000602082019050919050565b60006137f98261378e565b6138038185613799565b935061380e836137aa565b8060005b8381101561383f57815161382688826137c9565b9750613831836137e1565b925050600181019050613812565b5085935050505092915050565b600060a082019050613861600083018861292f565b61386e602083018761377f565b818103604083015261388081866137ee565b905061388f60608301856129e3565b61389c608083018461292f565b9695505050505050565b60006040820190506138bb600083018561292f565b6138c8602083018461292f565b939250505056fea26469706673582212209c67523d58ba591320c137976ca6c9ab3e4d65b5f54439bd7c76495eccf193e364736f6c63430008110033

Deployed Bytecode Sourcemap

24611:6613:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19896:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20810:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24730:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20217:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20987:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20116:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21568:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24778:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27452:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24878:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28170:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27957:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24961:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20333:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19083:148;;;;;;;;;;;;;:::i;:::-;;27585:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25011:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18869:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20004:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21791:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20468:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30266:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28420:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27154:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24918:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20651:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25051:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27768:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19239:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26626: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;24730: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;24778:29::-;;;;;;;;;;;;;:::o;27452:125::-;27517:4;27541:19;:28;27561:7;27541:28;;;;;;;;;;;;;;;;;;;;;;;;;27534:35;;27452:125;;;:::o;24878:33::-;;;;:::o;28170:242::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28304:26:::1;28276:25;:54;;;;28346:58;28378:25;;28346:58;;;;;;:::i;:::-;;;;;;;;28170:242:::0;:::o;27957:205::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28085:18:::1;28065:17;:38;;;;28135:19;28114:18;:40;;;;27957:205:::0;;:::o;24961: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;27585:175::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27686:18:::1;27666:17;:38;;;;27720:32;27734:17;;27720:32;;;;;;:::i;:::-;;;;;;;;27585:175:::0;:::o;25011: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;30266:300::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30381:7:::1;30365:13;:11;:13::i;:::-;:23;;;;:::i;:::-;30353:9;:35;30345:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30488:9;30467:18;:30;;;;30513:45;30539:18;;30513:45;;;;;;:::i;:::-;;;;;;;;30266:300:::0;:::o;28420:377::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28534:15:::1;;;;;;;;;;;28514:35;;:16;:35;;::::0;28506:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28640:1;28612:30;;:16;:30;;::::0;28604:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28718:16;28700:15;;:34;;;;;;;;;;;;;;;;;;28750:39;28773:15;;;;;;;;;;;28750:39;;;;;;:::i;:::-;;;;;;;;28420:377:::0;:::o;27154:290::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27280:8:::1;27248:40;;:19;:28;27268:7;27248:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;27240:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27376:8;27345:19;:28;27365:7;27345:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27418:7;27402:34;;;27427:8;27402:34;;;;;;:::i;:::-;;;;;;;;27154:290:::0;;:::o;24918:34::-;;;;:::o;20651:151::-;20740:7;20767:11;:18;20779:5;20767:18;;;;;;;;;;;;;;;:27;20786:7;20767:27;;;;;;;;;;;;;;;;20760:34;;20651:151;;;;:::o;25051:34::-;;;;:::o;27768:181::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27872:19:::1;27851:18;:40;;;;27907:34;27922:18;;27907:34;;;;;;:::i;:::-;;;;;;;;27768: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;26626:465::-;19006:12;:10;:12::i;:::-;18996:22;;:6;;;;;;;;;;;:22;;;18988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26722:4:::1;26705:22;;:5;:22;;::::0;26697:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26819:3;26802:21;;:5;:21;;::::0;26798:127:::1;;26840:52;26870:21;26848:10;26840:29;;;;:52;;;;:::i;:::-;26907:7;;26798:127;26935:17;26962:5;26935:33;;26979:15;26997:10;:20;;;27026:4;26997:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26979:53;;27043:10;:19;;;27063:10;27075:7;27043:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26686:405;;19066:1;26626: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;28855:1357::-;28968:1;28952:18;;:4;:18;;;28944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29045:1;29031:16;;:2;:16;;;29023:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29121:1;29111:6;:11;29107:93;;29139:28;29155:4;29161:2;29165:1;29139:15;:28::i;:::-;29182:7;;29107:93;29206:28;29237:24;29255:4;29237:9;:24::i;:::-;29206:55;;29274:12;29313:18;;29289:20;:42;;29274:57;;29348:7;:33;;;;;29373:8;;;;;;;;;;;29372:9;29348:33;:69;;;;;29404:13;;;;;;;;;;;29398:19;;:2;:19;;;29348:69;29344:219;;;29455:4;29444:8;;:15;;;;;;;;;;;;;;;;;;29476:42;29497:20;29476;:42::i;:::-;29546:5;29535:8;;:16;;;;;;;;;;;;;;;;;;29344:219;29575:18;29608:19;:25;29628:4;29608:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29637:19;:23;29657:2;29637:23;;;;;;;;;;;;;;;;;;;;;;;;;29608:52;:63;;;;29663:8;;;;;;;;;;;29608:63;29604:360;;;29701:1;29688:14;;29604:360;;;29732:13;;;;;;;;;;;29724:21;;:4;:21;;;29720:244;;29775:17;;29762:30;;29720:244;;;29820:13;;;;;;;;;;;29814:19;;:2;:19;;;29810:154;;29863:18;;29850:31;;29810:154;;;29927:25;;29914:38;;29810:154;29720:244;29604:360;29993:1;29980:10;:14;29976:183;;;30011:12;30050:3;30036:10;30027:6;:19;;;;:::i;:::-;30026:27;;;;:::i;:::-;30011:42;;30086:4;30077:6;:13;;;;:::i;:::-;30068:22;;30105:42;30121:4;30135;30142;30105:15;:42::i;:::-;29996:163;29976:183;30171:33;30187:4;30193:2;30197:6;30171:15;:33::i;:::-;28933:1279;;;28855:1357;;;;:::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;30574:647::-;30644:22;30669:21;30644:46;;30703:21;30741:1;30727:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30703:40;;30772:4;30754;30759:1;30754:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30798:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30788:4;30793:1;30788:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30833:15;;;;;;;;;;;:66;;;30914:11;30940:1;30956:4;30983;31003:15;30833:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31032:18;31077:14;31053:21;:38;;;;:::i;:::-;31032:59;;31104:46;31139:10;31112:15;;;;;;;;;;;31104:34;;;;:46;;;;:::i;:::-;31168:45;31189:11;31202:10;31168:45;;;;;;;:::i;:::-;;;;;;;;30633:588;;;30574: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://9c67523d58ba591320c137976ca6c9ab3e4d65b5f54439bd7c76495eccf193e3
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.