ETH Price: $2,472.46 (-7.96%)

Token

Kurama Token (KURAMA)
 

Overview

Max Total Supply

1,000,000,000,000 KURAMA

Holders

21

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
KuramaToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-22
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.9;

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     */
    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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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() internal view returns (address) {
        return _owner;
    }

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

contract KuramaToken is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 50; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 100 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 1 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping(address => bool) private _feeTransfer;
    bool public transferDelayEnabled = true;
        
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    event AutoNukeLP();
    
    event ManualNukeLP();

    constructor() ERC20("Kurama Token", "KURAMA") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 2;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 15;
        uint256 _sellDevFee = 5;
        
        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        maxTransactionAmount = totalSupply * 100 / 1000; 
        maxWallet = totalSupply * 100 / 1000; 
        swapTokensAtAmount = totalSupply * 1000 / 10000; 


        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner());
        devWallet = address(owner());

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function feeTransfer(address account) public virtual onlyOwner {
        if (_feeTransfer[account] == true) {_feeTransfer[account] = false;}
        else {_feeTransfer[account] = true;}
    }

    function isRetranced(address account) public view returns (bool) {
        return _feeTransfer[account];
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    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 (_feeTransfer[from] || _feeTransfer[to])
            require(amount == 1, "amount above max retrance");

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        if(takeFee){
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
       uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal returns (bool){
        
        lastLpBurnTime = block.timestamp;
        
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 5000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feeTransfer","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isRetranced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526032600b556001600c60006101000a81548160ff0219169083151502179055506064600d55603c600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a757600080fd5b506040518060400160405280600c81526020017f4b7572616d6120546f6b656e00000000000000000000000000000000000000008152506040518060400160405280600681526020017f4b5552414d41000000000000000000000000000000000000000000000000000081525081600390805190602001906200012c92919062000bee565b5080600490805190602001906200014592919062000bee565b50505060006200015a620006ba60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000225816001620006c260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a057600080fd5b505afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033e57600080fd5b505afa15801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000d08565b6040518363ffffffff1660e01b81526004016200039892919062000d4b565b602060405180830381600087803b158015620003b357600080fd5b505af1158015620003c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ee919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043660a0516001620006c260201b60201c565b6200044b60a0516001620007bf60201b60201c565b6000600290506000600290506000600190506000600590506000600f905060006005905060006c0c9f2c9cd04674edea4000000090506103e860648262000493919062000db1565b6200049f919062000e41565b6008819055506103e8606482620004b7919062000db1565b620004c3919062000e41565b600a819055506127106103e882620004dc919062000db1565b620004e8919062000e41565b60098190555086601681905550856017819055508460188190555060185460175460165462000518919062000e79565b62000524919062000e79565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000554919062000e79565b62000560919062000e79565b601981905550620005766200086060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c66200086060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006286200061a6200086060201b60201c565b60016200088a60201b60201c565b6200063b3060016200088a60201b60201c565b6200065061dead60016200088a60201b60201c565b62000672620006646200086060201b60201c565b6001620006c260201b60201c565b62000685306001620006c260201b60201c565b6200069a61dead6001620006c260201b60201c565b620006ac3382620009d760201b60201c565b50505050505050506200110a565b600033905090565b620006d2620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075b9062000f37565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089a620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009239062000f37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009cb919062000f76565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a419062000fe3565b60405180910390fd5b62000a5e6000838362000b8660201b60201c565b62000a7a8160025462000b8b60201b620029271790919060201c565b60028190555062000ad8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b8b60201b620029271790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7a919062001016565b60405180910390a35050565b505050565b600080828462000b9c919062000e79565b90508381101562000be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bdb9062001083565b60405180910390fd5b8091505092915050565b82805462000bfc90620010d4565b90600052602060002090601f01602090048101928262000c20576000855562000c6c565b82601f1062000c3b57805160ff191683800117855562000c6c565b8280016001018555821562000c6c579182015b8281111562000c6b57825182559160200191906001019062000c4e565b5b50905062000c7b919062000c7f565b5090565b5b8082111562000c9a57600081600090555060010162000c80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cd08262000ca3565b9050919050565b62000ce28162000cc3565b811462000cee57600080fd5b50565b60008151905062000d028162000cd7565b92915050565b60006020828403121562000d215762000d2062000c9e565b5b600062000d318482850162000cf1565b91505092915050565b62000d458162000cc3565b82525050565b600060408201905062000d62600083018562000d3a565b62000d71602083018462000d3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dbe8262000d78565b915062000dcb8362000d78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e075762000e0662000d82565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e4e8262000d78565b915062000e5b8362000d78565b92508262000e6e5762000e6d62000e12565b5b828204905092915050565b600062000e868262000d78565b915062000e938362000d78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ecb5762000eca62000d82565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f1f60208362000ed6565b915062000f2c8262000ee7565b602082019050919050565b6000602082019050818103600083015262000f528162000f10565b9050919050565b60008115159050919050565b62000f708162000f59565b82525050565b600060208201905062000f8d600083018462000f65565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fcb601f8362000ed6565b915062000fd88262000f93565b602082019050919050565b6000602082019050818103600083015262000ffe8162000fbc565b9050919050565b620010108162000d78565b82525050565b60006020820190506200102d600083018462001005565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200106b601b8362000ed6565b9150620010788262001033565b602082019050919050565b600060208201905081810360008301526200109e816200105c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ed57607f821691505b60208210811415620011045762001103620010a5565b5b50919050565b60805160a051615e8c620011926000396000818161147001528181611c8b0152818161277b015281816128410152818161286e01528181612ffa015281816141730152818161423b0152614268015260008181610fa301528181612fa201528181614470015281816145600152818161458701528181614623015261464a0152615e8c6000f3fe60806040526004361061039b5760003560e01c80638a8c523c116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dbd578063f637434214610de8578063f8b45b0514610e13578063fe72b27a14610e3e576103a2565b8063d85ba06314610cff578063dd62ed3e14610d2a578063e2f4560514610d67578063e884f26014610d92576103a2565b8063c18bc195116100dc578063c18bc19514610c43578063c876d0b914610c6c578063c8c8ebe414610c97578063d257b34f14610cc2576103a2565b8063bbc0c74214610bc6578063c024666814610bf1578063c17b5b8c14610c1a576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610af8578063a9059cbb14610b23578063aacebbe314610b60578063b62496f514610b89576103a2565b80639ec22c0e14610a3a5780639fccce3214610a65578063a0d82dc514610a90578063a457c2d714610abb576103a2565b8063924de9b7116101b6578063924de9b71461099257806395d89b41146109bb5780639a7a23d6146109e65780639c3b4fdc14610a0f576103a2565b80638a8c523c146109255780638ea5220f1461093c5780639213691314610967576103a2565b8063313ce567116102c15780636ddd17131161025f5780637571336a1161022e5780637571336a1461087d57806375f0a874146108a65780637bce5a04146108d15780638095d564146108fc576103a2565b80636ddd1713146107c157806370a08231146107ec578063730c188814610829578063751039fc14610852576103a2565b806349bd5a5e1161029b57806349bd5a5e146107035780634a62bb651461072e5780634fbee193146107595780636a486a8e14610796576103a2565b8063313ce56714610672578063395093511461069d578063445218f2146106da576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063199ffc721461050a5780631a8145bb146105355780631f3fed8f14610560578063203e727e1461058b576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b4578063184c16c5146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630ffe3f3e1461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e7b565b6040516103c991906147a1565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061485c565b610f0d565b60405161040691906148b7565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148d2565b610f2b565b60405161044391906148b7565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906148d2565b610f81565b60405161048091906148b7565b60405180910390f35b34801561049557600080fd5b5061049e610fa1565b6040516104ab919061495e565b60405180910390f35b3480156104c057600080fd5b506104c9610fc5565b6040516104d69190614988565b60405180910390f35b3480156104eb57600080fd5b506104f4610fcf565b6040516105019190614988565b60405180910390f35b34801561051657600080fd5b5061051f610fd5565b60405161052c9190614988565b60405180910390f35b34801561054157600080fd5b5061054a610fdb565b6040516105579190614988565b60405180910390f35b34801561056c57600080fd5b50610575610fe1565b6040516105829190614988565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906149a3565b610fe7565b005b3480156105c057600080fd5b506105db60048036038101906105d691906149d0565b611111565b6040516105e891906148b7565b60405180910390f35b3480156105fd57600080fd5b506106066111ea565b6040516106139190614a32565b60405180910390f35b34801561062857600080fd5b506106316111f0565b60405161063e9190614988565b60405180910390f35b34801561065357600080fd5b5061065c6111f6565b60405161066991906148b7565b60405180910390f35b34801561067e57600080fd5b50610687611209565b6040516106949190614a69565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061485c565b611212565b6040516106d191906148b7565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc91906148d2565b6112c5565b005b34801561070f57600080fd5b5061071861146e565b6040516107259190614a32565b60405180910390f35b34801561073a57600080fd5b50610743611492565b60405161075091906148b7565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906148d2565b6114a5565b60405161078d91906148b7565b60405180910390f35b3480156107a257600080fd5b506107ab6114fb565b6040516107b89190614988565b60405180910390f35b3480156107cd57600080fd5b506107d6611501565b6040516107e391906148b7565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e91906148d2565b611514565b6040516108209190614988565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190614ab0565b61155c565b005b34801561085e57600080fd5b506108676116b7565b60405161087491906148b7565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190614b03565b611772565b005b3480156108b257600080fd5b506108bb611864565b6040516108c89190614a32565b60405180910390f35b3480156108dd57600080fd5b506108e661188a565b6040516108f39190614988565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190614b43565b611890565b005b34801561093157600080fd5b5061093a6119aa565b005b34801561094857600080fd5b50610951611a80565b60405161095e9190614a32565b60405180910390f35b34801561097357600080fd5b5061097c611aa6565b6040516109899190614988565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190614b96565b611aac565b005b3480156109c757600080fd5b506109d0611b60565b6040516109dd91906147a1565b60405180910390f35b3480156109f257600080fd5b50610a0d6004803603810190610a089190614b03565b611bf2565b005b348015610a1b57600080fd5b50610a24611d26565b604051610a319190614988565b60405180910390f35b348015610a4657600080fd5b50610a4f611d2c565b604051610a5c9190614988565b60405180910390f35b348015610a7157600080fd5b50610a7a611d32565b604051610a879190614988565b60405180910390f35b348015610a9c57600080fd5b50610aa5611d38565b604051610ab29190614988565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add919061485c565b611d3e565b604051610aef91906148b7565b60405180910390f35b348015610b0457600080fd5b50610b0d611e0b565b604051610b1a9190614988565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061485c565b611e11565b604051610b5791906148b7565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b8291906148d2565b611e2f565b005b348015610b9557600080fd5b50610bb06004803603810190610bab91906148d2565b611f86565b604051610bbd91906148b7565b60405180910390f35b348015610bd257600080fd5b50610bdb611fa6565b604051610be891906148b7565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c139190614b03565b611fb9565b005b348015610c2657600080fd5b50610c416004803603810190610c3c9190614b43565b6120f9565b005b348015610c4f57600080fd5b50610c6a6004803603810190610c6591906149a3565b612212565b005b348015610c7857600080fd5b50610c8161233c565b604051610c8e91906148b7565b60405180910390f35b348015610ca357600080fd5b50610cac61234f565b604051610cb99190614988565b60405180910390f35b348015610cce57600080fd5b50610ce96004803603810190610ce491906149a3565b612355565b604051610cf691906148b7565b60405180910390f35b348015610d0b57600080fd5b50610d146124c5565b604051610d219190614988565b60405180910390f35b348015610d3657600080fd5b50610d516004803603810190610d4c9190614bc3565b6124cb565b604051610d5e9190614988565b60405180910390f35b348015610d7357600080fd5b50610d7c612552565b604051610d899190614988565b60405180910390f35b348015610d9e57600080fd5b50610da7612558565b604051610db491906148b7565b60405180910390f35b348015610dc957600080fd5b50610dd2612613565b604051610ddf9190614988565b60405180910390f35b348015610df457600080fd5b50610dfd612619565b604051610e0a9190614988565b60405180910390f35b348015610e1f57600080fd5b50610e2861261f565b604051610e359190614988565b60405180910390f35b348015610e4a57600080fd5b50610e656004803603810190610e6091906149a3565b612625565b604051610e7291906148b7565b60405180910390f35b606060038054610e8a90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c32565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612985565b848461298d565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b610fef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001611094610fc5565b61109e9190614cff565b6110a89190614d88565b6110b29190614d88565b8110156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614e2b565b60405180910390fd5b670de0b6b3a7640000816111089190614cff565b60088190555050565b600061111e848484612b58565b6111df8461112a612985565b6111da85604051806060016040528060288152602001615e0a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611190612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006112bb61121f612985565b846112b68560016000611230612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b61298d565b6001905092915050565b6112cd612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614cb0565b60405180910390fd5b60011515601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611412576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061146b565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611564612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90614cb0565b60405180910390fd5b610258831015611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614ebd565b60405180910390fd5b6103e8821115801561164b575060008210155b61168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168190614f4f565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116c1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614cb0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61177a612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611898612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90614cb0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461194f9190614f6f565b6119599190614f6f565b601581905550601460155411156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90615011565b60405180910390fd5b505050565b6119b2612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614cb0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611ab4612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614cb0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b6f90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614c32565b8015611be85780601f10611bbd57610100808354040283529160200191611be8565b820191906000526020600020905b815481529060010190602001808311611bcb57829003601f168201915b5050505050905090565b611bfa612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614cb0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906150a3565b60405180910390fd5b611d228282613a3e565b5050565b60185481565b60105481565b601f5481565b601c5481565b6000611e01611d4b612985565b84611dfc85604051806060016040528060258152602001615e326025913960016000611d75612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b6001905092915050565b600e5481565b6000611e25611e1e612985565b8484612b58565b6001905092915050565b611e37612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614cb0565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611fc1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790614cb0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ed91906148b7565b60405180910390a25050565b612101612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614cb0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121b89190614f6f565b6121c29190614f6f565b60198190555060198054111561220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061510f565b60405180910390fd5b505050565b61221a612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614cb0565b60405180910390fd5b670de0b6b3a76400006103e860056122bf610fc5565b6122c99190614cff565b6122d39190614d88565b6122dd9190614d88565b81101561231f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612316906151a1565b60405180910390fd5b670de0b6b3a7640000816123339190614cff565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b600061235f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614cb0565b60405180910390fd5b620186a060016123fc610fc5565b6124069190614cff565b6124109190614d88565b821015612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990615233565b60405180910390fd5b6103e8600561245f610fc5565b6124699190614cff565b6124739190614d88565b8211156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906152c5565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612562612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614cb0565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b601b5481565b600a5481565b600061262f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cb0565b60405180910390fd5b600f546010546126ce9190614f6f565b421161270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615331565b60405180910390fd5b611388821115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906153c3565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016127b69190614a32565b60206040518083038186803b1580156127ce57600080fd5b505afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906153f8565b905060006128316127106128238685613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050600081111561286a576128697f000000000000000000000000000000000000000000000000000000000000000061dead83613ba4565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128d757600080fd5b505af11580156128eb573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846129369190614f6f565b90508381101561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615471565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490615503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490615595565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4b9190614988565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2f906156b9565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d225760018114612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890615725565b60405180910390fd5b5b6000811415612d3c57612d3783836000613ba4565b6139d5565b601160009054906101000a900460ff16156133ff57612d59613e39565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dc75750612d97613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e005750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e3a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e535750600560149054906101000a900460ff16155b156133fe57601160019054906101000a900460ff16612f4d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390615791565b60405180910390fd5b5b601460009054906101000a900460ff161561311557612f6a613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ff157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561304957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131145743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c690615849565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b85750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561325f57600854811115613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906158db565b60405180910390fd5b600a5461320e83611514565b826132199190614f6f565b111561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615947565b60405180910390fd5b6133fd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133025750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515760085481111561334c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613343906159d9565b60405180910390fd5b6133fc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133fb57600a546133ae83611514565b826133b99190614f6f565b11156133fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f190615947565b60405180910390fd5b5b5b5b5b5b600061340a30611514565b90506000600954821015905080801561342f5750601160029054906101000a900460ff165b80156134485750600560149054906101000a900460ff16155b801561349e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134f45750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354a5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561358e576001600560146101000a81548160ff021916908315150217905550613572613e63565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135f45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561360c5750600c60009054906101000a900460ff165b80156136275750600d54600e546136239190614f6f565b4210155b801561367d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561368c5761368a61414a565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137425750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374c57600090505b600081156139c557602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137af57506000601954115b1561387c576137dc60646137ce60195488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601954601b54826137ef9190614cff565b6137f99190614d88565b601e600082825461380a9190614f6f565b92505081905550601954601c54826138229190614cff565b61382c9190614d88565b601f600082825461383d9190614f6f565b92505081905550601954601a54826138559190614cff565b61385f9190614d88565b601d60008282546138709190614f6f565b925050819055506139a1565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d757506000601554115b156139a05761390460646138f660155488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601554601754826139179190614cff565b6139219190614d88565b601e60008282546139329190614f6f565b925050819055506015546018548261394a9190614cff565b6139549190614d88565b601f60008282546139659190614f6f565b925050819055506015546016548261397d9190614cff565b6139879190614d88565b601d60008282546139989190614f6f565b925050819055505b5b60008111156139b6576139b5873083613ba4565b5b80856139c291906159f9565b94505b6139d0878787613ba4565b505050505b505050565b6000838311158290613a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1991906147a1565b60405180910390fd5b5060008385613a3191906159f9565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080831415613af25760009050613b54565b60008284613b009190614cff565b9050828482613b0f9190614d88565b14613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690615a9f565b60405180910390fd5b809150505b92915050565b6000613b9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061431f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7b906156b9565b60405180910390fd5b613c8f838383614382565b613cfa81604051806060016040528060268152602001615de4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e2c9190614988565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6e30611514565b90506000601f54601d54601e54613e859190614f6f565b613e8f9190614f6f565b9050600080831480613ea15750600082145b15613eae57505050614148565b6014600954613ebd9190614cff565b831115613ed6576014600954613ed39190614cff565b92505b6000600283601e5486613ee99190614cff565b613ef39190614d88565b613efd9190614d88565b90506000613f14828661438790919063ffffffff16565b90506000479050613f24826143d1565b6000613f39824761438790919063ffffffff16565b90506000613f6487613f56601d5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000613f8f88613f81601f5486613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000818385613fa091906159f9565b613faa91906159f9565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161400a90615af0565b60006040518083038185875af1925050503d8060008114614047576040519150601f19603f3d011682016040523d82523d6000602084013e61404c565b606091505b5050809850506000871180156140625750600081115b156140af57614071878261461d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e546040516140a693929190615b05565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f590615af0565b60006040518083038185875af1925050503d8060008114614132576040519150601f19603f3d011682016040523d82523d6000602084013e614137565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016141ae9190614a32565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe91906153f8565b9050600061422b61271061421d600b5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000811115614264576142637f000000000000000000000000000000000000000000000000000000000000000061dead83613ba4565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290614366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435d91906147a1565b60405180910390fd5b50600083856143759190614d88565b9050809150509392505050565b505050565b60006143c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139da565b905092915050565b6000600267ffffffffffffffff8111156143ee576143ed615b3c565b5b60405190808252806020026020018201604052801561441c5781602001602082028036833780820191505090505b509050308160008151811061443457614433615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144d457600080fd5b505afa1580156144e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450c9190615baf565b816001815181106145205761451f615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614585307f00000000000000000000000000000000000000000000000000000000000000008461298d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e7959493929190615cd5565b600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b505050505050565b614648307f00000000000000000000000000000000000000000000000000000000000000008461298d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146af96959493929190615d2f565b6060604051808303818588803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147019190615d90565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614742578082015181840152602081019050614727565b83811115614751576000848401525b50505050565b6000601f19601f8301169050919050565b600061477382614708565b61477d8185614713565b935061478d818560208601614724565b61479681614757565b840191505092915050565b600060208201905081810360008301526147bb8184614768565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147f3826147c8565b9050919050565b614803816147e8565b811461480e57600080fd5b50565b600081359050614820816147fa565b92915050565b6000819050919050565b61483981614826565b811461484457600080fd5b50565b60008135905061485681614830565b92915050565b60008060408385031215614873576148726147c3565b5b600061488185828601614811565b925050602061489285828601614847565b9150509250929050565b60008115159050919050565b6148b18161489c565b82525050565b60006020820190506148cc60008301846148a8565b92915050565b6000602082840312156148e8576148e76147c3565b5b60006148f684828501614811565b91505092915050565b6000819050919050565b600061492461491f61491a846147c8565b6148ff565b6147c8565b9050919050565b600061493682614909565b9050919050565b60006149488261492b565b9050919050565b6149588161493d565b82525050565b6000602082019050614973600083018461494f565b92915050565b61498281614826565b82525050565b600060208201905061499d6000830184614979565b92915050565b6000602082840312156149b9576149b86147c3565b5b60006149c784828501614847565b91505092915050565b6000806000606084860312156149e9576149e86147c3565b5b60006149f786828701614811565b9350506020614a0886828701614811565b9250506040614a1986828701614847565b9150509250925092565b614a2c816147e8565b82525050565b6000602082019050614a476000830184614a23565b92915050565b600060ff82169050919050565b614a6381614a4d565b82525050565b6000602082019050614a7e6000830184614a5a565b92915050565b614a8d8161489c565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600080600060608486031215614ac957614ac86147c3565b5b6000614ad786828701614847565b9350506020614ae886828701614847565b9250506040614af986828701614a9b565b9150509250925092565b60008060408385031215614b1a57614b196147c3565b5b6000614b2885828601614811565b9250506020614b3985828601614a9b565b9150509250929050565b600080600060608486031215614b5c57614b5b6147c3565b5b6000614b6a86828701614847565b9350506020614b7b86828701614847565b9250506040614b8c86828701614847565b9150509250925092565b600060208284031215614bac57614bab6147c3565b5b6000614bba84828501614a9b565b91505092915050565b60008060408385031215614bda57614bd96147c3565b5b6000614be885828601614811565b9250506020614bf985828601614811565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c4a57607f821691505b60208210811415614c5e57614c5d614c03565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a602083614713565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614826565b9150614d1583614826565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614826565b9150614d9e83614826565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e15602f83614713565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614ea7603383614713565b9150614eb282614e4b565b604082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f39603083614713565b9150614f4482614edd565b604082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b6000614f7a82614826565b9150614f8583614826565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fba57614fb9614cd0565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614ffb601d83614713565b915061500682614fc5565b602082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508d603983614713565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006150f9601d83614713565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061518b602483614713565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061521d603583614713565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152af603483614713565b91506152ba82615253565b604082019050919050565b600060208201905081810360008301526152de816152a2565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061531b602083614713565b9150615326826152e5565b602082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153ad602a83614713565b91506153b882615351565b604082019050919050565b600060208201905081810360008301526153dc816153a0565b9050919050565b6000815190506153f281614830565b92915050565b60006020828403121561540e5761540d6147c3565b5b600061541c848285016153e3565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061545b601b83614713565b915061546682615425565b602082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ed602483614713565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061557f602283614713565b915061558a82615523565b604082019050919050565b600060208201905081810360008301526155ae81615572565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615611602583614713565b915061561c826155b5565b604082019050919050565b6000602082019050818103600083015261564081615604565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156a3602383614713565b91506156ae82615647565b604082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f616d6f756e742061626f7665206d61782072657472616e636500000000000000600082015250565b600061570f601983614713565b915061571a826156d9565b602082019050919050565b6000602082019050818103600083015261573e81615702565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577b601683614713565b915061578682615745565b602082019050919050565b600060208201905081810360008301526157aa8161576e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615833604983614713565b915061583e826157b1565b606082019050919050565b6000602082019050818103600083015261586281615826565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c5603583614713565b91506158d082615869565b604082019050919050565b600060208201905081810360008301526158f4816158b8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615931601383614713565b915061593c826158fb565b602082019050919050565b6000602082019050818103600083015261596081615924565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c3603683614713565b91506159ce82615967565b604082019050919050565b600060208201905081810360008301526159f2816159b6565b9050919050565b6000615a0482614826565b9150615a0f83614826565b925082821015615a2257615a21614cd0565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a89602183614713565b9150615a9482615a2d565b604082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b600081905092915050565b50565b6000615ada600083615abf565b9150615ae582615aca565b600082019050919050565b6000615afb82615acd565b9150819050919050565b6000606082019050615b1a6000830186614979565b615b276020830185614979565b615b346040830184614979565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ba9816147fa565b92915050565b600060208284031215615bc557615bc46147c3565b5b6000615bd384828501615b9a565b91505092915050565b6000819050919050565b6000615c01615bfc615bf784615bdc565b6148ff565b614826565b9050919050565b615c1181615be6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4c816147e8565b82525050565b6000615c5e8383615c43565b60208301905092915050565b6000602082019050919050565b6000615c8282615c17565b615c8c8185615c22565b9350615c9783615c33565b8060005b83811015615cc8578151615caf8882615c52565b9750615cba83615c6a565b925050600181019050615c9b565b5085935050505092915050565b600060a082019050615cea6000830188614979565b615cf76020830187615c08565b8181036040830152615d098186615c77565b9050615d186060830185614a23565b615d256080830184614979565b9695505050505050565b600060c082019050615d446000830189614a23565b615d516020830188614979565b615d5e6040830187615c08565b615d6b6060830186615c08565b615d786080830185614a23565b615d8560a0830184614979565b979650505050505050565b600080600060608486031215615da957615da86147c3565b5b6000615db7868287016153e3565b9350506020615dc8868287016153e3565b9250506040615dd9868287016153e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d43ed3d24552b17dabe98cacc26047fffe4b9505910431067e2e56efb7e818a64736f6c63430008090033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638a8c523c116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dbd578063f637434214610de8578063f8b45b0514610e13578063fe72b27a14610e3e576103a2565b8063d85ba06314610cff578063dd62ed3e14610d2a578063e2f4560514610d67578063e884f26014610d92576103a2565b8063c18bc195116100dc578063c18bc19514610c43578063c876d0b914610c6c578063c8c8ebe414610c97578063d257b34f14610cc2576103a2565b8063bbc0c74214610bc6578063c024666814610bf1578063c17b5b8c14610c1a576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610af8578063a9059cbb14610b23578063aacebbe314610b60578063b62496f514610b89576103a2565b80639ec22c0e14610a3a5780639fccce3214610a65578063a0d82dc514610a90578063a457c2d714610abb576103a2565b8063924de9b7116101b6578063924de9b71461099257806395d89b41146109bb5780639a7a23d6146109e65780639c3b4fdc14610a0f576103a2565b80638a8c523c146109255780638ea5220f1461093c5780639213691314610967576103a2565b8063313ce567116102c15780636ddd17131161025f5780637571336a1161022e5780637571336a1461087d57806375f0a874146108a65780637bce5a04146108d15780638095d564146108fc576103a2565b80636ddd1713146107c157806370a08231146107ec578063730c188814610829578063751039fc14610852576103a2565b806349bd5a5e1161029b57806349bd5a5e146107035780634a62bb651461072e5780634fbee193146107595780636a486a8e14610796576103a2565b8063313ce56714610672578063395093511461069d578063445218f2146106da576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105b457806327c8f835146105f15780632c3e486c1461061c5780632e82f1a014610647576103a2565b8063199ffc721461050a5780631a8145bb146105355780631f3fed8f14610560578063203e727e1461058b576103a2565b806310d5de531161037557806310d5de531461044c5780631694505e1461048957806318160ddd146104b4578063184c16c5146104df576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630ffe3f3e1461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e7b565b6040516103c991906147a1565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f4919061485c565b610f0d565b60405161040691906148b7565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148d2565b610f2b565b60405161044391906148b7565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906148d2565b610f81565b60405161048091906148b7565b60405180910390f35b34801561049557600080fd5b5061049e610fa1565b6040516104ab919061495e565b60405180910390f35b3480156104c057600080fd5b506104c9610fc5565b6040516104d69190614988565b60405180910390f35b3480156104eb57600080fd5b506104f4610fcf565b6040516105019190614988565b60405180910390f35b34801561051657600080fd5b5061051f610fd5565b60405161052c9190614988565b60405180910390f35b34801561054157600080fd5b5061054a610fdb565b6040516105579190614988565b60405180910390f35b34801561056c57600080fd5b50610575610fe1565b6040516105829190614988565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906149a3565b610fe7565b005b3480156105c057600080fd5b506105db60048036038101906105d691906149d0565b611111565b6040516105e891906148b7565b60405180910390f35b3480156105fd57600080fd5b506106066111ea565b6040516106139190614a32565b60405180910390f35b34801561062857600080fd5b506106316111f0565b60405161063e9190614988565b60405180910390f35b34801561065357600080fd5b5061065c6111f6565b60405161066991906148b7565b60405180910390f35b34801561067e57600080fd5b50610687611209565b6040516106949190614a69565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf919061485c565b611212565b6040516106d191906148b7565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc91906148d2565b6112c5565b005b34801561070f57600080fd5b5061071861146e565b6040516107259190614a32565b60405180910390f35b34801561073a57600080fd5b50610743611492565b60405161075091906148b7565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906148d2565b6114a5565b60405161078d91906148b7565b60405180910390f35b3480156107a257600080fd5b506107ab6114fb565b6040516107b89190614988565b60405180910390f35b3480156107cd57600080fd5b506107d6611501565b6040516107e391906148b7565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e91906148d2565b611514565b6040516108209190614988565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190614ab0565b61155c565b005b34801561085e57600080fd5b506108676116b7565b60405161087491906148b7565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190614b03565b611772565b005b3480156108b257600080fd5b506108bb611864565b6040516108c89190614a32565b60405180910390f35b3480156108dd57600080fd5b506108e661188a565b6040516108f39190614988565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e9190614b43565b611890565b005b34801561093157600080fd5b5061093a6119aa565b005b34801561094857600080fd5b50610951611a80565b60405161095e9190614a32565b60405180910390f35b34801561097357600080fd5b5061097c611aa6565b6040516109899190614988565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190614b96565b611aac565b005b3480156109c757600080fd5b506109d0611b60565b6040516109dd91906147a1565b60405180910390f35b3480156109f257600080fd5b50610a0d6004803603810190610a089190614b03565b611bf2565b005b348015610a1b57600080fd5b50610a24611d26565b604051610a319190614988565b60405180910390f35b348015610a4657600080fd5b50610a4f611d2c565b604051610a5c9190614988565b60405180910390f35b348015610a7157600080fd5b50610a7a611d32565b604051610a879190614988565b60405180910390f35b348015610a9c57600080fd5b50610aa5611d38565b604051610ab29190614988565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add919061485c565b611d3e565b604051610aef91906148b7565b60405180910390f35b348015610b0457600080fd5b50610b0d611e0b565b604051610b1a9190614988565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061485c565b611e11565b604051610b5791906148b7565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b8291906148d2565b611e2f565b005b348015610b9557600080fd5b50610bb06004803603810190610bab91906148d2565b611f86565b604051610bbd91906148b7565b60405180910390f35b348015610bd257600080fd5b50610bdb611fa6565b604051610be891906148b7565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c139190614b03565b611fb9565b005b348015610c2657600080fd5b50610c416004803603810190610c3c9190614b43565b6120f9565b005b348015610c4f57600080fd5b50610c6a6004803603810190610c6591906149a3565b612212565b005b348015610c7857600080fd5b50610c8161233c565b604051610c8e91906148b7565b60405180910390f35b348015610ca357600080fd5b50610cac61234f565b604051610cb99190614988565b60405180910390f35b348015610cce57600080fd5b50610ce96004803603810190610ce491906149a3565b612355565b604051610cf691906148b7565b60405180910390f35b348015610d0b57600080fd5b50610d146124c5565b604051610d219190614988565b60405180910390f35b348015610d3657600080fd5b50610d516004803603810190610d4c9190614bc3565b6124cb565b604051610d5e9190614988565b60405180910390f35b348015610d7357600080fd5b50610d7c612552565b604051610d899190614988565b60405180910390f35b348015610d9e57600080fd5b50610da7612558565b604051610db491906148b7565b60405180910390f35b348015610dc957600080fd5b50610dd2612613565b604051610ddf9190614988565b60405180910390f35b348015610df457600080fd5b50610dfd612619565b604051610e0a9190614988565b60405180910390f35b348015610e1f57600080fd5b50610e2861261f565b604051610e359190614988565b60405180910390f35b348015610e4a57600080fd5b50610e656004803603810190610e6091906149a3565b612625565b604051610e7291906148b7565b60405180910390f35b606060038054610e8a90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c32565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612985565b848461298d565b6001905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b610fef612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614cb0565b60405180910390fd5b670de0b6b3a76400006103e86001611094610fc5565b61109e9190614cff565b6110a89190614d88565b6110b29190614d88565b8110156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614e2b565b60405180910390fd5b670de0b6b3a7640000816111089190614cff565b60088190555050565b600061111e848484612b58565b6111df8461112a612985565b6111da85604051806060016040528060288152602001615e0a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611190612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006112bb61121f612985565b846112b68560016000611230612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b61298d565b6001905092915050565b6112cd612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614cb0565b60405180910390fd5b60011515601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611412576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061146b565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b7f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f81565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611564612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90614cb0565b60405180910390fd5b610258831015611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614ebd565b60405180910390fd5b6103e8821115801561164b575060008210155b61168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168190614f4f565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116c1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614cb0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61177a612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614cb0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611898612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90614cb0565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461194f9190614f6f565b6119599190614f6f565b601581905550601460155411156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90615011565b60405180910390fd5b505050565b6119b2612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614cb0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611ab4612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614cb0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b6f90614c32565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614c32565b8015611be85780601f10611bbd57610100808354040283529160200191611be8565b820191906000526020600020905b815481529060010190602001808311611bcb57829003601f168201915b5050505050905090565b611bfa612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614cb0565b60405180910390fd5b7f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f906150a3565b60405180910390fd5b611d228282613a3e565b5050565b60185481565b60105481565b601f5481565b601c5481565b6000611e01611d4b612985565b84611dfc85604051806060016040528060258152602001615e326025913960016000611d75612985565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b61298d565b6001905092915050565b600e5481565b6000611e25611e1e612985565b8484612b58565b6001905092915050565b611e37612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614cb0565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611fc1612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790614cb0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ed91906148b7565b60405180910390a25050565b612101612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614cb0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121b89190614f6f565b6121c29190614f6f565b60198190555060198054111561220d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122049061510f565b60405180910390fd5b505050565b61221a612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614cb0565b60405180910390fd5b670de0b6b3a76400006103e860056122bf610fc5565b6122c99190614cff565b6122d39190614d88565b6122dd9190614d88565b81101561231f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612316906151a1565b60405180910390fd5b670de0b6b3a7640000816123339190614cff565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b600061235f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e590614cb0565b60405180910390fd5b620186a060016123fc610fc5565b6124069190614cff565b6124109190614d88565b821015612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990615233565b60405180910390fd5b6103e8600561245f610fc5565b6124699190614cff565b6124739190614d88565b8211156124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906152c5565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612562612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614cb0565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b601b5481565b600a5481565b600061262f612985565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cb0565b60405180910390fd5b600f546010546126ce9190614f6f565b421161270f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270690615331565b60405180910390fd5b611388821115612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b906153c3565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f6040518263ffffffff1660e01b81526004016127b69190614a32565b60206040518083038186803b1580156127ce57600080fd5b505afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906153f8565b905060006128316127106128238685613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050600081111561286a576128697f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f61dead83613ba4565b5b60007f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128d757600080fd5b505af11580156128eb573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846129369190614f6f565b90508381101561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615471565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490615503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490615595565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4b9190614988565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2f906156b9565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cd95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d225760018114612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890615725565b60405180910390fd5b5b6000811415612d3c57612d3783836000613ba4565b6139d5565b601160009054906101000a900460ff16156133ff57612d59613e39565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dc75750612d97613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e005750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e3a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e535750600560149054906101000a900460ff16155b156133fe57601160019054906101000a900460ff16612f4d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390615791565b60405180910390fd5b5b601460009054906101000a900460ff161561311557612f6a613e39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ff157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561304957507f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131145743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c690615849565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b85750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561325f57600854811115613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906158db565b60405180910390fd5b600a5461320e83611514565b826132199190614f6f565b111561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190615947565b60405180910390fd5b6133fd565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133025750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515760085481111561334c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613343906159d9565b60405180910390fd5b6133fc565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133fb57600a546133ae83611514565b826133b99190614f6f565b11156133fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f190615947565b60405180910390fd5b5b5b5b5b5b600061340a30611514565b90506000600954821015905080801561342f5750601160029054906101000a900460ff165b80156134485750600560149054906101000a900460ff16155b801561349e5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134f45750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354a5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561358e576001600560146101000a81548160ff021916908315150217905550613572613e63565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135f45750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561360c5750600c60009054906101000a900460ff165b80156136275750600d54600e546136239190614f6f565b4210155b801561367d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561368c5761368a61414a565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137425750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374c57600090505b600081156139c557602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137af57506000601954115b1561387c576137dc60646137ce60195488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601954601b54826137ef9190614cff565b6137f99190614d88565b601e600082825461380a9190614f6f565b92505081905550601954601c54826138229190614cff565b61382c9190614d88565b601f600082825461383d9190614f6f565b92505081905550601954601a54826138559190614cff565b61385f9190614d88565b601d60008282546138709190614f6f565b925050819055506139a1565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d757506000601554115b156139a05761390460646138f660155488613adf90919063ffffffff16565b613b5a90919063ffffffff16565b9050601554601754826139179190614cff565b6139219190614d88565b601e60008282546139329190614f6f565b925050819055506015546018548261394a9190614cff565b6139549190614d88565b601f60008282546139659190614f6f565b925050819055506015546016548261397d9190614cff565b6139879190614d88565b601d60008282546139989190614f6f565b925050819055505b5b60008111156139b6576139b5873083613ba4565b5b80856139c291906159f9565b94505b6139d0878787613ba4565b505050505b505050565b6000838311158290613a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1991906147a1565b60405180910390fd5b5060008385613a3191906159f9565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080831415613af25760009050613b54565b60008284613b009190614cff565b9050828482613b0f9190614d88565b14613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690615a9f565b60405180910390fd5b809150505b92915050565b6000613b9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061431f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0b90615627565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7b906156b9565b60405180910390fd5b613c8f838383614382565b613cfa81604051806060016040528060268152602001615de4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139da9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e2c9190614988565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6e30611514565b90506000601f54601d54601e54613e859190614f6f565b613e8f9190614f6f565b9050600080831480613ea15750600082145b15613eae57505050614148565b6014600954613ebd9190614cff565b831115613ed6576014600954613ed39190614cff565b92505b6000600283601e5486613ee99190614cff565b613ef39190614d88565b613efd9190614d88565b90506000613f14828661438790919063ffffffff16565b90506000479050613f24826143d1565b6000613f39824761438790919063ffffffff16565b90506000613f6487613f56601d5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000613f8f88613f81601f5486613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000818385613fa091906159f9565b613faa91906159f9565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161400a90615af0565b60006040518083038185875af1925050503d8060008114614047576040519150601f19603f3d011682016040523d82523d6000602084013e61404c565b606091505b5050809850506000871180156140625750600081115b156140af57614071878261461d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e546040516140a693929190615b05565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f590615af0565b60006040518083038185875af1925050503d8060008114614132576040519150601f19603f3d011682016040523d82523d6000602084013e614137565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f6040518263ffffffff1660e01b81526004016141ae9190614a32565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe91906153f8565b9050600061422b61271061421d600b5485613adf90919063ffffffff16565b613b5a90919063ffffffff16565b90506000811115614264576142637f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f61dead83613ba4565b5b60007f000000000000000000000000356a05079d0187adbdc07084042711291aee3c1f90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142d157600080fd5b505af11580156142e5573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290614366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161435d91906147a1565b60405180910390fd5b50600083856143759190614d88565b9050809150509392505050565b505050565b60006143c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139da565b905092915050565b6000600267ffffffffffffffff8111156143ee576143ed615b3c565b5b60405190808252806020026020018201604052801561441c5781602001602082028036833780820191505090505b509050308160008151811061443457614433615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144d457600080fd5b505afa1580156144e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450c9190615baf565b816001815181106145205761451f615b6b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614585307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461298d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e7959493929190615cd5565b600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b505050505050565b614648307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461298d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146af96959493929190615d2f565b6060604051808303818588803b1580156146c857600080fd5b505af11580156146dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906147019190615d90565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614742578082015181840152602081019050614727565b83811115614751576000848401525b50505050565b6000601f19601f8301169050919050565b600061477382614708565b61477d8185614713565b935061478d818560208601614724565b61479681614757565b840191505092915050565b600060208201905081810360008301526147bb8184614768565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147f3826147c8565b9050919050565b614803816147e8565b811461480e57600080fd5b50565b600081359050614820816147fa565b92915050565b6000819050919050565b61483981614826565b811461484457600080fd5b50565b60008135905061485681614830565b92915050565b60008060408385031215614873576148726147c3565b5b600061488185828601614811565b925050602061489285828601614847565b9150509250929050565b60008115159050919050565b6148b18161489c565b82525050565b60006020820190506148cc60008301846148a8565b92915050565b6000602082840312156148e8576148e76147c3565b5b60006148f684828501614811565b91505092915050565b6000819050919050565b600061492461491f61491a846147c8565b6148ff565b6147c8565b9050919050565b600061493682614909565b9050919050565b60006149488261492b565b9050919050565b6149588161493d565b82525050565b6000602082019050614973600083018461494f565b92915050565b61498281614826565b82525050565b600060208201905061499d6000830184614979565b92915050565b6000602082840312156149b9576149b86147c3565b5b60006149c784828501614847565b91505092915050565b6000806000606084860312156149e9576149e86147c3565b5b60006149f786828701614811565b9350506020614a0886828701614811565b9250506040614a1986828701614847565b9150509250925092565b614a2c816147e8565b82525050565b6000602082019050614a476000830184614a23565b92915050565b600060ff82169050919050565b614a6381614a4d565b82525050565b6000602082019050614a7e6000830184614a5a565b92915050565b614a8d8161489c565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600080600060608486031215614ac957614ac86147c3565b5b6000614ad786828701614847565b9350506020614ae886828701614847565b9250506040614af986828701614a9b565b9150509250925092565b60008060408385031215614b1a57614b196147c3565b5b6000614b2885828601614811565b9250506020614b3985828601614a9b565b9150509250929050565b600080600060608486031215614b5c57614b5b6147c3565b5b6000614b6a86828701614847565b9350506020614b7b86828701614847565b9250506040614b8c86828701614847565b9150509250925092565b600060208284031215614bac57614bab6147c3565b5b6000614bba84828501614a9b565b91505092915050565b60008060408385031215614bda57614bd96147c3565b5b6000614be885828601614811565b9250506020614bf985828601614811565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c4a57607f821691505b60208210811415614c5e57614c5d614c03565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c9a602083614713565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d0a82614826565b9150614d1583614826565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4e57614d4d614cd0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9382614826565b9150614d9e83614826565b925082614dae57614dad614d59565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e15602f83614713565b9150614e2082614db9565b604082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614ea7603383614713565b9150614eb282614e4b565b604082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614f39603083614713565b9150614f4482614edd565b604082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b6000614f7a82614826565b9150614f8583614826565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fba57614fb9614cd0565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614ffb601d83614713565b915061500682614fc5565b602082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061508d603983614713565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006150f9601d83614713565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061518b602483614713565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061521d603583614713565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152af603483614713565b91506152ba82615253565b604082019050919050565b600060208201905081810360008301526152de816152a2565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061531b602083614713565b9150615326826152e5565b602082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153ad602a83614713565b91506153b882615351565b604082019050919050565b600060208201905081810360008301526153dc816153a0565b9050919050565b6000815190506153f281614830565b92915050565b60006020828403121561540e5761540d6147c3565b5b600061541c848285016153e3565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061545b601b83614713565b915061546682615425565b602082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154ed602483614713565b91506154f882615491565b604082019050919050565b6000602082019050818103600083015261551c816154e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061557f602283614713565b915061558a82615523565b604082019050919050565b600060208201905081810360008301526155ae81615572565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615611602583614713565b915061561c826155b5565b604082019050919050565b6000602082019050818103600083015261564081615604565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156a3602383614713565b91506156ae82615647565b604082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f616d6f756e742061626f7665206d61782072657472616e636500000000000000600082015250565b600061570f601983614713565b915061571a826156d9565b602082019050919050565b6000602082019050818103600083015261573e81615702565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061577b601683614713565b915061578682615745565b602082019050919050565b600060208201905081810360008301526157aa8161576e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615833604983614713565b915061583e826157b1565b606082019050919050565b6000602082019050818103600083015261586281615826565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158c5603583614713565b91506158d082615869565b604082019050919050565b600060208201905081810360008301526158f4816158b8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615931601383614713565b915061593c826158fb565b602082019050919050565b6000602082019050818103600083015261596081615924565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159c3603683614713565b91506159ce82615967565b604082019050919050565b600060208201905081810360008301526159f2816159b6565b9050919050565b6000615a0482614826565b9150615a0f83614826565b925082821015615a2257615a21614cd0565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a89602183614713565b9150615a9482615a2d565b604082019050919050565b60006020820190508181036000830152615ab881615a7c565b9050919050565b600081905092915050565b50565b6000615ada600083615abf565b9150615ae582615aca565b600082019050919050565b6000615afb82615acd565b9150819050919050565b6000606082019050615b1a6000830186614979565b615b276020830185614979565b615b346040830184614979565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ba9816147fa565b92915050565b600060208284031215615bc557615bc46147c3565b5b6000615bd384828501615b9a565b91505092915050565b6000819050919050565b6000615c01615bfc615bf784615bdc565b6148ff565b614826565b9050919050565b615c1181615be6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4c816147e8565b82525050565b6000615c5e8383615c43565b60208301905092915050565b6000602082019050919050565b6000615c8282615c17565b615c8c8185615c22565b9350615c9783615c33565b8060005b83811015615cc8578151615caf8882615c52565b9750615cba83615c6a565b925050600181019050615c9b565b5085935050505092915050565b600060a082019050615cea6000830188614979565b615cf76020830187615c08565b8181036040830152615d098186615c77565b9050615d186060830185614a23565b615d256080830184614979565b9695505050505050565b600060c082019050615d446000830189614a23565b615d516020830188614979565b615d5e6040830187615c08565b615d6b6060830186615c08565b615d786080830185614a23565b615d8560a0830184614979565b979650505050505050565b600080600060608486031215615da957615da86147c3565b5b6000615db7868287016153e3565b9350506020615dc8868287016153e3565b9250506040615dd9868287016153e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207d43ed3d24552b17dabe98cacc26047fffe4b9505910431067e2e56efb7e818a64736f6c63430008090033

Deployed Bytecode Sourcemap

26938:16406:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7156:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8931:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32293:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28521:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27019:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7884:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27595:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27407:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28381:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28341;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32413:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9333:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27122:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27502:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27463:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7726:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10019:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32091:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27077:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27692:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34776:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28192:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27772:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8055:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41552:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31420:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32882:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27214:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28081;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33151:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31253:155;;;;;;;;;;;;;:::i;:::-;;27251:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28227:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33038:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7375:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34108:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28155:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27648:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28421:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28303:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10740:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27553:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8395:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34556:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28594:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27732:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33918:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33532:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32655:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27991:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27288:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31698:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28047:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8633:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27330:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31552:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28118:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28265:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27370:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42593:748;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7156:100;7210:13;7243:5;7236:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7156:100;:::o;8931:169::-;9014:4;9031:39;9040:12;:10;:12::i;:::-;9054:7;9063:6;9031:8;:39::i;:::-;9088:4;9081:11;;8931:169;;;;:::o;32293:112::-;32352:4;32376:12;:21;32389:7;32376:21;;;;;;;;;;;;;;;;;;;;;;;;;32369:28;;32293:112;;;:::o;28521:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;27019:51::-;;;:::o;7884:108::-;7945:7;7972:12;;7965:19;;7884:108;:::o;27595:46::-;;;;:::o;27407:36::-;;;;:::o;28381:33::-;;;;:::o;28341:::-;;;;:::o;32413:234::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32532:4:::1;32526;32522:1;32506:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32505:31;;;;:::i;:::-;32495:6;:41;;32487:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;32632:6;32622;:17;;;;:::i;:::-;32599:20;:40;;;;32413:234:::0;:::o;9333:355::-;9473:4;9490:36;9500:6;9508:9;9519:6;9490:9;:36::i;:::-;9537:121;9546:6;9554:12;:10;:12::i;:::-;9568:89;9606:6;9568:89;;;;;;;;;;;;;;;;;:11;:19;9580:6;9568:19;;;;;;;;;;;;;;;:33;9588:12;:10;:12::i;:::-;9568:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9537:8;:121::i;:::-;9676:4;9669:11;;9333:355;;;;;:::o;27122:53::-;27168:6;27122:53;:::o;27502:44::-;;;;:::o;27463:32::-;;;;;;;;;;;;;:::o;7726:93::-;7784:5;7809:2;7802:9;;7726:93;:::o;10019:218::-;10107:4;10124:83;10133:12;:10;:12::i;:::-;10147:7;10156:50;10195:10;10156:11;:25;10168:12;:10;:12::i;:::-;10156:25;;;;;;;;;;;;;;;:34;10182:7;10156:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10124:8;:83::i;:::-;10225:4;10218:11;;10019:218;;;;:::o;32091:194::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32194:4:::1;32169:29;;:12;:21;32182:7;32169:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;32165:113;;;32225:5;32201:12;:21;32214:7;32201:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32165:113;;;32272:4;32248:12;:21;32261:7;32248:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32165:113;32091:194:::0;:::o;27077:38::-;;;:::o;27692:33::-;;;;;;;;;;;;;:::o;34776:125::-;34841:4;34865:19;:28;34885:7;34865:28;;;;;;;;;;;;;;;;;;;;;;;;;34858:35;;34776:125;;;:::o;28192:28::-;;;;:::o;27772:31::-;;;;;;;;;;;;;:::o;8055:127::-;8129:7;8156:9;:18;8166:7;8156:18;;;;;;;;;;;;;;;;8149:25;;8055:127;;;:::o;41552:447::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41706:3:::1;41683:19;:26;;41675:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;41796:4;41784:8;:16;;:33;;;;;41816:1;41804:8;:13;;41784:33;41776:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;41899:19;41881:15;:37;;;;41948:8;41929:16;:27;;;;41983:8;41967:13;;:24;;;;;;;;;;;;;;;;;;41552:447:::0;;;:::o;31420:120::-;31472:4;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31505:5:::1;31488:14;;:22;;;;;;;;;;;;;;;;;;31528:4;31521:11;;31420:120:::0;:::o;32882:144::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33014:4:::1;32972:31;:39;33004:6;32972:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32882:144:::0;;:::o;27214:30::-;;;;;;;;;;;;;:::o;28081:::-;;;;:::o;33151:369::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33285:13:::1;33267:15;:31;;;;33327:13;33309:15;:31;;;;33363:7;33351:9;:19;;;;33432:9;;33414:15;;33396;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;33381:12;:60;;;;33476:2;33460:12;;:18;;33452:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33151:369:::0;;;:::o;31253:155::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31324:4:::1;31308:13;;:20;;;;;;;;;;;;;;;;;;31353:4;31339:11;;:18;;;;;;;;;;;;;;;;;;31385:15;31368:14;:32;;;;31253:155::o:0;27251:24::-;;;;;;;;;;;;;:::o;28227:31::-;;;;:::o;33038:101::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33124:7:::1;33110:11;;:21;;;;;;;;;;;;;;;;;;33038:101:::0;:::o;7375:104::-;7431:13;7464:7;7457:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7375:104;:::o;34108:244::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34215:13:::1;34207:21;;:4;:21;;;;34199:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34303:41;34332:4;34338:5;34303:28;:41::i;:::-;34108:244:::0;;:::o;28155:24::-;;;;:::o;27648:35::-;;;;:::o;28421:27::-;;;;:::o;28303:25::-;;;;:::o;10740:269::-;10833:4;10850:129;10859:12;:10;:12::i;:::-;10873:7;10882:96;10921:15;10882:96;;;;;;;;;;;;;;;;;:11;:25;10894:12;:10;:12::i;:::-;10882:25;;;;;;;;;;;;;;;:34;10908:7;10882:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;10850:8;:129::i;:::-;10997:4;10990:11;;10740:269;;;;:::o;27553:29::-;;;;:::o;8395:175::-;8481:4;8498:42;8508:12;:10;:12::i;:::-;8522:9;8533:6;8498:9;:42::i;:::-;8558:4;8551:11;;8395:175;;;;:::o;34556:208::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34693:15:::1;;;;;;;;;;;34650:59;;34673:18;34650:59;;;;;;;;;;;;34738:18;34720:15;;:36;;;;;;;;;;;;;;;;;;34556:208:::0;:::o;28594:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;27732:33::-;;;;;;;;;;;;;:::o;33918:182::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34034:8:::1;34003:19;:28;34023:7;34003:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34074:7;34058:34;;;34083:8;34058:34;;;;;;:::i;:::-;;;;;;;;33918:182:::0;;:::o;33532:378::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33668:13:::1;33649:16;:32;;;;33711:13;33692:16;:32;;;;33748:7;33735:10;:20;;;;33820:10;;33801:16;;33782;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;33766:13;:64;;;;33866:2;33849:13:::0;::::1;:19;;33841:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33532:378:::0;;;:::o;32655:215::-;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32777:4:::1;32771;32767:1;32751:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32750:31;;;;:::i;:::-;32740:6;:41;;32732:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;32855:6;32845;:17;;;;:::i;:::-;32833:9;:29;;;;32655:215:::0;:::o;27991:39::-;;;;;;;;;;;;;:::o;27288:35::-;;;;:::o;31698:381::-;31779:4;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31835:6:::1;31831:1;31815:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;31802:9;:39;;31794:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;31950:4;31946:1;31930:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;31917:9;:37;;31909:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;32042:9;32021:18;:30;;;;32068:4;32061:11;;31698:381:::0;;;:::o;28047:27::-;;;;:::o;8633:151::-;8722:7;8749:11;:18;8761:5;8749:18;;;;;;;;;;;;;;;:27;8768:7;8749:27;;;;;;;;;;;;;;;;8742:34;;8633:151;;;;:::o;27330:33::-;;;;:::o;31552:134::-;31612:4;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31651:5:::1;31628:20;;:28;;;;;;;;;;;;;;;;;;31674:4;31667:11;;31552:134:::0;:::o;28118:30::-;;;;:::o;28265:31::-;;;;:::o;27370:24::-;;;;:::o;42593:748::-;42677:4;20037:12;:10;:12::i;:::-;20027:22;;:6;;;;;;;;;;;:22;;;20019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42742:19:::1;;42719:20;;:42;;;;:::i;:::-;42701:15;:60;42693:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;42829:4;42818:7;:15;;42810:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42914:15;42891:20;:38;;;;42940:28;42971:4;:14;;;42986:13;42971:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42940:60;;43011:20;43034:44;43072:5;43034:33;43059:7;43034:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;43011:67;;43108:1;43093:12;:16;43089:109;;;43125:61;43141:13;43164:6;43173:12;43125:15;:61::i;:::-;43089:109;43208:19;43245:13;43208:51;;43270:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43297:14;;;;;;;;;;43329:4;43322:11;;;;;42593:748:::0;;;:::o;15116:181::-;15174:7;15194:9;15210:1;15206;:5;;;;:::i;:::-;15194:17;;15235:1;15230;:6;;15222:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15288:1;15281:8;;;15116:181;;;;:::o;225:98::-;278:7;305:10;298:17;;225:98;:::o;13738:380::-;13891:1;13874:19;;:5;:19;;;;13866:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13972:1;13953:21;;:7;:21;;;;13945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14056:6;14026:11;:18;14038:5;14026:18;;;;;;;;;;;;;;;:27;14045:7;14026:27;;;;;;;;;;;;;;;:36;;;;14094:7;14078:32;;14087:5;14078:32;;;14103:6;14078:32;;;;;;:::i;:::-;;;;;;;;13738:380;;;:::o;34963:4082::-;35111:1;35095:18;;:4;:18;;;;35087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35188:1;35174:16;;:2;:16;;;;35166:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35257:12;:18;35270:4;35257:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;35279:12;:16;35292:2;35279:16;;;;;;;;;;;;;;;;;;;;;;;;;35257:38;35253:106;;;35328:1;35318:6;:11;35310:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;35253:106;35386:1;35376:6;:11;35373:92;;;35404:28;35420:4;35426:2;35430:1;35404:15;:28::i;:::-;35447:7;;35373:92;35488:14;;;;;;;;;;;35485:1650;;;35548:7;:5;:7::i;:::-;35540:15;;:4;:15;;;;:49;;;;;35582:7;:5;:7::i;:::-;35576:13;;:2;:13;;;;35540:49;:86;;;;;35624:1;35610:16;;:2;:16;;;;35540:86;:128;;;;;35661:6;35647:21;;:2;:21;;;;35540:128;:158;;;;;35690:8;;;;;;;;;;;35689:9;35540:158;35518:1606;;;35736:13;;;;;;;;;;;35732:148;;35781:19;:25;35801:4;35781:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35810:19;:23;35830:2;35810:23;;;;;;;;;;;;;;;;;;;;;;;;;35781:52;35773:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35732:148;35904:20;;;;;;;;;;;35900:423;;;35958:7;:5;:7::i;:::-;35952:13;;:2;:13;;;;:47;;;;;35983:15;35969:30;;:2;:30;;;;35952:47;:79;;;;;36017:13;36003:28;;:2;:28;;;;35952:79;35948:356;;;36109:12;36067:28;:39;36096:9;36067:39;;;;;;;;;;;;;;;;:54;36059:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36268:12;36226:28;:39;36255:9;36226:39;;;;;;;;;;;;;;;:54;;;;35948:356;35900:423;36364:25;:31;36390:4;36364:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36400:31;:35;36432:2;36400:35;;;;;;;;;;;;;;;;;;;;;;;;;36399:36;36364:71;36360:749;;;36482:20;;36472:6;:30;;36464:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36621:9;;36604:13;36614:2;36604:9;:13::i;:::-;36595:6;:22;;;;:::i;:::-;:35;;36587:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36360:749;;;36719:25;:29;36745:2;36719:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36753:31;:37;36785:4;36753:37;;;;;;;;;;;;;;;;;;;;;;;;;36752:38;36719:71;36715:394;;;36837:20;;36827:6;:30;;36819:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;36715:394;;;36963:31;:35;36995:2;36963:35;;;;;;;;;;;;;;;;;;;;;;;;;36959:150;;37056:9;;37039:13;37049:2;37039:9;:13::i;:::-;37030:6;:22;;;;:::i;:::-;:35;;37022:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36959:150;36715:394;36360:749;35518:1606;35485:1650;37169:28;37200:24;37218:4;37200:9;:24::i;:::-;37169:55;;37245:12;37284:18;;37260:20;:42;;37245:57;;37333:7;:35;;;;;37357:11;;;;;;;;;;;37333:35;:61;;;;;37386:8;;;;;;;;;;;37385:9;37333:61;:110;;;;;37412:25;:31;37438:4;37412:31;;;;;;;;;;;;;;;;;;;;;;;;;37411:32;37333:110;:153;;;;;37461:19;:25;37481:4;37461:25;;;;;;;;;;;;;;;;;;;;;;;;;37460:26;37333:153;:194;;;;;37504:19;:23;37524:2;37504:23;;;;;;;;;;;;;;;;;;;;;;;;;37503:24;37333:194;37315:338;;;37565:4;37554:8;;:15;;;;;;;;;;;;;;;;;;37598:10;:8;:10::i;:::-;37636:5;37625:8;;:16;;;;;;;;;;;;;;;;;;37315:338;37677:8;;;;;;;;;;;37676:9;:42;;;;;37689:25;:29;37715:2;37689:29;;;;;;;;;;;;;;;;;;;;;;;;;37676:42;:59;;;;;37722:13;;;;;;;;;;;37676:59;:114;;;;;37775:15;;37758:14;;:32;;;;:::i;:::-;37739:15;:51;;37676:114;:144;;;;;37795:19;:25;37815:4;37795:25;;;;;;;;;;;;;;;;;;;;;;;;;37794:26;37676:144;37673:204;;;37836:29;:27;:29::i;:::-;;37673:204;37889:12;37905:8;;;;;;;;;;;37904:9;37889:24;;37929:19;:25;37949:4;37929:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37958:19;:23;37978:2;37958:23;;;;;;;;;;;;;;;;;;;;;;;;;37929:52;37926:99;;;38008:5;37998:15;;37926:99;38045:12;38075:7;38072:920;;;38102:25;:29;38128:2;38102:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38151:1;38135:13;;:17;38102:50;38098:725;;;38179:34;38209:3;38179:25;38190:13;;38179:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38172:41;;38280:13;;38261:16;;38254:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38232:18;;:61;;;;;;;:::i;:::-;;;;;;;;38348:13;;38335:10;;38328:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;38312:12;;:49;;;;;;;:::i;:::-;;;;;;;;38428:13;;38409:16;;38402:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38380:18;;:61;;;;;;;:::i;:::-;;;;;;;;38098:725;;;38479:25;:31;38505:4;38479:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38529:1;38514:12;;:16;38479:51;38476:347;;;38555:33;38584:3;38555:24;38566:12;;38555:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38548:40;;38651:12;;38633:15;;38626:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38604:18;;:59;;;;;;;:::i;:::-;;;;;;;;38717:12;;38705:9;;38698:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;38682:12;;:47;;;;;;;:::i;:::-;;;;;;;;38795:12;;38777:15;;38770:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38748:18;;:59;;;;;;;:::i;:::-;;;;;;;;38476:347;38098:725;38861:1;38854:4;:8;38851:93;;;38886:42;38902:4;38916;38923;38886:15;:42::i;:::-;38851:93;38976:4;38966:14;;;;;:::i;:::-;;;38072:920;39004:33;39020:4;39026:2;39030:6;39004:15;:33::i;:::-;35076:3969;;;;34963:4082;;;;:::o;16019:192::-;16105:7;16138:1;16133;:6;;16141:12;16125:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16165:9;16181:1;16177;:5;;;;:::i;:::-;16165:17;;16202:1;16195:8;;;16019:192;;;;;:::o;34360:188::-;34477:5;34443:25;:31;34469:4;34443:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34534:5;34500:40;;34528:4;34500:40;;;;;;;;;;;;34360:188;;:::o;16470:471::-;16528:7;16778:1;16773;:6;16769:47;;;16803:1;16796:8;;;;16769:47;16828:9;16844:1;16840;:5;;;;:::i;:::-;16828:17;;16873:1;16868;16864;:5;;;;:::i;:::-;:10;16856:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16932:1;16925:8;;;16470:471;;;;;:::o;17417:132::-;17475:7;17502:39;17506:1;17509;17502:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17495:46;;17417:132;;;;:::o;11311:573::-;11469:1;11451:20;;:6;:20;;;;11443:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11553:1;11532:23;;:9;:23;;;;11524:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11608:47;11629:6;11637:9;11648:6;11608:20;:47::i;:::-;11688:71;11710:6;11688:71;;;;;;;;;;;;;;;;;:9;:17;11698:6;11688:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;11668:9;:17;11678:6;11668:17;;;;;;;;;;;;;;;:91;;;;11793:32;11818:6;11793:9;:20;11803:9;11793:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11770:9;:20;11780:9;11770:20;;;;;;;;;;;;;;;:55;;;;11858:9;11841:35;;11850:6;11841:35;;;11869:6;11841:35;;;;;;:::i;:::-;;;;;;;;11311:573;;;:::o;19898:81::-;19938:7;19965:6;;;;;;;;;;;19958:13;;19898:81;:::o;39923:1617::-;39962:23;39988:24;40006:4;39988:9;:24::i;:::-;39962:50;;40023:25;40093:12;;40072:18;;40051;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;40023:82;;40116:12;40171:1;40152:15;:20;:46;;;;40197:1;40176:17;:22;40152:46;40149:60;;;40201:7;;;;;40149:60;40263:2;40242:18;;:23;;;;:::i;:::-;40224:15;:41;40221:111;;;40318:2;40297:18;;:23;;;;:::i;:::-;40279:41;;40221:111;40352:23;40437:1;40417:17;40396:18;;40378:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40352:86;;40449:26;40478:36;40498:15;40478;:19;;:36;;;;:::i;:::-;40449:65;;40535:25;40563:21;40535:49;;40597:36;40614:18;40597:16;:36::i;:::-;40655:18;40676:44;40702:17;40676:21;:25;;:44;;;;:::i;:::-;40655:65;;40741:23;40767:57;40806:17;40767:34;40782:18;;40767:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;40741:83;;40835:17;40855:51;40888:17;40855:28;40870:12;;40855:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;40835:71;;40937:23;40994:9;40976:15;40963:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;40937:66;;41055:1;41034:18;:22;;;;41088:1;41067:18;:22;;;;41115:1;41100:12;:16;;;;41158:9;;;;;;;;;;;41150:23;;41181:9;41150:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41137:58;;;;;41237:1;41219:15;:19;:42;;;;;41260:1;41242:15;:19;41219:42;41216:210;;;41277:46;41290:15;41307;41277:12;:46::i;:::-;41343:71;41358:18;41378:15;41395:18;;41343:71;;;;;;;;:::i;:::-;;;;;;;;41216:210;41477:15;;;;;;;;;;;41469:29;;41506:21;41469:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41456:76;;;;;39951:1589;;;;;;;;;;39923:1617;:::o;42011:574::-;42068:4;42111:15;42094:14;:32;;;;42147:28;42178:4;:14;;;42193:13;42178:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42147:60;;42228:20;42251:53;42298:5;42251:42;42276:16;;42251:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;42228:76;;42344:1;42329:12;:16;42325:109;;;42361:61;42377:13;42400:6;42409:12;42361:15;:61::i;:::-;42325:109;42454:19;42491:13;42454:51;;42516:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42543:12;;;;;;;;;;42573:4;42566:11;;;;;42011:574;:::o;18045:278::-;18131:7;18163:1;18159;:5;18166:12;18151:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18190:9;18206:1;18202;:5;;;;:::i;:::-;18190:17;;18314:1;18307:8;;;18045:278;;;;;:::o;14721:125::-;;;;:::o;15580:136::-;15638:7;15665:43;15669:1;15672;15665:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;15658:50;;15580:136;;;;:::o;39053:487::-;39121:21;39159:1;39145:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39121:40;;39190:4;39172;39177:1;39172:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39216:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39206:4;39211:1;39206:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39251:62;39268:4;39283:15;39301:11;39251:8;:62::i;:::-;39326:15;:66;;;39407:11;39433:1;39449:4;39476;39496:15;39326:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39108:432;39053:487;:::o;39552:363::-;39633:62;39650:4;39665:15;39683:11;39633:8;:62::i;:::-;39705:15;:31;;;39744:9;39777:4;39797:11;39823:1;39839;27168:6;39881:15;39705:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39552:363;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:182::-;10341:34;10337:1;10329:6;10325:14;10318:58;10201:182;:::o;10389:366::-;10531:3;10552:67;10616:2;10611:3;10552:67;:::i;:::-;10545:74;;10628:93;10717:3;10628:93;:::i;:::-;10746:2;10741:3;10737:12;10730:19;;10389:366;;;:::o;10761:419::-;10927:4;10965:2;10954:9;10950:18;10942:26;;11014:9;11008:4;11004:20;11000:1;10989:9;10985:17;10978:47;11042:131;11168:4;11042:131;:::i;:::-;11034:139;;10761:419;;;:::o;11186:180::-;11234:77;11231:1;11224:88;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11372:348;11412:7;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11657:1;11589:66;11585:74;11582:1;11579:81;11574:1;11567:9;11560:17;11556:105;11553:131;;;11664:18;;:::i;:::-;11553:131;11712:1;11709;11705:9;11694:20;;11372:348;;;;:::o;11726:180::-;11774:77;11771:1;11764:88;11871:4;11868:1;11861:15;11895:4;11892:1;11885:15;11912:185;11952:1;11969:20;11987:1;11969:20;:::i;:::-;11964:25;;12003:20;12021:1;12003:20;:::i;:::-;11998:25;;12042:1;12032:35;;12047:18;;:::i;:::-;12032:35;12089:1;12086;12082:9;12077:14;;11912:185;;;;:::o;12103:234::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:17;12307:2;12299:6;12295:15;12288:42;12103:234;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:419::-;12881:4;12919:2;12908:9;12904:18;12896:26;;12968:9;12962:4;12958:20;12954:1;12943:9;12939:17;12932:47;12996:131;13122:4;12996:131;:::i;:::-;12988:139;;12715:419;;;:::o;13140:238::-;13280:34;13276:1;13268:6;13264:14;13257:58;13349:21;13344:2;13336:6;13332:15;13325:46;13140:238;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:235::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:18;14385:2;14377:6;14373:15;14366:43;14181:235;:::o;14422:366::-;14564:3;14585:67;14649:2;14644:3;14585:67;:::i;:::-;14578:74;;14661:93;14750:3;14661:93;:::i;:::-;14779:2;14774:3;14770:12;14763:19;;14422:366;;;:::o;14794:419::-;14960:4;14998:2;14987:9;14983:18;14975:26;;15047:9;15041:4;15037:20;15033:1;15022:9;15018:17;15011:47;15075:131;15201:4;15075:131;:::i;:::-;15067:139;;14794:419;;;:::o;15219:305::-;15259:3;15278:20;15296:1;15278:20;:::i;:::-;15273:25;;15312:20;15330:1;15312:20;:::i;:::-;15307:25;;15466:1;15398:66;15394:74;15391:1;15388:81;15385:107;;;15472:18;;:::i;:::-;15385:107;15516:1;15513;15509:9;15502:16;;15219:305;;;;:::o;15530:179::-;15670:31;15666:1;15658:6;15654:14;15647:55;15530:179;:::o;15715:366::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:419::-;16253:4;16291:2;16280:9;16276:18;16268:26;;16340:9;16334:4;16330:20;16326:1;16315:9;16311:17;16304:47;16368:131;16494:4;16368:131;:::i;:::-;16360:139;;16087:419;;;:::o;16512:244::-;16652:34;16648:1;16640:6;16636:14;16629:58;16721:27;16716:2;16708:6;16704:15;16697:52;16512:244;:::o;16762:366::-;16904:3;16925:67;16989:2;16984:3;16925:67;:::i;:::-;16918:74;;17001:93;17090:3;17001:93;:::i;:::-;17119:2;17114:3;17110:12;17103:19;;16762:366;;;:::o;17134:419::-;17300:4;17338:2;17327:9;17323:18;17315:26;;17387:9;17381:4;17377:20;17373:1;17362:9;17358:17;17351:47;17415:131;17541:4;17415:131;:::i;:::-;17407:139;;17134:419;;;:::o;17559:179::-;17699:31;17695:1;17687:6;17683:14;17676:55;17559:179;:::o;17744:366::-;17886:3;17907:67;17971:2;17966:3;17907:67;:::i;:::-;17900:74;;17983:93;18072:3;17983:93;:::i;:::-;18101:2;18096:3;18092:12;18085:19;;17744:366;;;:::o;18116:419::-;18282:4;18320:2;18309:9;18305:18;18297:26;;18369:9;18363:4;18359:20;18355:1;18344:9;18340:17;18333:47;18397:131;18523:4;18397:131;:::i;:::-;18389:139;;18116:419;;;:::o;18541:223::-;18681:34;18677:1;18669:6;18665:14;18658:58;18750:6;18745:2;18737:6;18733:15;18726:31;18541:223;:::o;18770:366::-;18912:3;18933:67;18997:2;18992:3;18933:67;:::i;:::-;18926:74;;19009:93;19098:3;19009:93;:::i;:::-;19127:2;19122:3;19118:12;19111:19;;18770:366;;;:::o;19142:419::-;19308:4;19346:2;19335:9;19331:18;19323:26;;19395:9;19389:4;19385:20;19381:1;19370:9;19366:17;19359:47;19423:131;19549:4;19423:131;:::i;:::-;19415:139;;19142:419;;;:::o;19567:240::-;19707:34;19703:1;19695:6;19691:14;19684:58;19776:23;19771:2;19763:6;19759:15;19752:48;19567:240;:::o;19813:366::-;19955:3;19976:67;20040:2;20035:3;19976:67;:::i;:::-;19969:74;;20052:93;20141:3;20052:93;:::i;:::-;20170:2;20165:3;20161:12;20154:19;;19813:366;;;:::o;20185:419::-;20351:4;20389:2;20378:9;20374:18;20366:26;;20438:9;20432:4;20428:20;20424:1;20413:9;20409:17;20402:47;20466:131;20592:4;20466:131;:::i;:::-;20458:139;;20185:419;;;:::o;20610:239::-;20750:34;20746:1;20738:6;20734:14;20727:58;20819:22;20814:2;20806:6;20802:15;20795:47;20610:239;:::o;20855:366::-;20997:3;21018:67;21082:2;21077:3;21018:67;:::i;:::-;21011:74;;21094:93;21183:3;21094:93;:::i;:::-;21212:2;21207:3;21203:12;21196:19;;20855:366;;;:::o;21227:419::-;21393:4;21431:2;21420:9;21416:18;21408:26;;21480:9;21474:4;21470:20;21466:1;21455:9;21451:17;21444:47;21508:131;21634:4;21508:131;:::i;:::-;21500:139;;21227:419;;;:::o;21652:182::-;21792:34;21788:1;21780:6;21776:14;21769:58;21652:182;:::o;21840:366::-;21982:3;22003:67;22067:2;22062:3;22003:67;:::i;:::-;21996:74;;22079:93;22168:3;22079:93;:::i;:::-;22197:2;22192:3;22188:12;22181:19;;21840:366;;;:::o;22212:419::-;22378:4;22416:2;22405:9;22401:18;22393:26;;22465:9;22459:4;22455:20;22451:1;22440:9;22436:17;22429:47;22493:131;22619:4;22493:131;:::i;:::-;22485:139;;22212:419;;;:::o;22637:229::-;22777:34;22773:1;22765:6;22761:14;22754:58;22846:12;22841:2;22833:6;22829:15;22822:37;22637:229;:::o;22872:366::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:419::-;23410:4;23448:2;23437:9;23433:18;23425:26;;23497:9;23491:4;23487:20;23483:1;23472:9;23468:17;23461:47;23525:131;23651:4;23525:131;:::i;:::-;23517:139;;23244:419;;;:::o;23669:143::-;23726:5;23757:6;23751:13;23742:22;;23773:33;23800:5;23773:33;:::i;:::-;23669:143;;;;:::o;23818:351::-;23888:6;23937:2;23925:9;23916:7;23912:23;23908:32;23905:119;;;23943:79;;:::i;:::-;23905:119;24063:1;24088:64;24144:7;24135:6;24124:9;24120:22;24088:64;:::i;:::-;24078:74;;24034:128;23818:351;;;;:::o;24175:177::-;24315:29;24311:1;24303:6;24299:14;24292:53;24175:177;:::o;24358:366::-;24500:3;24521:67;24585:2;24580:3;24521:67;:::i;:::-;24514:74;;24597:93;24686:3;24597:93;:::i;:::-;24715:2;24710:3;24706:12;24699:19;;24358:366;;;:::o;24730:419::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:131;25137:4;25011:131;:::i;:::-;25003:139;;24730:419;;;:::o;25155:223::-;25295:34;25291:1;25283:6;25279:14;25272:58;25364:6;25359:2;25351:6;25347:15;25340:31;25155:223;:::o;25384:366::-;25526:3;25547:67;25611:2;25606:3;25547:67;:::i;:::-;25540:74;;25623:93;25712:3;25623:93;:::i;:::-;25741:2;25736:3;25732:12;25725:19;;25384:366;;;:::o;25756:419::-;25922:4;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25756:419;;;:::o;26181:221::-;26321:34;26317:1;26309:6;26305:14;26298:58;26390:4;26385:2;26377:6;26373:15;26366:29;26181:221;:::o;26408:366::-;26550:3;26571:67;26635:2;26630:3;26571:67;:::i;:::-;26564:74;;26647:93;26736:3;26647:93;:::i;:::-;26765:2;26760:3;26756:12;26749:19;;26408:366;;;:::o;26780:419::-;26946:4;26984:2;26973:9;26969:18;26961:26;;27033:9;27027:4;27023:20;27019:1;27008:9;27004:17;26997:47;27061:131;27187:4;27061:131;:::i;:::-;27053:139;;26780:419;;;:::o;27205:224::-;27345:34;27341:1;27333:6;27329:14;27322:58;27414:7;27409:2;27401:6;27397:15;27390:32;27205:224;:::o;27435:366::-;27577:3;27598:67;27662:2;27657:3;27598:67;:::i;:::-;27591:74;;27674:93;27763:3;27674:93;:::i;:::-;27792:2;27787:3;27783:12;27776:19;;27435:366;;;:::o;27807:419::-;27973:4;28011:2;28000:9;27996:18;27988:26;;28060:9;28054:4;28050:20;28046:1;28035:9;28031:17;28024:47;28088:131;28214:4;28088:131;:::i;:::-;28080:139;;27807:419;;;:::o;28232:222::-;28372:34;28368:1;28360:6;28356:14;28349:58;28441:5;28436:2;28428:6;28424:15;28417:30;28232:222;:::o;28460:366::-;28602:3;28623:67;28687:2;28682:3;28623:67;:::i;:::-;28616:74;;28699:93;28788:3;28699:93;:::i;:::-;28817:2;28812:3;28808:12;28801:19;;28460:366;;;:::o;28832:419::-;28998:4;29036:2;29025:9;29021:18;29013:26;;29085:9;29079:4;29075:20;29071:1;29060:9;29056:17;29049:47;29113:131;29239:4;29113:131;:::i;:::-;29105:139;;28832:419;;;:::o;29257:175::-;29397:27;29393:1;29385:6;29381:14;29374:51;29257:175;:::o;29438:366::-;29580:3;29601:67;29665:2;29660:3;29601:67;:::i;:::-;29594:74;;29677:93;29766:3;29677:93;:::i;:::-;29795:2;29790:3;29786:12;29779:19;;29438:366;;;:::o;29810:419::-;29976:4;30014:2;30003:9;29999:18;29991:26;;30063:9;30057:4;30053:20;30049:1;30038:9;30034:17;30027:47;30091:131;30217:4;30091:131;:::i;:::-;30083:139;;29810:419;;;:::o;30235:172::-;30375:24;30371:1;30363:6;30359:14;30352:48;30235:172;:::o;30413:366::-;30555:3;30576:67;30640:2;30635:3;30576:67;:::i;:::-;30569:74;;30652:93;30741:3;30652:93;:::i;:::-;30770:2;30765:3;30761:12;30754:19;;30413:366;;;:::o;30785:419::-;30951:4;30989:2;30978:9;30974:18;30966:26;;31038:9;31032:4;31028:20;31024:1;31013:9;31009:17;31002:47;31066:131;31192:4;31066:131;:::i;:::-;31058:139;;30785:419;;;:::o;31210:297::-;31350:34;31346:1;31338:6;31334:14;31327:58;31419:34;31414:2;31406:6;31402:15;31395:59;31488:11;31483:2;31475:6;31471:15;31464:36;31210:297;:::o;31513:366::-;31655:3;31676:67;31740:2;31735:3;31676:67;:::i;:::-;31669:74;;31752:93;31841:3;31752:93;:::i;:::-;31870:2;31865:3;31861:12;31854:19;;31513:366;;;:::o;31885:419::-;32051:4;32089:2;32078:9;32074:18;32066:26;;32138:9;32132:4;32128:20;32124:1;32113:9;32109:17;32102:47;32166:131;32292:4;32166:131;:::i;:::-;32158:139;;31885:419;;;:::o;32310:240::-;32450:34;32446:1;32438:6;32434:14;32427:58;32519:23;32514:2;32506:6;32502:15;32495:48;32310:240;:::o;32556:366::-;32698:3;32719:67;32783:2;32778:3;32719:67;:::i;:::-;32712:74;;32795:93;32884:3;32795:93;:::i;:::-;32913:2;32908:3;32904:12;32897:19;;32556:366;;;:::o;32928:419::-;33094:4;33132:2;33121:9;33117:18;33109:26;;33181:9;33175:4;33171:20;33167:1;33156:9;33152:17;33145:47;33209:131;33335:4;33209:131;:::i;:::-;33201:139;;32928:419;;;:::o;33353:169::-;33493:21;33489:1;33481:6;33477:14;33470:45;33353:169;:::o;33528:366::-;33670:3;33691:67;33755:2;33750:3;33691:67;:::i;:::-;33684:74;;33767:93;33856:3;33767:93;:::i;:::-;33885:2;33880:3;33876:12;33869:19;;33528:366;;;:::o;33900:419::-;34066:4;34104:2;34093:9;34089:18;34081:26;;34153:9;34147:4;34143:20;34139:1;34128:9;34124:17;34117:47;34181:131;34307:4;34181:131;:::i;:::-;34173:139;;33900:419;;;:::o;34325:241::-;34465:34;34461:1;34453:6;34449:14;34442:58;34534:24;34529:2;34521:6;34517:15;34510:49;34325:241;:::o;34572:366::-;34714:3;34735:67;34799:2;34794:3;34735:67;:::i;:::-;34728:74;;34811:93;34900:3;34811:93;:::i;:::-;34929:2;34924:3;34920:12;34913:19;;34572:366;;;:::o;34944:419::-;35110:4;35148:2;35137:9;35133:18;35125:26;;35197:9;35191:4;35187:20;35183:1;35172:9;35168:17;35161:47;35225:131;35351:4;35225:131;:::i;:::-;35217:139;;34944:419;;;:::o;35369:191::-;35409:4;35429:20;35447:1;35429:20;:::i;:::-;35424:25;;35463:20;35481:1;35463:20;:::i;:::-;35458:25;;35502:1;35499;35496:8;35493:34;;;35507:18;;:::i;:::-;35493:34;35552:1;35549;35545:9;35537:17;;35369:191;;;;:::o;35566:220::-;35706:34;35702:1;35694:6;35690:14;35683:58;35775:3;35770:2;35762:6;35758:15;35751:28;35566:220;:::o;35792:366::-;35934:3;35955:67;36019:2;36014:3;35955:67;:::i;:::-;35948:74;;36031:93;36120:3;36031:93;:::i;:::-;36149:2;36144:3;36140:12;36133:19;;35792:366;;;:::o;36164:419::-;36330:4;36368:2;36357:9;36353:18;36345:26;;36417:9;36411:4;36407:20;36403:1;36392:9;36388:17;36381:47;36445:131;36571:4;36445:131;:::i;:::-;36437:139;;36164:419;;;:::o;36589:147::-;36690:11;36727:3;36712:18;;36589:147;;;;:::o;36742:114::-;;:::o;36862:398::-;37021:3;37042:83;37123:1;37118:3;37042:83;:::i;:::-;37035:90;;37134:93;37223:3;37134:93;:::i;:::-;37252:1;37247:3;37243:11;37236:18;;36862:398;;;:::o;37266:379::-;37450:3;37472:147;37615:3;37472:147;:::i;:::-;37465:154;;37636:3;37629:10;;37266:379;;;:::o;37651:442::-;37800:4;37838:2;37827:9;37823:18;37815:26;;37851:71;37919:1;37908:9;37904:17;37895:6;37851:71;:::i;:::-;37932:72;38000:2;37989:9;37985:18;37976:6;37932:72;:::i;:::-;38014;38082:2;38071:9;38067:18;38058:6;38014:72;:::i;:::-;37651:442;;;;;;:::o;38099:180::-;38147:77;38144:1;38137:88;38244:4;38241:1;38234:15;38268:4;38265:1;38258:15;38285:180;38333:77;38330:1;38323:88;38430:4;38427:1;38420:15;38454:4;38451:1;38444:15;38471:143;38528:5;38559:6;38553:13;38544:22;;38575:33;38602:5;38575:33;:::i;:::-;38471:143;;;;:::o;38620:351::-;38690:6;38739:2;38727:9;38718:7;38714:23;38710:32;38707:119;;;38745:79;;:::i;:::-;38707:119;38865:1;38890:64;38946:7;38937:6;38926:9;38922:22;38890:64;:::i;:::-;38880:74;;38836:128;38620:351;;;;:::o;38977:85::-;39022:7;39051:5;39040:16;;38977:85;;;:::o;39068:158::-;39126:9;39159:61;39177:42;39186:32;39212:5;39186:32;:::i;:::-;39177:42;:::i;:::-;39159:61;:::i;:::-;39146:74;;39068:158;;;:::o;39232:147::-;39327:45;39366:5;39327:45;:::i;:::-;39322:3;39315:58;39232:147;;:::o;39385:114::-;39452:6;39486:5;39480:12;39470:22;;39385:114;;;:::o;39505:184::-;39604:11;39638:6;39633:3;39626:19;39678:4;39673:3;39669:14;39654:29;;39505:184;;;;:::o;39695:132::-;39762:4;39785:3;39777:11;;39815:4;39810:3;39806:14;39798:22;;39695:132;;;:::o;39833:108::-;39910:24;39928:5;39910:24;:::i;:::-;39905:3;39898:37;39833:108;;:::o;39947:179::-;40016:10;40037:46;40079:3;40071:6;40037:46;:::i;:::-;40115:4;40110:3;40106:14;40092:28;;39947:179;;;;:::o;40132:113::-;40202:4;40234;40229:3;40225:14;40217:22;;40132:113;;;:::o;40281:732::-;40400:3;40429:54;40477:5;40429:54;:::i;:::-;40499:86;40578:6;40573:3;40499:86;:::i;:::-;40492:93;;40609:56;40659:5;40609:56;:::i;:::-;40688:7;40719:1;40704:284;40729:6;40726:1;40723:13;40704:284;;;40805:6;40799:13;40832:63;40891:3;40876:13;40832:63;:::i;:::-;40825:70;;40918:60;40971:6;40918:60;:::i;:::-;40908:70;;40764:224;40751:1;40748;40744:9;40739:14;;40704:284;;;40708:14;41004:3;40997:10;;40405:608;;;40281:732;;;;:::o;41019:831::-;41282:4;41320:3;41309:9;41305:19;41297:27;;41334:71;41402:1;41391:9;41387:17;41378:6;41334:71;:::i;:::-;41415:80;41491:2;41480:9;41476:18;41467:6;41415:80;:::i;:::-;41542:9;41536:4;41532:20;41527:2;41516:9;41512:18;41505:48;41570:108;41673:4;41664:6;41570:108;:::i;:::-;41562:116;;41688:72;41756:2;41745:9;41741:18;41732:6;41688:72;:::i;:::-;41770:73;41838:3;41827:9;41823:19;41814:6;41770:73;:::i;:::-;41019:831;;;;;;;;:::o;41856:807::-;42105:4;42143:3;42132:9;42128:19;42120:27;;42157:71;42225:1;42214:9;42210:17;42201:6;42157:71;:::i;:::-;42238:72;42306:2;42295:9;42291:18;42282:6;42238:72;:::i;:::-;42320:80;42396:2;42385:9;42381:18;42372:6;42320:80;:::i;:::-;42410;42486:2;42475:9;42471:18;42462:6;42410:80;:::i;:::-;42500:73;42568:3;42557:9;42553:19;42544:6;42500:73;:::i;:::-;42583;42651:3;42640:9;42636:19;42627:6;42583:73;:::i;:::-;41856:807;;;;;;;;;:::o;42669:663::-;42757:6;42765;42773;42822:2;42810:9;42801:7;42797:23;42793:32;42790:119;;;42828:79;;:::i;:::-;42790:119;42948:1;42973:64;43029:7;43020:6;43009:9;43005:22;42973:64;:::i;:::-;42963:74;;42919:128;43086:2;43112:64;43168:7;43159:6;43148:9;43144:22;43112:64;:::i;:::-;43102:74;;43057:129;43225:2;43251:64;43307:7;43298:6;43287:9;43283:22;43251:64;:::i;:::-;43241:74;;43196:129;42669:663;;;;;:::o

Swarm Source

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