ETH Price: $3,596.18 (-2.66%)

Token

ERC-20: Mad Honey (MADH)
 

Overview

Max Total Supply

100,000,000 MADH

Holders

8

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: MADH
Balance
0.000000031 MADH

Value
$0.00
0x77bca3f3552d144ed5f01fc068b6375c4d164f09
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:
MadHoney

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-24
*/

/**
 *Submitted for verification at Etherscan.io on 2022-05-29
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.3;

  
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.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * 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);
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    /**
     * @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) {
        return a + b;
    }
    /**
     * @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 a - b;
    }
    /**
     * @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) {
        return a * b;
    }
    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards 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).
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

library Address {
  
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        // bnb address of the contract owner
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
interface IUniswapV2Factory { 
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}
interface IUniswapV2Pair {   
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
interface IUniswapV2Router01 {
  function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);
    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);
    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
   function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract MadHoney is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    
    uint256 private _tTotal = 100 * 10**6 * 10**9; //Total supply 100m]M
    uint256 private _tFeeTotal;
    string private _name = "Mad Honey";
    string private _symbol = "MADH";
    uint8 private _decimals = 9;
    
    uint256 public _liquidityFee = 8;
    uint256 private _previousLiquidityFee = _liquidityFee;
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 private numTokensSellToAddToLiquidity = 1 * 10**3 * 10**9; //Fee threshold for LP acquisition
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    receive() external payable {}

    constructor () {
        _tOwned[owner()] = _tTotal;
        //PCS v2 Router address
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress);
        
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        approve(routerAddress,_tTotal);
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[routerAddress] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    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;
    }
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function removeAllFee() private {
        if(_liquidityFee == 0) return;
        _previousLiquidityFee = _liquidityFee;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
     
        uint256 contractTokenBalance = balanceOf(address(this));
                
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;

        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != address(routerAddress) &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
        //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;
        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
            _transferNoFee(sender, recipient, amount);
        } else if (!_isExcludedFromFee[sender] && _isExcludedFromFee[recipient]) {
            _transferWithFee(sender, recipient, amount);
        } else if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
            _transferWithFee(sender, recipient, amount);
        } else if (_isExcludedFromFee[sender] && _isExcludedFromFee[recipient]) {
            _transferNoFee(sender, recipient, amount);
        } else {
            _transferWithFee(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _getValues(uint256 tAmount) public view returns (uint256, uint256) {
        uint256 tLiquidity = tAmount.mul(_liquidityFee).div(10**2);
        uint256 tTransferAmount = tAmount.sub(tLiquidity);
        return (tTransferAmount, tLiquidity);
    }

    function _transferWithFee(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferNoFee(address sender, address recipient, uint256 tAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tAmount);   
        emit Transfer(sender, recipient, tAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"_getValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405267016345785d8a00006004556040518060400160405280600981526020017f4d616420486f6e65790000000000000000000000000000000000000000000000815250600690805190602001906200005d929190620008b5565b506040518060400160405280600481526020017f4d4144480000000000000000000000000000000000000000000000000000000081525060079080519060200190620000ab929190620008b5565b506009600860006101000a81548160ff021916908360ff1602179055506008600955600954600a55737a250d5630b4cf539739df2c5dacb4c659f2488d600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60156101000a81548160ff02191690831515021790555064e8d4a51000600c553480156200015957600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600454600160006200022c6200068360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d857600080fd5b505afa158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031391906200097c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037657600080fd5b505afa1580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b191906200097c565b6040518363ffffffff1660e01b8152600401620003d092919062000a1e565b602060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042691906200097c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620004c9600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600454620006ac60201b60201c565b50600160036000620004e06200068360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006136200068360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000674919062000a8f565b60405180910390a35062000c1d565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000620006d0620006c2620006da60201b60201c565b8484620006e260201b60201c565b6001905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074c9062000a6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007bf9062000a4b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008a8919062000a8f565b60405180910390a3505050565b828054620008c39062000afb565b90600052602060002090601f016020900481019282620008e7576000855562000933565b82601f106200090257805160ff191683800117855562000933565b8280016001018555821562000933579182015b828111156200093257825182559160200191906001019062000915565b5b50905062000942919062000946565b5090565b5b808211156200096157600081600090555060010162000947565b5090565b600081519050620009768162000c03565b92915050565b60006020828403121562000995576200099462000b60565b5b6000620009a58482850162000965565b91505092915050565b620009b98162000abd565b82525050565b6000620009ce60228362000aac565b9150620009db8262000b65565b604082019050919050565b6000620009f560248362000aac565b915062000a028262000bb4565b604082019050919050565b62000a188162000af1565b82525050565b600060408201905062000a356000830185620009ae565b62000a446020830184620009ae565b9392505050565b6000602082019050818103600083015262000a6681620009bf565b9050919050565b6000602082019050818103600083015262000a8881620009e6565b9050919050565b600060208201905062000aa6600083018462000a0d565b92915050565b600082825260208201905092915050565b600062000aca8262000ad1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000b1457607f821691505b6020821081141562000b2b5762000b2a62000b31565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b62000c0e8162000abd565b811462000c1a57600080fd5b50565b60805160601c60a05160601c61302762000c73600039600081816109fe01526115f201526000818161073001528181611c6001528181611d5001528181611d7701528181611e130152611e3a01526130276000f3fe6080604052600436106101855760003560e01c80636bc87c3a116100d1578063a457c2d71161008a578063d4780e3611610064578063d4780e36146105a7578063dd62ed3e146105e5578063ea2f0b3714610622578063f2fde38b1461064b5761018c565b8063a457c2d714610504578063a9059cbb14610541578063c49b9a801461057e5761018c565b80636bc87c3a1461040657806370a0823114610431578063715018a61461046e5780638da5cb5b146104855780638ee88c53146104b057806395d89b41146104d95761018c565b8063313ce5671161013e578063437823ec11610118578063437823ec1461034a57806349bd5a5e146103735780634a74bb021461039e5780635342acb4146103c95761018c565b8063313ce567146102b75780633268cc56146102e2578063395093511461030d5761018c565b806306fdde0314610191578063095ea7b3146101bc57806313114a9d146101f95780631694505e1461022457806318160ddd1461024f57806323b872dd1461027a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610674565b6040516101b391906127fd565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612451565b610706565b6040516101f091906127c7565b60405180910390f35b34801561020557600080fd5b5061020e610724565b60405161021b91906128ff565b60405180910390f35b34801561023057600080fd5b5061023961072e565b60405161024691906127e2565b60405180910390f35b34801561025b57600080fd5b50610264610752565b60405161027191906128ff565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c91906123fe565b61075c565b6040516102ae91906127c7565b60405180910390f35b3480156102c357600080fd5b506102cc610835565b6040516102d991906129d4565b60405180910390f35b3480156102ee57600080fd5b506102f761084c565b604051610304919061274b565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190612451565b610872565b60405161034191906127c7565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190612364565b610925565b005b34801561037f57600080fd5b506103886109fc565b604051610395919061274b565b60405180910390f35b3480156103aa57600080fd5b506103b3610a20565b6040516103c091906127c7565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612364565b610a33565b6040516103fd91906127c7565b60405180910390f35b34801561041257600080fd5b5061041b610a89565b60405161042891906128ff565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612364565b610a8f565b60405161046591906128ff565b60405180910390f35b34801561047a57600080fd5b50610483610ad8565b005b34801561049157600080fd5b5061049a610c12565b6040516104a7919061274b565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906124be565b610c3b565b005b3480156104e557600080fd5b506104ee610cc1565b6040516104fb91906127fd565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190612451565b610d53565b60405161053891906127c7565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612451565b610e20565b60405161057591906127c7565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190612491565b610e3e565b005b3480156105b357600080fd5b506105ce60048036038101906105c991906124be565b610f0e565b6040516105dc929190612974565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906123be565b610f61565b60405161061991906128ff565b60405180910390f35b34801561062e57600080fd5b5061064960048036038101906106449190612364565b610fe8565b005b34801561065757600080fd5b50610672600480360381019061066d9190612364565b6110bf565b005b60606006805461068390612c29565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612c29565b80156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b5050505050905090565b600061071a610713611268565b8484611270565b6001905092915050565b6000600554905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b600061076984848461143b565b61082a84610775611268565b61082585604051806060016040528060288152602001612fa560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107db611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b600190509392505050565b6000600860009054906101000a900460ff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061091b61087f611268565b846109168560026000610890611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b611270565b6001905092915050565b61092d611268565b73ffffffffffffffffffffffffffffffffffffffff1661094b610c12565b73ffffffffffffffffffffffffffffffffffffffff16146109a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109989061287f565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60159054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ae0611268565b73ffffffffffffffffffffffffffffffffffffffff16610afe610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b9061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c43611268565b73ffffffffffffffffffffffffffffffffffffffff16610c61610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061287f565b60405180910390fd5b8060098190555050565b606060078054610cd090612c29565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc90612c29565b8015610d495780601f10610d1e57610100808354040283529160200191610d49565b820191906000526020600020905b815481529060010190602001808311610d2c57829003601f168201915b5050505050905090565b6000610e16610d60611268565b84610e1185604051806060016040528060258152602001612fcd6025913960026000610d8a611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b6001905092915050565b6000610e34610e2d611268565b848461143b565b6001905092915050565b610e46611268565b73ffffffffffffffffffffffffffffffffffffffff16610e64610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb19061287f565b60405180910390fd5b80600b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610f0391906127c7565b60405180910390a150565b6000806000610f3b6064610f2d6009548761179890919063ffffffff16565b6117ae90919063ffffffff16565b90506000610f5282866117c490919063ffffffff16565b90508082935093505050915091565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ff0611268565b73ffffffffffffffffffffffffffffffffffffffff1661100e610c12565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b9061287f565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110c7611268565b73ffffffffffffffffffffffffffffffffffffffff166110e5610c12565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111329061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a29061283f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d7906128df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113479061285f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142e91906128ff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a2906128bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115129061281f565b60405180910390fd5b6000811161155e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115559061289f565b60405180910390fd5b600061156930610a8f565b90506000600c54821015905080801561158f5750600b60149054906101000a900460ff16155b80156115e95750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561164157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156116595750600b60159054906101000a900460ff165b1561166857611667826117da565b5b600060019050600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061170f5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561171957600090505b611725868686846118b0565b505050505050565b6000838311158290611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c91906127fd565b60405180910390fd5b5082840390509392505050565b600081836117909190612a44565b905092915050565b600081836117a69190612acb565b905092915050565b600081836117bc9190612a9a565b905092915050565b600081836117d29190612b25565b905092915050565b6001600b60146101000a81548160ff021916908315150217905550600061180b6002836117ae90919063ffffffff16565b9050600061182282846117c490919063ffffffff16565b9050600047905061183283611bc1565b600061184782476117c490919063ffffffff16565b90506118538382611e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516118869392919061299d565b60405180910390a1505050506000600b60146101000a81548160ff02191690831515021790555050565b806118be576118bd611efd565b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119615750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561197657611971848484611f21565b611bad565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a195750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a2e57611a298484846120b5565b611bac565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ad25750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ae757611ae28484846120b5565b611bab565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b895750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b9e57611b99848484611f21565b611baa565b611ba98484846120b5565b5b5b5b5b80611bbb57611bba6122f0565b5b50505050565b6000600267ffffffffffffffff811115611bde57611bdd612d17565b5b604051908082528060200260200182016040528015611c0c5781602001602082028036833780820191505090505b5090503081600081518110611c2457611c23612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc457600080fd5b505afa158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc9190612391565b81600181518110611d1057611d0f612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d75307f000000000000000000000000000000000000000000000000000000000000000084611270565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611dd795949392919061291a565b600060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050505050565b611e38307f000000000000000000000000000000000000000000000000000000000000000084611270565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e82610c12565b426040518863ffffffff1660e01b8152600401611ea496959493929190612766565b6060604051808303818588803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef691906124eb565b5050505050565b60006009541415611f0d57611f1f565b600954600a8190555060006009819055505b565b611f7381600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120a891906128ff565b60405180910390a3505050565b6000806120c183610f0e565b9150915061211783600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121ac82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061224181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e191906128ff565b60405180910390a35050505050565b600a54600981905550565b60008135905061230a81612f5f565b92915050565b60008151905061231f81612f5f565b92915050565b60008135905061233481612f76565b92915050565b60008135905061234981612f8d565b92915050565b60008151905061235e81612f8d565b92915050565b60006020828403121561237a57612379612d46565b5b6000612388848285016122fb565b91505092915050565b6000602082840312156123a7576123a6612d46565b5b60006123b584828501612310565b91505092915050565b600080604083850312156123d5576123d4612d46565b5b60006123e3858286016122fb565b92505060206123f4858286016122fb565b9150509250929050565b60008060006060848603121561241757612416612d46565b5b6000612425868287016122fb565b9350506020612436868287016122fb565b92505060406124478682870161233a565b9150509250925092565b6000806040838503121561246857612467612d46565b5b6000612476858286016122fb565b92505060206124878582860161233a565b9150509250929050565b6000602082840312156124a7576124a6612d46565b5b60006124b584828501612325565b91505092915050565b6000602082840312156124d4576124d3612d46565b5b60006124e28482850161233a565b91505092915050565b60008060006060848603121561250457612503612d46565b5b60006125128682870161234f565b93505060206125238682870161234f565b92505060406125348682870161234f565b9150509250925092565b600061254a8383612556565b60208301905092915050565b61255f81612b59565b82525050565b61256e81612b59565b82525050565b600061257f826129ff565b6125898185612a22565b9350612594836129ef565b8060005b838110156125c55781516125ac888261253e565b97506125b783612a15565b925050600181019050612598565b5085935050505092915050565b6125db81612b6b565b82525050565b6125ea81612bae565b82525050565b6125f981612bc0565b82525050565b600061260a82612a0a565b6126148185612a33565b9350612624818560208601612bf6565b61262d81612d4b565b840191505092915050565b6000612645602383612a33565b915061265082612d5c565b604082019050919050565b6000612668602683612a33565b915061267382612dab565b604082019050919050565b600061268b602283612a33565b915061269682612dfa565b604082019050919050565b60006126ae602083612a33565b91506126b982612e49565b602082019050919050565b60006126d1602983612a33565b91506126dc82612e72565b604082019050919050565b60006126f4602583612a33565b91506126ff82612ec1565b604082019050919050565b6000612717602483612a33565b915061272282612f10565b604082019050919050565b61273681612b97565b82525050565b61274581612ba1565b82525050565b60006020820190506127606000830184612565565b92915050565b600060c08201905061277b6000830189612565565b612788602083018861272d565b61279560408301876125f0565b6127a260608301866125f0565b6127af6080830185612565565b6127bc60a083018461272d565b979650505050505050565b60006020820190506127dc60008301846125d2565b92915050565b60006020820190506127f760008301846125e1565b92915050565b6000602082019050818103600083015261281781846125ff565b905092915050565b6000602082019050818103600083015261283881612638565b9050919050565b600060208201905081810360008301526128588161265b565b9050919050565b600060208201905081810360008301526128788161267e565b9050919050565b60006020820190508181036000830152612898816126a1565b9050919050565b600060208201905081810360008301526128b8816126c4565b9050919050565b600060208201905081810360008301526128d8816126e7565b9050919050565b600060208201905081810360008301526128f88161270a565b9050919050565b6000602082019050612914600083018461272d565b92915050565b600060a08201905061292f600083018861272d565b61293c60208301876125f0565b818103604083015261294e8186612574565b905061295d6060830185612565565b61296a608083018461272d565b9695505050505050565b6000604082019050612989600083018561272d565b612996602083018461272d565b9392505050565b60006060820190506129b2600083018661272d565b6129bf602083018561272d565b6129cc604083018461272d565b949350505050565b60006020820190506129e9600083018461273c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612a4f82612b97565b9150612a5a83612b97565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a8f57612a8e612c5b565b5b828201905092915050565b6000612aa582612b97565b9150612ab083612b97565b925082612ac057612abf612c8a565b5b828204905092915050565b6000612ad682612b97565b9150612ae183612b97565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b1a57612b19612c5b565b5b828202905092915050565b6000612b3082612b97565b9150612b3b83612b97565b925082821015612b4e57612b4d612c5b565b5b828203905092915050565b6000612b6482612b77565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612bb982612bd2565b9050919050565b6000612bcb82612b97565b9050919050565b6000612bdd82612be4565b9050919050565b6000612bef82612b77565b9050919050565b60005b83811015612c14578082015181840152602081019050612bf9565b83811115612c23576000848401525b50505050565b60006002820490506001821680612c4157607f821691505b60208210811415612c5557612c54612cb9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b612f6881612b59565b8114612f7357600080fd5b50565b612f7f81612b6b565b8114612f8a57600080fd5b50565b612f9681612b97565b8114612fa157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203947f65c8a0f37fcb39b135ab7d7f73887c879e81cd37b58b6bf5a07413f807964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101855760003560e01c80636bc87c3a116100d1578063a457c2d71161008a578063d4780e3611610064578063d4780e36146105a7578063dd62ed3e146105e5578063ea2f0b3714610622578063f2fde38b1461064b5761018c565b8063a457c2d714610504578063a9059cbb14610541578063c49b9a801461057e5761018c565b80636bc87c3a1461040657806370a0823114610431578063715018a61461046e5780638da5cb5b146104855780638ee88c53146104b057806395d89b41146104d95761018c565b8063313ce5671161013e578063437823ec11610118578063437823ec1461034a57806349bd5a5e146103735780634a74bb021461039e5780635342acb4146103c95761018c565b8063313ce567146102b75780633268cc56146102e2578063395093511461030d5761018c565b806306fdde0314610191578063095ea7b3146101bc57806313114a9d146101f95780631694505e1461022457806318160ddd1461024f57806323b872dd1461027a5761018c565b3661018c57005b600080fd5b34801561019d57600080fd5b506101a6610674565b6040516101b391906127fd565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190612451565b610706565b6040516101f091906127c7565b60405180910390f35b34801561020557600080fd5b5061020e610724565b60405161021b91906128ff565b60405180910390f35b34801561023057600080fd5b5061023961072e565b60405161024691906127e2565b60405180910390f35b34801561025b57600080fd5b50610264610752565b60405161027191906128ff565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c91906123fe565b61075c565b6040516102ae91906127c7565b60405180910390f35b3480156102c357600080fd5b506102cc610835565b6040516102d991906129d4565b60405180910390f35b3480156102ee57600080fd5b506102f761084c565b604051610304919061274b565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190612451565b610872565b60405161034191906127c7565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190612364565b610925565b005b34801561037f57600080fd5b506103886109fc565b604051610395919061274b565b60405180910390f35b3480156103aa57600080fd5b506103b3610a20565b6040516103c091906127c7565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612364565b610a33565b6040516103fd91906127c7565b60405180910390f35b34801561041257600080fd5b5061041b610a89565b60405161042891906128ff565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190612364565b610a8f565b60405161046591906128ff565b60405180910390f35b34801561047a57600080fd5b50610483610ad8565b005b34801561049157600080fd5b5061049a610c12565b6040516104a7919061274b565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906124be565b610c3b565b005b3480156104e557600080fd5b506104ee610cc1565b6040516104fb91906127fd565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190612451565b610d53565b60405161053891906127c7565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612451565b610e20565b60405161057591906127c7565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190612491565b610e3e565b005b3480156105b357600080fd5b506105ce60048036038101906105c991906124be565b610f0e565b6040516105dc929190612974565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906123be565b610f61565b60405161061991906128ff565b60405180910390f35b34801561062e57600080fd5b5061064960048036038101906106449190612364565b610fe8565b005b34801561065757600080fd5b50610672600480360381019061066d9190612364565b6110bf565b005b60606006805461068390612c29565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612c29565b80156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b5050505050905090565b600061071a610713611268565b8484611270565b6001905092915050565b6000600554905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b600061076984848461143b565b61082a84610775611268565b61082585604051806060016040528060288152602001612fa560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107db611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b600190509392505050565b6000600860009054906101000a900460ff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061091b61087f611268565b846109168560026000610890611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b611270565b6001905092915050565b61092d611268565b73ffffffffffffffffffffffffffffffffffffffff1661094b610c12565b73ffffffffffffffffffffffffffffffffffffffff16146109a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109989061287f565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f00000000000000000000000077bca3f3552d144ed5f01fc068b6375c4d164f0981565b600b60159054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ae0611268565b73ffffffffffffffffffffffffffffffffffffffff16610afe610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b9061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c43611268565b73ffffffffffffffffffffffffffffffffffffffff16610c61610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061287f565b60405180910390fd5b8060098190555050565b606060078054610cd090612c29565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfc90612c29565b8015610d495780601f10610d1e57610100808354040283529160200191610d49565b820191906000526020600020905b815481529060010190602001808311610d2c57829003601f168201915b5050505050905090565b6000610e16610d60611268565b84610e1185604051806060016040528060258152602001612fcd6025913960026000610d8a611268565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461172d9092919063ffffffff16565b611270565b6001905092915050565b6000610e34610e2d611268565b848461143b565b6001905092915050565b610e46611268565b73ffffffffffffffffffffffffffffffffffffffff16610e64610c12565b73ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb19061287f565b60405180910390fd5b80600b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610f0391906127c7565b60405180910390a150565b6000806000610f3b6064610f2d6009548761179890919063ffffffff16565b6117ae90919063ffffffff16565b90506000610f5282866117c490919063ffffffff16565b90508082935093505050915091565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ff0611268565b73ffffffffffffffffffffffffffffffffffffffff1661100e610c12565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b9061287f565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110c7611268565b73ffffffffffffffffffffffffffffffffffffffff166110e5610c12565b73ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111329061287f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a29061283f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d7906128df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113479061285f565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161142e91906128ff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a2906128bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115129061281f565b60405180910390fd5b6000811161155e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115559061289f565b60405180910390fd5b600061156930610a8f565b90506000600c54821015905080801561158f5750600b60149054906101000a900460ff16155b80156115e95750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561164157507f00000000000000000000000077bca3f3552d144ed5f01fc068b6375c4d164f0973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156116595750600b60159054906101000a900460ff165b1561166857611667826117da565b5b600060019050600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061170f5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561171957600090505b611725868686846118b0565b505050505050565b6000838311158290611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c91906127fd565b60405180910390fd5b5082840390509392505050565b600081836117909190612a44565b905092915050565b600081836117a69190612acb565b905092915050565b600081836117bc9190612a9a565b905092915050565b600081836117d29190612b25565b905092915050565b6001600b60146101000a81548160ff021916908315150217905550600061180b6002836117ae90919063ffffffff16565b9050600061182282846117c490919063ffffffff16565b9050600047905061183283611bc1565b600061184782476117c490919063ffffffff16565b90506118538382611e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516118869392919061299d565b60405180910390a1505050506000600b60146101000a81548160ff02191690831515021790555050565b806118be576118bd611efd565b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156119615750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561197657611971848484611f21565b611bad565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a195750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a2e57611a298484846120b5565b611bac565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ad25750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ae757611ae28484846120b5565b611bab565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b895750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b9e57611b99848484611f21565b611baa565b611ba98484846120b5565b5b5b5b5b80611bbb57611bba6122f0565b5b50505050565b6000600267ffffffffffffffff811115611bde57611bdd612d17565b5b604051908082528060200260200182016040528015611c0c5781602001602082028036833780820191505090505b5090503081600081518110611c2457611c23612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cc457600080fd5b505afa158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc9190612391565b81600181518110611d1057611d0f612ce8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d75307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611270565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611dd795949392919061291a565b600060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050505050565b611e38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611270565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e82610c12565b426040518863ffffffff1660e01b8152600401611ea496959493929190612766565b6060604051808303818588803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef691906124eb565b5050505050565b60006009541415611f0d57611f1f565b600954600a8190555060006009819055505b565b611f7381600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120a891906128ff565b60405180910390a3505050565b6000806120c183610f0e565b9150915061211783600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121ac82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061224181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461178290919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122e191906128ff565b60405180910390a35050505050565b600a54600981905550565b60008135905061230a81612f5f565b92915050565b60008151905061231f81612f5f565b92915050565b60008135905061233481612f76565b92915050565b60008135905061234981612f8d565b92915050565b60008151905061235e81612f8d565b92915050565b60006020828403121561237a57612379612d46565b5b6000612388848285016122fb565b91505092915050565b6000602082840312156123a7576123a6612d46565b5b60006123b584828501612310565b91505092915050565b600080604083850312156123d5576123d4612d46565b5b60006123e3858286016122fb565b92505060206123f4858286016122fb565b9150509250929050565b60008060006060848603121561241757612416612d46565b5b6000612425868287016122fb565b9350506020612436868287016122fb565b92505060406124478682870161233a565b9150509250925092565b6000806040838503121561246857612467612d46565b5b6000612476858286016122fb565b92505060206124878582860161233a565b9150509250929050565b6000602082840312156124a7576124a6612d46565b5b60006124b584828501612325565b91505092915050565b6000602082840312156124d4576124d3612d46565b5b60006124e28482850161233a565b91505092915050565b60008060006060848603121561250457612503612d46565b5b60006125128682870161234f565b93505060206125238682870161234f565b92505060406125348682870161234f565b9150509250925092565b600061254a8383612556565b60208301905092915050565b61255f81612b59565b82525050565b61256e81612b59565b82525050565b600061257f826129ff565b6125898185612a22565b9350612594836129ef565b8060005b838110156125c55781516125ac888261253e565b97506125b783612a15565b925050600181019050612598565b5085935050505092915050565b6125db81612b6b565b82525050565b6125ea81612bae565b82525050565b6125f981612bc0565b82525050565b600061260a82612a0a565b6126148185612a33565b9350612624818560208601612bf6565b61262d81612d4b565b840191505092915050565b6000612645602383612a33565b915061265082612d5c565b604082019050919050565b6000612668602683612a33565b915061267382612dab565b604082019050919050565b600061268b602283612a33565b915061269682612dfa565b604082019050919050565b60006126ae602083612a33565b91506126b982612e49565b602082019050919050565b60006126d1602983612a33565b91506126dc82612e72565b604082019050919050565b60006126f4602583612a33565b91506126ff82612ec1565b604082019050919050565b6000612717602483612a33565b915061272282612f10565b604082019050919050565b61273681612b97565b82525050565b61274581612ba1565b82525050565b60006020820190506127606000830184612565565b92915050565b600060c08201905061277b6000830189612565565b612788602083018861272d565b61279560408301876125f0565b6127a260608301866125f0565b6127af6080830185612565565b6127bc60a083018461272d565b979650505050505050565b60006020820190506127dc60008301846125d2565b92915050565b60006020820190506127f760008301846125e1565b92915050565b6000602082019050818103600083015261281781846125ff565b905092915050565b6000602082019050818103600083015261283881612638565b9050919050565b600060208201905081810360008301526128588161265b565b9050919050565b600060208201905081810360008301526128788161267e565b9050919050565b60006020820190508181036000830152612898816126a1565b9050919050565b600060208201905081810360008301526128b8816126c4565b9050919050565b600060208201905081810360008301526128d8816126e7565b9050919050565b600060208201905081810360008301526128f88161270a565b9050919050565b6000602082019050612914600083018461272d565b92915050565b600060a08201905061292f600083018861272d565b61293c60208301876125f0565b818103604083015261294e8186612574565b905061295d6060830185612565565b61296a608083018461272d565b9695505050505050565b6000604082019050612989600083018561272d565b612996602083018461272d565b9392505050565b60006060820190506129b2600083018661272d565b6129bf602083018561272d565b6129cc604083018461272d565b949350505050565b60006020820190506129e9600083018461273c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612a4f82612b97565b9150612a5a83612b97565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a8f57612a8e612c5b565b5b828201905092915050565b6000612aa582612b97565b9150612ab083612b97565b925082612ac057612abf612c8a565b5b828204905092915050565b6000612ad682612b97565b9150612ae183612b97565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b1a57612b19612c5b565b5b828202905092915050565b6000612b3082612b97565b9150612b3b83612b97565b925082821015612b4e57612b4d612c5b565b5b828203905092915050565b6000612b6482612b77565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612bb982612bd2565b9050919050565b6000612bcb82612b97565b9050919050565b6000612bdd82612be4565b9050919050565b6000612bef82612b77565b9050919050565b60005b83811015612c14578082015181840152602081019050612bf9565b83811115612c23576000848401525b50505050565b60006002820490506001821680612c4157607f821691505b60208210811415612c5557612c54612cb9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b612f6881612b59565b8114612f7357600080fd5b50565b612f7f81612b6b565b8114612f8a57600080fd5b50565b612f9681612b97565b8114612fa157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203947f65c8a0f37fcb39b135ab7d7f73887c879e81cd37b58b6bf5a07413f807964736f6c63430008070033

Deployed Bytecode Sourcemap

28035:10831:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30238:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31057:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32042:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28670:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30509:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31224:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30420:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28728:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31543:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32137:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28808:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28883:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33113:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28571:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30610:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18160:148;;;;;;;;;;;;;:::i;:::-;;17513:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32382:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30327:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31767:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30735:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32515:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37886:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30908:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32260:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18461:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30238:83;30275:13;30308:5;30301:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30238:83;:::o;31057:161::-;31132:4;31149:39;31158:12;:10;:12::i;:::-;31172:7;31181:6;31149:8;:39::i;:::-;31206:4;31199:11;;31057:161;;;;:::o;32042:87::-;32084:7;32111:10;;32104:17;;32042:87;:::o;28670:51::-;;;:::o;30509:95::-;30562:7;30589;;30582:14;;30509:95;:::o;31224:313::-;31322:4;31339:36;31349:6;31357:9;31368:6;31339:9;:36::i;:::-;31386:121;31395:6;31403:12;:10;:12::i;:::-;31417:89;31455:6;31417:89;;;;;;;;;;;;;;;;;:11;:19;31429:6;31417:19;;;;;;;;;;;;;;;:33;31437:12;:10;:12::i;:::-;31417:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;31386:8;:121::i;:::-;31525:4;31518:11;;31224:313;;;;;:::o;30420:83::-;30461:5;30486:9;;;;;;;;;;;30479:16;;30420:83;:::o;28728:73::-;;;;;;;;;;;;;:::o;31543:218::-;31631:4;31648:83;31657:12;:10;:12::i;:::-;31671:7;31680:50;31719:10;31680:11;:25;31692:12;:10;:12::i;:::-;31680:25;;;;;;;;;;;;;;;:34;31706:7;31680:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;31648:8;:83::i;:::-;31749:4;31742:11;;31543:218;;;;:::o;32137:111::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32236:4:::1;32206:18;:27;32225:7;32206:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32137:111:::0;:::o;28808:38::-;;;:::o;28883:40::-;;;;;;;;;;;;;:::o;33113:123::-;33177:4;33201:18;:27;33220:7;33201:27;;;;;;;;;;;;;;;;;;;;;;;;;33194:34;;33113:123;;;:::o;28571:32::-;;;;:::o;30610:117::-;30676:7;30703;:16;30711:7;30703:16;;;;;;;;;;;;;;;;30696:23;;30610:117;;;:::o;18160:148::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18267:1:::1;18230:40;;18251:6;::::0;::::1;;;;;;;;18230:40;;;;;;;;;;;;18298:1;18281:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18160:148::o:0;17513:87::-;17559:7;17586:6;;;;;;;;;;;17579:13;;17513:87;:::o;32382:122::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32484:12:::1;32468:13;:28;;;;32382:122:::0;:::o;30327:87::-;30366:13;30399:7;30392:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30327:87;:::o;31767:269::-;31860:4;31877:129;31886:12;:10;:12::i;:::-;31900:7;31909:96;31948:15;31909:96;;;;;;;;;;;;;;;;;:11;:25;31921:12;:10;:12::i;:::-;31909:25;;;;;;;;;;;;;;;:34;31935:7;31909:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;31877:8;:129::i;:::-;32024:4;32017:11;;31767:269;;;;:::o;30735:167::-;30813:4;30830:42;30840:12;:10;:12::i;:::-;30854:9;30865:6;30830:9;:42::i;:::-;30890:4;30883:11;;30735:167;;;;:::o;32515:171::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32616:8:::1;32592:21;;:32;;;;;;;;;;;;;;;;;;32640:38;32669:8;32640:38;;;;;;:::i;:::-;;;;;;;;32515:171:::0;:::o;37886:260::-;37944:7;37953;37973:18;37994:37;38025:5;37994:26;38006:13;;37994:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;37973:58;;38042:23;38068;38080:10;38068:7;:11;;:23;;;;:::i;:::-;38042:49;;38110:15;38127:10;38102:36;;;;;;37886:260;;;:::o;30908:143::-;30989:7;31016:11;:18;31028:5;31016:18;;;;;;;;;;;;;;;:27;31035:7;31016:27;;;;;;;;;;;;;;;;31009:34;;30908:143;;;;:::o;32260:110::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32357:5:::1;32327:18;:27;32346:7;32327:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32260:110:::0;:::o;18461:244::-;17742:12;:10;:12::i;:::-;17731:23;;:7;:5;:7::i;:::-;:23;;;17723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18570:1:::1;18550:22;;:8;:22;;;;18542:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18660:8;18631:38;;18652:6;::::0;::::1;;;;;;;;18631:38;;;;;;;;;;;;18689:8;18680:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18461:244:::0;:::o;9417:98::-;9470:7;9497:10;9490:17;;9417:98;:::o;33244:335::-;33354:1;33337:19;;:5;:19;;;;33329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33435:1;33416:21;;:7;:21;;;;33408:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33517:6;33487:11;:18;33499:5;33487:18;;;;;;;;;;;;;;;:27;33506:7;33487:27;;;;;;;;;;;;;;;:36;;;;33555:7;33539:32;;33548:5;33539:32;;;33564:6;33539:32;;;;;;:::i;:::-;;;;;;;;33244:335;;;:::o;33587:1243::-;33725:1;33709:18;;:4;:18;;;;33701:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33802:1;33788:16;;:2;:16;;;;33780:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33872:1;33863:6;:10;33855:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33937:28;33968:24;33986:4;33968:9;:24::i;:::-;33937:55;;34021:24;34072:29;;34048:20;:53;;34021:80;;34132:19;:53;;;;;34169:16;;;;;;;;;;;34168:17;34132:53;:100;;;;;34218:13;;;;;;;;;;;34202:30;;:4;:30;;;;34132:100;:138;;;;;34257:13;34249:21;;:4;:21;;;;34132:138;:176;;;;;34287:21;;;;;;;;;;;34132:176;34114:294;;;34360:36;34375:20;34360:14;:36::i;:::-;34114:294;34489:12;34504:4;34489:19;;34616:18;:24;34635:4;34616:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;34644:18;:22;34663:2;34644:22;;;;;;;;;;;;;;;;;;;;;;;;;34616:50;34613:96;;;34692:5;34682:15;;34613:96;34784:38;34799:4;34804:2;34807:6;34814:7;34784:14;:38::i;:::-;33690:1140;;;33587:1243;;;:::o;7377:206::-;7463:7;7521:1;7516;:6;;7524:12;7508:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7563:1;7559;:5;7552:12;;7377:206;;;;;:::o;5108:98::-;5166:7;5197:1;5193;:5;;;;:::i;:::-;5186:12;;5108:98;;;;:::o;5842:::-;5900:7;5931:1;5927;:5;;;;:::i;:::-;5920:12;;5842:98;;;;:::o;6239:::-;6297:7;6328:1;6324;:5;;;;:::i;:::-;6317:12;;6239:98;;;;:::o;5487:::-;5545:7;5576:1;5572;:5;;;;:::i;:::-;5565:12;;5487:98;;;;:::o;34838:977::-;29356:4;29337:16;;:23;;;;;;;;;;;;;;;;;;34974:12:::1;34989:27;35014:1;34989:20;:24;;:27;;;;:::i;:::-;34974:42;;35027:17;35047:30;35072:4;35047:20;:24;;:30;;;;:::i;:::-;35027:50;;35353:22;35378:21;35353:46;;35442:22;35459:4;35442:16;:22::i;:::-;35593:18;35614:41;35640:14;35614:21;:25;;:41;;;;:::i;:::-;35593:62;;35703:35;35716:9;35727:10;35703:12;:35::i;:::-;35764:43;35779:4;35785:10;35797:9;35764:43;;;;;;;;:::i;:::-;;;;;;;;34912:903;;;;29402:5:::0;29383:16;;:24;;;;;;;;;;;;;;;;;;34838:977;:::o;37006:872::-;37118:7;37114:40;;37140:14;:12;:14::i;:::-;37114:40;37179:18;:26;37198:6;37179:26;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;37210:18;:29;37229:9;37210:29;;;;;;;;;;;;;;;;;;;;;;;;;37209:30;37179:60;37175:634;;;37256:41;37271:6;37279:9;37290:6;37256:14;:41::i;:::-;37175:634;;;37320:18;:26;37339:6;37320:26;;;;;;;;;;;;;;;;;;;;;;;;;37319:27;:60;;;;;37350:18;:29;37369:9;37350:29;;;;;;;;;;;;;;;;;;;;;;;;;37319:60;37315:494;;;37396:43;37413:6;37421:9;37432:6;37396:16;:43::i;:::-;37315:494;;;37462:18;:26;37481:6;37462:26;;;;;;;;;;;;;;;;;;;;;;;;;37461:27;:61;;;;;37493:18;:29;37512:9;37493:29;;;;;;;;;;;;;;;;;;;;;;;;;37492:30;37461:61;37457:352;;;37539:43;37556:6;37564:9;37575:6;37539:16;:43::i;:::-;37457:352;;;37604:18;:26;37623:6;37604:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;37634:18;:29;37653:9;37634:29;;;;;;;;;;;;;;;;;;;;;;;;;37604:59;37600:209;;;37680:41;37695:6;37703:9;37714:6;37680:14;:41::i;:::-;37600:209;;;37754:43;37771:6;37779:9;37790:6;37754:16;:43::i;:::-;37600:209;37457:352;37315:494;37175:634;37833:7;37829:41;;37855:15;:13;:15::i;:::-;37829:41;37006:872;;;;:::o;35823:585::-;35949:21;35987:1;35973:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35949:40;;36018:4;36000;36005:1;36000:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36044:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36034:4;36039:1;36034:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36077:62;36094:4;36109:15;36127:11;36077:8;:62::i;:::-;36176:15;:66;;;36257:11;36283:1;36327:4;36354;36374:15;36176:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35878:530;35823:585;:::o;36416:511::-;36564:62;36581:4;36596:15;36614:11;36564:8;:62::i;:::-;36667:15;:31;;;36706:9;36739:4;36759:11;36785:1;36828;36871:7;:5;:7::i;:::-;36893:15;36667:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36416:511;;:::o;32844:156::-;32907:1;32890:13;;:18;32887:30;;;32910:7;;32887:30;32951:13;;32927:21;:37;;;;32991:1;32975:13;:17;;;;32844:156;:::o;38596:267::-;38709:28;38729:7;38709;:15;38717:6;38709:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38691:7;:15;38699:6;38691:15;;;;;;;;;;;;;;;:46;;;;38769:31;38792:7;38769;:18;38777:9;38769:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;38748:7;:18;38756:9;38748:18;;;;;;;;;;;;;;;:52;;;;38836:9;38819:36;;38828:6;38819:36;;;38847:7;38819:36;;;;;;:::i;:::-;;;;;;;;38596:267;;;:::o;38154:434::-;38252:23;38277:18;38299:19;38310:7;38299:10;:19::i;:::-;38251:67;;;;38347:28;38367:7;38347;:15;38355:6;38347:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38329:7;:15;38337:6;38329:15;;;;;;;;;;;;;;;:46;;;;38407:39;38430:15;38407:7;:18;38415:9;38407:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38386:7;:18;38394:9;38386:18;;;;;;;;;;;;;;;:60;;;;38482:38;38509:10;38482:7;:22;38498:4;38482:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;38457:7;:22;38473:4;38457:22;;;;;;;;;;;;;;;:63;;;;38553:9;38536:44;;38545:6;38536:44;;;38564:15;38536:44;;;;;;:::i;:::-;;;;;;;;38240:348;;38154:434;;;:::o;33012:89::-;33072:21;;33056:13;:37;;;;33012:89::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:474::-;2599:6;2607;2656:2;2644:9;2635:7;2631:23;2627:32;2624:119;;;2662:79;;:::i;:::-;2624:119;2782:1;2807:53;2852:7;2843:6;2832:9;2828:22;2807:53;:::i;:::-;2797:63;;2753:117;2909:2;2935:53;2980:7;2971:6;2960:9;2956:22;2935:53;:::i;:::-;2925:63;;2880:118;2531:474;;;;;:::o;3011:323::-;3067:6;3116:2;3104:9;3095:7;3091:23;3087:32;3084:119;;;3122:79;;:::i;:::-;3084:119;3242:1;3267:50;3309:7;3300:6;3289:9;3285:22;3267:50;:::i;:::-;3257:60;;3213:114;3011:323;;;;:::o;3340:329::-;3399:6;3448:2;3436:9;3427:7;3423:23;3419:32;3416:119;;;3454:79;;:::i;:::-;3416:119;3574:1;3599:53;3644:7;3635:6;3624:9;3620:22;3599:53;:::i;:::-;3589:63;;3545:117;3340:329;;;;:::o;3675:663::-;3763:6;3771;3779;3828:2;3816:9;3807:7;3803:23;3799:32;3796:119;;;3834:79;;:::i;:::-;3796:119;3954:1;3979:64;4035:7;4026:6;4015:9;4011:22;3979:64;:::i;:::-;3969:74;;3925:128;4092:2;4118:64;4174:7;4165:6;4154:9;4150:22;4118:64;:::i;:::-;4108:74;;4063:129;4231:2;4257:64;4313:7;4304:6;4293:9;4289:22;4257:64;:::i;:::-;4247:74;;4202:129;3675:663;;;;;:::o;4344:179::-;4413:10;4434:46;4476:3;4468:6;4434:46;:::i;:::-;4512:4;4507:3;4503:14;4489:28;;4344:179;;;;:::o;4529:108::-;4606:24;4624:5;4606:24;:::i;:::-;4601:3;4594:37;4529:108;;:::o;4643:118::-;4730:24;4748:5;4730:24;:::i;:::-;4725:3;4718:37;4643:118;;:::o;4797:732::-;4916:3;4945:54;4993:5;4945:54;:::i;:::-;5015:86;5094:6;5089:3;5015:86;:::i;:::-;5008:93;;5125:56;5175:5;5125:56;:::i;:::-;5204:7;5235:1;5220:284;5245:6;5242:1;5239:13;5220:284;;;5321:6;5315:13;5348:63;5407:3;5392:13;5348:63;:::i;:::-;5341:70;;5434:60;5487:6;5434:60;:::i;:::-;5424:70;;5280:224;5267:1;5264;5260:9;5255:14;;5220:284;;;5224:14;5520:3;5513:10;;4921:608;;;4797:732;;;;:::o;5535:109::-;5616:21;5631:5;5616:21;:::i;:::-;5611:3;5604:34;5535:109;;:::o;5650:185::-;5764:64;5822:5;5764:64;:::i;:::-;5759:3;5752:77;5650:185;;:::o;5841:147::-;5936:45;5975:5;5936:45;:::i;:::-;5931:3;5924:58;5841:147;;:::o;5994:364::-;6082:3;6110:39;6143:5;6110:39;:::i;:::-;6165:71;6229:6;6224:3;6165:71;:::i;:::-;6158:78;;6245:52;6290:6;6285:3;6278:4;6271:5;6267:16;6245:52;:::i;:::-;6322:29;6344:6;6322:29;:::i;:::-;6317:3;6313:39;6306:46;;6086:272;5994:364;;;;:::o;6364:366::-;6506:3;6527:67;6591:2;6586:3;6527:67;:::i;:::-;6520:74;;6603:93;6692:3;6603:93;:::i;:::-;6721:2;6716:3;6712:12;6705:19;;6364:366;;;:::o;6736:::-;6878:3;6899:67;6963:2;6958:3;6899:67;:::i;:::-;6892:74;;6975:93;7064:3;6975:93;:::i;:::-;7093:2;7088:3;7084:12;7077:19;;6736:366;;;:::o;7108:::-;7250:3;7271:67;7335:2;7330:3;7271:67;:::i;:::-;7264:74;;7347:93;7436:3;7347:93;:::i;:::-;7465:2;7460:3;7456:12;7449:19;;7108:366;;;:::o;7480:::-;7622:3;7643:67;7707:2;7702:3;7643:67;:::i;:::-;7636:74;;7719:93;7808:3;7719:93;:::i;:::-;7837:2;7832:3;7828:12;7821:19;;7480:366;;;:::o;7852:::-;7994:3;8015:67;8079:2;8074:3;8015:67;:::i;:::-;8008:74;;8091:93;8180:3;8091:93;:::i;:::-;8209:2;8204:3;8200:12;8193:19;;7852:366;;;:::o;8224:::-;8366:3;8387:67;8451:2;8446:3;8387:67;:::i;:::-;8380:74;;8463:93;8552:3;8463:93;:::i;:::-;8581:2;8576:3;8572:12;8565:19;;8224:366;;;:::o;8596:::-;8738:3;8759:67;8823:2;8818:3;8759:67;:::i;:::-;8752:74;;8835:93;8924:3;8835:93;:::i;:::-;8953:2;8948:3;8944:12;8937:19;;8596:366;;;:::o;8968:118::-;9055:24;9073:5;9055:24;:::i;:::-;9050:3;9043:37;8968:118;;:::o;9092:112::-;9175:22;9191:5;9175:22;:::i;:::-;9170:3;9163:35;9092:112;;:::o;9210:222::-;9303:4;9341:2;9330:9;9326:18;9318:26;;9354:71;9422:1;9411:9;9407:17;9398:6;9354:71;:::i;:::-;9210:222;;;;:::o;9438:807::-;9687:4;9725:3;9714:9;9710:19;9702:27;;9739:71;9807:1;9796:9;9792:17;9783:6;9739:71;:::i;:::-;9820:72;9888:2;9877:9;9873:18;9864:6;9820:72;:::i;:::-;9902:80;9978:2;9967:9;9963:18;9954:6;9902:80;:::i;:::-;9992;10068:2;10057:9;10053:18;10044:6;9992:80;:::i;:::-;10082:73;10150:3;10139:9;10135:19;10126:6;10082:73;:::i;:::-;10165;10233:3;10222:9;10218:19;10209:6;10165:73;:::i;:::-;9438:807;;;;;;;;;:::o;10251:210::-;10338:4;10376:2;10365:9;10361:18;10353:26;;10389:65;10451:1;10440:9;10436:17;10427:6;10389:65;:::i;:::-;10251:210;;;;:::o;10467:276::-;10587:4;10625:2;10614:9;10610:18;10602:26;;10638:98;10733:1;10722:9;10718:17;10709:6;10638:98;:::i;:::-;10467:276;;;;:::o;10749:313::-;10862:4;10900:2;10889:9;10885:18;10877:26;;10949:9;10943:4;10939:20;10935:1;10924:9;10920:17;10913:47;10977:78;11050:4;11041:6;10977:78;:::i;:::-;10969:86;;10749:313;;;;:::o;11068:419::-;11234:4;11272:2;11261:9;11257:18;11249:26;;11321:9;11315:4;11311:20;11307:1;11296:9;11292:17;11285:47;11349:131;11475:4;11349:131;:::i;:::-;11341:139;;11068:419;;;:::o;11493:::-;11659:4;11697:2;11686:9;11682:18;11674:26;;11746:9;11740:4;11736:20;11732:1;11721:9;11717:17;11710:47;11774:131;11900:4;11774:131;:::i;:::-;11766:139;;11493:419;;;:::o;11918:::-;12084:4;12122:2;12111:9;12107:18;12099:26;;12171:9;12165:4;12161:20;12157:1;12146:9;12142:17;12135:47;12199:131;12325:4;12199:131;:::i;:::-;12191:139;;11918:419;;;:::o;12343:::-;12509:4;12547:2;12536:9;12532:18;12524:26;;12596:9;12590:4;12586:20;12582:1;12571:9;12567:17;12560:47;12624:131;12750:4;12624:131;:::i;:::-;12616:139;;12343:419;;;:::o;12768:::-;12934:4;12972:2;12961:9;12957:18;12949:26;;13021:9;13015:4;13011:20;13007:1;12996:9;12992:17;12985:47;13049:131;13175:4;13049:131;:::i;:::-;13041:139;;12768:419;;;:::o;13193:::-;13359:4;13397:2;13386:9;13382:18;13374:26;;13446:9;13440:4;13436:20;13432:1;13421:9;13417:17;13410:47;13474:131;13600:4;13474:131;:::i;:::-;13466:139;;13193:419;;;:::o;13618:::-;13784:4;13822:2;13811:9;13807:18;13799:26;;13871:9;13865:4;13861:20;13857:1;13846:9;13842:17;13835:47;13899:131;14025:4;13899:131;:::i;:::-;13891:139;;13618:419;;;:::o;14043:222::-;14136:4;14174:2;14163:9;14159:18;14151:26;;14187:71;14255:1;14244:9;14240:17;14231:6;14187:71;:::i;:::-;14043:222;;;;:::o;14271:831::-;14534:4;14572:3;14561:9;14557:19;14549:27;;14586:71;14654:1;14643:9;14639:17;14630:6;14586:71;:::i;:::-;14667:80;14743:2;14732:9;14728:18;14719:6;14667:80;:::i;:::-;14794:9;14788:4;14784:20;14779:2;14768:9;14764:18;14757:48;14822:108;14925:4;14916:6;14822:108;:::i;:::-;14814:116;;14940:72;15008:2;14997:9;14993:18;14984:6;14940:72;:::i;:::-;15022:73;15090:3;15079:9;15075:19;15066:6;15022:73;:::i;:::-;14271:831;;;;;;;;:::o;15108:332::-;15229:4;15267:2;15256:9;15252:18;15244:26;;15280:71;15348:1;15337:9;15333:17;15324:6;15280:71;:::i;:::-;15361:72;15429:2;15418:9;15414:18;15405:6;15361:72;:::i;:::-;15108:332;;;;;:::o;15446:442::-;15595:4;15633:2;15622:9;15618:18;15610:26;;15646:71;15714:1;15703:9;15699:17;15690:6;15646:71;:::i;:::-;15727:72;15795:2;15784:9;15780:18;15771:6;15727:72;:::i;:::-;15809;15877:2;15866:9;15862:18;15853:6;15809:72;:::i;:::-;15446:442;;;;;;:::o;15894:214::-;15983:4;16021:2;16010:9;16006:18;15998:26;;16034:67;16098:1;16087:9;16083:17;16074:6;16034:67;:::i;:::-;15894:214;;;;:::o;16195:132::-;16262:4;16285:3;16277:11;;16315:4;16310:3;16306:14;16298:22;;16195:132;;;:::o;16333:114::-;16400:6;16434:5;16428:12;16418:22;;16333:114;;;:::o;16453:99::-;16505:6;16539:5;16533:12;16523:22;;16453:99;;;:::o;16558:113::-;16628:4;16660;16655:3;16651:14;16643:22;;16558:113;;;:::o;16677:184::-;16776:11;16810:6;16805:3;16798:19;16850:4;16845:3;16841:14;16826:29;;16677:184;;;;:::o;16867:169::-;16951:11;16985:6;16980:3;16973:19;17025:4;17020:3;17016:14;17001:29;;16867:169;;;;:::o;17042:305::-;17082:3;17101:20;17119:1;17101:20;:::i;:::-;17096:25;;17135:20;17153:1;17135:20;:::i;:::-;17130:25;;17289:1;17221:66;17217:74;17214:1;17211:81;17208:107;;;17295:18;;:::i;:::-;17208:107;17339:1;17336;17332:9;17325:16;;17042:305;;;;:::o;17353:185::-;17393:1;17410:20;17428:1;17410:20;:::i;:::-;17405:25;;17444:20;17462:1;17444:20;:::i;:::-;17439:25;;17483:1;17473:35;;17488:18;;:::i;:::-;17473:35;17530:1;17527;17523:9;17518:14;;17353:185;;;;:::o;17544:348::-;17584:7;17607:20;17625:1;17607:20;:::i;:::-;17602:25;;17641:20;17659:1;17641:20;:::i;:::-;17636:25;;17829:1;17761:66;17757:74;17754:1;17751:81;17746:1;17739:9;17732:17;17728:105;17725:131;;;17836:18;;:::i;:::-;17725:131;17884:1;17881;17877:9;17866:20;;17544:348;;;;:::o;17898:191::-;17938:4;17958:20;17976:1;17958:20;:::i;:::-;17953:25;;17992:20;18010:1;17992:20;:::i;:::-;17987:25;;18031:1;18028;18025:8;18022:34;;;18036:18;;:::i;:::-;18022:34;18081:1;18078;18074:9;18066:17;;17898:191;;;;:::o;18095:96::-;18132:7;18161:24;18179:5;18161:24;:::i;:::-;18150:35;;18095:96;;;:::o;18197:90::-;18231:7;18274:5;18267:13;18260:21;18249:32;;18197:90;;;:::o;18293:126::-;18330:7;18370:42;18363:5;18359:54;18348:65;;18293:126;;;:::o;18425:77::-;18462:7;18491:5;18480:16;;18425:77;;;:::o;18508:86::-;18543:7;18583:4;18576:5;18572:16;18561:27;;18508:86;;;:::o;18600:153::-;18677:9;18710:37;18741:5;18710:37;:::i;:::-;18697:50;;18600:153;;;:::o;18759:121::-;18817:9;18850:24;18868:5;18850:24;:::i;:::-;18837:37;;18759:121;;;:::o;18886:126::-;18936:9;18969:37;19000:5;18969:37;:::i;:::-;18956:50;;18886:126;;;:::o;19018:113::-;19068:9;19101:24;19119:5;19101:24;:::i;:::-;19088:37;;19018:113;;;:::o;19137:307::-;19205:1;19215:113;19229:6;19226:1;19223:13;19215:113;;;19314:1;19309:3;19305:11;19299:18;19295:1;19290:3;19286:11;19279:39;19251:2;19248:1;19244:10;19239:15;;19215:113;;;19346:6;19343:1;19340:13;19337:101;;;19426:1;19417:6;19412:3;19408:16;19401:27;19337:101;19186:258;19137:307;;;:::o;19450:320::-;19494:6;19531:1;19525:4;19521:12;19511:22;;19578:1;19572:4;19568:12;19599:18;19589:81;;19655:4;19647:6;19643:17;19633:27;;19589:81;19717:2;19709:6;19706:14;19686:18;19683:38;19680:84;;;19736:18;;:::i;:::-;19680:84;19501:269;19450:320;;;:::o;19776:180::-;19824:77;19821:1;19814:88;19921:4;19918:1;19911:15;19945:4;19942:1;19935:15;19962:180;20010:77;20007:1;20000:88;20107:4;20104:1;20097:15;20131:4;20128:1;20121:15;20148:180;20196:77;20193:1;20186:88;20293:4;20290:1;20283:15;20317:4;20314:1;20307:15;20334:180;20382:77;20379:1;20372:88;20479:4;20476:1;20469:15;20503:4;20500:1;20493:15;20520:180;20568:77;20565:1;20558:88;20665:4;20662:1;20655:15;20689:4;20686:1;20679:15;20829:117;20938:1;20935;20928:12;20952:102;20993:6;21044:2;21040:7;21035:2;21028:5;21024:14;21020:28;21010:38;;20952:102;;;:::o;21060:222::-;21200:34;21196:1;21188:6;21184:14;21177:58;21269:5;21264:2;21256:6;21252:15;21245:30;21060:222;:::o;21288:225::-;21428:34;21424:1;21416:6;21412:14;21405:58;21497:8;21492:2;21484:6;21480:15;21473:33;21288:225;:::o;21519:221::-;21659:34;21655:1;21647:6;21643:14;21636:58;21728:4;21723:2;21715:6;21711:15;21704:29;21519:221;:::o;21746:182::-;21886:34;21882:1;21874:6;21870:14;21863:58;21746:182;:::o;21934:228::-;22074:34;22070:1;22062:6;22058:14;22051:58;22143:11;22138:2;22130:6;22126:15;22119:36;21934:228;:::o;22168:224::-;22308:34;22304:1;22296:6;22292:14;22285:58;22377:7;22372:2;22364:6;22360:15;22353:32;22168:224;:::o;22398:223::-;22538:34;22534:1;22526:6;22522:14;22515:58;22607:6;22602:2;22594:6;22590:15;22583:31;22398:223;:::o;22627:122::-;22700:24;22718:5;22700:24;:::i;:::-;22693:5;22690:35;22680:63;;22739:1;22736;22729:12;22680:63;22627:122;:::o;22755:116::-;22825:21;22840:5;22825:21;:::i;:::-;22818:5;22815:32;22805:60;;22861:1;22858;22851:12;22805:60;22755:116;:::o;22877:122::-;22950:24;22968:5;22950:24;:::i;:::-;22943:5;22940:35;22930:63;;22989:1;22986;22979:12;22930:63;22877:122;:::o

Swarm Source

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