ETH Price: $3,177.25 (+2.95%)

Token

Radioreum (TheRadio)
 

Overview

Max Total Supply

21,000,000 TheRadio

Holders

166

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000056 TheRadio

Value
$0.00
0x82e0f655b8b41907b3dd68348c13b61726a52706
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:
Radioreum

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-16
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.17;

/**************************************
***************************************
Telegram: https://t.me/radioreum      
Website: https://radioreum.live/      
Twitter: https://twitter.com/radioreum  
***************************************
***************************************
*/


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 */
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() {
        _setOwner(_msgSender());
    }

    /**
     * @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.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


/**
 * @dev Implementation of the {IERC20} interface.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     */
    function _createTotalSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

   
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    /**
     * @dev Returns the subtraction of two signed integers, reverting on
     * overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
 
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.
     */
    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).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * 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.
     */
    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.
     */
    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).
     */
    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.
     */
    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.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

contract Radioreum is ERC20, Ownable {

    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 public liquidityTokens;
    uint256 public devTokens;
    uint256 public liquidityBuyFee = 1; 
    uint256 public devBuyFee = 4; 
    uint256 public devSellFee = 4; 
    uint256 public burnSellFee = 1;
    uint256 public maxBuyTransactionAmount = 420000 * (10**18);
    uint256 public maxSellTransactionAmount = 420000 * (10**18);
    uint256 public swapTokensAtAmount = 3000 * (10**18);
    uint256 public maxWalletToken = 420000 * (10**18);

    address payable public devWallet = payable(0x16CD83c17069585613588DE0Dc32979aEB5a9c51);
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
  
    // exlcude from fees
    mapping (address => bool) private _isExcludedFromFees;
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapEthForTokens(uint256 amountIn, address[] path);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MaxWalletAmountUpdated(uint256 prevValue, uint256 newValue);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor() ERC20("Radioreum", "TheRadio") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;


        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(devWallet, true);
        
        /*
            internal function  that is only called here,
            and CANNOT be called ever again
        */
        _createTotalSupply(owner(), 21000000 * (10**18));
    }

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

        if (from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && from==uniswapV2Pair){
            require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount.");
        }

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && to==uniswapV2Pair){
            require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }
    
        if(!inSwapAndLiquify && to==uniswapV2Pair && 
            swapAndLiquifyEnabled && 
            (devTokens >= swapTokensAtAmount ||
            liquidityTokens >= swapTokensAtAmount))
        {
            swapAndLiquify();
        }
             

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 devShare;
            uint256 liquidityShare;
            uint256 burnShare;
            
            if(from==uniswapV2Pair) {
                
                if(devBuyFee > 0) {
                    devShare = amount.mul(devBuyFee).div(100);
                    devTokens += devShare;
                    super._transfer(from, address(this), devShare);
                }

                if(liquidityBuyFee > 0) {
                    liquidityShare = amount.mul(liquidityBuyFee).div(100);
                    liquidityTokens += liquidityShare;
                    super._transfer(from, address(this), liquidityShare);
                }

            }

            if(to==uniswapV2Pair) {
               
                if(devSellFee > 0) {
                    devShare = amount.mul(devSellFee).div(100);
                    devTokens += devShare;
                    super._transfer(from, address(this), devShare);
                }

                if(burnSellFee > 0) {
                    burnShare = amount.mul(burnSellFee).div(100);
                    super._transfer(from, deadWallet, burnShare);
                }

            }

            amount = amount.sub(devShare.add(liquidityShare).add(burnShare));

        }

        super._transfer(from, to, amount);

    }

    function swapAndLiquify() private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(liquidityTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            // split the contract balance into halves
            uint256 half = swapTokensAtAmount.div(2);
            uint256 otherHalf = swapTokensAtAmount.sub(half);

            // capture the contract's current ETH balance.
            uint256 initialBalance = address(this).balance;

            // swap tokens for ETH
            swapTokensForEth(half, address(this));

            // 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);
            liquidityTokens -= swapTokensAtAmount;
        }

        if(devTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            swapTokensForEth(swapTokensAtAmount, devWallet);
            devTokens -= swapTokensAtAmount;
        }

    }

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

    function swapTokensForEth(uint256 tokenAmount, address _to) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            _to,
            block.timestamp
        );
        
    }

    function removeBuyFee(uint256 _liqFee, uint256 _devFee) public onlyOwner() {
        require(_liqFee.add(_devFee) <= 5, "tax too high");
        liquidityBuyFee = _liqFee;
        devBuyFee = _devFee;
    }

    function removeSellFee(uint256 _devFee, uint256 _burnFee) public onlyOwner() {
        require(_devFee.add(_burnFee) <= 5, "tax too high");
        devSellFee = _devFee;
        burnSellFee = _burnFee;
    }

    function updateDevWallet(address payable _devWallet) public onlyOwner {  
        devWallet = _devWallet;
    }

    function setMaxBuyTransactionAmount(uint256 _maxTxAmount) public onlyOwner {
        maxBuyTransactionAmount = _maxTxAmount;
        require(maxBuyTransactionAmount >= totalSupply().div(500), "value too low");
    }

    function setMaxSellTransactionAmount(uint256 _maxTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxTxAmount;
        require(maxSellTransactionAmount >= totalSupply().div(500), "value too low");
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
        swapTokensAtAmount = newLimit;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setMaxWalletToken(uint256 _newValue) external onlyOwner {
        uint256 prevValue = maxWalletToken;
  	    maxWalletToken = _newValue;
        require(maxWalletToken >= totalSupply().div(500), "value too low");
        emit MaxWalletAmountUpdated(prevValue, _newValue);
  	}

    receive() external payable {

  	}
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"removeBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"removeSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxBuyTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxSellTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxWalletToken","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":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260016009556004600a556004600b556001600c556958f03ee118a13e800000600d556958f03ee118a13e800000600e5568a2a15d09519be00000600f556958f03ee118a13e8000006010557316cd83c17069585613588de0dc32979aeb5a9c51601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260156101000a81548160ff0219169083151502179055503480156200010f57600080fd5b506040518060400160405280600981526020017f526164696f7265756d00000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f546865526164696f00000000000000000000000000000000000000000000000081525081600390816200018d919062000b1a565b5080600490816200019f919062000b1a565b505050620001c2620001b66200045760201b60201c565b6200045f60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f919062000c6b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000c6b565b6040518363ffffffff1660e01b8152600401620002fc92919062000cae565b6020604051808303816000875af11580156200031c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000342919062000c6b565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003db620003cd6200052560201b60201c565b60016200054f60201b60201c565b620003ee3060016200054f60201b60201c565b62000423601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200054f60201b60201c565b6200044f620004376200052560201b60201c565b6a115eec47f6cf7e350000006200071e60201b60201c565b505062000f3a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200055f6200045760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005856200052560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d59062000d3c565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000673576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200066a9062000dd4565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000712919062000e13565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007879062000e80565b60405180910390fd5b620007a4600083836200089660201b60201c565b8060026000828254620007b8919062000ed1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200080f919062000ed1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000876919062000f1d565b60405180910390a362000892600083836200089b60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200092257607f821691505b602082108103620009385762000937620008da565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000963565b620009ae868362000963565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009fb620009f5620009ef84620009c6565b620009d0565b620009c6565b9050919050565b6000819050919050565b62000a1783620009da565b62000a2f62000a268262000a02565b84845462000970565b825550505050565b600090565b62000a4662000a37565b62000a5381848462000a0c565b505050565b5b8181101562000a7b5762000a6f60008262000a3c565b60018101905062000a59565b5050565b601f82111562000aca5762000a94816200093e565b62000a9f8462000953565b8101602085101562000aaf578190505b62000ac762000abe8562000953565b83018262000a58565b50505b505050565b600082821c905092915050565b600062000aef6000198460080262000acf565b1980831691505092915050565b600062000b0a838362000adc565b9150826002028217905092915050565b62000b2582620008a0565b67ffffffffffffffff81111562000b415762000b40620008ab565b5b62000b4d825462000909565b62000b5a82828562000a7f565b600060209050601f83116001811462000b92576000841562000b7d578287015190505b62000b89858262000afc565b86555062000bf9565b601f19841662000ba2866200093e565b60005b8281101562000bcc5784890151825560018201915060208501945060208101905062000ba5565b8683101562000bec578489015162000be8601f89168262000adc565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c338262000c06565b9050919050565b62000c458162000c26565b811462000c5157600080fd5b50565b60008151905062000c658162000c3a565b92915050565b60006020828403121562000c845762000c8362000c01565b5b600062000c948482850162000c54565b91505092915050565b62000ca88162000c26565b82525050565b600060408201905062000cc5600083018562000c9d565b62000cd4602083018462000c9d565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d2460208362000cdb565b915062000d318262000cec565b602082019050919050565b6000602082019050818103600083015262000d578162000d15565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000dbc602a8362000cdb565b915062000dc98262000d5e565b604082019050919050565b6000602082019050818103600083015262000def8162000dad565b9050919050565b60008115159050919050565b62000e0d8162000df6565b82525050565b600060208201905062000e2a600083018462000e02565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e68601f8362000cdb565b915062000e758262000e30565b602082019050919050565b6000602082019050818103600083015262000e9b8162000e59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ede82620009c6565b915062000eeb83620009c6565b925082820190508082111562000f065762000f0562000ea2565b5b92915050565b62000f1781620009c6565b82525050565b600060208201905062000f34600083018462000f0c565b92915050565b608051613e9962000f8060003960008181610ee001528181611c6801528181611e7201528181611fb80152818161206b015281816121ae01526122b60152613e996000f3fe6080604052600436106102345760003560e01c806370105c3b1161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e14610850578063e2f456051461088d578063e6c75f71146108b8578063f2fde38b146108e3578063f5b01e151461090c5761023b565b8063a9059cbb1461076b578063b45e83f8146107a8578063c0246668146107d3578063c49b9a80146107fc578063ccb61358146108255761023b565b80638da5cb5b116100f25780638da5cb5b146106845780638ea5220f146106af57806391d55f41146106da57806395d89b4114610703578063a457c2d71461072e5761023b565b806370105c3b146105b157806370a08231146105da578063715018a6146106175780637e7613771461062e57806385141a77146106595761023b565b80631816467f116101bc5780634a74bb02116101805780634a74bb02146104c85780634b8ce602146104f35780634fbee1931461051e578063556482091461055b5780635aa821a9146105865761023b565b80631816467f146103cf57806323b872dd146103f8578063313ce56714610435578063395093511461046057806349bd5a5e1461049d5761023b565b806309e89af71161020357806309e89af7146102fe5780631127ae3b1461032757806316216e5f146103505780631694505e1461037957806318160ddd146103a45761023b565b806301143fea1461024057806302259e9e1461026b57806306fdde0314610296578063095ea7b3146102c15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610935565b6040516102629190612c8a565b60405180910390f35b34801561027757600080fd5b5061028061093b565b60405161028d9190612c8a565b60405180910390f35b3480156102a257600080fd5b506102ab610941565b6040516102b89190612d35565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612de6565b6109d3565b6040516102f59190612e41565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612e5c565b6109f1565b005b34801561033357600080fd5b5061034e60048036038101906103499190612e89565b610a77565b005b34801561035c57600080fd5b5061037760048036038101906103729190612e5c565b610b5b565b005b34801561038557600080fd5b5061038e610c41565b60405161039b9190612f28565b60405180910390f35b3480156103b057600080fd5b506103b9610c67565b6040516103c69190612c8a565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190612f81565b610c71565b005b34801561040457600080fd5b5061041f600480360381019061041a9190612fae565b610d31565b60405161042c9190612e41565b60405180910390f35b34801561044157600080fd5b5061044a610e29565b604051610457919061301d565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612de6565b610e32565b6040516104949190612e41565b60405180910390f35b3480156104a957600080fd5b506104b2610ede565b6040516104bf9190613047565b60405180910390f35b3480156104d457600080fd5b506104dd610f02565b6040516104ea9190612e41565b60405180910390f35b3480156104ff57600080fd5b50610508610f15565b6040516105159190612c8a565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613062565b610f1b565b6040516105529190612e41565b60405180910390f35b34801561056757600080fd5b50610570610f71565b60405161057d9190612c8a565b60405180910390f35b34801561059257600080fd5b5061059b610f77565b6040516105a89190612c8a565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190612e89565b610f7d565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190613062565b611061565b60405161060e9190612c8a565b60405180910390f35b34801561062357600080fd5b5061062c6110a9565b005b34801561063a57600080fd5b50610643611131565b6040516106509190612c8a565b60405180910390f35b34801561066557600080fd5b5061066e611137565b60405161067b9190613047565b60405180910390f35b34801561069057600080fd5b5061069961115d565b6040516106a69190613047565b60405180910390f35b3480156106bb57600080fd5b506106c4611187565b6040516106d1919061309e565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612e5c565b6111ad565b005b34801561070f57600080fd5b506107186112d4565b6040516107259190612d35565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612de6565b611366565b6040516107629190612e41565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612de6565b611451565b60405161079f9190612e41565b60405180910390f35b3480156107b457600080fd5b506107bd61146f565b6040516107ca9190612c8a565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906130e5565b611475565b005b34801561080857600080fd5b50610823600480360381019061081e9190613125565b61162c565b005b34801561083157600080fd5b5061083a6116fc565b6040516108479190612c8a565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613152565b611702565b6040516108849190612c8a565b60405180910390f35b34801561089957600080fd5b506108a2611789565b6040516108af9190612c8a565b60405180910390f35b3480156108c457600080fd5b506108cd61178f565b6040516108da9190612c8a565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190613062565b611795565b005b34801561091857600080fd5b50610933600480360381019061092e9190612e5c565b61188c565b005b600a5481565b600e5481565b606060038054610950906131c1565b80601f016020809104026020016040519081016040528092919081815260200182805461097c906131c1565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b60006109e76109e0611972565b848461197a565b6001905092915050565b6109f9611972565b73ffffffffffffffffffffffffffffffffffffffff16610a1761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a649061323e565b60405180910390fd5b80600f8190555050565b610a7f611972565b73ffffffffffffffffffffffffffffffffffffffff16610a9d61115d565b73ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea9061323e565b60405180910390fd5b6005610b088284611b4390919063ffffffff16565b1115610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b40906132aa565b60405180910390fd5b8160098190555080600a819055505050565b610b63611972565b73ffffffffffffffffffffffffffffffffffffffff16610b8161115d565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce9061323e565b60405180910390fd5b80600e81905550610bfa6101f4610bec610c67565b611b5990919063ffffffff16565b600e541015610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613316565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610c79611972565b73ffffffffffffffffffffffffffffffffffffffff16610c9761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce49061323e565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d3e848484611b6f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d89611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e00906133a8565b60405180910390fd5b610e1d85610e15611972565b85840361197a565b60019150509392505050565b60006012905090565b6000610ed4610e3f611972565b848460016000610e4d611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecf91906133f7565b61197a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260159054906101000a900460ff1681565b60075481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b600d5481565b610f85611972565b73ffffffffffffffffffffffffffffffffffffffff16610fa361115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff09061323e565b60405180910390fd5b600561100e8284611b4390919063ffffffff16565b111561104f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611046906132aa565b60405180910390fd5b81600b8190555080600c819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b1611972565b73ffffffffffffffffffffffffffffffffffffffff166110cf61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c9061323e565b60405180910390fd5b61112f6000612413565b565b600c5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111b5611972565b73ffffffffffffffffffffffffffffffffffffffff166111d361115d565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061323e565b60405180910390fd5b60006010549050816010819055506112536101f4611245610c67565b611b5990919063ffffffff16565b6010541015611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613316565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e7381836040516112c892919061342b565b60405180910390a15050565b6060600480546112e3906131c1565b80601f016020809104026020016040519081016040528092919081815260200182805461130f906131c1565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b5050505050905090565b60008060016000611375611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906134c6565b60405180910390fd5b61144661143d611972565b8585840361197a565b600191505092915050565b600061146561145e611972565b8484611b6f565b6001905092915050565b600b5481565b61147d611972565b73ffffffffffffffffffffffffffffffffffffffff1661149b61115d565b73ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061323e565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613558565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116209190612e41565b60405180910390a25050565b611634611972565b73ffffffffffffffffffffffffffffffffffffffff1661165261115d565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f9061323e565b60405180910390fd5b80601260156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116f19190612e41565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b60105481565b61179d611972565b73ffffffffffffffffffffffffffffffffffffffff166117bb61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118089061323e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611877906135ea565b60405180910390fd5b61188981612413565b50565b611894611972565b73ffffffffffffffffffffffffffffffffffffffff166118b261115d565b73ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061323e565b60405180910390fd5b80600d8190555061192b6101f461191d610c67565b611b5990919063ffffffff16565b600d54101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613316565b60405180910390fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e09061367c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f9061370e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b369190612c8a565b60405180910390a3505050565b60008183611b5191906133f7565b905092915050565b60008183611b67919061375d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613800565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613892565b60405180910390fd5b60008103611c6657611c61838360006124d9565b61240e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611d0b5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d615750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dc5576000611d7183611061565b90506010548282611d8291906133f7565b1115611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613924565b60405180910390fd5b505b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e695750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ec057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611f0b57600d54811115611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906139b6565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611faf5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561200657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561205157600e54811115612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790613a48565b60405180910390fd5b5b601260149054906101000a900460ff161580156120b957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156120d15750601260159054906101000a900460ff165b80156120f05750600f546008541015806120ef5750600f5460075410155b5b156120fe576120fd612758565b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121a25750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124025760008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036122b4576000600a541115612259576122326064612224600a54876128dc90919063ffffffff16565b611b5990919063ffffffff16565b9250826008600082825461224691906133f7565b925050819055506122588630856124d9565b5b600060095411156122b35761228c606461227e600954876128dc90919063ffffffff16565b611b5990919063ffffffff16565b915081600760008282546122a091906133f7565b925050819055506122b28630846124d9565b5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123c5576000600b5411156123615761233a606461232c600b54876128dc90919063ffffffff16565b611b5990919063ffffffff16565b9250826008600082825461234e91906133f7565b925050819055506123608630856124d9565b5b6000600c5411156123c4576123946064612386600c54876128dc90919063ffffffff16565b611b5990919063ffffffff16565b90506123c386601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124d9565b5b5b6123fc6123ed826123df8587611b4390919063ffffffff16565b611b4390919063ffffffff16565b856128f290919063ffffffff16565b93505050505b61240d8383836124d9565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f90613800565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90613892565b60405180910390fd5b6125c2838383612908565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f90613ada565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126db91906133f7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273f9190612c8a565b60405180910390a361275284848461290d565b50505050565b6001601260146101000a81548160ff021916908315150217905550600061277e30611061565b9050600f54600754101580156127965750600f548110155b156128595760006127b36002600f54611b5990919063ffffffff16565b905060006127cc82600f546128f290919063ffffffff16565b905060004790506127dd8330612912565b60006127f282476128f290919063ffffffff16565b90506127fe8382612b8c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161283193929190613afa565b60405180910390a1600f546007600082825461284d9190613b31565b92505081905550505050505b600f546008541015801561286f5750600f548110155b156128be576128a2600f54601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612912565b600f54600860008282546128b69190613b31565b925050819055505b506000601260146101000a81548160ff021916908315150217905550565b600081836128ea9190613b65565b905092915050565b600081836129009190613b31565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561292f5761292e613ba7565b5b60405190808252806020026020018201604052801561295d5781602001602082028036833780820191505090505b509050308160008151811061297557612974613bd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a409190613c1a565b81600181518110612a5457612a53613bd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082612abb30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611702565b1015612af157612af030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001961197a565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401612b55959493929190613d40565b600060405180830381600087803b158015612b6f57600080fd5b505af1158015612b83573d6000803e3d6000fd5b50505050505050565b612bb930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461197a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612c0561115d565b426040518863ffffffff1660e01b8152600401612c2796959493929190613d9a565b60606040518083038185885af1158015612c45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c6a9190613e10565b5050505050565b6000819050919050565b612c8481612c71565b82525050565b6000602082019050612c9f6000830184612c7b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cdf578082015181840152602081019050612cc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d0782612ca5565b612d118185612cb0565b9350612d21818560208601612cc1565b612d2a81612ceb565b840191505092915050565b60006020820190508181036000830152612d4f8184612cfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d8782612d5c565b9050919050565b612d9781612d7c565b8114612da257600080fd5b50565b600081359050612db481612d8e565b92915050565b612dc381612c71565b8114612dce57600080fd5b50565b600081359050612de081612dba565b92915050565b60008060408385031215612dfd57612dfc612d57565b5b6000612e0b85828601612da5565b9250506020612e1c85828601612dd1565b9150509250929050565b60008115159050919050565b612e3b81612e26565b82525050565b6000602082019050612e566000830184612e32565b92915050565b600060208284031215612e7257612e71612d57565b5b6000612e8084828501612dd1565b91505092915050565b60008060408385031215612ea057612e9f612d57565b5b6000612eae85828601612dd1565b9250506020612ebf85828601612dd1565b9150509250929050565b6000819050919050565b6000612eee612ee9612ee484612d5c565b612ec9565b612d5c565b9050919050565b6000612f0082612ed3565b9050919050565b6000612f1282612ef5565b9050919050565b612f2281612f07565b82525050565b6000602082019050612f3d6000830184612f19565b92915050565b6000612f4e82612d5c565b9050919050565b612f5e81612f43565b8114612f6957600080fd5b50565b600081359050612f7b81612f55565b92915050565b600060208284031215612f9757612f96612d57565b5b6000612fa584828501612f6c565b91505092915050565b600080600060608486031215612fc757612fc6612d57565b5b6000612fd586828701612da5565b9350506020612fe686828701612da5565b9250506040612ff786828701612dd1565b9150509250925092565b600060ff82169050919050565b61301781613001565b82525050565b6000602082019050613032600083018461300e565b92915050565b61304181612d7c565b82525050565b600060208201905061305c6000830184613038565b92915050565b60006020828403121561307857613077612d57565b5b600061308684828501612da5565b91505092915050565b61309881612f43565b82525050565b60006020820190506130b3600083018461308f565b92915050565b6130c281612e26565b81146130cd57600080fd5b50565b6000813590506130df816130b9565b92915050565b600080604083850312156130fc576130fb612d57565b5b600061310a85828601612da5565b925050602061311b858286016130d0565b9150509250929050565b60006020828403121561313b5761313a612d57565b5b6000613149848285016130d0565b91505092915050565b6000806040838503121561316957613168612d57565b5b600061317785828601612da5565b925050602061318885828601612da5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131d957607f821691505b6020821081036131ec576131eb613192565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613228602083612cb0565b9150613233826131f2565b602082019050919050565b600060208201905081810360008301526132578161321b565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613294600c83612cb0565b915061329f8261325e565b602082019050919050565b600060208201905081810360008301526132c381613287565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000613300600d83612cb0565b915061330b826132ca565b602082019050919050565b6000602082019050818103600083015261332f816132f3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613392602883612cb0565b915061339d82613336565b604082019050919050565b600060208201905081810360008301526133c181613385565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061340282612c71565b915061340d83612c71565b9250828201905080821115613425576134246133c8565b5b92915050565b60006040820190506134406000830185612c7b565b61344d6020830184612c7b565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134b0602583612cb0565b91506134bb82613454565b604082019050919050565b600060208201905081810360008301526134df816134a3565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613542602a83612cb0565b915061354d826134e6565b604082019050919050565b6000602082019050818103600083015261357181613535565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135d4602683612cb0565b91506135df82613578565b604082019050919050565b60006020820190508181036000830152613603816135c7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613666602483612cb0565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f8602283612cb0565b91506137038261369c565b604082019050919050565b60006020820190508181036000830152613727816136eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061376882612c71565b915061377383612c71565b9250826137835761378261372e565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137ea602583612cb0565b91506137f58261378e565b604082019050919050565b60006020820190508181036000830152613819816137dd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061387c602383612cb0565b915061388782613820565b604082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061390e602483612cb0565b9150613919826138b2565b604082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b60006139a0602b83612cb0565b91506139ab82613944565b604082019050919050565b600060208201905081810360008301526139cf81613993565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613a32602c83612cb0565b9150613a3d826139d6565b604082019050919050565b60006020820190508181036000830152613a6181613a25565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613ac4602683612cb0565b9150613acf82613a68565b604082019050919050565b60006020820190508181036000830152613af381613ab7565b9050919050565b6000606082019050613b0f6000830186612c7b565b613b1c6020830185612c7b565b613b296040830184612c7b565b949350505050565b6000613b3c82612c71565b9150613b4783612c71565b9250828203905081811115613b5f57613b5e6133c8565b5b92915050565b6000613b7082612c71565b9150613b7b83612c71565b9250828202613b8981612c71565b91508282048414831517613ba057613b9f6133c8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613c1481612d8e565b92915050565b600060208284031215613c3057613c2f612d57565b5b6000613c3e84828501613c05565b91505092915050565b6000819050919050565b6000613c6c613c67613c6284613c47565b612ec9565b612c71565b9050919050565b613c7c81613c51565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cb781612d7c565b82525050565b6000613cc98383613cae565b60208301905092915050565b6000602082019050919050565b6000613ced82613c82565b613cf78185613c8d565b9350613d0283613c9e565b8060005b83811015613d33578151613d1a8882613cbd565b9750613d2583613cd5565b925050600181019050613d06565b5085935050505092915050565b600060a082019050613d556000830188612c7b565b613d626020830187613c73565b8181036040830152613d748186613ce2565b9050613d836060830185613038565b613d906080830184612c7b565b9695505050505050565b600060c082019050613daf6000830189613038565b613dbc6020830188612c7b565b613dc96040830187613c73565b613dd66060830186613c73565b613de36080830185613038565b613df060a0830184612c7b565b979650505050505050565b600081519050613e0a81612dba565b92915050565b600080600060608486031215613e2957613e28612d57565b5b6000613e3786828701613dfb565b9350506020613e4886828701613dfb565b9250506040613e5986828701613dfb565b915050925092509256fea264697066735822122067927de165815f12bd872e9c84e5466d438d93e187f0c093843b54fe5fdf16df64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806370105c3b1161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e14610850578063e2f456051461088d578063e6c75f71146108b8578063f2fde38b146108e3578063f5b01e151461090c5761023b565b8063a9059cbb1461076b578063b45e83f8146107a8578063c0246668146107d3578063c49b9a80146107fc578063ccb61358146108255761023b565b80638da5cb5b116100f25780638da5cb5b146106845780638ea5220f146106af57806391d55f41146106da57806395d89b4114610703578063a457c2d71461072e5761023b565b806370105c3b146105b157806370a08231146105da578063715018a6146106175780637e7613771461062e57806385141a77146106595761023b565b80631816467f116101bc5780634a74bb02116101805780634a74bb02146104c85780634b8ce602146104f35780634fbee1931461051e578063556482091461055b5780635aa821a9146105865761023b565b80631816467f146103cf57806323b872dd146103f8578063313ce56714610435578063395093511461046057806349bd5a5e1461049d5761023b565b806309e89af71161020357806309e89af7146102fe5780631127ae3b1461032757806316216e5f146103505780631694505e1461037957806318160ddd146103a45761023b565b806301143fea1461024057806302259e9e1461026b57806306fdde0314610296578063095ea7b3146102c15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610935565b6040516102629190612c8a565b60405180910390f35b34801561027757600080fd5b5061028061093b565b60405161028d9190612c8a565b60405180910390f35b3480156102a257600080fd5b506102ab610941565b6040516102b89190612d35565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612de6565b6109d3565b6040516102f59190612e41565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612e5c565b6109f1565b005b34801561033357600080fd5b5061034e60048036038101906103499190612e89565b610a77565b005b34801561035c57600080fd5b5061037760048036038101906103729190612e5c565b610b5b565b005b34801561038557600080fd5b5061038e610c41565b60405161039b9190612f28565b60405180910390f35b3480156103b057600080fd5b506103b9610c67565b6040516103c69190612c8a565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190612f81565b610c71565b005b34801561040457600080fd5b5061041f600480360381019061041a9190612fae565b610d31565b60405161042c9190612e41565b60405180910390f35b34801561044157600080fd5b5061044a610e29565b604051610457919061301d565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612de6565b610e32565b6040516104949190612e41565b60405180910390f35b3480156104a957600080fd5b506104b2610ede565b6040516104bf9190613047565b60405180910390f35b3480156104d457600080fd5b506104dd610f02565b6040516104ea9190612e41565b60405180910390f35b3480156104ff57600080fd5b50610508610f15565b6040516105159190612c8a565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613062565b610f1b565b6040516105529190612e41565b60405180910390f35b34801561056757600080fd5b50610570610f71565b60405161057d9190612c8a565b60405180910390f35b34801561059257600080fd5b5061059b610f77565b6040516105a89190612c8a565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190612e89565b610f7d565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190613062565b611061565b60405161060e9190612c8a565b60405180910390f35b34801561062357600080fd5b5061062c6110a9565b005b34801561063a57600080fd5b50610643611131565b6040516106509190612c8a565b60405180910390f35b34801561066557600080fd5b5061066e611137565b60405161067b9190613047565b60405180910390f35b34801561069057600080fd5b5061069961115d565b6040516106a69190613047565b60405180910390f35b3480156106bb57600080fd5b506106c4611187565b6040516106d1919061309e565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612e5c565b6111ad565b005b34801561070f57600080fd5b506107186112d4565b6040516107259190612d35565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612de6565b611366565b6040516107629190612e41565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612de6565b611451565b60405161079f9190612e41565b60405180910390f35b3480156107b457600080fd5b506107bd61146f565b6040516107ca9190612c8a565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906130e5565b611475565b005b34801561080857600080fd5b50610823600480360381019061081e9190613125565b61162c565b005b34801561083157600080fd5b5061083a6116fc565b6040516108479190612c8a565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613152565b611702565b6040516108849190612c8a565b60405180910390f35b34801561089957600080fd5b506108a2611789565b6040516108af9190612c8a565b60405180910390f35b3480156108c457600080fd5b506108cd61178f565b6040516108da9190612c8a565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190613062565b611795565b005b34801561091857600080fd5b50610933600480360381019061092e9190612e5c565b61188c565b005b600a5481565b600e5481565b606060038054610950906131c1565b80601f016020809104026020016040519081016040528092919081815260200182805461097c906131c1565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b60006109e76109e0611972565b848461197a565b6001905092915050565b6109f9611972565b73ffffffffffffffffffffffffffffffffffffffff16610a1761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a649061323e565b60405180910390fd5b80600f8190555050565b610a7f611972565b73ffffffffffffffffffffffffffffffffffffffff16610a9d61115d565b73ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea9061323e565b60405180910390fd5b6005610b088284611b4390919063ffffffff16565b1115610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b40906132aa565b60405180910390fd5b8160098190555080600a819055505050565b610b63611972565b73ffffffffffffffffffffffffffffffffffffffff16610b8161115d565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce9061323e565b60405180910390fd5b80600e81905550610bfa6101f4610bec610c67565b611b5990919063ffffffff16565b600e541015610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613316565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610c79611972565b73ffffffffffffffffffffffffffffffffffffffff16610c9761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce49061323e565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d3e848484611b6f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d89611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e00906133a8565b60405180910390fd5b610e1d85610e15611972565b85840361197a565b60019150509392505050565b60006012905090565b6000610ed4610e3f611972565b848460016000610e4d611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecf91906133f7565b61197a565b6001905092915050565b7f0000000000000000000000009aa977e32d7f072fa725dd8784c48262558d902981565b601260159054906101000a900460ff1681565b60075481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b600d5481565b610f85611972565b73ffffffffffffffffffffffffffffffffffffffff16610fa361115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff09061323e565b60405180910390fd5b600561100e8284611b4390919063ffffffff16565b111561104f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611046906132aa565b60405180910390fd5b81600b8190555080600c819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b1611972565b73ffffffffffffffffffffffffffffffffffffffff166110cf61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c9061323e565b60405180910390fd5b61112f6000612413565b565b600c5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111b5611972565b73ffffffffffffffffffffffffffffffffffffffff166111d361115d565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061323e565b60405180910390fd5b60006010549050816010819055506112536101f4611245610c67565b611b5990919063ffffffff16565b6010541015611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613316565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e7381836040516112c892919061342b565b60405180910390a15050565b6060600480546112e3906131c1565b80601f016020809104026020016040519081016040528092919081815260200182805461130f906131c1565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b5050505050905090565b60008060016000611375611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906134c6565b60405180910390fd5b61144661143d611972565b8585840361197a565b600191505092915050565b600061146561145e611972565b8484611b6f565b6001905092915050565b600b5481565b61147d611972565b73ffffffffffffffffffffffffffffffffffffffff1661149b61115d565b73ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061323e565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613558565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116209190612e41565b60405180910390a25050565b611634611972565b73ffffffffffffffffffffffffffffffffffffffff1661165261115d565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f9061323e565b60405180910390fd5b80601260156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116f19190612e41565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b60105481565b61179d611972565b73ffffffffffffffffffffffffffffffffffffffff166117bb61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118089061323e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611877906135ea565b60405180910390fd5b61188981612413565b50565b611894611972565b73ffffffffffffffffffffffffffffffffffffffff166118b261115d565b73ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061323e565b60405180910390fd5b80600d8190555061192b6101f461191d610c67565b611b5990919063ffffffff16565b600d54101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613316565b60405180910390fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e09061367c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f9061370e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b369190612c8a565b60405180910390a3505050565b60008183611b5191906133f7565b905092915050565b60008183611b67919061375d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613800565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613892565b60405180910390fd5b60008103611c6657611c61838360006124d9565b61240e565b7f0000000000000000000000009aa977e32d7f072fa725dd8784c48262558d902973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611d0b5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d615750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dc5576000611d7183611061565b90506010548282611d8291906133f7565b1115611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613924565b60405180910390fd5b505b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e695750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ec057507f0000000000000000000000009aa977e32d7f072fa725dd8784c48262558d902973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611f0b57600d54811115611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906139b6565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611faf5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561200657507f0000000000000000000000009aa977e32d7f072fa725dd8784c48262558d902973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561205157600e54811115612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790613a48565b60405180910390fd5b5b601260149054906101000a900460ff161580156120b957507f0000000000000000000000009aa977e32d7f072fa725dd8784c48262558d902973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156120d15750601260159054906101000a900460ff165b80156120f05750600f546008541015806120ef5750600f5460075410155b5b156120fe576120fd612758565b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121a25750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124025760008060007f0000000000000000000000009aa977e32d7f072fa725dd8784c48262558d902973ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036122b4576000600a541115612259576122326064612224600a54876128dc90919063ffffffff16565b611b5990919063ffffffff16565b9250826008600082825461224691906133f7565b925050819055506122588630856124d9565b5b600060095411156122b35761228c606461227e600954876128dc90919063ffffffff16565b611b5990919063ffffffff16565b915081600760008282546122a091906133f7565b925050819055506122b28630846124d9565b5b5b7f0000000000000000000000009aa977e32d7f072fa725dd8784c48262558d902973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123c5576000600b5411156123615761233a606461232c600b54876128dc90919063ffffffff16565b611b5990919063ffffffff16565b9250826008600082825461234e91906133f7565b925050819055506123608630856124d9565b5b6000600c5411156123c4576123946064612386600c54876128dc90919063ffffffff16565b611b5990919063ffffffff16565b90506123c386601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124d9565b5b5b6123fc6123ed826123df8587611b4390919063ffffffff16565b611b4390919063ffffffff16565b856128f290919063ffffffff16565b93505050505b61240d8383836124d9565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f90613800565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90613892565b60405180910390fd5b6125c2838383612908565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f90613ada565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126db91906133f7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273f9190612c8a565b60405180910390a361275284848461290d565b50505050565b6001601260146101000a81548160ff021916908315150217905550600061277e30611061565b9050600f54600754101580156127965750600f548110155b156128595760006127b36002600f54611b5990919063ffffffff16565b905060006127cc82600f546128f290919063ffffffff16565b905060004790506127dd8330612912565b60006127f282476128f290919063ffffffff16565b90506127fe8382612b8c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161283193929190613afa565b60405180910390a1600f546007600082825461284d9190613b31565b92505081905550505050505b600f546008541015801561286f5750600f548110155b156128be576128a2600f54601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612912565b600f54600860008282546128b69190613b31565b925050819055505b506000601260146101000a81548160ff021916908315150217905550565b600081836128ea9190613b65565b905092915050565b600081836129009190613b31565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561292f5761292e613ba7565b5b60405190808252806020026020018201604052801561295d5781602001602082028036833780820191505090505b509050308160008151811061297557612974613bd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a409190613c1a565b81600181518110612a5457612a53613bd6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082612abb30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611702565b1015612af157612af030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001961197a565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401612b55959493929190613d40565b600060405180830381600087803b158015612b6f57600080fd5b505af1158015612b83573d6000803e3d6000fd5b50505050505050565b612bb930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461197a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612c0561115d565b426040518863ffffffff1660e01b8152600401612c2796959493929190613d9a565b60606040518083038185885af1158015612c45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c6a9190613e10565b5050505050565b6000819050919050565b612c8481612c71565b82525050565b6000602082019050612c9f6000830184612c7b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cdf578082015181840152602081019050612cc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d0782612ca5565b612d118185612cb0565b9350612d21818560208601612cc1565b612d2a81612ceb565b840191505092915050565b60006020820190508181036000830152612d4f8184612cfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d8782612d5c565b9050919050565b612d9781612d7c565b8114612da257600080fd5b50565b600081359050612db481612d8e565b92915050565b612dc381612c71565b8114612dce57600080fd5b50565b600081359050612de081612dba565b92915050565b60008060408385031215612dfd57612dfc612d57565b5b6000612e0b85828601612da5565b9250506020612e1c85828601612dd1565b9150509250929050565b60008115159050919050565b612e3b81612e26565b82525050565b6000602082019050612e566000830184612e32565b92915050565b600060208284031215612e7257612e71612d57565b5b6000612e8084828501612dd1565b91505092915050565b60008060408385031215612ea057612e9f612d57565b5b6000612eae85828601612dd1565b9250506020612ebf85828601612dd1565b9150509250929050565b6000819050919050565b6000612eee612ee9612ee484612d5c565b612ec9565b612d5c565b9050919050565b6000612f0082612ed3565b9050919050565b6000612f1282612ef5565b9050919050565b612f2281612f07565b82525050565b6000602082019050612f3d6000830184612f19565b92915050565b6000612f4e82612d5c565b9050919050565b612f5e81612f43565b8114612f6957600080fd5b50565b600081359050612f7b81612f55565b92915050565b600060208284031215612f9757612f96612d57565b5b6000612fa584828501612f6c565b91505092915050565b600080600060608486031215612fc757612fc6612d57565b5b6000612fd586828701612da5565b9350506020612fe686828701612da5565b9250506040612ff786828701612dd1565b9150509250925092565b600060ff82169050919050565b61301781613001565b82525050565b6000602082019050613032600083018461300e565b92915050565b61304181612d7c565b82525050565b600060208201905061305c6000830184613038565b92915050565b60006020828403121561307857613077612d57565b5b600061308684828501612da5565b91505092915050565b61309881612f43565b82525050565b60006020820190506130b3600083018461308f565b92915050565b6130c281612e26565b81146130cd57600080fd5b50565b6000813590506130df816130b9565b92915050565b600080604083850312156130fc576130fb612d57565b5b600061310a85828601612da5565b925050602061311b858286016130d0565b9150509250929050565b60006020828403121561313b5761313a612d57565b5b6000613149848285016130d0565b91505092915050565b6000806040838503121561316957613168612d57565b5b600061317785828601612da5565b925050602061318885828601612da5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131d957607f821691505b6020821081036131ec576131eb613192565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613228602083612cb0565b9150613233826131f2565b602082019050919050565b600060208201905081810360008301526132578161321b565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613294600c83612cb0565b915061329f8261325e565b602082019050919050565b600060208201905081810360008301526132c381613287565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000613300600d83612cb0565b915061330b826132ca565b602082019050919050565b6000602082019050818103600083015261332f816132f3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613392602883612cb0565b915061339d82613336565b604082019050919050565b600060208201905081810360008301526133c181613385565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061340282612c71565b915061340d83612c71565b9250828201905080821115613425576134246133c8565b5b92915050565b60006040820190506134406000830185612c7b565b61344d6020830184612c7b565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134b0602583612cb0565b91506134bb82613454565b604082019050919050565b600060208201905081810360008301526134df816134a3565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613542602a83612cb0565b915061354d826134e6565b604082019050919050565b6000602082019050818103600083015261357181613535565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135d4602683612cb0565b91506135df82613578565b604082019050919050565b60006020820190508181036000830152613603816135c7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613666602483612cb0565b91506136718261360a565b604082019050919050565b6000602082019050818103600083015261369581613659565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f8602283612cb0565b91506137038261369c565b604082019050919050565b60006020820190508181036000830152613727816136eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061376882612c71565b915061377383612c71565b9250826137835761378261372e565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137ea602583612cb0565b91506137f58261378e565b604082019050919050565b60006020820190508181036000830152613819816137dd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061387c602383612cb0565b915061388782613820565b604082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061390e602483612cb0565b9150613919826138b2565b604082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b60006139a0602b83612cb0565b91506139ab82613944565b604082019050919050565b600060208201905081810360008301526139cf81613993565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000613a32602c83612cb0565b9150613a3d826139d6565b604082019050919050565b60006020820190508181036000830152613a6181613a25565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613ac4602683612cb0565b9150613acf82613a68565b604082019050919050565b60006020820190508181036000830152613af381613ab7565b9050919050565b6000606082019050613b0f6000830186612c7b565b613b1c6020830185612c7b565b613b296040830184612c7b565b949350505050565b6000613b3c82612c71565b9150613b4783612c71565b9250828203905081811115613b5f57613b5e6133c8565b5b92915050565b6000613b7082612c71565b9150613b7b83612c71565b9250828202613b8981612c71565b91508282048414831517613ba057613b9f6133c8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613c1481612d8e565b92915050565b600060208284031215613c3057613c2f612d57565b5b6000613c3e84828501613c05565b91505092915050565b6000819050919050565b6000613c6c613c67613c6284613c47565b612ec9565b612c71565b9050919050565b613c7c81613c51565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cb781612d7c565b82525050565b6000613cc98383613cae565b60208301905092915050565b6000602082019050919050565b6000613ced82613c82565b613cf78185613c8d565b9350613d0283613c9e565b8060005b83811015613d33578151613d1a8882613cbd565b9750613d2583613cd5565b925050600181019050613d06565b5085935050505092915050565b600060a082019050613d556000830188612c7b565b613d626020830187613c73565b8181036040830152613d748186613ce2565b9050613d836060830185613038565b613d906080830184612c7b565b9695505050505050565b600060c082019050613daf6000830189613038565b613dbc6020830188612c7b565b613dc96040830187613c73565b613dd66060830186613c73565b613de36080830185613038565b613df060a0830184612c7b565b979650505050505050565b600081519050613e0a81612dba565b92915050565b600080600060608486031215613e2957613e28612d57565b5b6000613e3786828701613dfb565b9350506020613e4886828701613dfb565b9250506040613e5986828701613dfb565b915050925092509256fea264697066735822122067927de165815f12bd872e9c84e5466d438d93e187f0c093843b54fe5fdf16df64736f6c63430008110033

Deployed Bytecode Sourcemap

25904:9723:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26190:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26365:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4062:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5468:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34840:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33525:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34309:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25985:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4650:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33962:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5703:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4492:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6313:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26033:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26755:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26080:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34968:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26117:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26300:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33743:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4821:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2822:94;;;;;;;;;;;;;:::i;:::-;;26263:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26640:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2336:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26547:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35284:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4281:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6646:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5018:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26226:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34542:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35105:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26148:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5256:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26431:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26489:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3071:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34083:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26190:28;;;;:::o;26365:59::-;;;;:::o;4062:100::-;4116:13;4149:5;4142:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4062:100;:::o;5468:169::-;5551:4;5568:39;5577:12;:10;:12::i;:::-;5591:7;5600:6;5568:8;:39::i;:::-;5625:4;5618:11;;5468:169;;;;:::o;34840:116::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34940:8:::1;34919:18;:29;;;;34840:116:::0;:::o;33525:210::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33643:1:::1;33619:20;33631:7;33619;:11;;:20;;;;:::i;:::-;:25;;33611:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;33690:7;33672:15;:25;;;;33720:7;33708:9;:19;;;;33525:210:::0;;:::o;34309:221::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34423:12:::1;34396:24;:39;;;;34482:22;34500:3;34482:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;34454:24;;:50;;34446:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34309:221:::0;:::o;25985:41::-;;;;;;;;;;;;;:::o;4650:108::-;4711:7;4738:12;;4731:19;;4650:108;:::o;33962:113::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34057:10:::1;34045:9;;:22;;;;;;;;;;;;;;;;;;33962:113:::0;:::o;5703:492::-;5843:4;5860:36;5870:6;5878:9;5889:6;5860:9;:36::i;:::-;5909:24;5936:11;:19;5948:6;5936:19;;;;;;;;;;;;;;;:33;5956:12;:10;:12::i;:::-;5936:33;;;;;;;;;;;;;;;;5909:60;;6008:6;5988:16;:26;;5980:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6095:57;6104:6;6112:12;:10;:12::i;:::-;6145:6;6126:16;:25;6095:8;:57::i;:::-;6183:4;6176:11;;;5703:492;;;;;:::o;4492:93::-;4550:5;4575:2;4568:9;;4492:93;:::o;6313:215::-;6401:4;6418:80;6427:12;:10;:12::i;:::-;6441:7;6487:10;6450:11;:25;6462:12;:10;:12::i;:::-;6450:25;;;;;;;;;;;;;;;:34;6476:7;6450:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6418:8;:80::i;:::-;6516:4;6509:11;;6313:215;;;;:::o;26033:38::-;;;:::o;26755:40::-;;;;;;;;;;;;;:::o;26080:30::-;;;;:::o;34968:125::-;35033:4;35057:19;:28;35077:7;35057:28;;;;;;;;;;;;;;;;;;;;;;;;;35050:35;;34968:125;;;:::o;26117:24::-;;;;:::o;26300:58::-;;;;:::o;33743:211::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33864:1:::1;33839:21;33851:8;33839:7;:11;;:21;;;;:::i;:::-;:26;;33831:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33906:7;33893:10;:20;;;;33938:8;33924:11;:22;;;;33743:211:::0;;:::o;4821:127::-;4895:7;4922:9;:18;4932:7;4922:18;;;;;;;;;;;;;;;;4915:25;;4821:127;;;:::o;2822:94::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2887:21:::1;2905:1;2887:9;:21::i;:::-;2822:94::o:0;26263:30::-;;;;:::o;26640:70::-;;;;;;;;;;;;;:::o;2336:87::-;2382:7;2409:6;;;;;;;;;;;2402:13;;2336:87;:::o;26547:86::-;;;;;;;;;;;;;:::o;35284:290::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35360:17:::1;35380:14;;35360:34;;35421:9;35404:14;:26;;;;35467:22;35485:3;35467:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;35449:14;;:40;;35441:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35523:44;35546:9;35557;35523:44;;;;;;;:::i;:::-;;;;;;;;35349:225;35284:290:::0;:::o;4281:104::-;4337:13;4370:7;4363:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4281:104;:::o;6646:413::-;6739:4;6756:24;6783:11;:25;6795:12;:10;:12::i;:::-;6783:25;;;;;;;;;;;;;;;:34;6809:7;6783:34;;;;;;;;;;;;;;;;6756:61;;6856:15;6836:16;:35;;6828:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6949:67;6958:12;:10;:12::i;:::-;6972:7;7000:15;6981:16;:34;6949:8;:67::i;:::-;7047:4;7040:11;;;6646:413;;;;:::o;5018:175::-;5104:4;5121:42;5131:12;:10;:12::i;:::-;5145:9;5156:6;5121:9;:42::i;:::-;5181:4;5174:11;;5018:175;;;;:::o;26226:29::-;;;;:::o;34542:290::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34667:8:::1;34635:40;;:19;:28;34655:7;34635:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;34627:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34764:8;34733:19;:28;34753:7;34733:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34806:7;34790:34;;;34815:8;34790:34;;;;;;:::i;:::-;;;;;;;;34542:290:::0;;:::o;35105:171::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35206:8:::1;35182:21;;:32;;;;;;;;;;;;;;;;;;35230:38;35259:8;35230:38;;;;;;:::i;:::-;;;;;;;;35105:171:::0;:::o;26148:34::-;;;;:::o;5256:151::-;5345:7;5372:11;:18;5384:5;5372:18;;;;;;;;;;;;;;;:27;5391:7;5372:27;;;;;;;;;;;;;;;;5365:34;;5256:151;;;;:::o;26431:51::-;;;;:::o;26489:49::-;;;;:::o;3071:192::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3180:1:::1;3160:22;;:8;:22;;::::0;3152:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3236:19;3246:8;3236:9;:19::i;:::-;3071:192:::0;:::o;34083:218::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34195:12:::1;34169:23;:38;;;;34253:22;34271:3;34253:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;34226:23;;:49;;34218:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34083:218:::0;:::o;1528:98::-;1581:7;1608:10;1601:17;;1528:98;:::o;8552:380::-;8705:1;8688:19;;:5;:19;;;8680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8786:1;8767:21;;:7;:21;;;8759:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8870:6;8840:11;:18;8852:5;8840:18;;;;;;;;;;;;;;;:27;8859:7;8840:27;;;;;;;;;;;;;;;:36;;;;8908:7;8892:32;;8901:5;8892:32;;;8917:6;8892:32;;;;;;:::i;:::-;;;;;;;;8552:380;;;:::o;18342:98::-;18400:7;18431:1;18427;:5;;;;:::i;:::-;18420:12;;18342:98;;;;:::o;19078:::-;19136:7;19167:1;19163;:5;;;;:::i;:::-;19156:12;;19078:98;;;;:::o;28347:2767::-;28495:1;28479:18;;:4;:18;;;28471:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28572:1;28558:16;;:2;:16;;;28550:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28647:1;28637:6;:11;28634:92;;28665:28;28681:4;28687:2;28691:1;28665:15;:28::i;:::-;28708:7;;28634:92;28748:13;28742:19;;:4;:19;;;:49;;;;;28766:19;:25;28786:4;28766:25;;;;;;;;;;;;;;;;;;;;;;;;;28765:26;28742:49;:77;;;;;28796:19;:23;28816:2;28796:23;;;;;;;;;;;;;;;;;;;;;;;;;28795:24;28742:77;28738:273;;;28836:32;28871:13;28881:2;28871:9;:13::i;:::-;28836:48;;28944:14;;28934:6;28907:24;:33;;;;:::i;:::-;:51;;28899:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28821:190;28738:273;29027:19;:25;29047:4;29027:25;;;;;;;;;;;;;;;;;;;;;;;;;29026:26;:54;;;;;29057:19;:23;29077:2;29057:23;;;;;;;;;;;;;;;;;;;;;;;;;29056:24;29026:54;:77;;;;;29090:13;29084:19;;:4;:19;;;29026:77;29023:197;;;29137:23;;29127:6;:33;;29119:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;29023:197;29236:19;:25;29256:4;29236:25;;;;;;;;;;;;;;;;;;;;;;;;;29235:26;:54;;;;;29266:19;:23;29286:2;29266:23;;;;;;;;;;;;;;;;;;;;;;;;;29265:24;29235:54;:75;;;;;29297:13;29293:17;;:2;:17;;;29235:75;29232:197;;;29344:24;;29334:6;:34;;29326:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;29232:197;29449:16;;;;;;;;;;;29448:17;:38;;;;;29473:13;29469:17;;:2;:17;;;29448:38;:77;;;;;29504:21;;;;;;;;;;;29448:77;:182;;;;;29557:18;;29544:9;;:31;;:85;;;;29611:18;;29592:15;;:37;;29544:85;29448:182;29445:239;;;29656:16;:14;:16::i;:::-;29445:239;29715:19;:25;29735:4;29715:25;;;;;;;;;;;;;;;;;;;;;;;;;29714:26;:54;;;;;29745:19;:23;29765:2;29745:23;;;;;;;;;;;;;;;;;;;;;;;;;29744:24;29714:54;29711:1348;;;29785:16;29816:22;29853:17;29908:13;29902:19;;:4;:19;;;29899:564;;29975:1;29963:9;;:13;29960:215;;;30012:30;30038:3;30012:21;30023:9;;30012:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;30001:41;;30078:8;30065:9;;:21;;;;;;;:::i;:::-;;;;;;;;30109:46;30125:4;30139;30146:8;30109:15;:46::i;:::-;29960:215;30216:1;30198:15;;:19;30195:251;;;30259:36;30291:3;30259:27;30270:15;;30259:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;30242:53;;30337:14;30318:15;;:33;;;;;;;:::i;:::-;;;;;;;;30374:52;30390:4;30404;30411:14;30374:15;:52::i;:::-;30195:251;29899:564;30486:13;30482:17;;:2;:17;;;30479:486;;30553:1;30540:10;;:14;30537:217;;;30590:31;30617:3;30590:22;30601:10;;30590:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;30579:42;;30657:8;30644:9;;:21;;;;;;;:::i;:::-;;;;;;;;30688:46;30704:4;30718;30725:8;30688:15;:46::i;:::-;30537:217;30791:1;30777:11;;:15;30774:174;;;30829:32;30857:3;30829:23;30840:11;;30829:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;30817:44;;30884;30900:4;30906:10;;;;;;;;;;;30918:9;30884:15;:44::i;:::-;30774:174;30479:486;30990:55;31001:43;31034:9;31001:28;31014:14;31001:8;:12;;:28;;;;:::i;:::-;:32;;:43;;;;:::i;:::-;30990:6;:10;;:55;;;;:::i;:::-;30981:64;;29770:1289;;;29711:1348;31071:33;31087:4;31093:2;31097:6;31071:15;:33::i;:::-;28347:2767;;;;:::o;3271:173::-;3327:16;3346:6;;;;;;;;;;;3327:25;;3372:8;3363:6;;:17;;;;;;;;;;;;;;;;;;3427:8;3396:40;;3417:8;3396:40;;;;;;;;;;;;3316:128;3271:173;:::o;7161:733::-;7319:1;7301:20;;:6;:20;;;7293:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7403:1;7382:23;;:9;:23;;;7374:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7458:47;7479:6;7487:9;7498:6;7458:20;:47::i;:::-;7518:21;7542:9;:17;7552:6;7542:17;;;;;;;;;;;;;;;;7518:41;;7595:6;7578:13;:23;;7570:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7716:6;7700:13;:22;7680:9;:17;7690:6;7680:17;;;;;;;;;;;;;;;:42;;;;7768:6;7744:9;:20;7754:9;7744:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7809:9;7792:35;;7801:6;7792:35;;;7820:6;7792:35;;;;;;:::i;:::-;;;;;;;;7840:46;7860:6;7868:9;7879:6;7840:19;:46::i;:::-;7282:612;7161:733;;;:::o;31122:1171::-;27422:4;27403:16;;:23;;;;;;;;;;;;;;;;;;31179:28:::1;31210:24;31228:4;31210:9;:24::i;:::-;31179:55;;31267:18;;31248:15;;:37;;:83;;;;;31313:18;;31289:20;:42;;31248:83;31245:825;;;31403:12;31418:25;31441:1;31418:18;;:22;;:25;;;;:::i;:::-;31403:40;;31458:17;31478:28;31501:4;31478:18;;:22;;:28;;;;:::i;:::-;31458:48;;31583:22;31608:21;31583:46;;31682:37;31699:4;31713;31682:16;:37::i;:::-;31788:18;31809:41;31835:14;31809:21;:25;;:41;;;;:::i;:::-;31788:62;;31908:35;31921:9;31932:10;31908:12;:35::i;:::-;31963:43;31978:4;31984:10;31996:9;31963:43;;;;;;;;:::i;:::-;;;;;;;;32040:18;;32021:15;;:37;;;;;;;:::i;:::-;;;;;;;;31333:737;;;;31245:825;32098:18;;32085:9;;:31;;:77;;;;;32144:18;;32120:20;:42;;32085:77;32082:202;;;32179:47;32196:18;;32216:9;;;;;;;;;;;32179:16;:47::i;:::-;32254:18;;32241:9;;:31;;;;;;;:::i;:::-;;;;;;;;32082:202;31168:1125;27468:5:::0;27449:16;;:24;;;;;;;;;;;;;;;;;;31122:1171::o;18811:98::-;18869:7;18900:1;18896;:5;;;;:::i;:::-;18889:12;;18811:98;;;;:::o;18590:::-;18648:7;18679:1;18675;:5;;;;:::i;:::-;18668:12;;18590:98;;;;:::o;9065:125::-;;;;:::o;9322:124::-;;;;:::o;32822:695::-;32961:21;32999:1;32985:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32961:40;;33030:4;33012;33017:1;33012:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33056:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33046:4;33051:1;33046:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33147:11;33094:50;33112:4;33127:15;;;;;;;;;;;33094:9;:50::i;:::-;:64;33091:156;;;33173:62;33190:4;33205:15;;;;;;;;;;;33232:1;33223:11;33173:8;:62::i;:::-;33091:156;33285:15;;;;;;;;;;;:66;;;33366:11;33392:1;33436:4;33455:3;33473:15;33285:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32890:627;32822:695;;:::o;32301:513::-;32449:62;32466:4;32481:15;;;;;;;;;;;32499:11;32449:8;:62::i;:::-;32554:15;;;;;;;;;;;:31;;;32593:9;32626:4;32646:11;32672:1;32715;32758:7;:5;:7::i;:::-;32780:15;32554:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32301:513;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:474::-;4201:6;4209;4258:2;4246:9;4237:7;4233:23;4229:32;4226:119;;;4264:79;;:::i;:::-;4226:119;4384:1;4409:53;4454:7;4445:6;4434:9;4430:22;4409:53;:::i;:::-;4399:63;;4355:117;4511:2;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4482:118;4133:474;;;;;:::o;4613:60::-;4641:3;4662:5;4655:12;;4613:60;;;:::o;4679:142::-;4729:9;4762:53;4780:34;4789:24;4807:5;4789:24;:::i;:::-;4780:34;:::i;:::-;4762:53;:::i;:::-;4749:66;;4679:142;;;:::o;4827:126::-;4877:9;4910:37;4941:5;4910:37;:::i;:::-;4897:50;;4827:126;;;:::o;4959:153::-;5036:9;5069:37;5100:5;5069:37;:::i;:::-;5056:50;;4959:153;;;:::o;5118:185::-;5232:64;5290:5;5232:64;:::i;:::-;5227:3;5220:77;5118:185;;:::o;5309:276::-;5429:4;5467:2;5456:9;5452:18;5444:26;;5480:98;5575:1;5564:9;5560:17;5551:6;5480:98;:::i;:::-;5309:276;;;;:::o;5591:104::-;5636:7;5665:24;5683:5;5665:24;:::i;:::-;5654:35;;5591:104;;;:::o;5701:138::-;5782:32;5808:5;5782:32;:::i;:::-;5775:5;5772:43;5762:71;;5829:1;5826;5819:12;5762:71;5701:138;:::o;5845:155::-;5899:5;5937:6;5924:20;5915:29;;5953:41;5988:5;5953:41;:::i;:::-;5845:155;;;;:::o;6006:345::-;6073:6;6122:2;6110:9;6101:7;6097:23;6093:32;6090:119;;;6128:79;;:::i;:::-;6090:119;6248:1;6273:61;6326:7;6317:6;6306:9;6302:22;6273:61;:::i;:::-;6263:71;;6219:125;6006:345;;;;:::o;6357:619::-;6434:6;6442;6450;6499:2;6487:9;6478:7;6474:23;6470:32;6467:119;;;6505:79;;:::i;:::-;6467:119;6625:1;6650:53;6695:7;6686:6;6675:9;6671:22;6650:53;:::i;:::-;6640:63;;6596:117;6752:2;6778:53;6823:7;6814:6;6803:9;6799:22;6778:53;:::i;:::-;6768:63;;6723:118;6880:2;6906:53;6951:7;6942:6;6931:9;6927:22;6906:53;:::i;:::-;6896:63;;6851:118;6357:619;;;;;:::o;6982:86::-;7017:7;7057:4;7050:5;7046:16;7035:27;;6982:86;;;:::o;7074:112::-;7157:22;7173:5;7157:22;:::i;:::-;7152:3;7145:35;7074:112;;:::o;7192:214::-;7281:4;7319:2;7308:9;7304:18;7296:26;;7332:67;7396:1;7385:9;7381:17;7372:6;7332:67;:::i;:::-;7192:214;;;;:::o;7412:118::-;7499:24;7517:5;7499:24;:::i;:::-;7494:3;7487:37;7412:118;;:::o;7536:222::-;7629:4;7667:2;7656:9;7652:18;7644:26;;7680:71;7748:1;7737:9;7733:17;7724:6;7680:71;:::i;:::-;7536:222;;;;:::o;7764:329::-;7823:6;7872:2;7860:9;7851:7;7847:23;7843:32;7840:119;;;7878:79;;:::i;:::-;7840:119;7998:1;8023:53;8068:7;8059:6;8048:9;8044:22;8023:53;:::i;:::-;8013:63;;7969:117;7764:329;;;;:::o;8099:142::-;8202:32;8228:5;8202:32;:::i;:::-;8197:3;8190:45;8099:142;;:::o;8247:254::-;8356:4;8394:2;8383:9;8379:18;8371:26;;8407:87;8491:1;8480:9;8476:17;8467:6;8407:87;:::i;:::-;8247:254;;;;:::o;8507:116::-;8577:21;8592:5;8577:21;:::i;:::-;8570:5;8567:32;8557:60;;8613:1;8610;8603:12;8557:60;8507:116;:::o;8629:133::-;8672:5;8710:6;8697:20;8688:29;;8726:30;8750:5;8726:30;:::i;:::-;8629:133;;;;:::o;8768:468::-;8833:6;8841;8890:2;8878:9;8869:7;8865:23;8861:32;8858:119;;;8896:79;;:::i;:::-;8858:119;9016:1;9041:53;9086:7;9077:6;9066:9;9062:22;9041:53;:::i;:::-;9031:63;;8987:117;9143:2;9169:50;9211:7;9202:6;9191:9;9187:22;9169:50;:::i;:::-;9159:60;;9114:115;8768:468;;;;;:::o;9242:323::-;9298:6;9347:2;9335:9;9326:7;9322:23;9318:32;9315:119;;;9353:79;;:::i;:::-;9315:119;9473:1;9498:50;9540:7;9531:6;9520:9;9516:22;9498:50;:::i;:::-;9488:60;;9444:114;9242:323;;;;:::o;9571:474::-;9639:6;9647;9696:2;9684:9;9675:7;9671:23;9667:32;9664:119;;;9702:79;;:::i;:::-;9664:119;9822:1;9847:53;9892:7;9883:6;9872:9;9868:22;9847:53;:::i;:::-;9837:63;;9793:117;9949:2;9975:53;10020:7;10011:6;10000:9;9996:22;9975:53;:::i;:::-;9965:63;;9920:118;9571:474;;;;;:::o;10051:180::-;10099:77;10096:1;10089:88;10196:4;10193:1;10186:15;10220:4;10217:1;10210:15;10237:320;10281:6;10318:1;10312:4;10308:12;10298:22;;10365:1;10359:4;10355:12;10386:18;10376:81;;10442:4;10434:6;10430:17;10420:27;;10376:81;10504:2;10496:6;10493:14;10473:18;10470:38;10467:84;;10523:18;;:::i;:::-;10467:84;10288:269;10237:320;;;:::o;10563:182::-;10703:34;10699:1;10691:6;10687:14;10680:58;10563:182;:::o;10751:366::-;10893:3;10914:67;10978:2;10973:3;10914:67;:::i;:::-;10907:74;;10990:93;11079:3;10990:93;:::i;:::-;11108:2;11103:3;11099:12;11092:19;;10751:366;;;:::o;11123:419::-;11289:4;11327:2;11316:9;11312:18;11304:26;;11376:9;11370:4;11366:20;11362:1;11351:9;11347:17;11340:47;11404:131;11530:4;11404:131;:::i;:::-;11396:139;;11123:419;;;:::o;11548:162::-;11688:14;11684:1;11676:6;11672:14;11665:38;11548:162;:::o;11716:366::-;11858:3;11879:67;11943:2;11938:3;11879:67;:::i;:::-;11872:74;;11955:93;12044:3;11955:93;:::i;:::-;12073:2;12068:3;12064:12;12057:19;;11716:366;;;:::o;12088:419::-;12254:4;12292:2;12281:9;12277:18;12269:26;;12341:9;12335:4;12331:20;12327:1;12316:9;12312:17;12305:47;12369:131;12495:4;12369:131;:::i;:::-;12361:139;;12088:419;;;:::o;12513:163::-;12653:15;12649:1;12641:6;12637:14;12630:39;12513:163;:::o;12682:366::-;12824:3;12845:67;12909:2;12904:3;12845:67;:::i;:::-;12838:74;;12921:93;13010:3;12921:93;:::i;:::-;13039:2;13034:3;13030:12;13023:19;;12682:366;;;:::o;13054:419::-;13220:4;13258:2;13247:9;13243:18;13235:26;;13307:9;13301:4;13297:20;13293:1;13282:9;13278:17;13271:47;13335:131;13461:4;13335:131;:::i;:::-;13327:139;;13054:419;;;:::o;13479:227::-;13619:34;13615:1;13607:6;13603:14;13596:58;13688:10;13683:2;13675:6;13671:15;13664:35;13479:227;:::o;13712:366::-;13854:3;13875:67;13939:2;13934:3;13875:67;:::i;:::-;13868:74;;13951:93;14040:3;13951:93;:::i;:::-;14069:2;14064:3;14060:12;14053:19;;13712:366;;;:::o;14084:419::-;14250:4;14288:2;14277:9;14273:18;14265:26;;14337:9;14331:4;14327:20;14323:1;14312:9;14308:17;14301:47;14365:131;14491:4;14365:131;:::i;:::-;14357:139;;14084:419;;;:::o;14509:180::-;14557:77;14554:1;14547:88;14654:4;14651:1;14644:15;14678:4;14675:1;14668:15;14695:191;14735:3;14754:20;14772:1;14754:20;:::i;:::-;14749:25;;14788:20;14806:1;14788:20;:::i;:::-;14783:25;;14831:1;14828;14824:9;14817:16;;14852:3;14849:1;14846:10;14843:36;;;14859:18;;:::i;:::-;14843:36;14695:191;;;;:::o;14892:332::-;15013:4;15051:2;15040:9;15036:18;15028:26;;15064:71;15132:1;15121:9;15117:17;15108:6;15064:71;:::i;:::-;15145:72;15213:2;15202:9;15198:18;15189:6;15145:72;:::i;:::-;14892:332;;;;;:::o;15230:224::-;15370:34;15366:1;15358:6;15354:14;15347:58;15439:7;15434:2;15426:6;15422:15;15415:32;15230:224;:::o;15460:366::-;15602:3;15623:67;15687:2;15682:3;15623:67;:::i;:::-;15616:74;;15699:93;15788:3;15699:93;:::i;:::-;15817:2;15812:3;15808:12;15801:19;;15460:366;;;:::o;15832:419::-;15998:4;16036:2;16025:9;16021:18;16013:26;;16085:9;16079:4;16075:20;16071:1;16060:9;16056:17;16049:47;16113:131;16239:4;16113:131;:::i;:::-;16105:139;;15832:419;;;:::o;16257:229::-;16397:34;16393:1;16385:6;16381:14;16374:58;16466:12;16461:2;16453:6;16449:15;16442:37;16257:229;:::o;16492:366::-;16634:3;16655:67;16719:2;16714:3;16655:67;:::i;:::-;16648:74;;16731:93;16820:3;16731:93;:::i;:::-;16849:2;16844:3;16840:12;16833:19;;16492:366;;;:::o;16864:419::-;17030:4;17068:2;17057:9;17053:18;17045:26;;17117:9;17111:4;17107:20;17103:1;17092:9;17088:17;17081:47;17145:131;17271:4;17145:131;:::i;:::-;17137:139;;16864:419;;;:::o;17289:225::-;17429:34;17425:1;17417:6;17413:14;17406:58;17498:8;17493:2;17485:6;17481:15;17474:33;17289:225;:::o;17520:366::-;17662:3;17683:67;17747:2;17742:3;17683:67;:::i;:::-;17676:74;;17759:93;17848:3;17759:93;:::i;:::-;17877:2;17872:3;17868:12;17861:19;;17520:366;;;:::o;17892:419::-;18058:4;18096:2;18085:9;18081:18;18073:26;;18145:9;18139:4;18135:20;18131:1;18120:9;18116:17;18109:47;18173:131;18299:4;18173:131;:::i;:::-;18165:139;;17892:419;;;:::o;18317:223::-;18457:34;18453:1;18445:6;18441:14;18434:58;18526:6;18521:2;18513:6;18509:15;18502:31;18317:223;:::o;18546:366::-;18688:3;18709:67;18773:2;18768:3;18709:67;:::i;:::-;18702:74;;18785:93;18874:3;18785:93;:::i;:::-;18903:2;18898:3;18894:12;18887:19;;18546:366;;;:::o;18918:419::-;19084:4;19122:2;19111:9;19107:18;19099:26;;19171:9;19165:4;19161:20;19157:1;19146:9;19142:17;19135:47;19199:131;19325:4;19199:131;:::i;:::-;19191:139;;18918:419;;;:::o;19343:221::-;19483:34;19479:1;19471:6;19467:14;19460:58;19552:4;19547:2;19539:6;19535:15;19528:29;19343:221;:::o;19570:366::-;19712:3;19733:67;19797:2;19792:3;19733:67;:::i;:::-;19726:74;;19809:93;19898:3;19809:93;:::i;:::-;19927:2;19922:3;19918:12;19911:19;;19570:366;;;:::o;19942:419::-;20108:4;20146:2;20135:9;20131:18;20123:26;;20195:9;20189:4;20185:20;20181:1;20170:9;20166:17;20159:47;20223:131;20349:4;20223:131;:::i;:::-;20215:139;;19942:419;;;:::o;20367:180::-;20415:77;20412:1;20405:88;20512:4;20509:1;20502:15;20536:4;20533:1;20526:15;20553:185;20593:1;20610:20;20628:1;20610:20;:::i;:::-;20605:25;;20644:20;20662:1;20644:20;:::i;:::-;20639:25;;20683:1;20673:35;;20688:18;;:::i;:::-;20673:35;20730:1;20727;20723:9;20718:14;;20553:185;;;;:::o;20744:224::-;20884:34;20880:1;20872:6;20868:14;20861:58;20953:7;20948:2;20940:6;20936:15;20929:32;20744:224;:::o;20974:366::-;21116:3;21137:67;21201:2;21196:3;21137:67;:::i;:::-;21130:74;;21213:93;21302:3;21213:93;:::i;:::-;21331:2;21326:3;21322:12;21315:19;;20974:366;;;:::o;21346:419::-;21512:4;21550:2;21539:9;21535:18;21527:26;;21599:9;21593:4;21589:20;21585:1;21574:9;21570:17;21563:47;21627:131;21753:4;21627:131;:::i;:::-;21619:139;;21346:419;;;:::o;21771:222::-;21911:34;21907:1;21899:6;21895:14;21888:58;21980:5;21975:2;21967:6;21963:15;21956:30;21771:222;:::o;21999:366::-;22141:3;22162:67;22226:2;22221:3;22162:67;:::i;:::-;22155:74;;22238:93;22327:3;22238:93;:::i;:::-;22356:2;22351:3;22347:12;22340:19;;21999:366;;;:::o;22371:419::-;22537:4;22575:2;22564:9;22560:18;22552:26;;22624:9;22618:4;22614:20;22610:1;22599:9;22595:17;22588:47;22652:131;22778:4;22652:131;:::i;:::-;22644:139;;22371:419;;;:::o;22796:223::-;22936:34;22932:1;22924:6;22920:14;22913:58;23005:6;23000:2;22992:6;22988:15;22981:31;22796:223;:::o;23025:366::-;23167:3;23188:67;23252:2;23247:3;23188:67;:::i;:::-;23181:74;;23264:93;23353:3;23264:93;:::i;:::-;23382:2;23377:3;23373:12;23366:19;;23025:366;;;:::o;23397:419::-;23563:4;23601:2;23590:9;23586:18;23578:26;;23650:9;23644:4;23640:20;23636:1;23625:9;23621:17;23614:47;23678:131;23804:4;23678:131;:::i;:::-;23670:139;;23397:419;;;:::o;23822:230::-;23962:34;23958:1;23950:6;23946:14;23939:58;24031:13;24026:2;24018:6;24014:15;24007:38;23822:230;:::o;24058:366::-;24200:3;24221:67;24285:2;24280:3;24221:67;:::i;:::-;24214:74;;24297:93;24386:3;24297:93;:::i;:::-;24415:2;24410:3;24406:12;24399:19;;24058:366;;;:::o;24430:419::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:131;24837:4;24711:131;:::i;:::-;24703:139;;24430:419;;;:::o;24855:231::-;24995:34;24991:1;24983:6;24979:14;24972:58;25064:14;25059:2;25051:6;25047:15;25040:39;24855:231;:::o;25092:366::-;25234:3;25255:67;25319:2;25314:3;25255:67;:::i;:::-;25248:74;;25331:93;25420:3;25331:93;:::i;:::-;25449:2;25444:3;25440:12;25433:19;;25092:366;;;:::o;25464:419::-;25630:4;25668:2;25657:9;25653:18;25645:26;;25717:9;25711:4;25707:20;25703:1;25692:9;25688:17;25681:47;25745:131;25871:4;25745:131;:::i;:::-;25737:139;;25464:419;;;:::o;25889:225::-;26029:34;26025:1;26017:6;26013:14;26006:58;26098:8;26093:2;26085:6;26081:15;26074:33;25889:225;:::o;26120:366::-;26262:3;26283:67;26347:2;26342:3;26283:67;:::i;:::-;26276:74;;26359:93;26448:3;26359:93;:::i;:::-;26477:2;26472:3;26468:12;26461:19;;26120:366;;;:::o;26492:419::-;26658:4;26696:2;26685:9;26681:18;26673:26;;26745:9;26739:4;26735:20;26731:1;26720:9;26716:17;26709:47;26773:131;26899:4;26773:131;:::i;:::-;26765:139;;26492:419;;;:::o;26917:442::-;27066:4;27104:2;27093:9;27089:18;27081:26;;27117:71;27185:1;27174:9;27170:17;27161:6;27117:71;:::i;:::-;27198:72;27266:2;27255:9;27251:18;27242:6;27198:72;:::i;:::-;27280;27348:2;27337:9;27333:18;27324:6;27280:72;:::i;:::-;26917:442;;;;;;:::o;27365:194::-;27405:4;27425:20;27443:1;27425:20;:::i;:::-;27420:25;;27459:20;27477:1;27459:20;:::i;:::-;27454:25;;27503:1;27500;27496:9;27488:17;;27527:1;27521:4;27518:11;27515:37;;;27532:18;;:::i;:::-;27515:37;27365:194;;;;:::o;27565:410::-;27605:7;27628:20;27646:1;27628:20;:::i;:::-;27623:25;;27662:20;27680:1;27662:20;:::i;:::-;27657:25;;27717:1;27714;27710:9;27739:30;27757:11;27739:30;:::i;:::-;27728:41;;27918:1;27909:7;27905:15;27902:1;27899:22;27879:1;27872:9;27852:83;27829:139;;27948:18;;:::i;:::-;27829:139;27613:362;27565:410;;;;:::o;27981:180::-;28029:77;28026:1;28019:88;28126:4;28123:1;28116:15;28150:4;28147:1;28140:15;28167:180;28215:77;28212:1;28205:88;28312:4;28309:1;28302:15;28336:4;28333:1;28326:15;28353:143;28410:5;28441:6;28435:13;28426:22;;28457:33;28484:5;28457:33;:::i;:::-;28353:143;;;;:::o;28502:351::-;28572:6;28621:2;28609:9;28600:7;28596:23;28592:32;28589:119;;;28627:79;;:::i;:::-;28589:119;28747:1;28772:64;28828:7;28819:6;28808:9;28804:22;28772:64;:::i;:::-;28762:74;;28718:128;28502:351;;;;:::o;28859:85::-;28904:7;28933:5;28922:16;;28859:85;;;:::o;28950:158::-;29008:9;29041:61;29059:42;29068:32;29094:5;29068:32;:::i;:::-;29059:42;:::i;:::-;29041:61;:::i;:::-;29028:74;;28950:158;;;:::o;29114:147::-;29209:45;29248:5;29209:45;:::i;:::-;29204:3;29197:58;29114:147;;:::o;29267:114::-;29334:6;29368:5;29362:12;29352:22;;29267:114;;;:::o;29387:184::-;29486:11;29520:6;29515:3;29508:19;29560:4;29555:3;29551:14;29536:29;;29387:184;;;;:::o;29577:132::-;29644:4;29667:3;29659:11;;29697:4;29692:3;29688:14;29680:22;;29577:132;;;:::o;29715:108::-;29792:24;29810:5;29792:24;:::i;:::-;29787:3;29780:37;29715:108;;:::o;29829:179::-;29898:10;29919:46;29961:3;29953:6;29919:46;:::i;:::-;29997:4;29992:3;29988:14;29974:28;;29829:179;;;;:::o;30014:113::-;30084:4;30116;30111:3;30107:14;30099:22;;30014:113;;;:::o;30163:732::-;30282:3;30311:54;30359:5;30311:54;:::i;:::-;30381:86;30460:6;30455:3;30381:86;:::i;:::-;30374:93;;30491:56;30541:5;30491:56;:::i;:::-;30570:7;30601:1;30586:284;30611:6;30608:1;30605:13;30586:284;;;30687:6;30681:13;30714:63;30773:3;30758:13;30714:63;:::i;:::-;30707:70;;30800:60;30853:6;30800:60;:::i;:::-;30790:70;;30646:224;30633:1;30630;30626:9;30621:14;;30586:284;;;30590:14;30886:3;30879:10;;30287:608;;;30163:732;;;;:::o;30901:831::-;31164:4;31202:3;31191:9;31187:19;31179:27;;31216:71;31284:1;31273:9;31269:17;31260:6;31216:71;:::i;:::-;31297:80;31373:2;31362:9;31358:18;31349:6;31297:80;:::i;:::-;31424:9;31418:4;31414:20;31409:2;31398:9;31394:18;31387:48;31452:108;31555:4;31546:6;31452:108;:::i;:::-;31444:116;;31570:72;31638:2;31627:9;31623:18;31614:6;31570:72;:::i;:::-;31652:73;31720:3;31709:9;31705:19;31696:6;31652:73;:::i;:::-;30901:831;;;;;;;;:::o;31738:807::-;31987:4;32025:3;32014:9;32010:19;32002:27;;32039:71;32107:1;32096:9;32092:17;32083:6;32039:71;:::i;:::-;32120:72;32188:2;32177:9;32173:18;32164:6;32120:72;:::i;:::-;32202:80;32278:2;32267:9;32263:18;32254:6;32202:80;:::i;:::-;32292;32368:2;32357:9;32353:18;32344:6;32292:80;:::i;:::-;32382:73;32450:3;32439:9;32435:19;32426:6;32382:73;:::i;:::-;32465;32533:3;32522:9;32518:19;32509:6;32465:73;:::i;:::-;31738:807;;;;;;;;;:::o;32551:143::-;32608:5;32639:6;32633:13;32624:22;;32655:33;32682:5;32655:33;:::i;:::-;32551:143;;;;:::o;32700:663::-;32788:6;32796;32804;32853:2;32841:9;32832:7;32828:23;32824:32;32821:119;;;32859:79;;:::i;:::-;32821:119;32979:1;33004:64;33060:7;33051:6;33040:9;33036:22;33004:64;:::i;:::-;32994:74;;32950:128;33117:2;33143:64;33199:7;33190:6;33179:9;33175:22;33143:64;:::i;:::-;33133:74;;33088:129;33256:2;33282:64;33338:7;33329:6;33318:9;33314:22;33282:64;:::i;:::-;33272:74;;33227:129;32700:663;;;;;:::o

Swarm Source

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