ETH Price: $3,419.36 (+3.12%)

Token

BIXIE TOKEN (BIXIE)
 

Overview

Max Total Supply

1,000,000,000,000,000 BIXIE

Holders

179

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,910,000,000,000.000017824 BIXIE

Value
$0.00
0x729aac9048dd6c07d30e589087360ef1934b3a2c
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:
BXT

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-26
*/

pragma solidity ^0.8.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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



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

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

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

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions anymore. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby removing any functionality that is only available to the owner.
    */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

contract BXT is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isExchangeWallet;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "BIXIE TOKEN";
    string private _symbol = "BIXIE";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1000000000000000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public _maxBuyAmount = 10000000000000 * 10** _decimals;
    uint256 public ethPriceToSwap = 100000000000000000; //.1 ETH
    uint public ethSellAmount = 100000000000000000;  //.1 ETH
    uint256 public _maxWalletAmount = 20000000000000 * 10** _decimals;
    address public buyBackAddress = 0x8abE29d927F5b3a7CDe6386A8f20764c286D9a62;
    address public marketingAddress = 0x0800fB88b1aaEFaCDFeE8Ecd6C72FC87F941A497;
    address public devAddress = 0x80c7Ae3F68797c2cc484939731cC5f7Ac6704589;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);
    
    struct Distribution {
        uint256 devTeam;
        uint256 marketing;
        uint256 dividend;
        uint256 buyBack;
    }

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
        uint256 largeSellFee;
    }

    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    DividendTracker private dividendTracker;

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[buyBackAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromRewards[marketingAddress] = true;
        _isExcludedFromRewards[_msgSender()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[buyBackAddress] = true;
        _isExcludedFromRewards[devAddress] = true;
        _isExcludedFromRewards[deadWallet] = true;

        taxFees = TaxFees(5,10,0);
        distribution = Distribution(25, 50, 25, 0);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


    function airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false);
            iterator += 1;
        }
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10**9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner {
        _addRemoveExchange(addresses, isAddExchange);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns(bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthSwapSellSettings(uint ethSellAmount_, uint256 ethPriceToSwap_) external onlyOwner {
        ethSellAmount = ethSellAmount_;
        ethPriceToSwap = ethPriceToSwap_;
    }

    function createV2Pair() external onlyOwner {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
    }
    function _addRemoveExchange(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            isExchangeWallet[addr] = flag;
        }
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setMaxBuyAmount(uint256 maxBuyAmount) external onlyOwner() {
        _maxBuyAmount = maxBuyAmount * 10**9;
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 largeSellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
        taxFees.largeSellFee = largeSellFee;
    }

    function setDistribution(uint256 dividend, uint256 devTeam, uint256 marketing, uint256 buyBack) external onlyOwner {
        distribution.dividend = dividend;
        distribution.devTeam = devTeam;
        distribution.marketing = marketing;
        distribution.buyBack = buyBack;
    }

    function setWalletAddresses(address devAddr, address buyBack, address marketingAddr) external onlyOwner {
        devAddress = devAddr;
        buyBackAddress = buyBack;
        marketingAddress = marketingAddr;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {}

    function getEthPrice(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        return uniswapV2Router.getAmountsOut(tokenAmount, path)[1];
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner {
        isTaxFreeTransfer = enableDisable;
    }

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if(from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if(from == uniswapV2Pair || isExchangeWallet[from]) {
            require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
            // dividendTracker.calculateDividendDistribution();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) {
            takeFees = isTaxFreeTransfer ? false : true;
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            uint ethPrice = getEthPrice(contractTokenBalance);
            if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets marketing and dev
                distributeShares(contractTokenBalance);
            }
        }
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 distributionEth = address(this).balance;
        uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100);
        uint256 buyBackShare = distributionEth.mul(distribution.buyBack).div(100);
        payable(marketingAddress).transfer(marketingShare);
        sendEthDividends(dividendShare);
        payable(devAddress).transfer(devTeamShare);
        payable(buyBackAddress).transfer(buyBackShare);

    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
        if(takeFees && isSell) {
            taxAmount = amount.mul(taxFees.sellFee).div(100);
            if(taxFees.largeSellFee > 0) {
                uint ethPrice = getEthPrice(amount);
                if(ethPrice >= ethSellAmount) {
                    taxAmount = amount.mul(taxFees.largeSellFee).div(100);
                }
            }
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(sender, recipient, amount);

        if(doUpdateDividends) {
            try dividendTracker.setTokenBalance(sender) {} catch{}
            try dividendTracker.setTokenBalance(recipient) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns(bool) {
        return (getIndexOfKey(key) != -1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "BIXT TRACKER";
    string private _symbol = "BIXT";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 5000000000000 * 10 **  _decimals;
    BXT private bxt;
    bool public doCalculation = false;
    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from,uint256 weiAmount);
    event DividendWithdrawn(address indexed to,uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() {
        emit Transfer(address(0), _msgSender(), 0);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

    function setTokenBalance(address account) external {
        uint256 balance = bxt.balanceOf(account);
        if(!bxt.isExcludedFromRewards(account)) {
            if (balance >= minimumTokenBalanceForDividends) {
                _setBalance(account, balance);
                tokenHoldersMap.set(account, balance);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if(balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

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

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

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        bxt = BXT(payable(contractAddr));
    }

    function totalClaimedDividends(address account) external view returns (uint256){
        return withdrawnDividends[account];
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success,) = user.call{value : _withdrawableDividend, gas : 3000}("");
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
        minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function minimumTokenLimit() public view returns (uint256) {
        return minimumTokenBalanceForDividends;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }
    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        for(uint index = 0; index < newholders.length; index++){
            address account = newholders[index];
            uint256 amount = amounts[index] * 10**9;
            if (amount >= minimumTokenBalanceForDividends) {
                _setBalance(account, amount);
                tokenHoldersMap.set(account, amount);
            }

        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAddExchange","type":"bool"}],"name":"addRemoveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethSellAmount_","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthSwapSellSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devAddr","type":"address"},{"internalType":"address","name":"buyBack","type":"address"},{"internalType":"address","name":"marketingAddr","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560028054909116905560c0604052600b60808190526a2124ac24a2902a27a5a2a760a91b60a09081526200006091600991906200037c565b5060408051808201909152600580825264424958494560d81b60209092019182526200008f91600a916200037c565b50600b805460ff19166009908117909155620000ad90600a62000537565b620000c09066038d7ea4c680006200054f565b600c55600d805462ffff001916610100179055600b54620000e69060ff16600a62000537565b620000f8906509184e72a0006200054f565b600e5567016345785d8a0000600f819055601055600b546200011f9060ff16600a62000537565b62000131906512309ce540006200054f565b601155601280546001600160a01b0319908116738abe29d927f5b3a7cde6386a8f20764c286d9a6217909155601380548216730800fb88b1aaefacdfee8ecd6c72fc87f941a4971790556014805482167380c7ae3f68797c2cc484939731cc5f7ac67045891790556015805490911661dead17905561c350601655348015620001b957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c80543360008181526003602090815260408083209490945581546001600160a01b039081168352600682528483208054600160ff199182168117909255858552868520805482168317905560128054841686528786208054831684179055601380548516875288872080548416851790556014805486168852898820805485168617905590548516875260088652888720805484168517905587875288872080548416851790558654851687528887208054841685179055905484168652878620805483168417905554831685528685208054821683179055601554909216845285842080549092161790558351606080820186526005808352600a8385018190529287018590526018556019918255601a849055855160808101875282815260328185018190528188018490529101849052601b829055601c55601d55601e82905593549251928352909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620005ae565b8280546200038a9062000571565b90600052602060002090601f016020900481019282620003ae5760008555620003f9565b82601f10620003c957805160ff1916838001178555620003f9565b82800160010185558215620003f9579182015b82811115620003f9578251825591602001919060010190620003dc565b50620004079291506200040b565b5090565b5b808211156200040757600081556001016200040c565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004795781600019048211156200045d576200045d62000422565b808516156200046b57918102915b93841c93908002906200043d565b509250929050565b600082620004925750600162000531565b81620004a15750600062000531565b8160018114620004ba5760028114620004c557620004e5565b600191505062000531565b60ff841115620004d957620004d962000422565b50506001821b62000531565b5060208310610133831016604e8410600b84101617156200050a575081810a62000531565b62000516838362000438565b80600019048211156200052d576200052d62000422565b0290505b92915050565b60006200054860ff84168362000481565b9392505050565b60008160001904831182151516156200056c576200056c62000422565b500290565b600181811c908216806200058657607f821691505b60208210811415620005a857634e487b7160e01b600052602260045260246000fd5b50919050565b612e3880620005be6000396000f3fe6080604052600436106102b25760003560e01c8063783478ad116101755780639b0e2e86116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f9146108e9578063f2fde38b14610922578063f34eb0b814610942578063fb6287d21461096257600080fd5b8063c49b9a8014610863578063dcda6af314610883578063dd62ed3e146108a357600080fd5b80639b0e2e86146107b85780639c1b8af5146107d8578063a457c2d7146107ee578063a5ece9411461080e578063a9059cbb1461082e578063b6a998721461084e57600080fd5b80638da5cb5b1161012e5780638da5cb5b1461070f57806391142cb31461072d57806395d89b411461074357806396848136146107585780639758f61d1461077857806398acb5d81461079857600080fd5b8063783478ad1461064f5780637bde92bc1461066f57806385141a771461068f57806385d4787b146106af578063870d365d146106cf578063871c128d146106ef57600080fd5b80633ad10ef61161021957806354a5df1f116101d257806354a5df1f146105755780635ee58efc1461058b5780636c0a24eb146105ce57806370a08231146105e4578063715018a61461061a57806371cd56af1461062f57600080fd5b80633ad10ef61461049d578063441d801f146104bd57806349bd5a5e146104dd5780634a74bb02146104fd5780634e7812331461051c5780635342acb41461053c57600080fd5b80631694505e1161026b5780631694505e146103ce57806318160ddd1461040657806323b872dd1461041b57806327a14fc21461043b578063313ce5671461045b578063395093511461047d57600080fd5b80630492f055146102be57806306fdde03146102e7578063095ea7b3146103095780630ddc0976146103395780630e832273146103735780630fc709e5146103ac57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d4600e5481565b6040519081526020015b60405180910390f35b3480156102f357600080fd5b506102fc610982565b6040516102de9190612680565b34801561031557600080fd5b506103296103243660046126ea565b610a14565b60405190151581526020016102de565b34801561034557600080fd5b50601854601954601a5461035892919083565b604080519384526020840192909252908201526060016102de565b34801561037f57600080fd5b5061032961038e366004612716565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156103b857600080fd5b506103cc6103c7366004612733565b610a2b565b005b3480156103da57600080fd5b506001546103ee906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561041257600080fd5b50600c546102d4565b34801561042757600080fd5b50610329610436366004612765565b610a72565b34801561044757600080fd5b506103cc6104563660046127a6565b610adb565b34801561046757600080fd5b50600b5460405160ff90911681526020016102de565b34801561048957600080fd5b506103296104983660046126ea565b610b19565b3480156104a957600080fd5b506014546103ee906001600160a01b031681565b3480156104c957600080fd5b506103cc6104d8366004612820565b610b4f565b3480156104e957600080fd5b506002546103ee906001600160a01b031681565b34801561050957600080fd5b50600d5461032990610100900460ff1681565b34801561052857600080fd5b506103cc610537366004612874565b610b89565b34801561054857600080fd5b50610329610557366004612716565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561058157600080fd5b506102d4600f5481565b34801561059757600080fd5b50601b54601c54601d54601e546105ae9392919084565b6040805194855260208501939093529183015260608201526080016102de565b3480156105da57600080fd5b506102d460115481565b3480156105f057600080fd5b506102d46105ff366004612716565b6001600160a01b031660009081526003602052604090205490565b34801561062657600080fd5b506103cc610bcf565b34801561063b57600080fd5b506103cc61064a366004612820565b610c43565b34801561065b57600080fd5b506012546103ee906001600160a01b031681565b34801561067b57600080fd5b506103cc61068a36600461288f565b610c78565b34801561069b57600080fd5b506015546103ee906001600160a01b031681565b3480156106bb57600080fd5b506103cc6106ca36600461291c565b610cad565b3480156106db57600080fd5b506102d46106ea3660046127a6565b610ce5565b3480156106fb57600080fd5b506103cc61070a3660046127a6565b610e54565b34801561071b57600080fd5b506000546001600160a01b03166103ee565b34801561073957600080fd5b506102d460105481565b34801561074f57600080fd5b506102fc610eea565b34801561076457600080fd5b506103cc610773366004612820565b610ef9565b34801561078457600080fd5b506103cc6107933660046129bb565b610f2e565b3480156107a457600080fd5b506103cc6107b3366004612716565b610f66565b3480156107c457600080fd5b506103cc6107d336600461291c565b610fb2565b3480156107e457600080fd5b506102d460165481565b3480156107fa57600080fd5b506103296108093660046126ea565b610fe7565b34801561081a57600080fd5b506013546103ee906001600160a01b031681565b34801561083a57600080fd5b506103296108493660046126ea565b611036565b34801561085a57600080fd5b506103cc611043565b34801561086f57600080fd5b506103cc61087e366004612874565b611279565b34801561088f57600080fd5b506103cc61089e3660046129e7565b6112f7565b3480156108af57600080fd5b506102d46108be366004612a53565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108f557600080fd5b50610329610904366004612716565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561092e57600080fd5b506103cc61093d366004612716565b61144c565b34801561094e57600080fd5b506103cc61095d3660046127a6565b611536565b34801561096e57600080fd5b506103cc61097d366004612a8c565b611574565b60606009805461099190612ad7565b80601f01602080910402602001604051908101604052809291908181526020018280546109bd90612ad7565b8015610a0a5780601f106109df57610100808354040283529160200191610a0a565b820191906000526020600020905b8154815290600101906020018083116109ed57829003601f168201915b5050505050905090565b6000610a213384846115dd565b5060015b92915050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b8152600401610a5590612b12565b60405180910390fd5b601d93909355601b91909155601c55601e55565b6000610a7f848484611701565b610ad18433610acc85604051806060016040528060288152602001612db6602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611c3f565b6115dd565b5060019392505050565b6000546001600160a01b03163314610b055760405162461bcd60e51b8152600401610a5590612b12565b610b1381633b9aca00612b5d565b60115550565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a21918590610acc9086611c79565b6000546001600160a01b03163314610b795760405162461bcd60e51b8152600401610a5590612b12565b610b84838383611cdf565b505050565b6000546001600160a01b03163314610bb35760405162461bcd60e51b8152600401610a5590612b12565b600d8054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314610bf95760405162461bcd60e51b8152600401610a5590612b12565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610a5590612b12565b610b84838383611d4f565b6000546001600160a01b03163314610ca25760405162461bcd60e51b8152600401610a5590612b12565b601091909155600f55565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610a5590612b12565b610ce2816001611db9565b50565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110610d1e57610d1e612b7c565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b9190612b92565b81600181518110610dae57610dae612b7c565b6001600160a01b03928316602091820292909201015260015460405163d06ca61f60e01b815291169063d06ca61f90610ded9086908590600401612bf3565b600060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e329190810190612c14565b600181518110610e4457610e44612b7c565b6020026020010151915050919050565b6000546001600160a01b03163314610e7e5760405162461bcd60e51b8152600401610a5590612b12565b601654811415610ee55760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610a55565b601655565b6060600a805461099190612ad7565b6000546001600160a01b03163314610f235760405162461bcd60e51b8152600401610a5590612b12565b610b84838383611e45565b6000546001600160a01b03163314610f585760405162461bcd60e51b8152600401610a5590612b12565b601892909255601955601a55565b6000546001600160a01b03163314610f905760405162461bcd60e51b8152600401610a5590612b12565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610a5590612b12565b610ce2816000611db9565b6000610a213384610acc85604051806060016040528060258152602001612dde602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611c3f565b6000610a21338484611701565b6000546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610a5590612b12565b6002546001600160a01b0316156110d15760405162461bcd60e51b815260206004820152602260248201527f556e69737761705632506169722068617320616c7265616479206265656e2073604482015261195d60f21b6064820152608401610a55565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190612b92565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190612b92565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f9190612b92565b600280546001600160a01b0319166001600160a01b039290921691821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146112a35760405162461bcd60e51b8152600401610a5590612b12565b600d80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906112ec90831515815260200190565b60405180910390a150565b3360009081526006602052604081205460ff1661136c5760405162461bcd60e51b815260206004820152602d60248201527f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60448201526c756465642066726f6d2066656560981b6064820152608401610a55565b8382146113ce5760405162461bcd60e51b815260206004820152602a60248201527f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260448201526965207468652073616d6560b01b6064820152608401610a55565b8381101561144557611433338686848181106113ec576113ec612b7c565b90506020020160208101906114019190612716565b85858581811061141357611413612b7c565b90506020020135633b9aca006114299190612b5d565b6000806000611eaf565b61143e600182612c9a565b90506113ce565b5050505050565b6000546001600160a01b031633146114765760405162461bcd60e51b8152600401610a5590612b12565b6001600160a01b0381166114db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a55565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115605760405162461bcd60e51b8152600401610a5590612b12565b61156e81633b9aca00612b5d565b600e5550565b6000546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610a5590612b12565b601480546001600160a01b039485166001600160a01b031991821617909155601280549385169382169390931790925560138054919093169116179055565b6001600160a01b03831661163f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a55565b6001600160a01b0382166116a05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a55565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a55565b6001600160a01b0382166117c75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a55565b600081116118295760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a55565b6002546001600160a01b03166118815760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056325061697220686173206e6f74206265656e2073657400006044820152606401610a55565b6001600160a01b038316600090815260066020526040812054819060ff161580156118c557506001600160a01b03841660009081526006602052604090205460ff16155b80156118df57506000546001600160a01b03868116911614155b80156118f957506000546001600160a01b03858116911614155b9050600061192684611920876001600160a01b031660009081526003602052604090205490565b90611c79565b905061193a6000546001600160a01b031690565b6001600160a01b0316866001600160a01b03161415801561196957506000546001600160a01b03868116911614155b801561198357506015546001600160a01b03868116911614155b15611a2e576001600160a01b03861660009081526005602052604090205460ff161580156119ca57506001600160a01b03851660009081526005602052604090205460ff16155b611a2e5760405162461bcd60e51b815260206004820152602f60248201527f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060448201526e7472616e7366657220746f6b656e7360881b6064820152608401610a55565b6002546001600160a01b0387811691161480611a6257506001600160a01b03861660009081526007602052604090205460ff165b15611aec57600e54841115611aca5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a55565b601154811115611aec5760405162461bcd60e51b8152600401610a5590612cb2565b6002546001600160a01b03878116911614801590611b1757506002546001600160a01b038681169116145b80611b5e57506001600160a01b03861660009081526007602052604090205460ff16158015611b5e57506001600160a01b03851660009081526007602052604090205460ff165b15611b6f5760019250611b6f6121ad565b6002546001600160a01b03878116911614801590611b9b57506002546001600160a01b03868116911614155b8015611bc057506001600160a01b03861660009081526007602052604090205460ff16155b8015611be557506001600160a01b03851660009081526007602052604090205460ff16155b15611c2857600d5462010000900460ff16611c01576001611c04565b60005b9150601154811115611c285760405162461bcd60e51b8152600401610a5590612cb2565b611c3786868685876001611eaf565b505050505050565b60008184841115611c635760405162461bcd60e51b8152600401610a559190612680565b506000611c708486612cf7565b95945050505050565b600080611c868385612c9a565b905083811015611cd85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a55565b9392505050565b60005b82811015611d49576000848483818110611cfe57611cfe612b7c565b9050602002016020810190611d139190612716565b6001600160a01b03166000908152600660205260409020805460ff19168415151790555080611d4181612d0e565b915050611ce2565b50505050565b60005b82811015611d49576000848483818110611d6e57611d6e612b7c565b9050602002016020810190611d839190612716565b6001600160a01b03166000908152600860205260409020805460ff19168415151790555080611db181612d0e565b915050611d52565b60005b8251811015610b84576000838281518110611dd957611dd9612b7c565b602002602001015190508215611e11576001600160a01b0381166000908152600560205260409020805460ff19166001179055611e32565b6001600160a01b0381166000908152600560205260409020805460ff191690555b5080611e3d81612d0e565b915050611dbc565b60005b82811015611d49576000848483818110611e6457611e64612b7c565b9050602002016020810190611e799190612716565b6001600160a01b03166000908152600760205260409020805460ff19168415151790555080611ea781612d0e565b915050611e48565b600083611ebd576000611ed8565b601854611ed890606490611ed290889061220a565b90612289565b9050838015611ee45750825b15611f3957601954611efe90606490611ed290889061220a565b601a5490915015611f39576000611f1486610ce5565b90506010548110611f3757601a54611f3490606490611ed290899061220a565b91505b505b6000611f4586836122cb565b6001600160a01b038916600090815260036020526040902054909150611f6b90876122cb565b6001600160a01b03808a166000908152600360205260408082209390935590891681522054611f9a9082611c79565b6001600160a01b038816600090815260036020526040808220929092553081522054611fc69083611c79565b3060009081526003602090815260409182902092909255518781526001600160a01b0389811692908b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a382156121a357601f54604051633974d3b160e01b81526001600160a01b038a8116600483015290911690633974d3b190602401600060405180830381600087803b15801561206957600080fd5b505af192505050801561207a575060015b50601f54604051633974d3b160e01b81526001600160a01b03898116600483015290911690633974d3b190602401600060405180830381600087803b1580156120c257600080fd5b505af19250505080156120d3575060015b50601f546016546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161210c9160040190815260200190565b6060604051808303816000875af1925050508015612147575060408051601f3d908101601f1916820190925261214491810190612d29565b60015b612150576121a3565b601654604080518581526020810185905280820184905260608101929092525132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b5050505050505050565b306000908152600360205260409020548015610ce25760006121ce82610ce5565b9050600f5481101580156121e55750600d5460ff16155b80156121f85750600d54610100900460ff165b15612206576122068261230d565b5050565b60008261221957506000610a25565b60006122258385612b5d565b9050826122328583612d57565b14611cd85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a55565b6000611cd883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061246d565b6000611cd883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c3f565b600d805460ff191660011790556123238161249b565b601c54479060009061233d90606490611ed290859061220a565b9050600061235e6064611ed2601b600201548661220a90919063ffffffff16565b9050600061237f6064611ed2601b600001548761220a90919063ffffffff16565b905060006123a06064611ed2601b600301548861220a90919063ffffffff16565b6013546040519192506001600160a01b03169085156108fc029086906000818181858888f193505050501580156123db573d6000803e3d6000fd5b506123e5836125ed565b6014546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561241f573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561245a573d6000803e3d6000fd5b5050600d805460ff191690555050505050565b6000818361248e5760405162461bcd60e51b8152600401610a559190612680565b506000611c708486612d57565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124d0576124d0612b7c565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254d9190612b92565b8160018151811061256057612560612b7c565b6001600160a01b03928316602091820292909201015260015461258691309116846115dd565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906125bf908590600090869030904290600401612d79565b600060405180830381600087803b1580156125d957600080fd5b505af1158015611c37573d6000803e3d6000fd5b601f546040516000916001600160a01b03169083908381818185875af1925050503d806000811461263a576040519150601f19603f3d011682016040523d82523d6000602084013e61263f565b606091505b505090508015612206576040518281527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a15050565b600060208083528351808285015260005b818110156126ad57858101830151858201604001528201612691565b818111156126bf576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ce257600080fd5b600080604083850312156126fd57600080fd5b8235612708816126d5565b946020939093013593505050565b60006020828403121561272857600080fd5b8135611cd8816126d5565b6000806000806080858703121561274957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561277a57600080fd5b8335612785816126d5565b92506020840135612795816126d5565b929592945050506040919091013590565b6000602082840312156127b857600080fd5b5035919050565b60008083601f8401126127d157600080fd5b50813567ffffffffffffffff8111156127e957600080fd5b6020830191508360208260051b850101111561280457600080fd5b9250929050565b8035801515811461281b57600080fd5b919050565b60008060006040848603121561283557600080fd5b833567ffffffffffffffff81111561284c57600080fd5b612858868287016127bf565b909450925061286b90506020850161280b565b90509250925092565b60006020828403121561288657600080fd5b611cd88261280b565b600080604083850312156128a257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128f0576128f06128b1565b604052919050565b600067ffffffffffffffff821115612912576129126128b1565b5060051b60200190565b6000602080838503121561292f57600080fd5b823567ffffffffffffffff81111561294657600080fd5b8301601f8101851361295757600080fd5b803561296a612965826128f8565b6128c7565b81815260059190911b8201830190838101908783111561298957600080fd5b928401925b828410156129b05783356129a1816126d5565b8252928401929084019061298e565b979650505050505050565b6000806000606084860312156129d057600080fd5b505081359360208301359350604090920135919050565b600080600080604085870312156129fd57600080fd5b843567ffffffffffffffff80821115612a1557600080fd5b612a21888389016127bf565b90965094506020870135915080821115612a3a57600080fd5b50612a47878288016127bf565b95989497509550505050565b60008060408385031215612a6657600080fd5b8235612a71816126d5565b91506020830135612a81816126d5565b809150509250929050565b600080600060608486031215612aa157600080fd5b8335612aac816126d5565b92506020840135612abc816126d5565b91506040840135612acc816126d5565b809150509250925092565b600181811c90821680612aeb57607f821691505b60208210811415612b0c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612b7757612b77612b47565b500290565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ba457600080fd5b8151611cd8816126d5565b600081518084526020808501945080840160005b83811015612be85781516001600160a01b031687529582019590820190600101612bc3565b509495945050505050565b828152604060208201526000612c0c6040830184612baf565b949350505050565b60006020808385031215612c2757600080fd5b825167ffffffffffffffff811115612c3e57600080fd5b8301601f81018513612c4f57600080fd5b8051612c5d612965826128f8565b81815260059190911b82018301908381019087831115612c7c57600080fd5b928401925b828410156129b057835182529284019290840190612c81565b60008219821115612cad57612cad612b47565b500190565b60208082526025908201527f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c6574206040820152641b1a5b5a5d60da1b606082015260800190565b600082821015612d0957612d09612b47565b500390565b6000600019821415612d2257612d22612b47565b5060010190565b600080600060608486031215612d3e57600080fd5b8351925060208401519150604084015190509250925092565b600082612d7457634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000612d9860a0830186612baf565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f04021887e85b04547124c04c840c56cf89406ca5043b807db14ac071dc3832764736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063783478ad116101755780639b0e2e86116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f9146108e9578063f2fde38b14610922578063f34eb0b814610942578063fb6287d21461096257600080fd5b8063c49b9a8014610863578063dcda6af314610883578063dd62ed3e146108a357600080fd5b80639b0e2e86146107b85780639c1b8af5146107d8578063a457c2d7146107ee578063a5ece9411461080e578063a9059cbb1461082e578063b6a998721461084e57600080fd5b80638da5cb5b1161012e5780638da5cb5b1461070f57806391142cb31461072d57806395d89b411461074357806396848136146107585780639758f61d1461077857806398acb5d81461079857600080fd5b8063783478ad1461064f5780637bde92bc1461066f57806385141a771461068f57806385d4787b146106af578063870d365d146106cf578063871c128d146106ef57600080fd5b80633ad10ef61161021957806354a5df1f116101d257806354a5df1f146105755780635ee58efc1461058b5780636c0a24eb146105ce57806370a08231146105e4578063715018a61461061a57806371cd56af1461062f57600080fd5b80633ad10ef61461049d578063441d801f146104bd57806349bd5a5e146104dd5780634a74bb02146104fd5780634e7812331461051c5780635342acb41461053c57600080fd5b80631694505e1161026b5780631694505e146103ce57806318160ddd1461040657806323b872dd1461041b57806327a14fc21461043b578063313ce5671461045b578063395093511461047d57600080fd5b80630492f055146102be57806306fdde03146102e7578063095ea7b3146103095780630ddc0976146103395780630e832273146103735780630fc709e5146103ac57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d4600e5481565b6040519081526020015b60405180910390f35b3480156102f357600080fd5b506102fc610982565b6040516102de9190612680565b34801561031557600080fd5b506103296103243660046126ea565b610a14565b60405190151581526020016102de565b34801561034557600080fd5b50601854601954601a5461035892919083565b604080519384526020840192909252908201526060016102de565b34801561037f57600080fd5b5061032961038e366004612716565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156103b857600080fd5b506103cc6103c7366004612733565b610a2b565b005b3480156103da57600080fd5b506001546103ee906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561041257600080fd5b50600c546102d4565b34801561042757600080fd5b50610329610436366004612765565b610a72565b34801561044757600080fd5b506103cc6104563660046127a6565b610adb565b34801561046757600080fd5b50600b5460405160ff90911681526020016102de565b34801561048957600080fd5b506103296104983660046126ea565b610b19565b3480156104a957600080fd5b506014546103ee906001600160a01b031681565b3480156104c957600080fd5b506103cc6104d8366004612820565b610b4f565b3480156104e957600080fd5b506002546103ee906001600160a01b031681565b34801561050957600080fd5b50600d5461032990610100900460ff1681565b34801561052857600080fd5b506103cc610537366004612874565b610b89565b34801561054857600080fd5b50610329610557366004612716565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561058157600080fd5b506102d4600f5481565b34801561059757600080fd5b50601b54601c54601d54601e546105ae9392919084565b6040805194855260208501939093529183015260608201526080016102de565b3480156105da57600080fd5b506102d460115481565b3480156105f057600080fd5b506102d46105ff366004612716565b6001600160a01b031660009081526003602052604090205490565b34801561062657600080fd5b506103cc610bcf565b34801561063b57600080fd5b506103cc61064a366004612820565b610c43565b34801561065b57600080fd5b506012546103ee906001600160a01b031681565b34801561067b57600080fd5b506103cc61068a36600461288f565b610c78565b34801561069b57600080fd5b506015546103ee906001600160a01b031681565b3480156106bb57600080fd5b506103cc6106ca36600461291c565b610cad565b3480156106db57600080fd5b506102d46106ea3660046127a6565b610ce5565b3480156106fb57600080fd5b506103cc61070a3660046127a6565b610e54565b34801561071b57600080fd5b506000546001600160a01b03166103ee565b34801561073957600080fd5b506102d460105481565b34801561074f57600080fd5b506102fc610eea565b34801561076457600080fd5b506103cc610773366004612820565b610ef9565b34801561078457600080fd5b506103cc6107933660046129bb565b610f2e565b3480156107a457600080fd5b506103cc6107b3366004612716565b610f66565b3480156107c457600080fd5b506103cc6107d336600461291c565b610fb2565b3480156107e457600080fd5b506102d460165481565b3480156107fa57600080fd5b506103296108093660046126ea565b610fe7565b34801561081a57600080fd5b506013546103ee906001600160a01b031681565b34801561083a57600080fd5b506103296108493660046126ea565b611036565b34801561085a57600080fd5b506103cc611043565b34801561086f57600080fd5b506103cc61087e366004612874565b611279565b34801561088f57600080fd5b506103cc61089e3660046129e7565b6112f7565b3480156108af57600080fd5b506102d46108be366004612a53565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156108f557600080fd5b50610329610904366004612716565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561092e57600080fd5b506103cc61093d366004612716565b61144c565b34801561094e57600080fd5b506103cc61095d3660046127a6565b611536565b34801561096e57600080fd5b506103cc61097d366004612a8c565b611574565b60606009805461099190612ad7565b80601f01602080910402602001604051908101604052809291908181526020018280546109bd90612ad7565b8015610a0a5780601f106109df57610100808354040283529160200191610a0a565b820191906000526020600020905b8154815290600101906020018083116109ed57829003601f168201915b5050505050905090565b6000610a213384846115dd565b5060015b92915050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b8152600401610a5590612b12565b60405180910390fd5b601d93909355601b91909155601c55601e55565b6000610a7f848484611701565b610ad18433610acc85604051806060016040528060288152602001612db6602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611c3f565b6115dd565b5060019392505050565b6000546001600160a01b03163314610b055760405162461bcd60e51b8152600401610a5590612b12565b610b1381633b9aca00612b5d565b60115550565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a21918590610acc9086611c79565b6000546001600160a01b03163314610b795760405162461bcd60e51b8152600401610a5590612b12565b610b84838383611cdf565b505050565b6000546001600160a01b03163314610bb35760405162461bcd60e51b8152600401610a5590612b12565b600d8054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314610bf95760405162461bcd60e51b8152600401610a5590612b12565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610a5590612b12565b610b84838383611d4f565b6000546001600160a01b03163314610ca25760405162461bcd60e51b8152600401610a5590612b12565b601091909155600f55565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610a5590612b12565b610ce2816001611db9565b50565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110610d1e57610d1e612b7c565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b9190612b92565b81600181518110610dae57610dae612b7c565b6001600160a01b03928316602091820292909201015260015460405163d06ca61f60e01b815291169063d06ca61f90610ded9086908590600401612bf3565b600060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e329190810190612c14565b600181518110610e4457610e44612b7c565b6020026020010151915050919050565b6000546001600160a01b03163314610e7e5760405162461bcd60e51b8152600401610a5590612b12565b601654811415610ee55760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610a55565b601655565b6060600a805461099190612ad7565b6000546001600160a01b03163314610f235760405162461bcd60e51b8152600401610a5590612b12565b610b84838383611e45565b6000546001600160a01b03163314610f585760405162461bcd60e51b8152600401610a5590612b12565b601892909255601955601a55565b6000546001600160a01b03163314610f905760405162461bcd60e51b8152600401610a5590612b12565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610a5590612b12565b610ce2816000611db9565b6000610a213384610acc85604051806060016040528060258152602001612dde602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611c3f565b6000610a21338484611701565b6000546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610a5590612b12565b6002546001600160a01b0316156110d15760405162461bcd60e51b815260206004820152602260248201527f556e69737761705632506169722068617320616c7265616479206265656e2073604482015261195d60f21b6064820152608401610a55565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190612b92565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190612b92565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f9190612b92565b600280546001600160a01b0319166001600160a01b039290921691821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146112a35760405162461bcd60e51b8152600401610a5590612b12565b600d80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906112ec90831515815260200190565b60405180910390a150565b3360009081526006602052604081205460ff1661136c5760405162461bcd60e51b815260206004820152602d60248201527f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60448201526c756465642066726f6d2066656560981b6064820152608401610a55565b8382146113ce5760405162461bcd60e51b815260206004820152602a60248201527f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260448201526965207468652073616d6560b01b6064820152608401610a55565b8381101561144557611433338686848181106113ec576113ec612b7c565b90506020020160208101906114019190612716565b85858581811061141357611413612b7c565b90506020020135633b9aca006114299190612b5d565b6000806000611eaf565b61143e600182612c9a565b90506113ce565b5050505050565b6000546001600160a01b031633146114765760405162461bcd60e51b8152600401610a5590612b12565b6001600160a01b0381166114db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a55565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115605760405162461bcd60e51b8152600401610a5590612b12565b61156e81633b9aca00612b5d565b600e5550565b6000546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610a5590612b12565b601480546001600160a01b039485166001600160a01b031991821617909155601280549385169382169390931790925560138054919093169116179055565b6001600160a01b03831661163f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a55565b6001600160a01b0382166116a05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a55565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a55565b6001600160a01b0382166117c75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a55565b600081116118295760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a55565b6002546001600160a01b03166118815760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056325061697220686173206e6f74206265656e2073657400006044820152606401610a55565b6001600160a01b038316600090815260066020526040812054819060ff161580156118c557506001600160a01b03841660009081526006602052604090205460ff16155b80156118df57506000546001600160a01b03868116911614155b80156118f957506000546001600160a01b03858116911614155b9050600061192684611920876001600160a01b031660009081526003602052604090205490565b90611c79565b905061193a6000546001600160a01b031690565b6001600160a01b0316866001600160a01b03161415801561196957506000546001600160a01b03868116911614155b801561198357506015546001600160a01b03868116911614155b15611a2e576001600160a01b03861660009081526005602052604090205460ff161580156119ca57506001600160a01b03851660009081526005602052604090205460ff16155b611a2e5760405162461bcd60e51b815260206004820152602f60248201527f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060448201526e7472616e7366657220746f6b656e7360881b6064820152608401610a55565b6002546001600160a01b0387811691161480611a6257506001600160a01b03861660009081526007602052604090205460ff165b15611aec57600e54841115611aca5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a55565b601154811115611aec5760405162461bcd60e51b8152600401610a5590612cb2565b6002546001600160a01b03878116911614801590611b1757506002546001600160a01b038681169116145b80611b5e57506001600160a01b03861660009081526007602052604090205460ff16158015611b5e57506001600160a01b03851660009081526007602052604090205460ff165b15611b6f5760019250611b6f6121ad565b6002546001600160a01b03878116911614801590611b9b57506002546001600160a01b03868116911614155b8015611bc057506001600160a01b03861660009081526007602052604090205460ff16155b8015611be557506001600160a01b03851660009081526007602052604090205460ff16155b15611c2857600d5462010000900460ff16611c01576001611c04565b60005b9150601154811115611c285760405162461bcd60e51b8152600401610a5590612cb2565b611c3786868685876001611eaf565b505050505050565b60008184841115611c635760405162461bcd60e51b8152600401610a559190612680565b506000611c708486612cf7565b95945050505050565b600080611c868385612c9a565b905083811015611cd85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a55565b9392505050565b60005b82811015611d49576000848483818110611cfe57611cfe612b7c565b9050602002016020810190611d139190612716565b6001600160a01b03166000908152600660205260409020805460ff19168415151790555080611d4181612d0e565b915050611ce2565b50505050565b60005b82811015611d49576000848483818110611d6e57611d6e612b7c565b9050602002016020810190611d839190612716565b6001600160a01b03166000908152600860205260409020805460ff19168415151790555080611db181612d0e565b915050611d52565b60005b8251811015610b84576000838281518110611dd957611dd9612b7c565b602002602001015190508215611e11576001600160a01b0381166000908152600560205260409020805460ff19166001179055611e32565b6001600160a01b0381166000908152600560205260409020805460ff191690555b5080611e3d81612d0e565b915050611dbc565b60005b82811015611d49576000848483818110611e6457611e64612b7c565b9050602002016020810190611e799190612716565b6001600160a01b03166000908152600760205260409020805460ff19168415151790555080611ea781612d0e565b915050611e48565b600083611ebd576000611ed8565b601854611ed890606490611ed290889061220a565b90612289565b9050838015611ee45750825b15611f3957601954611efe90606490611ed290889061220a565b601a5490915015611f39576000611f1486610ce5565b90506010548110611f3757601a54611f3490606490611ed290899061220a565b91505b505b6000611f4586836122cb565b6001600160a01b038916600090815260036020526040902054909150611f6b90876122cb565b6001600160a01b03808a166000908152600360205260408082209390935590891681522054611f9a9082611c79565b6001600160a01b038816600090815260036020526040808220929092553081522054611fc69083611c79565b3060009081526003602090815260409182902092909255518781526001600160a01b0389811692908b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a382156121a357601f54604051633974d3b160e01b81526001600160a01b038a8116600483015290911690633974d3b190602401600060405180830381600087803b15801561206957600080fd5b505af192505050801561207a575060015b50601f54604051633974d3b160e01b81526001600160a01b03898116600483015290911690633974d3b190602401600060405180830381600087803b1580156120c257600080fd5b505af19250505080156120d3575060015b50601f546016546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161210c9160040190815260200190565b6060604051808303816000875af1925050508015612147575060408051601f3d908101601f1916820190925261214491810190612d29565b60015b612150576121a3565b601654604080518581526020810185905280820184905260608101929092525132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b5050505050505050565b306000908152600360205260409020548015610ce25760006121ce82610ce5565b9050600f5481101580156121e55750600d5460ff16155b80156121f85750600d54610100900460ff165b15612206576122068261230d565b5050565b60008261221957506000610a25565b60006122258385612b5d565b9050826122328583612d57565b14611cd85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a55565b6000611cd883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061246d565b6000611cd883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c3f565b600d805460ff191660011790556123238161249b565b601c54479060009061233d90606490611ed290859061220a565b9050600061235e6064611ed2601b600201548661220a90919063ffffffff16565b9050600061237f6064611ed2601b600001548761220a90919063ffffffff16565b905060006123a06064611ed2601b600301548861220a90919063ffffffff16565b6013546040519192506001600160a01b03169085156108fc029086906000818181858888f193505050501580156123db573d6000803e3d6000fd5b506123e5836125ed565b6014546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561241f573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561245a573d6000803e3d6000fd5b5050600d805460ff191690555050505050565b6000818361248e5760405162461bcd60e51b8152600401610a559190612680565b506000611c708486612d57565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124d0576124d0612b7c565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254d9190612b92565b8160018151811061256057612560612b7c565b6001600160a01b03928316602091820292909201015260015461258691309116846115dd565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac947906125bf908590600090869030904290600401612d79565b600060405180830381600087803b1580156125d957600080fd5b505af1158015611c37573d6000803e3d6000fd5b601f546040516000916001600160a01b03169083908381818185875af1925050503d806000811461263a576040519150601f19603f3d011682016040523d82523d6000602084013e61263f565b606091505b505090508015612206576040518281527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a15050565b600060208083528351808285015260005b818110156126ad57858101830151858201604001528201612691565b818111156126bf576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ce257600080fd5b600080604083850312156126fd57600080fd5b8235612708816126d5565b946020939093013593505050565b60006020828403121561272857600080fd5b8135611cd8816126d5565b6000806000806080858703121561274957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561277a57600080fd5b8335612785816126d5565b92506020840135612795816126d5565b929592945050506040919091013590565b6000602082840312156127b857600080fd5b5035919050565b60008083601f8401126127d157600080fd5b50813567ffffffffffffffff8111156127e957600080fd5b6020830191508360208260051b850101111561280457600080fd5b9250929050565b8035801515811461281b57600080fd5b919050565b60008060006040848603121561283557600080fd5b833567ffffffffffffffff81111561284c57600080fd5b612858868287016127bf565b909450925061286b90506020850161280b565b90509250925092565b60006020828403121561288657600080fd5b611cd88261280b565b600080604083850312156128a257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128f0576128f06128b1565b604052919050565b600067ffffffffffffffff821115612912576129126128b1565b5060051b60200190565b6000602080838503121561292f57600080fd5b823567ffffffffffffffff81111561294657600080fd5b8301601f8101851361295757600080fd5b803561296a612965826128f8565b6128c7565b81815260059190911b8201830190838101908783111561298957600080fd5b928401925b828410156129b05783356129a1816126d5565b8252928401929084019061298e565b979650505050505050565b6000806000606084860312156129d057600080fd5b505081359360208301359350604090920135919050565b600080600080604085870312156129fd57600080fd5b843567ffffffffffffffff80821115612a1557600080fd5b612a21888389016127bf565b90965094506020870135915080821115612a3a57600080fd5b50612a47878288016127bf565b95989497509550505050565b60008060408385031215612a6657600080fd5b8235612a71816126d5565b91506020830135612a81816126d5565b809150509250929050565b600080600060608486031215612aa157600080fd5b8335612aac816126d5565b92506020840135612abc816126d5565b91506040840135612acc816126d5565b809150509250925092565b600181811c90821680612aeb57607f821691505b60208210811415612b0c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612b7757612b77612b47565b500290565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ba457600080fd5b8151611cd8816126d5565b600081518084526020808501945080840160005b83811015612be85781516001600160a01b031687529582019590820190600101612bc3565b509495945050505050565b828152604060208201526000612c0c6040830184612baf565b949350505050565b60006020808385031215612c2757600080fd5b825167ffffffffffffffff811115612c3e57600080fd5b8301601f81018513612c4f57600080fd5b8051612c5d612965826128f8565b81815260059190911b82018301908381019087831115612c7c57600080fd5b928401925b828410156129b057835182529284019290840190612c81565b60008219821115612cad57612cad612b47565b500190565b60208082526025908201527f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c6574206040820152641b1a5b5a5d60da1b606082015260800190565b600082821015612d0957612d09612b47565b500390565b6000600019821415612d2257612d22612b47565b5060010190565b600080600060608486031215612d3e57600080fd5b8351925060208401519150604084015190509250925092565b600082612d7457634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000612d9860a0830186612baf565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f04021887e85b04547124c04c840c56cf89406ca5043b807db14ac071dc3832764736f6c634300080c0033

Deployed Bytecode Sourcemap

18901:16125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20136:62;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;20136:62:0;;;;;;;;22211:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23044:161::-;;;;;;;;;;-1:-1:-1;23044:161:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;23044:161:0;1254:187:1;21300:22:0;;;;;;;;;;-1:-1:-1;21300:22:0;;;;;;;;;;;;;;;;1648:25:1;;;1704:2;1689:18;;1682:34;;;;1732:18;;;1725:34;1636:2;1621:18;21300:22:0;1446:319:1;25214:125:0;;;;;;;;;;-1:-1:-1;25214:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;25303:28:0;25279:4;25303:28;;;:22;:28;;;;;;;;;25214:125;26962:293;;;;;;;;;;-1:-1:-1;26962:293:0;;;;;:::i;:::-;;:::i;:::-;;19322:106;;;;;;;;;;-1:-1:-1;19322:106:0;;;;-1:-1:-1;;;;;19322:106:0;;;;;;-1:-1:-1;;;;;2602:32:1;;;2584:51;;2572:2;2557:18;19322:106:0;2412:229:1;22488:95:0;;;;;;;;;;-1:-1:-1;22568:7:0;;22488:95;;23213:313;;;;;;;;;;-1:-1:-1;23213:313:0;;;;;:::i;:::-;;:::i;24572:135::-;;;;;;;;;;-1:-1:-1;24572:135:0;;;;;:::i;:::-;;:::i;22397:83::-;;;;;;;;;;-1:-1:-1;22463:9:0;;22397:83;;22463:9;;;;3434:36:1;;3422:2;3407:18;22397:83:0;3292:184:1;23534:218:0;;;;;;;;;;-1:-1:-1;23534:218:0;;;;;:::i;:::-;;:::i;20570:70::-;;;;;;;;;;-1:-1:-1;20570:70:0;;;;-1:-1:-1;;;;;20570:70:0;;;24715:161;;;;;;;;;;-1:-1:-1;24715:161:0;;;;;:::i;:::-;;:::i;19435:41::-;;;;;;;;;;-1:-1:-1;19435:41:0;;;;-1:-1:-1;;;;;19435:41:0;;;20052:40;;;;;;;;;;-1:-1:-1;20052:40:0;;;;;;;;;;;28865:130;;;;;;;;;;-1:-1:-1;28865:130:0;;;;;:::i;:::-;;:::i;28734:123::-;;;;;;;;;;-1:-1:-1;28734:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;28822:27:0;28798:4;28822:27;;;:18;:27;;;;;;;;;28734:123;20205:50;;;;;;;;;;;;;;;;21329:32;;;;;;;;;;-1:-1:-1;21329:32:0;;;;;;;;;;;;;;;;;;;5152:25:1;;;5208:2;5193:18;;5186:34;;;;5236:18;;;5229:34;5294:2;5279:18;;5272:34;5139:3;5124:19;21329:32:0;4921:391:1;20334:65:0;;;;;;;;;;;;;;;;22591:119;;;;;;;;;;-1:-1:-1;22591:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;22684:18:0;22657:7;22684:18;;;:9;:18;;;;;;;22591:119;17743:148;;;;;;;;;;;;;:::i;25049:157::-;;;;;;;;;;-1:-1:-1;25049:157:0;;;;;:::i;:::-;;:::i;20406:74::-;;;;;;;;;;-1:-1:-1;20406:74:0;;;;-1:-1:-1;;;;;20406:74:0;;;25599:189;;;;;;;;;;-1:-1:-1;25599:189:0;;;;;:::i;:::-;;:::i;20647:70::-;;;;;;;;;;-1:-1:-1;20647:70:0;;;;-1:-1:-1;;;;;20647:70:0;;;27609:128;;;;;;;;;;-1:-1:-1;27609:128:0;;;;;:::i;:::-;;:::i;28454:272::-;;;;;;;;;;-1:-1:-1;28454:272:0;;;;;:::i;:::-;;:::i;31604:209::-;;;;;;;;;;-1:-1:-1;31604:209:0;;;;;:::i;:::-;;:::i;17107:79::-;;;;;;;;;;-1:-1:-1;17145:7:0;17172:6;-1:-1:-1;;;;;17172:6:0;17107:79;;20271:46;;;;;;;;;;;;;;;;22302:87;;;;;;;;;;;;;:::i;24884:157::-;;;;;;;;;;-1:-1:-1;24884:157:0;;;;;:::i;:::-;;:::i;26736:218::-;;;;;;;;;;-1:-1:-1;26736:218:0;;;;;:::i;:::-;;:::i;32577:166::-;;;;;;;;;;-1:-1:-1;32577:166:0;;;;;:::i;:::-;;:::i;27745:131::-;;;;;;;;;;-1:-1:-1;27745:131:0;;;;;:::i;:::-;;:::i;20724:39::-;;;;;;;;;;;;;;;;23760:269;;;;;;;;;;-1:-1:-1;23760:269:0;;;;;:::i;:::-;;:::i;20487:76::-;;;;;;;;;;-1:-1:-1;20487:76:0;;;;-1:-1:-1;;;;;20487:76:0;;;22718:167;;;;;;;;;;-1:-1:-1;22718:167:0;;;;;:::i;:::-;;:::i;25796:311::-;;;;;;;;;;;;;:::i;28238:171::-;;;;;;;;;;-1:-1:-1;28238:171:0;;;;;:::i;:::-;;:::i;24039:525::-;;;;;;;;;;-1:-1:-1;24039:525:0;;;;;:::i;:::-;;:::i;22893:143::-;;;;;;;;;;-1:-1:-1;22893:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;23001:18:0;;;22974:7;23001:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22893:143;27492:109;;;;;;;;;;-1:-1:-1;27492:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;27577:16:0;27553:4;27577:16;;;:10;:16;;;;;;;;;27492:109;18046:244;;;;;;;;;;-1:-1:-1;18046:244:0;;;;;:::i;:::-;;:::i;26605:123::-;;;;;;;;;;-1:-1:-1;26605:123:0;;;;;:::i;:::-;;:::i;27263:221::-;;;;;;;;;;-1:-1:-1;27263:221:0;;;;;:::i;:::-;;:::i;22211:83::-;22248:13;22281:5;22274:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22211:83;:::o;23044:161::-;23119:4;23136:39;9679:10;23159:7;23168:6;23136:8;:39::i;:::-;-1:-1:-1;23193:4:0;23044:161;;;;;:::o;26962:293::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;;;;;;;;;27088:21;:32;;;;:12:::1;27131:30:::0;;;;27172:22;:34;27217:20;:30;26962:293::o;23213:313::-;23311:4;23328:36;23338:6;23346:9;23357:6;23328:9;:36::i;:::-;23375:121;23384:6;9679:10;23406:89;23444:6;23406:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23406:19:0;;;;;;:11;:19;;;;;;;;9679:10;23406:33;;;;;;;;;;:37;:89::i;:::-;23375:8;:121::i;:::-;-1:-1:-1;23514:4:0;23213:313;;;;;:::o;24572:135::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;24676:23:::1;:15:::0;24694:5:::1;24676:23;:::i;:::-;24657:16;:42:::0;-1:-1:-1;24572:135:0:o;23534:218::-;9679:10;23622:4;23671:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23671:34:0;;;;;;;;;;23622:4;;23639:83;;23662:7;;23671:50;;23710:10;23671:38;:50::i;24715:161::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;24827:41:::1;24840:9;;24851:16;24827:12;:41::i;:::-;24715:161:::0;;;:::o;28865:130::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;28954:17:::1;:33:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;28954:33:0;;::::1;::::0;;;::::1;::::0;;28865:130::o;17743:148::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;17850:1:::1;17834:6:::0;;17813:40:::1;::::0;-1:-1:-1;;;;;17834:6:0;;::::1;::::0;17813:40:::1;::::0;17850:1;;17813:40:::1;17881:1;17864:19:::0;;-1:-1:-1;;;;;;17864:19:0::1;::::0;;17743:148::o;25049:157::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;25159:39:::1;25176:9;;25187:10;25159:16;:39::i;25599:189::-:0;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;25707:13:::1;:30:::0;;;;25748:14:::1;:32:::0;25599:189::o;27609:128::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;27693:36:::1;27713:9;27724:4;27693:19;:36::i;:::-;27609:128:::0;:::o;28454:272::-;28556:16;;;28570:1;28556:16;;;;;;;;28514:4;;;;28556:16;28570:1;28556:16;;;;;;;;;;-1:-1:-1;28556:16:0;28532:40;;28601:4;28583;28588:1;28583:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28583:23:0;;;:7;;;;;;;;;;:23;;;;28627:15;;:22;;;-1:-1:-1;;;28627:22:0;;;;:15;;;;;:20;;:22;;;;;28583:7;;28627:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28617:4;28622:1;28617:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28617:32:0;;;:7;;;;;;;;;:32;28667:15;;:48;;-1:-1:-1;;;28667:48:0;;:15;;;:29;;:48;;28697:11;;28710:4;;28667:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28667:48:0;;;;;;;;;;;;:::i;:::-;28716:1;28667:51;;;;;;;;:::i;:::-;;;;;;;28660:58;;;28454:272;;;:::o;31604:209::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;31702:16:::1;;31690:8;:28;;31682:85;;;::::0;-1:-1:-1;;;31682:85:0;;12497:2:1;31682:85:0::1;::::0;::::1;12479:21:1::0;12536:2;12516:18;;;12509:30;12575:34;12555:18;;;12548:62;-1:-1:-1;;;12626:18:1;;;12619:42;12678:19;;31682:85:0::1;12295:408:1::0;31682:85:0::1;31778:16;:27:::0;31604:209::o;22302:87::-;22341:13;22374:7;22367:14;;;;;:::i;24884:157::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;24989:44:::1;25008:9;;25019:13;24989:18;:44::i;26736:218::-:0;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;26841:7:::1;:23:::0;;;;26875:15;:25;26911:20;:35;26736:218::o;32577:166::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;32668:15:::1;:67:::0;;-1:-1:-1;;;;;;32668:67:0::1;-1:-1:-1::0;;;;;32668:67:0;;;::::1;::::0;;;::::1;::::0;;32577:166::o;27745:131::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;27831:37:::1;27851:9;27862:5;27831:19;:37::i;23760:269::-:0;23853:4;23870:129;9679:10;23893:7;23902:96;23941:15;23902:96;;;;;;;;;;;;;;;;;9679:10;23902:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23902:34:0;;;;;;;;;;;;:38;:96::i;22718:167::-;22796:4;22813:42;9679:10;22837:9;22848:6;22813:9;:42::i;25796:311::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;25858:13:::1;::::0;-1:-1:-1;;;;;25858:13:0::1;:27:::0;25850:73:::1;;;::::0;-1:-1:-1;;;25850:73:0;;12910:2:1;25850:73:0::1;::::0;::::1;12892:21:1::0;12949:2;12929:18;;;12922:30;12988:34;12968:18;;;12961:62;-1:-1:-1;;;13039:18:1;;;13032:32;13081:19;;25850:73:0::1;12708:398:1::0;25850:73:0::1;25968:15;;;;;;;;;-1:-1:-1::0;;;;;25968:15:0::1;-1:-1:-1::0;;;;;25968:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25950:55:0::1;;26014:4;26021:15;;;;;;;;;-1:-1:-1::0;;;;;26021:15:0::1;-1:-1:-1::0;;;;;26021:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25950:94;::::0;-1:-1:-1;;;;;;25950:94:0::1;::::0;;;;;;-1:-1:-1;;;;;13341:15:1;;;25950:94:0::1;::::0;::::1;13323:34:1::0;13393:15;;13373:18;;;13366:43;13258:18;;25950:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25934:13;:110:::0;;-1:-1:-1;;;;;;25934:110:0::1;-1:-1:-1::0;;;;;25934:110:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;26055:37:0;;;:22:::1;:37;::::0;;;;:44;;-1:-1:-1;;26055:44:0::1;-1:-1:-1::0;26055:44:0::1;::::0;;25796:311::o;28238:171::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;28315:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;28315:32:0;;::::1;;::::0;;28363:38:::1;::::0;::::1;::::0;::::1;::::0;28339:8;1419:14:1;1412:22;1394:41;;1382:2;1367:18;;1254:187;28363:38:0::1;;;;;;;;28238:171:::0;:::o;24039:525::-;9679:10;24136:16;24175:32;;;:18;:32;;;;;;;;24167:90;;;;-1:-1:-1;;;24167:90:0;;13622:2:1;24167:90:0;;;13604:21:1;13661:2;13641:18;;;13634:30;13700:34;13680:18;;;13673:62;-1:-1:-1;;;13751:18:1;;;13744:43;13804:19;;24167:90:0;13420:409:1;24167:90:0;24276:35;;;24268:90;;;;-1:-1:-1;;;24268:90:0;;14036:2:1;24268:90:0;;;14018:21:1;14075:2;14055:18;;;14048:30;14114:34;14094:18;;;14087:62;-1:-1:-1;;;14165:18:1;;;14158:40;14215:19;;24268:90:0;13834:406:1;24268:90:0;24375:28;;;24369:188;;;24419:98;9679:10;24448;;24459:8;24448:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24470:7;;24478:8;24470:17;;;;;;;:::i;:::-;;;;;;;24490:5;24470:25;;;;:::i;:::-;24497:5;24504;24511;24419:14;:98::i;:::-;24532:13;24544:1;24532:13;;:::i;:::-;;;24369:188;;;24125:439;24039:525;;;;:::o;18046:244::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18135:22:0;::::1;18127:73;;;::::0;-1:-1:-1;;;18127:73:0;;14580:2:1;18127:73:0::1;::::0;::::1;14562:21:1::0;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:36;14755:19;;18127:73:0::1;14378:402:1::0;18127:73:0::1;18237:6;::::0;;18216:38:::1;::::0;-1:-1:-1;;;;;18216:38:0;;::::1;::::0;18237:6;::::1;::::0;18216:38:::1;::::0;::::1;18265:6;:17:::0;;-1:-1:-1;;;;;;18265:17:0::1;-1:-1:-1::0;;;;;18265:17:0;;;::::1;::::0;;;::::1;::::0;;18046:244::o;26605:123::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;26700:20:::1;:12:::0;26715:5:::1;26700:20;:::i;:::-;26684:13;:36:::0;-1:-1:-1;26605:123:0:o;27263:221::-;17319:6;;-1:-1:-1;;;;;17319:6:0;9679:10;17319:22;17311:67;;;;-1:-1:-1;;;17311:67:0;;;;;;;:::i;:::-;27378:10:::1;:20:::0;;-1:-1:-1;;;;;27378:20:0;;::::1;-1:-1:-1::0;;;;;;27378:20:0;;::::1;;::::0;;;27409:14:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;27444:16:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;27263:221::o;29003:337::-;-1:-1:-1;;;;;29096:19:0;;29088:68;;;;-1:-1:-1;;;29088:68:0;;14987:2:1;29088:68:0;;;14969:21:1;15026:2;15006:18;;;14999:30;15065:34;15045:18;;;15038:62;-1:-1:-1;;;15116:18:1;;;15109:34;15160:19;;29088:68:0;14785:400:1;29088:68:0;-1:-1:-1;;;;;29175:21:0;;29167:68;;;;-1:-1:-1;;;29167:68:0;;15392:2:1;29167:68:0;;;15374:21:1;15431:2;15411:18;;;15404:30;15470:34;15450:18;;;15443:62;-1:-1:-1;;;15521:18:1;;;15514:32;15563:19;;29167:68:0;15190:398:1;29167:68:0;-1:-1:-1;;;;;29248:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29300:32;;160:25:1;;;29300:32:0;;133:18:1;29300:32:0;;;;;;;29003:337;;;:::o;29348:1796::-;-1:-1:-1;;;;;29436:18:0;;29428:68;;;;-1:-1:-1;;;29428:68:0;;15795:2:1;29428:68:0;;;15777:21:1;15834:2;15814:18;;;15807:30;15873:34;15853:18;;;15846:62;-1:-1:-1;;;15924:18:1;;;15917:35;15969:19;;29428:68:0;15593:401:1;29428:68:0;-1:-1:-1;;;;;29515:16:0;;29507:64;;;;-1:-1:-1;;;29507:64:0;;16201:2:1;29507:64:0;;;16183:21:1;16240:2;16220:18;;;16213:30;16279:34;16259:18;;;16252:62;-1:-1:-1;;;16330:18:1;;;16323:33;16373:19;;29507:64:0;15999:399:1;29507:64:0;29599:1;29590:6;:10;29582:64;;;;-1:-1:-1;;;29582:64:0;;16605:2:1;29582:64:0;;;16587:21:1;16644:2;16624:18;;;16617:30;16683:34;16663:18;;;16656:62;-1:-1:-1;;;16734:18:1;;;16727:39;16783:19;;29582:64:0;16403:405:1;29582:64:0;29665:13;;-1:-1:-1;;;;;29665:13:0;29657:69;;;;-1:-1:-1;;;29657:69:0;;17015:2:1;29657:69:0;;;16997:21:1;17054:2;17034:18;;;17027:30;17093:32;17073:18;;;17066:60;17143:18;;29657:69:0;16813:354:1;29657:69:0;-1:-1:-1;;;;;29784:24:0;;29737:11;29784:24;;;:18;:24;;;;;;29737:11;;29784:24;;29783:25;:52;;;;-1:-1:-1;;;;;;29813:22:0;;;;;;:18;:22;;;;;;;;29812:23;29783:52;:71;;;;-1:-1:-1;17145:7:0;17172:6;-1:-1:-1;;;;;29839:15:0;;;17172:6;;29839:15;;29783:71;:88;;;;-1:-1:-1;17145:7:0;17172:6;-1:-1:-1;;;;;29858:13:0;;;17172:6;;29858:13;;29783:88;29767:104;;29882:21;29906:25;29924:6;29906:13;29916:2;-1:-1:-1;;;;;22684:18:0;22657:7;22684:18;;;:9;:18;;;;;;;22591:119;29906:13;:17;;:25::i;:::-;29882:49;;30042:7;17145;17172:6;-1:-1:-1;;;;;17172:6:0;;17107:79;30042:7;-1:-1:-1;;;;;30034:15:0;:4;-1:-1:-1;;;;;30034:15:0;;;:32;;;;-1:-1:-1;17145:7:0;17172:6;-1:-1:-1;;;;;30053:13:0;;;17172:6;;30053:13;;30034:32;:52;;;;-1:-1:-1;30076:10:0;;-1:-1:-1;;;;;30070:16:0;;;30076:10;;30070:16;;30034:52;30031:180;;;-1:-1:-1;;;;;30112:16:0;;;;;;:10;:16;;;;;;;;30111:17;:36;;;;-1:-1:-1;;;;;;30133:14:0;;;;;;:10;:14;;;;;;;;30132:15;30111:36;30103:96;;;;-1:-1:-1;;;30103:96:0;;17374:2:1;30103:96:0;;;17356:21:1;17413:2;17393:18;;;17386:30;17452:34;17432:18;;;17425:62;-1:-1:-1;;;17503:18:1;;;17496:45;17558:19;;30103:96:0;17172:411:1;30103:96:0;30232:13;;-1:-1:-1;;;;;30224:21:0;;;30232:13;;30224:21;;:47;;-1:-1:-1;;;;;;30249:22:0;;;;;;:16;:22;;;;;;;;30224:47;30221:253;;;30306:13;;30296:6;:23;;30288:76;;;;-1:-1:-1;;;30288:76:0;;17790:2:1;30288:76:0;;;17772:21:1;17829:2;17809:18;;;17802:30;17868:34;17848:18;;;17841:62;-1:-1:-1;;;17919:18:1;;;17912:38;17967:19;;30288:76:0;17588:404:1;30288:76:0;30404:16;;30387:13;:33;;30379:83;;;;-1:-1:-1;;;30379:83:0;;;;;;;:::i;:::-;30495:13;;-1:-1:-1;;;;;30487:21:0;;;30495:13;;30487:21;;;;:44;;-1:-1:-1;30518:13:0;;-1:-1:-1;;;;;30512:19:0;;;30518:13;;30512:19;30487:44;:97;;;-1:-1:-1;;;;;;30537:22:0;;;;;;:16;:22;;;;;;;;30536:23;:47;;;;-1:-1:-1;;;;;;30563:20:0;;;;;;:16;:20;;;;;;;;30536:47;30484:307;;;30680:4;30671:13;;30699:15;:13;:15::i;:::-;30812:13;;-1:-1:-1;;;;;30804:21:0;;;30812:13;;30804:21;;;;:44;;-1:-1:-1;30835:13:0;;-1:-1:-1;;;;;30829:19:0;;;30835:13;;30829:19;;30804:44;:71;;;;-1:-1:-1;;;;;;30853:22:0;;;;;;:16;:22;;;;;;;;30852:23;30804:71;:96;;;;-1:-1:-1;;;;;;30880:20:0;;;;;;:16;:20;;;;;;;;30879:21;30804:96;30801:269;;;30928:17;;;;;;;:32;;30956:4;30928:32;;;30948:5;30928:32;30917:43;;31000:16;;30983:13;:33;;30975:83;;;;-1:-1:-1;;;30975:83:0;;;;;;;:::i;:::-;31080:56;31095:4;31101:2;31105:6;31113:8;31123:6;31131:4;31080:14;:56::i;:::-;29417:1727;;;29348:1796;;;:::o;5930:192::-;6016:7;6052:12;6044:6;;;;6036:29;;;;-1:-1:-1;;;6036:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6076:9:0;6088:5;6092:1;6088;:5;:::i;:::-;6076:17;5930:192;-1:-1:-1;;;;;5930:192:0:o;5027:181::-;5085:7;;5117:5;5121:1;5117;:5;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;-1:-1:-1;;;5133:46:0;;18735:2:1;5133:46:0;;;18717:21:1;18774:2;18754:18;;;18747:30;18813:29;18793:18;;;18786:57;18860:18;;5133:46:0;18533:351:1;5133:46:0;5199:1;5027:181;-1:-1:-1;;;5027:181:0:o;26361:236::-;26448:9;26443:147;26463:20;;;26443:147;;;26505:12;26520:9;;26530:1;26520:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26547:24:0;;;;;:18;:24;;;;;:31;;-1:-1:-1;;26547:31:0;;;;;;;-1:-1:-1;26485:3:0;;;;:::i;:::-;;;;26443:147;;;;26361:236;;;:::o;25347:244::-;25438:9;25433:151;25453:20;;;25433:151;;;25495:12;25510:9;;25520:1;25510:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25537:28:0;;;;;:22;:28;;;;;:35;;-1:-1:-1;;25537:35:0;;;;;;;-1:-1:-1;25475:3:0;;;;:::i;:::-;;;;25433:151;;27884:346;27979:9;27974:249;27998:9;:16;27994:1;:20;27974:249;;;28036:12;28051:9;28061:1;28051:12;;;;;;;;:::i;:::-;;;;;;;28036:27;;28081:7;28078:134;;;-1:-1:-1;;;;;28109:16:0;;;;;;:10;:16;;;;;:23;;-1:-1:-1;;28109:23:0;28128:4;28109:23;;;28078:134;;;-1:-1:-1;;;;;28180:16:0;;;;;;:10;:16;;;;;28173:23;;-1:-1:-1;;28173:23:0;;;28078:134;-1:-1:-1;28016:3:0;;;;:::i;:::-;;;;27974:249;;26113:240;26206:9;26201:145;26221:20;;;26201:145;;;26263:12;26278:9;;26288:1;26278:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26305:22:0;;;;;:16;:22;;;;;:29;;-1:-1:-1;;26305:29:0;;;;;;;-1:-1:-1;26243:3:0;;;;:::i;:::-;;;;26201:145;;33650:1373;33796:17;33816:8;:50;;33865:1;33816:50;;;33838:7;:14;33827:35;;33858:3;;33827:26;;:6;;:10;:26::i;:::-;:30;;:35::i;:::-;33796:70;;33880:8;:18;;;;;33892:6;33880:18;33877:355;;;33938:15;;33927:36;;33959:3;;33927:27;;:6;;:10;:27::i;:36::-;33981:20;;33915:48;;-1:-1:-1;33981:24:0;33978:243;;34026:13;34042:19;34054:6;34042:11;:19::i;:::-;34026:35;;34095:13;;34083:8;:25;34080:126;;34156:20;;34145:41;;34182:3;;34145:32;;:6;;:10;:32::i;:41::-;34133:53;;34080:126;34007:214;33978:243;34242:22;34267:21;:6;34278:9;34267:10;:21::i;:::-;-1:-1:-1;;;;;34319:17:0;;;;;;:9;:17;;;;;;34242:46;;-1:-1:-1;34319:29:0;;34341:6;34319:21;:29::i;:::-;-1:-1:-1;;;;;34299:17:0;;;;;;;:9;:17;;;;;;:49;;;;34382:20;;;;;;;:40;;34407:14;34382:24;:40::i;:::-;-1:-1:-1;;;;;34359:20:0;;;;;;:9;:20;;;;;;:63;;;;34478:4;34460:24;;;;:39;;34489:9;34460:28;:39::i;:::-;34451:4;34433:24;;;;:9;:24;;;;;;;;;:66;;;;34515:35;160:25:1;;;-1:-1:-1;;;;;34515:35:0;;;;;;;;;;133:18:1;34515:35:0;;;;;;;34566:17;34563:453;;;34604:15;;:39;;-1:-1:-1;;;34604:39:0;;-1:-1:-1;;;;;2602:32:1;;;34604:39:0;;;2584:51:1;34604:15:0;;;;:31;;2557:18:1;;34604:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34600:54;34672:15;;:42;;-1:-1:-1;;;34672:42:0;;-1:-1:-1;;;;;2602:32:1;;;34672:42:0;;;2584:51:1;34672:15:0;;;;:31;;2557:18:1;;34672:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34668:57;34743:15;;34767:16;;34743:41;;-1:-1:-1;;;;;;34743:41:0;;-1:-1:-1;;;;;34743:15:0;;;;:23;;:41;;;;160:25:1;;;148:2;133:18;;14:177;34743:41:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34743:41:0;;;;;;;;-1:-1:-1;;34743:41:0;;;;;;;;;;;;:::i;:::-;;;34739:266;;;;;34953:16;;34882:99;;;5152:25:1;;;5208:2;5193:18;;5186:34;;;5236:18;;;5229:34;;;5294:2;5279:18;;5272:34;;;;34882:99:0;34971:9;;34947:4;;34882:99;;;;;5139:3:1;34882:99:0;;;34785:212;;;34739:266;33785:1238;;33650:1373;;;;;;:::o;31152:444::-;31245:4;31196:28;22684:18;;;:9;:18;;;;;;31265:24;;31262:327;;31306:13;31322:33;31334:20;31322:11;:33::i;:::-;31306:49;;31386:14;;31374:8;:26;;:47;;;;-1:-1:-1;31405:16:0;;;;31404:17;31374:47;:72;;;;-1:-1:-1;31425:21:0;;;;;;;31374:72;31370:208;;;31524:38;31541:20;31524:16;:38::i;:::-;31291:298;31185:411;31152:444::o;6381:471::-;6439:7;6684:6;6680:47;;-1:-1:-1;6714:1:0;6707:8;;6680:47;6739:9;6751:5;6755:1;6751;:5;:::i;:::-;6739:17;-1:-1:-1;6784:1:0;6775:5;6779:1;6739:17;6775:5;:::i;:::-;:10;6767:56;;;;-1:-1:-1;;;6767:56:0;;19764:2:1;6767:56:0;;;19746:21:1;19803:2;19783:18;;;19776:30;19842:34;19822:18;;;19815:62;-1:-1:-1;;;19893:18:1;;;19886:31;19934:19;;6767:56:0;19562:397:1;7328:132:0;7386:7;7413:39;7417:1;7420;7413:39;;;;;;;;;;;;;;;;;:3;:39::i;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;31821:748::-;19238:16;:23;;-1:-1:-1;;19238:23:0;19257:4;19238:23;;;31908:38:::1;31925:20:::0;31908:16:::1;:38::i;:::-;32060:22:::0;;31983:21:::1;::::0;31957:23:::1;::::0;32040:52:::1;::::0;32088:3:::1;::::0;32040:43:::1;::::0;31983:21;;32040:19:::1;:43::i;:52::-;32015:77;;32103:21;32127:51;32174:3;32127:42;32147:12;:21;;;32127:15;:19;;:42;;;;:::i;:51::-;32103:75;;32189:20;32212:50;32258:3;32212:41;32232:12;:20;;;32212:15;:19;;:41;;;;:::i;:50::-;32189:73;;32273:20;32296:50;32342:3;32296:41;32316:12;:20;;;32296:15;:19;;:41;;;;:::i;:50::-;32365:16;::::0;32357:50:::1;::::0;32273:73;;-1:-1:-1;;;;;;32365:16:0::1;::::0;32357:50;::::1;;;::::0;32392:14;;32365:16:::1;32357:50:::0;32365:16;32357:50;32392:14;32365:16;32357:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32418:31;32435:13;32418:16;:31::i;:::-;32468:10;::::0;32460:42:::1;::::0;-1:-1:-1;;;;;32468:10:0;;::::1;::::0;32460:42;::::1;;;::::0;32489:12;;32468:10:::1;32460:42:::0;32468:10;32460:42;32489:12;32468:10;32460:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;32521:14:0::1;::::0;32513:46:::1;::::0;-1:-1:-1;;;;;32521:14:0;;::::1;::::0;32513:46;::::1;;;::::0;32546:12;;32521:14:::1;32513:46:::0;32521:14;32513:46;32546:12;32521:14;32513:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19284:16:0;:24;;-1:-1:-1;;19284:24:0;;;-1:-1:-1;;;;;31821:748:0:o;7956:278::-;8042:7;8077:12;8070:5;8062:28;;;;-1:-1:-1;;;8062:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8101:9:0;8113:5;8117:1;8113;:5;:::i;32984:585::-;33134:16;;;33148:1;33134:16;;;;;;;;33110:21;;33134:16;;;;;;;;;;-1:-1:-1;33134:16:0;33110:40;;33179:4;33161;33166:1;33161:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33161:23:0;;;:7;;;;;;;;;;:23;;;;33205:15;;:22;;;-1:-1:-1;;;33205:22:0;;;;:15;;;;;:20;;:22;;;;;33161:7;;33205:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33195:4;33200:1;33195:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33195:32:0;;;:7;;;;;;;;;:32;33270:15;;33238:62;;33255:4;;33270:15;33288:11;33238:8;:62::i;:::-;33337:15;;:224;;-1:-1:-1;;;33337:224:0;;-1:-1:-1;;;;;33337:15:0;;;;:66;;:224;;33418:11;;33337:15;;33488:4;;33515;;33535:15;;33337:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32751:221;32841:15;;32833:52;;32816:12;;-1:-1:-1;;;;;32841:15:0;;32871:9;;32816:12;32833:52;32816:12;32833:52;32871:9;32841:15;32833:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32815:70;;;32900:7;32896:69;;;32929:24;;160:25:1;;;32929:24:0;;148:2:1;133:18;32929:24:0;;;;;;;32804:168;32751:221;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1770:247::-;1829:6;1882:2;1870:9;1861:7;1857:23;1853:32;1850:52;;;1898:1;1895;1888:12;1850:52;1937:9;1924:23;1956:31;1981:5;1956:31;:::i;2022:385::-;2108:6;2116;2124;2132;2185:3;2173:9;2164:7;2160:23;2156:33;2153:53;;;2202:1;2199;2192:12;2153:53;-1:-1:-1;;2225:23:1;;;2295:2;2280:18;;2267:32;;-1:-1:-1;2346:2:1;2331:18;;2318:32;;2397:2;2382:18;2369:32;;-1:-1:-1;2022:385:1;-1:-1:-1;2022:385:1:o;2646:456::-;2723:6;2731;2739;2792:2;2780:9;2771:7;2767:23;2763:32;2760:52;;;2808:1;2805;2798:12;2760:52;2847:9;2834:23;2866:31;2891:5;2866:31;:::i;:::-;2916:5;-1:-1:-1;2973:2:1;2958:18;;2945:32;2986:33;2945:32;2986:33;:::i;:::-;2646:456;;3038:7;;-1:-1:-1;;;3092:2:1;3077:18;;;;3064:32;;2646:456::o;3107:180::-;3166:6;3219:2;3207:9;3198:7;3194:23;3190:32;3187:52;;;3235:1;3232;3225:12;3187:52;-1:-1:-1;3258:23:1;;3107:180;-1:-1:-1;3107:180:1:o;3689:367::-;3752:8;3762:6;3816:3;3809:4;3801:6;3797:17;3793:27;3783:55;;3834:1;3831;3824:12;3783:55;-1:-1:-1;3857:20:1;;3900:18;3889:30;;3886:50;;;3932:1;3929;3922:12;3886:50;3969:4;3961:6;3957:17;3945:29;;4029:3;4022:4;4012:6;4009:1;4005:14;3997:6;3993:27;3989:38;3986:47;3983:67;;;4046:1;4043;4036:12;3983:67;3689:367;;;;;:::o;4061:160::-;4126:20;;4182:13;;4175:21;4165:32;;4155:60;;4211:1;4208;4201:12;4155:60;4061:160;;;:::o;4226:505::-;4318:6;4326;4334;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4443:9;4430:23;4476:18;4468:6;4465:30;4462:50;;;4508:1;4505;4498:12;4462:50;4547:70;4609:7;4600:6;4589:9;4585:22;4547:70;:::i;:::-;4636:8;;-1:-1:-1;4521:96:1;-1:-1:-1;4690:35:1;;-1:-1:-1;4721:2:1;4706:18;;4690:35;:::i;:::-;4680:45;;4226:505;;;;;:::o;4736:180::-;4792:6;4845:2;4833:9;4824:7;4820:23;4816:32;4813:52;;;4861:1;4858;4851:12;4813:52;4884:26;4900:9;4884:26;:::i;5317:248::-;5385:6;5393;5446:2;5434:9;5425:7;5421:23;5417:32;5414:52;;;5462:1;5459;5452:12;5414:52;-1:-1:-1;;5485:23:1;;;5555:2;5540:18;;;5527:32;;-1:-1:-1;5317:248:1:o;5570:127::-;5631:10;5626:3;5622:20;5619:1;5612:31;5662:4;5659:1;5652:15;5686:4;5683:1;5676:15;5702:275;5773:2;5767:9;5838:2;5819:13;;-1:-1:-1;;5815:27:1;5803:40;;5873:18;5858:34;;5894:22;;;5855:62;5852:88;;;5920:18;;:::i;:::-;5956:2;5949:22;5702:275;;-1:-1:-1;5702:275:1:o;5982:183::-;6042:4;6075:18;6067:6;6064:30;6061:56;;;6097:18;;:::i;:::-;-1:-1:-1;6142:1:1;6138:14;6154:4;6134:25;;5982:183::o;6170:966::-;6254:6;6285:2;6328;6316:9;6307:7;6303:23;6299:32;6296:52;;;6344:1;6341;6334:12;6296:52;6384:9;6371:23;6417:18;6409:6;6406:30;6403:50;;;6449:1;6446;6439:12;6403:50;6472:22;;6525:4;6517:13;;6513:27;-1:-1:-1;6503:55:1;;6554:1;6551;6544:12;6503:55;6590:2;6577:16;6613:60;6629:43;6669:2;6629:43;:::i;:::-;6613:60;:::i;:::-;6707:15;;;6789:1;6785:10;;;;6777:19;;6773:28;;;6738:12;;;;6813:19;;;6810:39;;;6845:1;6842;6835:12;6810:39;6869:11;;;;6889:217;6905:6;6900:3;6897:15;6889:217;;;6985:3;6972:17;7002:31;7027:5;7002:31;:::i;:::-;7046:18;;6922:12;;;;7084;;;;6889:217;;;7125:5;6170:966;-1:-1:-1;;;;;;;6170:966:1:o;7141:316::-;7218:6;7226;7234;7287:2;7275:9;7266:7;7262:23;7258:32;7255:52;;;7303:1;7300;7293:12;7255:52;-1:-1:-1;;7326:23:1;;;7396:2;7381:18;;7368:32;;-1:-1:-1;7447:2:1;7432:18;;;7419:32;;7141:316;-1:-1:-1;7141:316:1:o;7462:773::-;7584:6;7592;7600;7608;7661:2;7649:9;7640:7;7636:23;7632:32;7629:52;;;7677:1;7674;7667:12;7629:52;7717:9;7704:23;7746:18;7787:2;7779:6;7776:14;7773:34;;;7803:1;7800;7793:12;7773:34;7842:70;7904:7;7895:6;7884:9;7880:22;7842:70;:::i;:::-;7931:8;;-1:-1:-1;7816:96:1;-1:-1:-1;8019:2:1;8004:18;;7991:32;;-1:-1:-1;8035:16:1;;;8032:36;;;8064:1;8061;8054:12;8032:36;;8103:72;8167:7;8156:8;8145:9;8141:24;8103:72;:::i;:::-;7462:773;;;;-1:-1:-1;8194:8:1;-1:-1:-1;;;;7462:773:1:o;8240:388::-;8308:6;8316;8369:2;8357:9;8348:7;8344:23;8340:32;8337:52;;;8385:1;8382;8375:12;8337:52;8424:9;8411:23;8443:31;8468:5;8443:31;:::i;:::-;8493:5;-1:-1:-1;8550:2:1;8535:18;;8522:32;8563:33;8522:32;8563:33;:::i;:::-;8615:7;8605:17;;;8240:388;;;;;:::o;8633:529::-;8710:6;8718;8726;8779:2;8767:9;8758:7;8754:23;8750:32;8747:52;;;8795:1;8792;8785:12;8747:52;8834:9;8821:23;8853:31;8878:5;8853:31;:::i;:::-;8903:5;-1:-1:-1;8960:2:1;8945:18;;8932:32;8973:33;8932:32;8973:33;:::i;:::-;9025:7;-1:-1:-1;9084:2:1;9069:18;;9056:32;9097:33;9056:32;9097:33;:::i;:::-;9149:7;9139:17;;;8633:529;;;;;:::o;9167:380::-;9246:1;9242:12;;;;9289;;;9310:61;;9364:4;9356:6;9352:17;9342:27;;9310:61;9417:2;9409:6;9406:14;9386:18;9383:38;9380:161;;;9463:10;9458:3;9454:20;9451:1;9444:31;9498:4;9495:1;9488:15;9526:4;9523:1;9516:15;9380:161;;9167:380;;;:::o;9552:356::-;9754:2;9736:21;;;9773:18;;;9766:30;9832:34;9827:2;9812:18;;9805:62;9899:2;9884:18;;9552:356::o;9913:127::-;9974:10;9969:3;9965:20;9962:1;9955:31;10005:4;10002:1;9995:15;10029:4;10026:1;10019:15;10045:168;10085:7;10151:1;10147;10143:6;10139:14;10136:1;10133:21;10128:1;10121:9;10114:17;10110:45;10107:71;;;10158:18;;:::i;:::-;-1:-1:-1;10198:9:1;;10045:168::o;10218:127::-;10279:10;10274:3;10270:20;10267:1;10260:31;10310:4;10307:1;10300:15;10334:4;10331:1;10324:15;10350:251;10420:6;10473:2;10461:9;10452:7;10448:23;10444:32;10441:52;;;10489:1;10486;10479:12;10441:52;10521:9;10515:16;10540:31;10565:5;10540:31;:::i;10606:461::-;10659:3;10697:5;10691:12;10724:6;10719:3;10712:19;10750:4;10779:2;10774:3;10770:12;10763:19;;10816:2;10809:5;10805:14;10837:1;10847:195;10861:6;10858:1;10855:13;10847:195;;;10926:13;;-1:-1:-1;;;;;10922:39:1;10910:52;;10982:12;;;;11017:15;;;;10958:1;10876:9;10847:195;;;-1:-1:-1;11058:3:1;;10606:461;-1:-1:-1;;;;;10606:461:1:o;11072:332::-;11279:6;11268:9;11261:25;11322:2;11317;11306:9;11302:18;11295:30;11242:4;11342:56;11394:2;11383:9;11379:18;11371:6;11342:56;:::i;:::-;11334:64;11072:332;-1:-1:-1;;;;11072:332:1:o;11409:881::-;11504:6;11535:2;11578;11566:9;11557:7;11553:23;11549:32;11546:52;;;11594:1;11591;11584:12;11546:52;11627:9;11621:16;11660:18;11652:6;11649:30;11646:50;;;11692:1;11689;11682:12;11646:50;11715:22;;11768:4;11760:13;;11756:27;-1:-1:-1;11746:55:1;;11797:1;11794;11787:12;11746:55;11826:2;11820:9;11849:60;11865:43;11905:2;11865:43;:::i;11849:60::-;11943:15;;;12025:1;12021:10;;;;12013:19;;12009:28;;;11974:12;;;;12049:19;;;12046:39;;;12081:1;12078;12071:12;12046:39;12105:11;;;;12125:135;12141:6;12136:3;12133:15;12125:135;;;12207:10;;12195:23;;12158:12;;;;12238;;;;12125:135;;14245:128;14285:3;14316:1;14312:6;14309:1;14306:13;14303:39;;;14322:18;;:::i;:::-;-1:-1:-1;14358:9:1;;14245:128::o;17997:401::-;18199:2;18181:21;;;18238:2;18218:18;;;18211:30;18277:34;18272:2;18257:18;;18250:62;-1:-1:-1;;;18343:2:1;18328:18;;18321:35;18388:3;18373:19;;17997:401::o;18403:125::-;18443:4;18471:1;18468;18465:8;18462:34;;;18476:18;;:::i;:::-;-1:-1:-1;18513:9:1;;18403:125::o;18889:135::-;18928:3;-1:-1:-1;;18949:17:1;;18946:43;;;18969:18;;:::i;:::-;-1:-1:-1;19016:1:1;19005:13;;18889:135::o;19029:306::-;19117:6;19125;19133;19186:2;19174:9;19165:7;19161:23;19157:32;19154:52;;;19202:1;19199;19192:12;19154:52;19231:9;19225:16;19215:26;;19281:2;19270:9;19266:18;19260:25;19250:35;;19325:2;19314:9;19310:18;19304:25;19294:35;;19029:306;;;;;:::o;19340:217::-;19380:1;19406;19396:132;;19450:10;19445:3;19441:20;19438:1;19431:31;19485:4;19482:1;19475:15;19513:4;19510:1;19503:15;19396:132;-1:-1:-1;19542:9:1;;19340:217::o;19964:582::-;20263:6;20252:9;20245:25;20306:6;20301:2;20290:9;20286:18;20279:34;20349:3;20344:2;20333:9;20329:18;20322:31;20226:4;20370:57;20422:3;20411:9;20407:19;20399:6;20370:57;:::i;:::-;-1:-1:-1;;;;;20463:32:1;;;;20458:2;20443:18;;20436:60;-1:-1:-1;20527:3:1;20512:19;20505:35;20362:65;19964:582;-1:-1:-1;;;19964:582:1:o

Swarm Source

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