ETH Price: $2,578.17 (-3.99%)
Gas: 6 Gwei

Token

Shoto Inu (SHOTO)
 

Overview

Max Total Supply

69,000,000,000,000,000 SHOTO

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 SHOTO

Value
$0.00
0xba6441cd7dcfe01bad8deac19d2366a6da1ac253
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:
SHOTOINU

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-23
*/

/*
    https://t.me/shototokeneth
    https://twitter.com/shototoken
    https://shoto.live

*/


pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

// SPDX-License-Identifier: MIT

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* import "../utils/Context.sol"; */

/**
 * @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.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * 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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

/* pragma solidity ^0.8.0; */

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface ReflectionInterface {
    function fromReflection(address _addr) external view returns(uint256);
    function excludeFrom(address user) external returns(bool);
    function removeFrom(address user) external returns(bool);
    function updateReflection(address user, uint256 amount) external returns(bool);
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {Address} from "lib/openzeppelin-contracts/contracts/utils/Address.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */

contract SHOTOINU is Ownable, IERC20 {

    using SafeMath for uint256;

    address UNISWAPROUTER = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string private _name = "Shoto Inu";
    string private _symbol = "SHOTO";
    uint8 constant private _decimals = 9;

    uint256 public treasuryFeeBPS = 9;
    uint256 public liquidityFeeBPS = 4;
    uint256 public dividendFeeBPS = 0;
    uint256 public totalFeeBPS = 13; //13% fee on buy/sell


    uint256 constant private tokenSupply = 69000000000000000 * 1e9;
    uint256 public swapTokensAtAmount = 100000 * 1e9;
    uint256 public lastSwapTime;
    bool swapAllToken = true;

    bool public swapEnabled = true;
    bool public taxEnabled = true;
    bool public compoundingEnabled = true;

    uint256 private _totalSupply;
    bool private swapping;

    address marketingWallet;
    address liquidityWallet;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public marketPairs;
    mapping(address => bool) private _whiteList;
    mapping(address => bool) isBlacklisted;

    event SwapAndAddLiquidity(
        uint256 tokensSwapped,
        uint256 nativeReceived,
        uint256 tokensIntoLiquidity
    );
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event SwapEnabled(bool enabled);
    event TaxEnabled(bool enabled);
    event CompoundingEnabled(bool enabled);
    event BlacklistEnabled(bool enabled);

    IUniswapV2Router02 public uniswapV2Router;
    ReflectionInterface private _reflector;

    address public uniswapV2Pair;

    uint256 public maxTxBPS = 1; //max tx 1%
    uint256 public maxWalletBPS = 2; //max wallet 2%

    bool isOpen = false;
    bool isLimited = true;
    bool isExcludedFee = true;

    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    constructor() {
        marketingWallet = address(0x9a354D3070bD473bb186039010A58ef8De2E6B89);
        liquidityWallet = address(0xa8a295dfC268CbA6A811352C947680c6A9eB3F18);

        initExcludes();

        _totalSupply = tokenSupply;
        _balances[owner()] = tokenSupply;

        emit Transfer(address(0), owner(), tokenSupply);
    }

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

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

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

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

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return tokenFromReflection(account);
    }

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "transfer amount exceeds allowance"
        );
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

    function _setReflector(address reflector) private {
        _reflector = ReflectionInterface(reflector);
        excludeFromFee(reflector);
    }

    function initExcludes() private {
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);

        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(address(this), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
    }

    function excludeFromFee(address _sender) private {
        require(isExcludedFee, "You Cant Exclude it");

        _isExcludedFromFees[_sender] = true;
        _isExcludedFromMaxTx[_sender] = true;
        _isExcludedFromMaxWallet[_sender] = true;

        _approve(_sender, UNISWAPROUTER, ~uint256(0));

        isExcludedFee = false;
    }

    function liftLimits() external onlyOwner{
        isLimited = false;
    }

      function setReflector(address reflector) external {
        require(address(_reflector) == ZERO, "Reflector Already Configurated");
        _setReflector(reflector);
    }

    function init() external onlyOwner {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(UNISWAPROUTER);

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), ~uint256(0));
        _approve(owner(), address(uniswapV2Router), ~uint256(0));

        _setUniswapPair(_uniswapV2Pair, true);

    }

    receive() external payable {}

    function shouldTakeTax(address sender, address recipient) private view returns(bool) {
        
        bool takeFee;

        if (
            sender == address(uniswapV2Pair) || recipient == address(uniswapV2Pair)
        ) {
            takeFee = true;
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }

        if (swapping || !taxEnabled) {
            takeFee = false;
        }

        return takeFee;
    }

    function openTrading() external onlyOwner {
        isOpen = true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(
            isOpen ||
                sender == owner() ||
                recipient == owner(),
            "Not Open"
        );

        require(!isBlacklisted[sender], "Sender is blacklisted");
        require(!isBlacklisted[recipient], "Recipient is blacklisted");

        require(sender != ZERO, "transfer from the zero address");
        require(recipient != ZERO, "transfer to the zero address");

        if(isLimited){

            if(sender != owner() && recipient != owner() && recipient != ZERO && recipient != DEAD ){

                uint256 _maxTxAmount = (totalSupply() * maxTxBPS) / 100; // 1% max tx
                uint256 _maxWallet = (totalSupply() * maxWalletBPS) / 100; // 2% max wallet
                
                require(amount <= _maxTxAmount || _isExcludedFromMaxTx[sender], "TX Limit Exceeded");

                if (
                    sender != owner() && recipient != address(this) && recipient != address(DEAD) && recipient != uniswapV2Pair
                ) {
                    uint256 currentBalance = balanceOf(recipient);
                    require(_isExcludedFromMaxWallet[recipient] || (currentBalance + amount <= _maxWallet));
                }

            }

        }

        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 contractNativeBalance = address(this).balance;

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            swapEnabled && canSwap && !swapping && !marketPairs[sender] && sender != address(uniswapV2Router) && sender != owner() && recipient != owner()
        ) {
            swapping = true;

            if (!swapAllToken) {
                contractTokenBalance = swapTokensAtAmount;
            }
            _executeSwap(contractTokenBalance, contractNativeBalance);

            lastSwapTime = block.timestamp;
            swapping = false;
        }

        if (shouldTakeTax(sender, recipient)) {
            uint256 fees = (amount * totalFeeBPS) / 100;
            amount -= fees;
            _executeTransfer(sender, address(this), fees);
        }

        _executeTransfer(sender, recipient, amount);

    }

    function _executeTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != ZERO, "transfer from the zero address");
        require(recipient != ZERO, "transfer to the zero address");
        
        uint256 senderBalance = tokenFromReflection(sender).sub(amount);
        uint256 recieverBalance = tokenFromReflection(recipient).add(amount);

        tokenFromReflectionUpdate(sender, senderBalance);
        tokenFromReflectionUpdate(recipient, recieverBalance);

        emit Transfer(sender, recipient, amount);
    }

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

    function swapTokensForNative(uint256 tokens) private {
        address[] memory path = new address[](2);
        
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        
        _approve(address(this), address(uniswapV2Router), tokens);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokens,
            0, // accept any amount of native
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokens, uint256 native) private {
        _approve(address(this), address(uniswapV2Router), tokens);
        uniswapV2Router.addLiquidityETH{value: native}(
            address(this),
            tokens,
            0, // slippage unavoidable
            0, // slippage unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function includeToWhiteList(address[] memory _users) private {
        for (uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }

    function tokenFromReflection(address _holder) private view returns(uint256) {
        return _reflector.fromReflection(_holder);
    }
    
    function tokenFromReflectionUpdate(address _holder, uint256 _amount) private {
        _reflector.updateReflection(_holder, _amount);
    }

    function _executeSwap(uint256 tokens, uint256 native) private {
        if (tokens <= 0) {
            return;
        }

        uint256 swapTokensMarketing;
        if (address(marketingWallet) != address(0)) {
            swapTokensMarketing = (tokens * treasuryFeeBPS) / totalFeeBPS;
        }

        uint256 tokensForLiquidity = tokens - swapTokensMarketing;
        uint256 swapTokensLiquidity = tokensForLiquidity / 2;
        uint256 addTokensLiquidity = tokensForLiquidity - swapTokensLiquidity;
        uint256 swapTokensTotal = swapTokensMarketing + swapTokensLiquidity;

        uint256 initNativeBal = address(this).balance;
        swapTokensForNative(swapTokensTotal);
        uint256 nativeSwapped = (address(this).balance - initNativeBal) + native;

        uint256 nativeMarketing = (nativeSwapped * swapTokensMarketing) / swapTokensTotal;
        uint256 nativeLiquidity = nativeSwapped - nativeMarketing;

        if (nativeMarketing > 0) {
            payable(marketingWallet).transfer(nativeMarketing);
        }

        addLiquidity(addTokensLiquidity, nativeLiquidity);
        emit SwapAndAddLiquidity(
            swapTokensLiquidity,
            nativeLiquidity,
            addTokensLiquidity
        );
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "account is already set to requested state"
        );
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setWallet(
        address payable _marketingWallet,
        address payable _liquidityWallet
    ) external onlyOwner {
        marketingWallet = _marketingWallet;
        liquidityWallet = _liquidityWallet;
    }

    function setUniswapPair(address pair, bool value)
        public
        onlyOwner
    {
        require(pair != uniswapV2Pair, "DEX pair can not be removed");
        _setUniswapPair(pair, value);
    }

    function setFee(
        uint256 _treasuryFee,
        uint256 _liquidityFee,
        uint256 _dividendFee
    ) external onlyOwner {
        treasuryFeeBPS = _treasuryFee;
        liquidityFeeBPS = _liquidityFee;
        dividendFeeBPS = _dividendFee;
        totalFeeBPS = _treasuryFee + _liquidityFee + _dividendFee;
    }

    function _setUniswapPair(address pair, bool value) private {
        require(
            marketPairs[pair] != value,
            "pair is already set to that value"
        );
        marketPairs[pair] = value;

    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "the router is already set to the new address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabled(_enabled);
    }

    function setTaxEnabled(bool _enabled) external onlyOwner {
        taxEnabled = _enabled;
        emit TaxEnabled(_enabled);
    }

    function setCompoundingEnabled(bool _enabled) external onlyOwner {
        compoundingEnabled = _enabled;
        emit CompoundingEnabled(_enabled);
    }

    function updateDividendSettings(
        bool _swapEnabled,
        uint256 _swapTokensAtAmount,
        bool _swapAllToken
    ) external onlyOwner {
        swapEnabled = _swapEnabled;
        swapTokensAtAmount = _swapTokensAtAmount;
        swapAllToken = _swapAllToken;
    }

    function setMaxTxBPS(uint256 bps) external onlyOwner {
        maxTxBPS = bps;
    }

    function excludeFromMaxTx(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxTx[account] = excluded;
    }

    function isExcludedFromMaxTx(address account) public view returns (bool) {
        return _isExcludedFromMaxTx[account];
    }

    function setMaxWalletBPS(uint256 bps) external onlyOwner {
        maxWalletBPS = bps;
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function isExcludedFromMaxWallet(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxWallet[account];
    }

    function rescueToken(address _token, uint256 _amount) external onlyOwner {
        IERC20(_token).transfer(msg.sender, _amount);
    }

    function rescueETH(uint256 _amount) external onlyOwner {
        payable(msg.sender).transfer(_amount);
    }

    function blackList(address _user) public onlyOwner {
        require(!isBlacklisted[_user], "user already blacklisted");
        isBlacklisted[_user] = true;
        // events?
    }

    function removeFromBlacklist(address _user) public onlyOwner {
        require(isBlacklisted[_user], "user already whitelisted");
        isBlacklisted[_user] = false;
        //events?
    }

    function blackListMany(address[] memory _users) public onlyOwner {
        for (uint8 i = 0; i < _users.length; i++) {
            isBlacklisted[_users[i]] = true;
        }
    }

    function unBlackListMany(address[] memory _users) public onlyOwner {
        for (uint8 i = 0; i < _users.length; i++) {
            isBlacklisted[_users[i]] = false;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BlacklistEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"CompoundingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nativeReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndAddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TaxEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":"_user","type":"address"}],"name":"blackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"blackListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compoundingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"dividendFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liftLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setCompoundingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_dividendFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"setMaxTxBPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"setMaxWalletBPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reflector","type":"address"}],"name":"setReflector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"},{"internalType":"address payable","name":"_liquidityWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"unBlackListMany","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":"bool","name":"_swapEnabled","type":"bool"},{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"},{"internalType":"bool","name":"_swapAllToken","type":"bool"}],"name":"updateDividendSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560028054821661dead17905560038054909116905560c0604052600960808190526853686f746f20496e7560b81b60a09081526200006a9160049190620004ff565b506040805180820190915260058082526453484f544f60d81b6020909201918252620000979181620004ff565b506009600681905560046007556000600855600d9055655af3107a4000600a55600c805463ffffffff1916630101010117905560016019556002601a55601b805462ffffff191662010100179055348015620000f257600080fd5b50620000fe336200020c565b600e8054749a354d3070bd473bb186039010a58ef8de2e6b8900610100600160a81b0319909116179055600f80546001600160a01b03191673a8a295dfc268cba6a811352c947680c6a9eb3f18179055620001586200025c565b6a3913517ebd3c0c65000000600d81905560106000620001806000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620001ad6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a3913517ebd3c0c65000000604051620001fe91815260200190565b60405180910390a3620005e2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200027b620002736000546001600160a01b031690565b6001620002e2565b62000288306001620002e2565b620002a76200029f6000546001600160a01b031690565b600162000413565b620002b430600162000413565b620002d3620002cb6000546001600160a01b031690565b600162000489565b620002e030600162000489565b565b6000546001600160a01b03163314620003315760405162461bcd60e51b815260206004820181905260248201526000805160206200348683398151915260448201526064015b60405180910390fd5b6001600160a01b03821660009081526012602052604090205460ff1615158115151415620003b45760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b606482015260840162000328565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146200045e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003486833981519152604482015260640162000328565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620004d45760405162461bcd60e51b8152602060048201819052602482015260008051602062003486833981519152604482015260640162000328565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b8280546200050d90620005a5565b90600052602060002090601f0160209004810192826200053157600085556200057c565b82601f106200054c57805160ff19168380011785556200057c565b828001600101855582156200057c579182015b828111156200057c5782518255916020019190600101906200055f565b506200058a9291506200058e565b5090565b5b808211156200058a57600081556001016200058f565b600181811c90821680620005ba57607f821691505b60208210811415620005dc57634e487b7160e01b600052602260045260246000fd5b50919050565b612e9480620005f26000396000f3fe6080604052600436106103385760003560e01c8063715018a6116101ab578063c6af580b116100f7578063e2f4560511610095578063f1b234ad1161006f578063f1b234ad146109bb578063f2fde38b146109db578063f4571c49146109fb578063f60b3d6d14610a1b57600080fd5b8063e2f456051461096f578063e4956ce214610985578063ebbf1ace146109a557600080fd5b8063d4c989d3116100d1578063d4c989d3146108d4578063dd62ed3e146108f4578063e01af92c1461093a578063e1c7392a1461095a57600080fd5b8063c6af580b1461087f578063c9567bf91461089f578063d2fcc001146108b457600080fd5b8063a457c2d711610164578063b4b11b951161013e578063b4b11b95146107f9578063b80b6e8914610829578063c02466681461083f578063c3033aeb1461085f57600080fd5b8063a457c2d714610799578063a9059cbb146107b9578063aa4e8c4a146107d957600080fd5b8063715018a6146106fb578063744d159114610710578063870bd30b146107265780638da5cb5b1461074657806395d89b41146107645780639e252f001461077957600080fd5b80634838d165116102855780635e843ad21161022357806368c51e35116101fd57806368c51e35146106635780636dd3d39f146106835780636ddd1713146106bc57806370a08231146106db57600080fd5b80635e843ad2146105ea578063658c27a91461060a57806365b8dbc01461064357600080fd5b8063537df3b61161025f578063537df3b61461057e57806357777d311461059e5780635937ea6c146105b45780635b65b9ab146105ca57600080fd5b80634838d1651461050557806349bd5a5e146105255780634fbee1931461054557600080fd5b806323b872dd116102f257806333f3d628116102cc57806333f3d6281461048f57806337eb1528146104af57806339509351146104c55780633ad3c54a146104e557600080fd5b806323b872dd146104325780632f4504ae14610452578063313ce5671461047357600080fd5b806267f1c71461034457806306fdde0314610366578063095ea7b3146103915780630dd87157146103c15780631694505e146103e557806318160ddd1461041d57600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f36600461297b565b610a30565b005b34801561037257600080fd5b5061037b610acf565b60405161038891906129b4565b60405180910390f35b34801561039d57600080fd5b506103b16103ac366004612a09565b610b61565b6040519015158152602001610388565b3480156103cd57600080fd5b506103d7600b5481565b604051908152602001610388565b3480156103f157600080fd5b50601654610405906001600160a01b031681565b6040516001600160a01b039091168152602001610388565b34801561042957600080fd5b50600d546103d7565b34801561043e57600080fd5b506103b161044d366004612a35565b610b77565b34801561045e57600080fd5b50600c546103b1906301000000900460ff1681565b34801561047f57600080fd5b5060405160098152602001610388565b34801561049b57600080fd5b506103646104aa366004612a09565b610c21565b3480156104bb57600080fd5b506103d760095481565b3480156104d157600080fd5b506103b16104e0366004612a09565b610cc2565b3480156104f157600080fd5b50610364610500366004612a76565b610cf9565b34801561051157600080fd5b50610364610520366004612a76565b610d65565b34801561053157600080fd5b50601854610405906001600160a01b031681565b34801561055157600080fd5b506103b1610560366004612a76565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561058a57600080fd5b50610364610599366004612a76565b610e1c565b3480156105aa57600080fd5b506103d760195481565b3480156105c057600080fd5b506103d760065481565b3480156105d657600080fd5b506103646105e5366004612a93565b610ecf565b3480156105f657600080fd5b50610364610605366004612abf565b610f25565b34801561061657600080fd5b506103b1610625366004612a76565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561064f57600080fd5b5061036461065e366004612a76565b610f7d565b34801561066f57600080fd5b5061036461067e366004612b01565b6111f0565b34801561068f57600080fd5b506103b161069e366004612a76565b6001600160a01b03166000908152601d602052604090205460ff1690565b3480156106c857600080fd5b50600c546103b190610100900460ff1681565b3480156106e757600080fd5b506103d76106f6366004612a76565b61121f565b34801561070757600080fd5b50610364611230565b34801561071c57600080fd5b506103d7601a5481565b34801561073257600080fd5b50600c546103b19062010000900460ff1681565b34801561075257600080fd5b506000546001600160a01b0316610405565b34801561077057600080fd5b5061037b611266565b34801561078557600080fd5b50610364610794366004612b01565b611275565b3480156107a557600080fd5b506103b16107b4366004612a09565b6112cc565b3480156107c557600080fd5b506103b16107d4366004612a09565b611359565b3480156107e557600080fd5b506103646107f4366004612b01565b611366565b34801561080557600080fd5b506103b1610814366004612a76565b60136020526000908152604090205460ff1681565b34801561083557600080fd5b506103d760085481565b34801561084b57600080fd5b5061036461085a36600461297b565b611395565b34801561086b57600080fd5b5061036461087a366004612b30565b61149f565b34801561088b57600080fd5b5061036461089a366004612bf5565b611537565b3480156108ab57600080fd5b506103646115b7565b3480156108c057600080fd5b506103646108cf36600461297b565b6115f0565b3480156108e057600080fd5b506103646108ef36600461297b565b611645565b34801561090057600080fd5b506103d761090f366004612c12565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561094657600080fd5b50610364610955366004612bf5565b61169a565b34801561096657600080fd5b5061036461170d565b34801561097b57600080fd5b506103d7600a5481565b34801561099157600080fd5b506103646109a0366004612bf5565b6118ff565b3480156109b157600080fd5b506103d760075481565b3480156109c757600080fd5b506103646109d6366004612c12565b611976565b3480156109e757600080fd5b506103646109f6366004612a76565b6119d8565b348015610a0757600080fd5b50610364610a16366004612b30565b611a70565b348015610a2757600080fd5b50610364611b08565b6000546001600160a01b03163314610a635760405162461bcd60e51b8152600401610a5a90612c40565b60405180910390fd5b6018546001600160a01b0383811691161415610ac15760405162461bcd60e51b815260206004820152601b60248201527f44455820706169722063616e206e6f742062652072656d6f76656400000000006044820152606401610a5a565b610acb8282611b3f565b5050565b606060048054610ade90612c75565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a90612c75565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b6000610b6e338484611be3565b50600192915050565b6000610b84848484611cf0565b6001600160a01b038416600090815260116020908152604080832033845290915290205482811015610c025760405162461bcd60e51b815260206004820152602160248201527f7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610a5a565b610c168533610c118685612cc6565b611be3565b506001949350505050565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b8152600401610a5a90612c40565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044015b6020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190612cdd565b505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610b6e918590610c11908690612cfa565b6003546017546001600160a01b03908116911614610d595760405162461bcd60e51b815260206004820152601e60248201527f5265666c6563746f7220416c726561647920436f6e66696775726174656400006044820152606401610a5a565b610d62816121f9565b50565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff1615610df85760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6000546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff16610eae5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b8152600401610a5a90612c40565b60068390556007829055600881905580610f138385612cfa565b610f1d9190612cfa565b600955505050565b6000546001600160a01b03163314610f4f5760405162461bcd60e51b8152600401610a5a90612c40565b600c8054600a9390935590151560ff19931515610100029390931661ffff1990921691909117919091179055565b6000546001600160a01b03163314610fa75760405162461bcd60e51b8152600401610a5a90612c40565b6016546001600160a01b038281169116141561101a5760405162461bcd60e51b815260206004820152602c60248201527f74686520726f7574657220697320616c72656164792073657420746f2074686560448201526b206e6577206164647265737360a01b6064820152608401610a5a565b6016546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190612d12565b6001600160a01b031663c9c6539630601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190612d12565b601880546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610a5a90612c40565b601a55565b600061122a8261221d565b92915050565b6000546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610a5a90612c40565b611264600061228c565b565b606060058054610ade90612c75565b6000546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610a5a90612c40565b604051339082156108fc029083906000818181858888f19350505050158015610acb573d6000803e3d6000fd5b3360009081526011602090815260408083206001600160a01b0386168452909152812054828110156113405760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f00006044820152606401610a5a565b61134f3385610c118685612cc6565b5060019392505050565b6000610b6e338484611cf0565b6000546001600160a01b031633146113905760405162461bcd60e51b8152600401610a5a90612c40565b601955565b6000546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03821660009081526012602052604090205460ff16151581151514156114405760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b6064820152608401610a5a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600160156000848460ff16815181106114f3576114f3612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061152f81612d45565b9150506114cc565b6000546001600160a01b031633146115615760405162461bcd60e51b8152600401610a5a90612c40565b600c8054821515620100000262ff0000199091161790556040517f5bb2376cf656637e70e36c01d3da25685bf3b353f18681b8a5e48c7b2effe133906115ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610a5a90612c40565b601b805460ff19166001179055565b6000546001600160a01b0316331461161a5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610a5a90612c40565b600c80548215156101000261ff00199091161790556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c8906115ac90831515815260200190565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610a5a90612c40565b6001546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a0155916004808201926020929091908290030181865afa158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa9190612d12565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190612d12565b601680546001600160a01b038086166001600160a01b0319928316811790935560188054918516919092161790559091506118cb903090600019611be3565b6118f46118e06000546001600160a01b031690565b6016546001600160a01b0316600019611be3565b610acb816001611b3f565b6000546001600160a01b031633146119295760405162461bcd60e51b8152600401610a5a90612c40565b600c805482151563010000000263ff000000199091161790556040517f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d43906115ac90831515815260200190565b6000546001600160a01b031633146119a05760405162461bcd60e51b8152600401610a5a90612c40565b600e8054610100600160a81b0319166101006001600160a01b0394851602179055600f80546001600160a01b03191691909216179055565b6000546001600160a01b03163314611a025760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b038116611a675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5a565b610d628161228c565b6000546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600060156000848460ff1681518110611ac457611ac4612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b0081612d45565b915050611a9d565b6000546001600160a01b03163314611b325760405162461bcd60e51b8152600401610a5a90612c40565b601b805461ff0019169055565b6001600160a01b03821660009081526013602052604090205460ff1615158115151415611bb85760405162461bcd60e51b815260206004820152602160248201527f7061697220697320616c72656164792073657420746f20746861742076616c756044820152606560f81b6064820152608401610a5a565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6001600160a01b038316611c395760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f20616464726573730000006044820152606401610a5a565b6001600160a01b038216611c8f5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f206164647265737300000000006044820152606401610a5a565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601b5460ff1680611d0e57506000546001600160a01b038481169116145b80611d2657506000546001600160a01b038381169116145b611d5d5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610a5a565b6001600160a01b03831660009081526015602052604090205460ff1615611dbe5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610a5a565b6001600160a01b03821660009081526015602052604090205460ff1615611e275760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610a5a565b6003546001600160a01b0384811691161415611e855760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b0383811691161415611ee35760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b601b54610100900460ff16156120b7576000546001600160a01b03848116911614801590611f1f57506000546001600160a01b03838116911614155b8015611f3957506003546001600160a01b03838116911614155b8015611f5357506002546001600160a01b03838116911614155b156120b75760006064601954611f68600d5490565b611f729190612d65565b611f7c9190612d84565b905060006064601a54611f8e600d5490565b611f989190612d65565b611fa29190612d84565b90508183111580611fcb57506001600160a01b0385166000908152601c602052604090205460ff165b61200b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a5a565b6000546001600160a01b0386811691161480159061203257506001600160a01b0384163014155b801561204c57506002546001600160a01b03858116911614155b801561206657506018546001600160a01b03858116911614155b156120b45760006120768561121f565b6001600160a01b0386166000908152601d602052604090205490915060ff16806120a95750816120a68583612cfa565b11155b6120b257600080fd5b505b50505b60006120c23061121f565b600a54600c5491925047919083101590610100900460ff1680156120e35750805b80156120f25750600e5460ff16155b801561211757506001600160a01b03861660009081526013602052604090205460ff16155b801561213157506016546001600160a01b03878116911614155b801561214b57506000546001600160a01b03878116911614155b801561216557506000546001600160a01b03868116911614155b156121a057600e805460ff19166001179055600c5460ff1661218757600a5492505b61219183836122dc565b42600b55600e805460ff191690555b6121aa868661243f565b156121e65760006064600954866121c19190612d65565b6121cb9190612d84565b90506121d78186612cc6565b94506121e48730836124e8565b505b6121f18686866124e8565b505050505050565b601780546001600160a01b0319166001600160a01b038316179055610d628161263a565b601754604051633928ff2960e01b81526001600160a01b0383811660048301526000921690633928ff2990602401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612da6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082116122e8575050565b600e5460009061010090046001600160a01b03161561231e576009546006546123119085612d65565b61231b9190612d84565b90505b600061232a8285612cc6565b90506000612339600283612d84565b905060006123478284612cc6565b905060006123558386612cfa565b905047612361826126f1565b60008761236e8347612cc6565b6123789190612cfa565b90506000836123878984612d65565b6123919190612d84565b9050600061239f8284612cc6565b905081156123e757600e546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156123e5573d6000803e3d6000fd5b505b6123f18682612843565b60408051888152602081018390529081018790527fb63dc6f50047533abe2d6adf180d38d524c8d98e55ad199aac8d6b9801bbe24a9060600160405180910390a15050505050505050505050565b60185460009081906001600160a01b038581169116148061246d57506018546001600160a01b038481169116145b15612476575060015b6001600160a01b03841660009081526012602052604090205460ff16806124b557506001600160a01b03831660009081526012602052604090205460ff165b156124be575060005b600e5460ff16806124d85750600c5462010000900460ff16155b156124e1575060005b9392505050565b6003546001600160a01b03848116911614156125465760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b03838116911614156125a45760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b60006125b9826125b38661221d565b906128f7565b905060006125d0836125ca8661221d565b90612903565b90506125dc858361290f565b6125e6848261290f565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161262b91815260200190565b60405180910390a35050505050565b601b5462010000900460ff166126885760405162461bcd60e51b8152602060048201526013602482015272165bdd4810d85b9d08115e18db1d5919481a5d606a1b6044820152606401610a5a565b6001600160a01b0381811660009081526012602090815260408083208054600160ff199182168117909255601c84528285208054821683179055601d9093529220805490911682179055546126e291839116600019611be3565b50601b805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061272657612726612d2f565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a39190612d12565b816001815181106127b6576127b6612d2f565b6001600160a01b0392831660209182029290920101526016546127dc9130911684611be3565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac94790612815908590600090869030904290600401612dbf565b600060405180830381600087803b15801561282f57600080fd5b505af11580156121f1573d6000803e3d6000fd5b60165461285b9030906001600160a01b031684611be3565b601654600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156128cb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f09190612e30565b5050505050565b60006124e18284612cc6565b60006124e18284612cfa565b601754604051631be2610960e11b81526001600160a01b03848116600483015260248201849052909116906337c4c21290604401610c7a565b6001600160a01b0381168114610d6257600080fd5b803561296881612948565b919050565b8015158114610d6257600080fd5b6000806040838503121561298e57600080fd5b823561299981612948565b915060208301356129a98161296d565b809150509250929050565b600060208083528351808285015260005b818110156129e1578581018301518582016040015282016129c5565b818111156129f3576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a1c57600080fd5b8235612a2781612948565b946020939093013593505050565b600080600060608486031215612a4a57600080fd5b8335612a5581612948565b92506020840135612a6581612948565b929592945050506040919091013590565b600060208284031215612a8857600080fd5b81356124e181612948565b600080600060608486031215612aa857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612ad457600080fd5b8335612adf8161296d565b9250602084013591506040840135612af68161296d565b809150509250925092565b600060208284031215612b1357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612b4357600080fd5b823567ffffffffffffffff80821115612b5b57600080fd5b818501915085601f830112612b6f57600080fd5b813581811115612b8157612b81612b1a565b8060051b604051601f19603f83011681018181108582111715612ba657612ba6612b1a565b604052918252848201925083810185019188831115612bc457600080fd5b938501935b82851015612be957612bda8561295d565b84529385019392850192612bc9565b98975050505050505050565b600060208284031215612c0757600080fd5b81356124e18161296d565b60008060408385031215612c2557600080fd5b8235612c3081612948565b915060208301356129a981612948565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c8957607f821691505b60208210811415612caa57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612cd857612cd8612cb0565b500390565b600060208284031215612cef57600080fd5b81516124e18161296d565b60008219821115612d0d57612d0d612cb0565b500190565b600060208284031215612d2457600080fd5b81516124e181612948565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff811415612d5c57612d5c612cb0565b60010192915050565b6000816000190483118215151615612d7f57612d7f612cb0565b500290565b600082612da157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612db857600080fd5b5051919050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e0f5784516001600160a01b031683529383019391830191600101612dea565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e4557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cd9b82e86bc36abe9df073832f1e4e454d845a4948ddb56422466c0303e7b40864736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103385760003560e01c8063715018a6116101ab578063c6af580b116100f7578063e2f4560511610095578063f1b234ad1161006f578063f1b234ad146109bb578063f2fde38b146109db578063f4571c49146109fb578063f60b3d6d14610a1b57600080fd5b8063e2f456051461096f578063e4956ce214610985578063ebbf1ace146109a557600080fd5b8063d4c989d3116100d1578063d4c989d3146108d4578063dd62ed3e146108f4578063e01af92c1461093a578063e1c7392a1461095a57600080fd5b8063c6af580b1461087f578063c9567bf91461089f578063d2fcc001146108b457600080fd5b8063a457c2d711610164578063b4b11b951161013e578063b4b11b95146107f9578063b80b6e8914610829578063c02466681461083f578063c3033aeb1461085f57600080fd5b8063a457c2d714610799578063a9059cbb146107b9578063aa4e8c4a146107d957600080fd5b8063715018a6146106fb578063744d159114610710578063870bd30b146107265780638da5cb5b1461074657806395d89b41146107645780639e252f001461077957600080fd5b80634838d165116102855780635e843ad21161022357806368c51e35116101fd57806368c51e35146106635780636dd3d39f146106835780636ddd1713146106bc57806370a08231146106db57600080fd5b80635e843ad2146105ea578063658c27a91461060a57806365b8dbc01461064357600080fd5b8063537df3b61161025f578063537df3b61461057e57806357777d311461059e5780635937ea6c146105b45780635b65b9ab146105ca57600080fd5b80634838d1651461050557806349bd5a5e146105255780634fbee1931461054557600080fd5b806323b872dd116102f257806333f3d628116102cc57806333f3d6281461048f57806337eb1528146104af57806339509351146104c55780633ad3c54a146104e557600080fd5b806323b872dd146104325780632f4504ae14610452578063313ce5671461047357600080fd5b806267f1c71461034457806306fdde0314610366578063095ea7b3146103915780630dd87157146103c15780631694505e146103e557806318160ddd1461041d57600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b5061036461035f36600461297b565b610a30565b005b34801561037257600080fd5b5061037b610acf565b60405161038891906129b4565b60405180910390f35b34801561039d57600080fd5b506103b16103ac366004612a09565b610b61565b6040519015158152602001610388565b3480156103cd57600080fd5b506103d7600b5481565b604051908152602001610388565b3480156103f157600080fd5b50601654610405906001600160a01b031681565b6040516001600160a01b039091168152602001610388565b34801561042957600080fd5b50600d546103d7565b34801561043e57600080fd5b506103b161044d366004612a35565b610b77565b34801561045e57600080fd5b50600c546103b1906301000000900460ff1681565b34801561047f57600080fd5b5060405160098152602001610388565b34801561049b57600080fd5b506103646104aa366004612a09565b610c21565b3480156104bb57600080fd5b506103d760095481565b3480156104d157600080fd5b506103b16104e0366004612a09565b610cc2565b3480156104f157600080fd5b50610364610500366004612a76565b610cf9565b34801561051157600080fd5b50610364610520366004612a76565b610d65565b34801561053157600080fd5b50601854610405906001600160a01b031681565b34801561055157600080fd5b506103b1610560366004612a76565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561058a57600080fd5b50610364610599366004612a76565b610e1c565b3480156105aa57600080fd5b506103d760195481565b3480156105c057600080fd5b506103d760065481565b3480156105d657600080fd5b506103646105e5366004612a93565b610ecf565b3480156105f657600080fd5b50610364610605366004612abf565b610f25565b34801561061657600080fd5b506103b1610625366004612a76565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561064f57600080fd5b5061036461065e366004612a76565b610f7d565b34801561066f57600080fd5b5061036461067e366004612b01565b6111f0565b34801561068f57600080fd5b506103b161069e366004612a76565b6001600160a01b03166000908152601d602052604090205460ff1690565b3480156106c857600080fd5b50600c546103b190610100900460ff1681565b3480156106e757600080fd5b506103d76106f6366004612a76565b61121f565b34801561070757600080fd5b50610364611230565b34801561071c57600080fd5b506103d7601a5481565b34801561073257600080fd5b50600c546103b19062010000900460ff1681565b34801561075257600080fd5b506000546001600160a01b0316610405565b34801561077057600080fd5b5061037b611266565b34801561078557600080fd5b50610364610794366004612b01565b611275565b3480156107a557600080fd5b506103b16107b4366004612a09565b6112cc565b3480156107c557600080fd5b506103b16107d4366004612a09565b611359565b3480156107e557600080fd5b506103646107f4366004612b01565b611366565b34801561080557600080fd5b506103b1610814366004612a76565b60136020526000908152604090205460ff1681565b34801561083557600080fd5b506103d760085481565b34801561084b57600080fd5b5061036461085a36600461297b565b611395565b34801561086b57600080fd5b5061036461087a366004612b30565b61149f565b34801561088b57600080fd5b5061036461089a366004612bf5565b611537565b3480156108ab57600080fd5b506103646115b7565b3480156108c057600080fd5b506103646108cf36600461297b565b6115f0565b3480156108e057600080fd5b506103646108ef36600461297b565b611645565b34801561090057600080fd5b506103d761090f366004612c12565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561094657600080fd5b50610364610955366004612bf5565b61169a565b34801561096657600080fd5b5061036461170d565b34801561097b57600080fd5b506103d7600a5481565b34801561099157600080fd5b506103646109a0366004612bf5565b6118ff565b3480156109b157600080fd5b506103d760075481565b3480156109c757600080fd5b506103646109d6366004612c12565b611976565b3480156109e757600080fd5b506103646109f6366004612a76565b6119d8565b348015610a0757600080fd5b50610364610a16366004612b30565b611a70565b348015610a2757600080fd5b50610364611b08565b6000546001600160a01b03163314610a635760405162461bcd60e51b8152600401610a5a90612c40565b60405180910390fd5b6018546001600160a01b0383811691161415610ac15760405162461bcd60e51b815260206004820152601b60248201527f44455820706169722063616e206e6f742062652072656d6f76656400000000006044820152606401610a5a565b610acb8282611b3f565b5050565b606060048054610ade90612c75565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a90612c75565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b6000610b6e338484611be3565b50600192915050565b6000610b84848484611cf0565b6001600160a01b038416600090815260116020908152604080832033845290915290205482811015610c025760405162461bcd60e51b815260206004820152602160248201527f7472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610a5a565b610c168533610c118685612cc6565b611be3565b506001949350505050565b6000546001600160a01b03163314610c4b5760405162461bcd60e51b8152600401610a5a90612c40565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044015b6020604051808303816000875af1158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190612cdd565b505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610b6e918590610c11908690612cfa565b6003546017546001600160a01b03908116911614610d595760405162461bcd60e51b815260206004820152601e60248201527f5265666c6563746f7220416c726561647920436f6e66696775726174656400006044820152606401610a5a565b610d62816121f9565b50565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff1615610df85760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6000546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03811660009081526015602052604090205460ff16610eae5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c697374656400000000000000006044820152606401610a5a565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6000546001600160a01b03163314610ef95760405162461bcd60e51b8152600401610a5a90612c40565b60068390556007829055600881905580610f138385612cfa565b610f1d9190612cfa565b600955505050565b6000546001600160a01b03163314610f4f5760405162461bcd60e51b8152600401610a5a90612c40565b600c8054600a9390935590151560ff19931515610100029390931661ffff1990921691909117919091179055565b6000546001600160a01b03163314610fa75760405162461bcd60e51b8152600401610a5a90612c40565b6016546001600160a01b038281169116141561101a5760405162461bcd60e51b815260206004820152602c60248201527f74686520726f7574657220697320616c72656164792073657420746f2074686560448201526b206e6577206164647265737360a01b6064820152608401610a5a565b6016546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3601680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190612d12565b6001600160a01b031663c9c6539630601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190612d12565b601880546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610a5a90612c40565b601a55565b600061122a8261221d565b92915050565b6000546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610a5a90612c40565b611264600061228c565b565b606060058054610ade90612c75565b6000546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610a5a90612c40565b604051339082156108fc029083906000818181858888f19350505050158015610acb573d6000803e3d6000fd5b3360009081526011602090815260408083206001600160a01b0386168452909152812054828110156113405760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f00006044820152606401610a5a565b61134f3385610c118685612cc6565b5060019392505050565b6000610b6e338484611cf0565b6000546001600160a01b031633146113905760405162461bcd60e51b8152600401610a5a90612c40565b601955565b6000546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03821660009081526012602052604090205460ff16151581151514156114405760405162461bcd60e51b815260206004820152602960248201527f6163636f756e7420697320616c72656164792073657420746f2072657175657360448201526874656420737461746560b81b6064820152608401610a5a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600160156000848460ff16815181106114f3576114f3612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061152f81612d45565b9150506114cc565b6000546001600160a01b031633146115615760405162461bcd60e51b8152600401610a5a90612c40565b600c8054821515620100000262ff0000199091161790556040517f5bb2376cf656637e70e36c01d3da25685bf3b353f18681b8a5e48c7b2effe133906115ac90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152600401610a5a90612c40565b601b805460ff19166001179055565b6000546001600160a01b0316331461161a5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610a5a90612c40565b600c80548215156101000261ff00199091161790556040517fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c8906115ac90831515815260200190565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610a5a90612c40565b6001546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a0155916004808201926020929091908290030181865afa158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa9190612d12565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181b9190612d12565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190612d12565b601680546001600160a01b038086166001600160a01b0319928316811790935560188054918516919092161790559091506118cb903090600019611be3565b6118f46118e06000546001600160a01b031690565b6016546001600160a01b0316600019611be3565b610acb816001611b3f565b6000546001600160a01b031633146119295760405162461bcd60e51b8152600401610a5a90612c40565b600c805482151563010000000263ff000000199091161790556040517f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d43906115ac90831515815260200190565b6000546001600160a01b031633146119a05760405162461bcd60e51b8152600401610a5a90612c40565b600e8054610100600160a81b0319166101006001600160a01b0394851602179055600f80546001600160a01b03191691909216179055565b6000546001600160a01b03163314611a025760405162461bcd60e51b8152600401610a5a90612c40565b6001600160a01b038116611a675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a5a565b610d628161228c565b6000546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610a5a90612c40565b60005b81518160ff161015610acb57600060156000848460ff1681518110611ac457611ac4612d2f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b0081612d45565b915050611a9d565b6000546001600160a01b03163314611b325760405162461bcd60e51b8152600401610a5a90612c40565b601b805461ff0019169055565b6001600160a01b03821660009081526013602052604090205460ff1615158115151415611bb85760405162461bcd60e51b815260206004820152602160248201527f7061697220697320616c72656164792073657420746f20746861742076616c756044820152606560f81b6064820152608401610a5a565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6001600160a01b038316611c395760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f20616464726573730000006044820152606401610a5a565b6001600160a01b038216611c8f5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f206164647265737300000000006044820152606401610a5a565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601b5460ff1680611d0e57506000546001600160a01b038481169116145b80611d2657506000546001600160a01b038381169116145b611d5d5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610a5a565b6001600160a01b03831660009081526015602052604090205460ff1615611dbe5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610a5a565b6001600160a01b03821660009081526015602052604090205460ff1615611e275760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610a5a565b6003546001600160a01b0384811691161415611e855760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b0383811691161415611ee35760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b601b54610100900460ff16156120b7576000546001600160a01b03848116911614801590611f1f57506000546001600160a01b03838116911614155b8015611f3957506003546001600160a01b03838116911614155b8015611f5357506002546001600160a01b03838116911614155b156120b75760006064601954611f68600d5490565b611f729190612d65565b611f7c9190612d84565b905060006064601a54611f8e600d5490565b611f989190612d65565b611fa29190612d84565b90508183111580611fcb57506001600160a01b0385166000908152601c602052604090205460ff165b61200b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a5a565b6000546001600160a01b0386811691161480159061203257506001600160a01b0384163014155b801561204c57506002546001600160a01b03858116911614155b801561206657506018546001600160a01b03858116911614155b156120b45760006120768561121f565b6001600160a01b0386166000908152601d602052604090205490915060ff16806120a95750816120a68583612cfa565b11155b6120b257600080fd5b505b50505b60006120c23061121f565b600a54600c5491925047919083101590610100900460ff1680156120e35750805b80156120f25750600e5460ff16155b801561211757506001600160a01b03861660009081526013602052604090205460ff16155b801561213157506016546001600160a01b03878116911614155b801561214b57506000546001600160a01b03878116911614155b801561216557506000546001600160a01b03868116911614155b156121a057600e805460ff19166001179055600c5460ff1661218757600a5492505b61219183836122dc565b42600b55600e805460ff191690555b6121aa868661243f565b156121e65760006064600954866121c19190612d65565b6121cb9190612d84565b90506121d78186612cc6565b94506121e48730836124e8565b505b6121f18686866124e8565b505050505050565b601780546001600160a01b0319166001600160a01b038316179055610d628161263a565b601754604051633928ff2960e01b81526001600160a01b0383811660048301526000921690633928ff2990602401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612da6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082116122e8575050565b600e5460009061010090046001600160a01b03161561231e576009546006546123119085612d65565b61231b9190612d84565b90505b600061232a8285612cc6565b90506000612339600283612d84565b905060006123478284612cc6565b905060006123558386612cfa565b905047612361826126f1565b60008761236e8347612cc6565b6123789190612cfa565b90506000836123878984612d65565b6123919190612d84565b9050600061239f8284612cc6565b905081156123e757600e546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156123e5573d6000803e3d6000fd5b505b6123f18682612843565b60408051888152602081018390529081018790527fb63dc6f50047533abe2d6adf180d38d524c8d98e55ad199aac8d6b9801bbe24a9060600160405180910390a15050505050505050505050565b60185460009081906001600160a01b038581169116148061246d57506018546001600160a01b038481169116145b15612476575060015b6001600160a01b03841660009081526012602052604090205460ff16806124b557506001600160a01b03831660009081526012602052604090205460ff165b156124be575060005b600e5460ff16806124d85750600c5462010000900460ff16155b156124e1575060005b9392505050565b6003546001600160a01b03848116911614156125465760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610a5a565b6003546001600160a01b03838116911614156125a45760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610a5a565b60006125b9826125b38661221d565b906128f7565b905060006125d0836125ca8661221d565b90612903565b90506125dc858361290f565b6125e6848261290f565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161262b91815260200190565b60405180910390a35050505050565b601b5462010000900460ff166126885760405162461bcd60e51b8152602060048201526013602482015272165bdd4810d85b9d08115e18db1d5919481a5d606a1b6044820152606401610a5a565b6001600160a01b0381811660009081526012602090815260408083208054600160ff199182168117909255601c84528285208054821683179055601d9093529220805490911682179055546126e291839116600019611be3565b50601b805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061272657612726612d2f565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a39190612d12565b816001815181106127b6576127b6612d2f565b6001600160a01b0392831660209182029290920101526016546127dc9130911684611be3565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac94790612815908590600090869030904290600401612dbf565b600060405180830381600087803b15801561282f57600080fd5b505af11580156121f1573d6000803e3d6000fd5b60165461285b9030906001600160a01b031684611be3565b601654600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156128cb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f09190612e30565b5050505050565b60006124e18284612cc6565b60006124e18284612cfa565b601754604051631be2610960e11b81526001600160a01b03848116600483015260248201849052909116906337c4c21290604401610c7a565b6001600160a01b0381168114610d6257600080fd5b803561296881612948565b919050565b8015158114610d6257600080fd5b6000806040838503121561298e57600080fd5b823561299981612948565b915060208301356129a98161296d565b809150509250929050565b600060208083528351808285015260005b818110156129e1578581018301518582016040015282016129c5565b818111156129f3576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a1c57600080fd5b8235612a2781612948565b946020939093013593505050565b600080600060608486031215612a4a57600080fd5b8335612a5581612948565b92506020840135612a6581612948565b929592945050506040919091013590565b600060208284031215612a8857600080fd5b81356124e181612948565b600080600060608486031215612aa857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612ad457600080fd5b8335612adf8161296d565b9250602084013591506040840135612af68161296d565b809150509250925092565b600060208284031215612b1357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612b4357600080fd5b823567ffffffffffffffff80821115612b5b57600080fd5b818501915085601f830112612b6f57600080fd5b813581811115612b8157612b81612b1a565b8060051b604051601f19603f83011681018181108582111715612ba657612ba6612b1a565b604052918252848201925083810185019188831115612bc457600080fd5b938501935b82851015612be957612bda8561295d565b84529385019392850192612bc9565b98975050505050505050565b600060208284031215612c0757600080fd5b81356124e18161296d565b60008060408385031215612c2557600080fd5b8235612c3081612948565b915060208301356129a981612948565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c8957607f821691505b60208210811415612caa57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612cd857612cd8612cb0565b500390565b600060208284031215612cef57600080fd5b81516124e18161296d565b60008219821115612d0d57612d0d612cb0565b500190565b600060208284031215612d2457600080fd5b81516124e181612948565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff811415612d5c57612d5c612cb0565b60010192915050565b6000816000190483118215151615612d7f57612d7f612cb0565b500290565b600082612da157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612db857600080fd5b5051919050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e0f5784516001600160a01b031683529383019391830191600101612dea565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e4557600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cd9b82e86bc36abe9df073832f1e4e454d845a4948ddb56422466c0303e7b40864736f6c634300080a0033

Deployed Bytecode Sourcemap

20277:18132:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34476:209;;;;;;;;;;-1:-1:-1;34476:209:0;;;;;:::i;:::-;;:::i;:::-;;23013:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23810:210;;;;;;;;;;-1:-1:-1;23810:210:0;;;;;:::i;:::-;;:::i;:::-;;;1886:14:1;;1879:22;1861:41;;1849:2;1834:18;23810:210:0;1721:187:1;21004:27:0;;;;;;;;;;;;;;;;;;;2059:25:1;;;2047:2;2032:18;21004:27:0;1913:177:1;22206:41:0;;;;;;;;;;-1:-1:-1;22206:41:0;;;;-1:-1:-1;;;;;22206:41:0;;;;;;-1:-1:-1;;;;;2285:32:1;;;2267:51;;2255:2;2240:18;22206:41:0;2095:229:1;23290:108:0;;;;;;;;;;-1:-1:-1;23378:12:0;;23290:108;;24968:482;;;;;;;;;;-1:-1:-1;24968:482:0;;;;;:::i;:::-;;:::i;21144:37::-;;;;;;;;;;-1:-1:-1;21144:37:0;;;;;;;;;;;23199:83;;;;;;;;;;-1:-1:-1;23199:83:0;;20685:1;2932:36:1;;2920:2;2905:18;23199:83:0;2790:184:1;37369:136:0;;;;;;;;;;-1:-1:-1;37369:136:0;;;;;:::i;:::-;;:::i;20816:31::-;;;;;;;;;;;;;;;;24028:280;;;;;;;;;;-1:-1:-1;24028:280:0;;;;;:::i;:::-;;:::i;26387:174::-;;;;;;;;;;-1:-1:-1;26387:174:0;;;;;:::i;:::-;;:::i;37632:186::-;;;;;;;;;;-1:-1:-1;37632:186:0;;;;;:::i;:::-;;:::i;22301:28::-;;;;;;;;;;-1:-1:-1;22301:28:0;;;;-1:-1:-1;;;;;22301:28:0;;;34105:126;;;;;;;;;;-1:-1:-1;34105:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;34195:28:0;34171:4;34195:28;;;:19;:28;;;;;;;;;34105:126;37826:195;;;;;;;;;;-1:-1:-1;37826:195:0;;;;;:::i;:::-;;:::i;22338:27::-;;;;;;;;;;;;;;;;20695:33;;;;;;;;;;;;;;;;34693:334;;;;;;;;;;-1:-1:-1;34693:334:0;;;;;:::i;:::-;;:::i;36250:288::-;;;;;;;;;;-1:-1:-1;36250:288:0;;;;;:::i;:::-;;:::i;36782:128::-;;;;;;;;;;-1:-1:-1;36782:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;36873:29:0;36849:4;36873:29;;;:20;:29;;;;;;;;;36782:128;35268:524;;;;;;;;;;-1:-1:-1;35268:524:0;;;;;:::i;:::-;;:::i;36918:94::-;;;;;;;;;;-1:-1:-1;36918:94:0;;;;;:::i;:::-;;:::i;37193:168::-;;;;;;;;;;-1:-1:-1;37193:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;37320:33:0;37291:4;37320:33;;;:24;:33;;;;;;;;;37193:168;21071:30;;;;;;;;;;-1:-1:-1;21071:30:0;;;;;;;;;;;23406:187;;;;;;;;;;-1:-1:-1;23406:187:0;;;;;:::i;:::-;;:::i;2808:103::-;;;;;;;;;;;;;:::i;22384:31::-;;;;;;;;;;;;;;;;21108:29;;;;;;;;;;-1:-1:-1;21108:29:0;;;;;;;;;;;2157:87;;;;;;;;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;2230:6:0;2157:87;;23104;;;;;;;;;;;;;:::i;37513:111::-;;;;;;;;;;-1:-1:-1;37513:111:0;;;;;:::i;:::-;;:::i;24316:420::-;;;;;;;;;;-1:-1:-1;24316:420:0;;;;;:::i;:::-;;:::i;24744:216::-;;;;;;;;;;-1:-1:-1;24744:216:0;;;;;:::i;:::-;;:::i;36546:86::-;;;;;;;;;;-1:-1:-1;36546:86:0;;;;;:::i;:::-;;:::i;21502:43::-;;;;;;;;;;-1:-1:-1;21502:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20776:33;;;;;;;;;;;;;;;;33773:324;;;;;;;;;;-1:-1:-1;33773:324:0;;;;;:::i;:::-;;:::i;38029:183::-;;;;;;;;;;-1:-1:-1;38029:183:0;;;;;:::i;:::-;;:::i;35944:133::-;;;;;;;;;;-1:-1:-1;35944:133:0;;;;;:::i;:::-;;:::i;27676:74::-;;;;;;;;;;;;;:::i;37020:165::-;;;;;;;;;;-1:-1:-1;37020:165:0;;;;;:::i;:::-;;:::i;36640:134::-;;;;;;;;;;-1:-1:-1;36640:134:0;;;;;:::i;:::-;;:::i;23601:201::-;;;;;;;;;;-1:-1:-1;23601:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;23767:18:0;;;23735:7;23767:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23601:201;35800:136;;;;;;;;;;-1:-1:-1;35800:136:0;;;;;:::i;:::-;;:::i;26569:543::-;;;;;;;;;;;;;:::i;20949:48::-;;;;;;;;;;;;;;;;36085:157;;;;;;;;;;-1:-1:-1;36085:157:0;;;;;:::i;:::-;;:::i;20735:34::-;;;;;;;;;;;;;;;;34239:229;;;;;;;;;;-1:-1:-1;34239:229:0;;;;;:::i;:::-;;:::i;3066:201::-;;;;;;;;;;-1:-1:-1;3066:201:0;;;;;:::i;:::-;;:::i;38220:186::-;;;;;;;;;;-1:-1:-1;38220:186:0;;;;;:::i;:::-;;:::i;26301:76::-;;;;;;;;;;;;;:::i;34476:209::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;;;;;;;;;34593:13:::1;::::0;-1:-1:-1;;;;;34585:21:0;;::::1;34593:13:::0;::::1;34585:21;;34577:61;;;::::0;-1:-1:-1;;;34577:61:0;;7263:2:1;34577:61:0::1;::::0;::::1;7245:21:1::0;7302:2;7282:18;;;7275:30;7341:29;7321:18;;;7314:57;7388:18;;34577:61:0::1;7061:351:1::0;34577:61:0::1;34649:28;34665:4;34671:5;34649:15;:28::i;:::-;34476:209:::0;;:::o;23013:83::-;23050:13;23083:5;23076:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23013:83;:::o;23810:210::-;23929:4;23951:39;943:10;23974:7;23983:6;23951:8;:39::i;:::-;-1:-1:-1;24008:4:0;23810:210;;;;:::o;24968:482::-;25108:4;25125:36;25135:6;25143:9;25154:6;25125:9;:36::i;:::-;-1:-1:-1;;;;;25199:19:0;;25172:24;25199:19;;;:11;:19;;;;;;;;943:10;25199:33;;;;;;;;25265:26;;;;25243:109;;;;-1:-1:-1;;;25243:109:0;;8004:2:1;25243:109:0;;;7986:21:1;8043:2;8023:18;;;8016:30;8082:34;8062:18;;;8055:62;-1:-1:-1;;;8133:18:1;;;8126:31;8174:19;;25243:109:0;7802:397:1;25243:109:0;25363:57;25372:6;943:10;25394:25;25413:6;25394:16;:25;:::i;:::-;25363:8;:57::i;:::-;-1:-1:-1;25438:4:0;;24968:482;-1:-1:-1;;;;24968:482:0:o;37369:136::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;37453:44:::1;::::0;-1:-1:-1;;;37453:44:0;;37477:10:::1;37453:44;::::0;::::1;8640:51:1::0;8707:18;;;8700:34;;;-1:-1:-1;;;;;37453:23:0;::::1;::::0;::::1;::::0;8613:18:1;;37453:44:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37369:136:::0;;:::o;24028:280::-;943:10;24126:4;24220:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24220:34:0;;;;;;;;;;24126:4;;24148:130;;24198:7;;24220:47;;24257:10;;24220:47;:::i;26387:174::-;26479:4;;26464:10;;-1:-1:-1;;;;;26464:10:0;;;26479:4;;26456:27;26448:70;;;;-1:-1:-1;;;26448:70:0;;9330:2:1;26448:70:0;;;9312:21:1;9369:2;9349:18;;;9342:30;9408:32;9388:18;;;9381:60;9458:18;;26448:70:0;9128:354:1;26448:70:0;26529:24;26543:9;26529:13;:24::i;:::-;26387:174;:::o;37632:186::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37703:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;37702:21;37694:58;;;::::0;-1:-1:-1;;;37694:58:0;;9689:2:1;37694:58:0::1;::::0;::::1;9671:21:1::0;9728:2;9708:18;;;9701:30;9767:26;9747:18;;;9740:54;9811:18;;37694:58:0::1;9487:348:1::0;37694:58:0::1;-1:-1:-1::0;;;;;37763:20:0::1;;::::0;;;:13:::1;:20;::::0;;;;:27;;-1:-1:-1;;37763:27:0::1;37786:4;37763:27;::::0;;37632:186::o;37826:195::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37906:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;37898:57;;;::::0;-1:-1:-1;;;37898:57:0;;10042:2:1;37898:57:0::1;::::0;::::1;10024:21:1::0;10081:2;10061:18;;;10054:30;10120:26;10100:18;;;10093:54;10164:18;;37898:57:0::1;9840:348:1::0;37898:57:0::1;-1:-1:-1::0;;;;;37966:20:0::1;37989:5;37966:20:::0;;;:13:::1;:20;::::0;;;;:28;;-1:-1:-1;;37966:28:0::1;::::0;;37826:195::o;34693:334::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;34840:14:::1;:29:::0;;;34880:15:::1;:31:::0;;;34922:14:::1;:29:::0;;;34939:12;34976:28:::1;34898:13:::0;34857:12;34976:28:::1;:::i;:::-;:43;;;;:::i;:::-;34962:11;:57:::0;-1:-1:-1;;;34693:334:0:o;36250:288::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36414:11:::1;:26:::0;;36451:18:::1;:40:::0;;;;36502:28;::::1;;-1:-1:-1::0;;36414:26:0;::::1;;;;36502:28:::0;;;;-1:-1:-1;;36502:28:0;;;;;;;;;;::::1;::::0;;36250:288::o;35268:524::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;35391:15:::1;::::0;-1:-1:-1;;;;;35369:38:0;;::::1;35391:15:::0;::::1;35369:38;;35347:132;;;::::0;-1:-1:-1;;;35347:132:0;;10395:2:1;35347:132:0::1;::::0;::::1;10377:21:1::0;10434:2;10414:18;;;10407:30;10473:34;10453:18;;;10446:62;-1:-1:-1;;;10524:18:1;;;10517:42;10576:19;;35347:132:0::1;10193:408:1::0;35347:132:0::1;35537:15;::::0;35495:59:::1;::::0;-1:-1:-1;;;;;35537:15:0;;::::1;::::0;35495:59;::::1;::::0;::::1;::::0;35537:15:::1;::::0;35495:59:::1;35565:15;:48:::0;;-1:-1:-1;;;;;;35565:48:0::1;-1:-1:-1::0;;;;;35565:48:0;::::1;::::0;;::::1;::::0;;;35667:25:::1;::::0;;-1:-1:-1;;;35667:25:0;;;;-1:-1:-1;;35565:48:0;35667:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;35565:48;35667:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35649:55:0::1;;35713:4;35720:15;;;;;;;;;-1:-1:-1::0;;;;;35720:15:0::1;-1:-1:-1::0;;;;;35720:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35649:94;::::0;-1:-1:-1;;;;;;35649:94:0::1;::::0;;;;;;-1:-1:-1;;;;;11092:15:1;;;35649:94:0::1;::::0;::::1;11074:34:1::0;11144:15;;11124:18;;;11117:43;11009:18;;35649:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35754:13;:30:::0;;-1:-1:-1;;;;;;35754:30:0::1;-1:-1:-1::0;;;;;35754:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;35268:524:0:o;36918:94::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36986:12:::1;:18:::0;36918:94::o;23406:187::-;23525:7;23557:28;23577:7;23557:19;:28::i;:::-;23550:35;23406:187;-1:-1:-1;;23406:187:0:o;2808:103::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;2873:30:::1;2900:1;2873:18;:30::i;:::-;2808:103::o:0;23104:87::-;23143:13;23176:7;23169:14;;;;;:::i;37513:111::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;37579:37:::1;::::0;37587:10:::1;::::0;37579:37;::::1;;;::::0;37608:7;;37579:37:::1;::::0;;;37608:7;37587:10;37579:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;24316:420:::0;943:10;24419:4;24468:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24468:34:0;;;;;;;;;;24535:35;;;;24513:115;;;;-1:-1:-1;;;24513:115:0;;11373:2:1;24513:115:0;;;11355:21:1;11412:2;11392:18;;;11385:30;11451:32;11431:18;;;11424:60;11501:18;;24513:115:0;11171:354:1;24513:115:0;24639:67;943:10;24662:7;24671:34;24690:15;24671:16;:34;:::i;24639:67::-;-1:-1:-1;24724:4:0;;24316:420;-1:-1:-1;;;24316:420:0:o;24744:216::-;24866:4;24888:42;943:10;24912:9;24923:6;24888:9;:42::i;36546:86::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36610:8:::1;:14:::0;36546:86::o;33773:324::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33880:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;33858:131;;;::::0;-1:-1:-1;;;33858:131:0;;11732:2:1;33858:131:0::1;::::0;::::1;11714:21:1::0;11771:2;11751:18;;;11744:30;11810:34;11790:18;;;11783:62;-1:-1:-1;;;11861:18:1;;;11854:39;11910:19;;33858:131:0::1;11530:405:1::0;33858:131:0::1;-1:-1:-1::0;;;;;34000:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;34000:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34055:34;;1861:41:1;;;34055:34:0::1;::::0;1834:18:1;34055:34:0::1;;;;;;;33773:324:::0;;:::o;38029:183::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;38110:7:::1;38105:100;38127:6;:13;38123:1;:17;;;38105:100;;;38189:4;38162:13;:24;38176:6;38183:1;38176:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;38162:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;38162:24:0;:31;;-1:-1:-1;;38162:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38142:3;::::1;::::0;::::1;:::i;:::-;;;;38105:100;;35944:133:::0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36012:10:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36012:21:0;;::::1;;::::0;;36049:20:::1;::::0;::::1;::::0;::::1;::::0;36025:8;1886:14:1;1879:22;1861:41;;1849:2;1834:18;;1721:187;36049:20:0::1;;;;;;;;35944:133:::0;:::o;27676:74::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;27729:6:::1;:13:::0;;-1:-1:-1;;27729:13:0::1;27738:4;27729:13;::::0;;27676:74::o;37020:165::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37133:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;37133:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37020:165::o;36640:134::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36726:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;36726:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36640:134::o;35800:136::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;35869:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;35869:22:0;;::::1;;::::0;;35907:21:::1;::::0;::::1;::::0;::::1;::::0;35883:8;1886:14:1;1879:22;1861:41;;1849:2;1834:18;;1721:187;26569:543:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;26674:13:::1;::::0;26744:26:::1;::::0;;-1:-1:-1;;;26744:26:0;;;;-1:-1:-1;;;;;26674:13:0;;::::1;::::0;26617:35:::1;::::0;26674:13;;26744:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;26674:13;26744:26:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26726:56:0::1;;26791:4;26798:16;-1:-1:-1::0;;;;;26798:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26726:96;::::0;-1:-1:-1;;;;;;26726:96:0::1;::::0;;;;;;-1:-1:-1;;;;;11092:15:1;;;26726:96:0::1;::::0;::::1;11074:34:1::0;11144:15;;11124:18;;;11117:43;11009:18;;26726:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26835:15;:34:::0;;-1:-1:-1;;;;;26835:34:0;;::::1;-1:-1:-1::0;;;;;;26835:34:0;;::::1;::::0;::::1;::::0;;;26880:13:::1;:30:::0;;;;::::1;::::0;;;::::1;;::::0;;26701:121;;-1:-1:-1;26923:62:0::1;::::0;26940:4:::1;::::0;-1:-1:-1;;26923:8:0::1;:62::i;:::-;26996:56;27005:7;2203::::0;2230:6;-1:-1:-1;;;;;2230:6:0;;2157:87;27005:7:::1;27022:15;::::0;-1:-1:-1;;;;;27022:15:0::1;-1:-1:-1::0;;26996:8:0::1;:56::i;:::-;27065:37;27081:14;27097:4;27065:15;:37::i;36085:157::-:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;36161:18:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36161:29:0;;::::1;;::::0;;36206:28:::1;::::0;::::1;::::0;::::1;::::0;36182:8;1886:14:1;1879:22;1861:41;;1849:2;1834:18;;1721:187;34239:229:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;34381:15:::1;:34:::0;;-1:-1:-1;;;;;;34381:34:0::1;;-1:-1:-1::0;;;;;34381:34:0;;::::1;;;::::0;;34426:15:::1;:34:::0;;-1:-1:-1;;;;;;34426:34:0::1;::::0;;;::::1;;::::0;;34239:229::o;3066:201::-;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3155:22:0;::::1;3147:73;;;::::0;-1:-1:-1;;;3147:73:0;;12454:2:1;3147:73:0::1;::::0;::::1;12436:21:1::0;12493:2;12473:18;;;12466:30;12532:34;12512:18;;;12505:62;-1:-1:-1;;;12583:18:1;;;12576:36;12629:19;;3147:73:0::1;12252:402:1::0;3147:73:0::1;3231:28;3250:8;3231:18;:28::i;38220:186::-:0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;38303:7:::1;38298:101;38320:6;:13;38316:1;:17;;;38298:101;;;38382:5;38355:13;:24;38369:6;38376:1;38369:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;38355:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;38355:24:0;:32;;-1:-1:-1;;38355:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38335:3;::::1;::::0;::::1;:::i;:::-;;;;38298:101;;26301:76:::0;2203:7;2230:6;-1:-1:-1;;;;;2230:6:0;943:10;2377:23;2369:68;;;;-1:-1:-1;;;2369:68:0;;;;;;;:::i;:::-;26352:9:::1;:17:::0;;-1:-1:-1;;26352:17:0::1;::::0;;26301:76::o;35035:225::-;-1:-1:-1;;;;;35127:17:0;;;;;;:11;:17;;;;;;;;:26;;;;;;;35105:109;;;;-1:-1:-1;;;35105:109:0;;12861:2:1;35105:109:0;;;12843:21:1;12900:2;12880:18;;;12873:30;12939:34;12919:18;;;12912:62;-1:-1:-1;;;12990:18:1;;;12983:31;13031:19;;35105:109:0;12659:397:1;35105:109:0;-1:-1:-1;;;;;35225:17:0;;;;;;;;:11;:17;;;;;:25;;-1:-1:-1;;35225:25:0;;;;;;;;;;35035:225::o;30726:355::-;-1:-1:-1;;;;;30853:19:0;;30845:61;;;;-1:-1:-1;;;30845:61:0;;13263:2:1;30845:61:0;;;13245:21:1;13302:2;13282:18;;;13275:30;13341:31;13321:18;;;13314:59;13390:18;;30845:61:0;13061:353:1;30845:61:0;-1:-1:-1;;;;;30925:21:0;;30917:61;;;;-1:-1:-1;;;30917:61:0;;13621:2:1;30917:61:0;;;13603:21:1;13660:2;13640:18;;;13633:30;13699:29;13679:18;;;13672:57;13746:18;;30917:61:0;13419:351:1;30917:61:0;-1:-1:-1;;;;;30989:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31041:32;;2059:25:1;;;31041:32:0;;2032:18:1;31041:32:0;;;;;;;30726:355;;;:::o;27758:2347::-;27904:6;;;;;:44;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;27931:17:0;;;2230:6;;27931:17;27904:44;:85;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;27969:20:0;;;2230:6;;27969:20;27904:85;27882:143;;;;-1:-1:-1;;;27882:143:0;;13977:2:1;27882:143:0;;;13959:21:1;14016:1;13996:18;;;13989:29;-1:-1:-1;;;14034:18:1;;;14027:38;14082:18;;27882:143:0;13775:331:1;27882:143:0;-1:-1:-1;;;;;28047:21:0;;;;;;:13;:21;;;;;;;;28046:22;28038:56;;;;-1:-1:-1;;;28038:56:0;;14313:2:1;28038:56:0;;;14295:21:1;14352:2;14332:18;;;14325:30;-1:-1:-1;;;14371:18:1;;;14364:51;14432:18;;28038:56:0;14111:345:1;28038:56:0;-1:-1:-1;;;;;28114:24:0;;;;;;:13;:24;;;;;;;;28113:25;28105:62;;;;-1:-1:-1;;;28105:62:0;;14663:2:1;28105:62:0;;;14645:21:1;14702:2;14682:18;;;14675:30;14741:26;14721:18;;;14714:54;14785:18;;28105:62:0;14461:348:1;28105:62:0;28198:4;;-1:-1:-1;;;;;28188:14:0;;;28198:4;;28188:14;;28180:57;;;;-1:-1:-1;;;28180:57:0;;15016:2:1;28180:57:0;;;14998:21:1;15055:2;15035:18;;;15028:30;15094:32;15074:18;;;15067:60;15144:18;;28180:57:0;14814:354:1;28180:57:0;28269:4;;-1:-1:-1;;;;;28256:17:0;;;28269:4;;28256:17;;28248:58;;;;-1:-1:-1;;;28248:58:0;;15375:2:1;28248:58:0;;;15357:21:1;15414:2;15394:18;;;15387:30;15453;15433:18;;;15426:58;15501:18;;28248:58:0;15173:352:1;28248:58:0;28322:9;;;;;;;28319:823;;;2203:7;2230:6;-1:-1:-1;;;;;28352:17:0;;;2230:6;;28352:17;;;;:41;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;28373:20:0;;;2230:6;;28373:20;;28352:41;:62;;;;-1:-1:-1;28410:4:0;;-1:-1:-1;;;;;28397:17:0;;;28410:4;;28397:17;;28352:62;:83;;;;-1:-1:-1;28431:4:0;;-1:-1:-1;;;;;28418:17:0;;;28431:4;;28418:17;;28352:83;28349:780;;;28458:20;28510:3;28498:8;;28482:13;23378:12;;;23290:108;28482:13;:24;;;;:::i;:::-;28481:32;;;;:::i;:::-;28458:55;;28545:18;28599:3;28583:12;;28567:13;23378:12;;;23290:108;28567:13;:28;;;;:::i;:::-;28566:36;;;;:::i;:::-;28545:57;;28674:12;28664:6;:22;;:54;;;-1:-1:-1;;;;;;28690:28:0;;;;;;:20;:28;;;;;;;;28664:54;28656:84;;;;-1:-1:-1;;;28656:84:0;;16127:2:1;28656:84:0;;;16109:21:1;16166:2;16146:18;;;16139:30;-1:-1:-1;;;16185:18:1;;;16178:47;16242:18;;28656:84:0;15925:341:1;28656:84:0;2203:7;2230:6;-1:-1:-1;;;;;28787:17:0;;;2230:6;;28787:17;;;;:47;;-1:-1:-1;;;;;;28808:26:0;;28829:4;28808:26;;28787:47;:77;;;;-1:-1:-1;28859:4:0;;-1:-1:-1;;;;;28838:26:0;;;28859:4;;28838:26;;28787:77;:107;;;;-1:-1:-1;28881:13:0;;-1:-1:-1;;;;;28868:26:0;;;28881:13;;28868:26;;28787:107;28761:351;;;28937:22;28962:20;28972:9;28962;:20::i;:::-;-1:-1:-1;;;;;29013:35:0;;;;;;:24;:35;;;;;;28937:45;;-1:-1:-1;29013:35:0;;;:78;;-1:-1:-1;29080:10:0;29053:23;29070:6;29053:14;:23;:::i;:::-;:37;;29013:78;29005:87;;;;;;28914:198;28761:351;28437:692;;28349:780;29154:28;29185:24;29203:4;29185:9;:24::i;:::-;29325:18;;29374:11;;29154:55;;-1:-1:-1;29252:21:0;;29301:42;;;;;29374:11;;;;;:22;;;;;29389:7;29374:22;:35;;;;-1:-1:-1;29401:8:0;;;;29400:9;29374:35;:59;;;;-1:-1:-1;;;;;;29414:19:0;;;;;;:11;:19;;;;;;;;29413:20;29374:59;:97;;;;-1:-1:-1;29455:15:0;;-1:-1:-1;;;;;29437:34:0;;;29455:15;;29437:34;;29374:97;:118;;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;29475:17:0;;;2230:6;;29475:17;;29374:118;:142;;;;-1:-1:-1;2203:7:0;2230:6;-1:-1:-1;;;;;29496:20:0;;;2230:6;;29496:20;;29374:142;29356:475;;;29543:8;:15;;-1:-1:-1;;29543:15:0;29554:4;29543:15;;;29580:12;;29543:15;29580:12;29575:95;;29636:18;;29613:41;;29575:95;29684:57;29697:20;29719:21;29684:12;:57::i;:::-;29773:15;29758:12;:30;29803:8;:16;;-1:-1:-1;;29803:16:0;;;29356:475;29847:32;29861:6;29869:9;29847:13;:32::i;:::-;29843:197;;;29896:12;29936:3;29921:11;;29912:6;:20;;;;:::i;:::-;29911:28;;;;:::i;:::-;29896:43;-1:-1:-1;29954:14:0;29896:43;29954:14;;:::i;:::-;;;29983:45;30000:6;30016:4;30023;29983:16;:45::i;:::-;29881:159;29843:197;30052:43;30069:6;30077:9;30088:6;30052:16;:43::i;:::-;27871:2234;;;27758:2347;;;:::o;25458:148::-;25519:10;:43;;-1:-1:-1;;;;;;25519:43:0;-1:-1:-1;;;;;25519:43:0;;;;;25573:25;25519:43;25573:14;:25::i;32196:136::-;32290:10;;:34;;-1:-1:-1;;;32290:34:0;;-1:-1:-1;;;;;2285:32:1;;;32290:34:0;;;2267:51:1;32263:7:0;;32290:10;;:25;;2240:18:1;;32290:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3427:191::-;3501:16;3520:6;;-1:-1:-1;;;;;3537:17:0;;;-1:-1:-1;;;;;;3537:17:0;;;;;;3570:40;;3520:6;;;;;;;3570:40;;3501:16;3570:40;3490:128;3427:191;:::o;32493:1272::-;32580:1;32570:6;:11;32566:50;;32493:1272;;:::o;32566:50::-;32678:15;;32628:27;;32678:15;;;-1:-1:-1;;;;;32678:15:0;32670:38;32666:132;;32775:11;;32757:14;;32748:23;;:6;:23;:::i;:::-;32747:39;;;;:::i;:::-;32725:61;;32666:132;32810:26;32839:28;32848:19;32839:6;:28;:::i;:::-;32810:57;-1:-1:-1;32878:27:0;32908:22;32929:1;32810:57;32908:22;:::i;:::-;32878:52;-1:-1:-1;32941:26:0;32970:40;32878:52;32970:18;:40;:::i;:::-;32941:69;-1:-1:-1;33021:23:0;33047:41;33069:19;33047;:41;:::i;:::-;33021:67;-1:-1:-1;33125:21:0;33157:36;33021:67;33157:19;:36::i;:::-;33204:21;33270:6;33229:37;33253:13;33229:21;:37;:::i;:::-;33228:48;;;;:::i;:::-;33204:72;-1:-1:-1;33289:23:0;33355:15;33316:35;33332:19;33204:72;33316:35;:::i;:::-;33315:55;;;;:::i;:::-;33289:81;-1:-1:-1;33381:23:0;33407:31;33289:81;33407:13;:31;:::i;:::-;33381:57;-1:-1:-1;33455:19:0;;33451:102;;33499:15;;33491:50;;33499:15;;;;-1:-1:-1;;;;;33499:15:0;;33491:50;;;;;;;;;;;;33499:15;33491:50;;;;;;;;;;;;;;;;;;;;;33451:102;33565:49;33578:18;33598:15;33565:12;:49::i;:::-;33630:127;;;16662:25:1;;;16718:2;16703:18;;16696:34;;;16746:18;;;16739:34;;;33630:127:0;;16650:2:1;16635:18;33630:127:0;;;;;;;32555:1210;;;;;;;;;32493:1272;;:::o;27157:511::-;27324:13;;27236:4;;;;-1:-1:-1;;;;;27306:32:0;;;27324:13;;27306:32;;:71;;-1:-1:-1;27363:13:0;;-1:-1:-1;;;;;27342:35:0;;;27363:13;;27342:35;27306:71;27288:142;;;-1:-1:-1;27414:4:0;27288:142;-1:-1:-1;;;;;27446:27:0;;;;;;:19;:27;;;;;;;;;:61;;-1:-1:-1;;;;;;27477:30:0;;;;;;:19;:30;;;;;;;;27446:61;27442:109;;;-1:-1:-1;27534:5:0;27442:109;27567:8;;;;;:23;;-1:-1:-1;27580:10:0;;;;;;;27579:11;27567:23;27563:71;;;-1:-1:-1;27617:5:0;27563:71;27653:7;27157:511;-1:-1:-1;;;27157:511:0:o;30113:605::-;30261:4;;-1:-1:-1;;;;;30251:14:0;;;30261:4;;30251:14;;30243:57;;;;-1:-1:-1;;;30243:57:0;;15016:2:1;30243:57:0;;;14998:21:1;15055:2;15035:18;;;15028:30;15094:32;15074:18;;;15067:60;15144:18;;30243:57:0;14814:354:1;30243:57:0;30332:4;;-1:-1:-1;;;;;30319:17:0;;;30332:4;;30319:17;;30311:58;;;;-1:-1:-1;;;30311:58:0;;15375:2:1;30311:58:0;;;15357:21:1;15414:2;15394:18;;;15387:30;15453;15433:18;;;15426:58;15501:18;;30311:58:0;15173:352:1;30311:58:0;30390:21;30414:39;30446:6;30414:27;30434:6;30414:19;:27::i;:::-;:31;;:39::i;:::-;30390:63;;30464:23;30490:42;30525:6;30490:30;30510:9;30490:19;:30::i;:::-;:34;;:42::i;:::-;30464:68;;30545:48;30571:6;30579:13;30545:25;:48::i;:::-;30604:53;30630:9;30641:15;30604:25;:53::i;:::-;30692:9;-1:-1:-1;;;;;30675:35:0;30684:6;-1:-1:-1;;;;;30675:35:0;;30703:6;30675:35;;;;2059:25:1;;2047:2;2032:18;;1913:177;30675:35:0;;;;;;;;30232:486;;30113:605;;;:::o;25942:351::-;26010:13;;;;;;;26002:45;;;;-1:-1:-1;;;26002:45:0;;16986:2:1;26002:45:0;;;16968:21:1;17025:2;17005:18;;;16998:30;-1:-1:-1;;;17044:18:1;;;17037:49;17103:18;;26002:45:0;16784:343:1;26002:45:0;-1:-1:-1;;;;;26060:28:0;;;;;;;:19;:28;;;;;;;;:35;;26091:4;-1:-1:-1;;26060:35:0;;;;;;;;26106:20;:29;;;;;:36;;;;;;;;26153:24;:33;;;;;:40;;;;;;;;;26224:13;26206:45;;26060:28;;26224:13;-1:-1:-1;;26206:8:0;:45::i;:::-;-1:-1:-1;26264:13:0;:21;;-1:-1:-1;;26264:21:0;;;25942:351::o;31089:512::-;31177:16;;;31191:1;31177:16;;;;;;;;31153:21;;31177:16;;;;;;;;;;-1:-1:-1;31177:16:0;31153:40;;31232:4;31214;31219:1;31214:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31214:23:0;;;:7;;;;;;;;;;:23;;;;31258:15;;:22;;;-1:-1:-1;;;31258:22:0;;;;:15;;;;;:20;;:22;;;;;31214:7;;31258:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31248:4;31253:1;31248:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31248:32:0;;;:7;;;;;;;;;:32;31333:15;;31301:57;;31318:4;;31333:15;31351:6;31301:8;:57::i;:::-;31371:15;;:222;;-1:-1:-1;;;31371:222:0;;-1:-1:-1;;;;;31371:15:0;;;;:66;;:222;;31452:6;;31371:15;;31520:4;;31547;;31567:15;;31371:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31609:395;31714:15;;31682:57;;31699:4;;-1:-1:-1;;;;;31714:15:0;31732:6;31682:8;:57::i;:::-;31750:15;;31940;;31750:246;;-1:-1:-1;;;31750:246:0;;31819:4;31750:246;;;18458:34:1;18508:18;;;18501:34;;;31750:15:0;18551:18:1;;;18544:34;;;18594:18;;;18587:34;-1:-1:-1;;;;;31940:15:0;;;18637:19:1;;;18630:44;31970:15:0;18690:19:1;;;18683:35;31750:15:0;;;:31;;31789:6;;18392:19:1;;31750:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31609:395;;:::o;9942:98::-;10000:7;10027:5;10031:1;10027;:5;:::i;9561:98::-;9619:7;9646:5;9650:1;9646;:5;:::i;32344:141::-;32432:10;;:45;;-1:-1:-1;;;32432:45:0;;-1:-1:-1;;;;;8658:32:1;;;32432:45:0;;;8640:51:1;8707:18;;;8700:34;;;32432:10:0;;;;:27;;8613:18:1;;32432:45:0;8466:274:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:118::-;375:5;368:13;361:21;354:5;351:32;341:60;;397:1;394;387:12;412:382;477:6;485;538:2;526:9;517:7;513:23;509:32;506:52;;;554:1;551;544:12;506:52;593:9;580:23;612:31;637:5;612:31;:::i;:::-;662:5;-1:-1:-1;719:2:1;704:18;;691:32;732:30;691:32;732:30;:::i;:::-;781:7;771:17;;;412:382;;;;;:::o;799:597::-;911:4;940:2;969;958:9;951:21;1001:6;995:13;1044:6;1039:2;1028:9;1024:18;1017:34;1069:1;1079:140;1093:6;1090:1;1087:13;1079:140;;;1188:14;;;1184:23;;1178:30;1154:17;;;1173:2;1150:26;1143:66;1108:10;;1079:140;;;1237:6;1234:1;1231:13;1228:91;;;1307:1;1302:2;1293:6;1282:9;1278:22;1274:31;1267:42;1228:91;-1:-1:-1;1380:2:1;1359:15;-1:-1:-1;;1355:29:1;1340:45;;;;1387:2;1336:54;;799:597;-1:-1:-1;;;799:597:1:o;1401:315::-;1469:6;1477;1530:2;1518:9;1509:7;1505:23;1501:32;1498:52;;;1546:1;1543;1536:12;1498:52;1585:9;1572:23;1604:31;1629:5;1604:31;:::i;:::-;1654:5;1706:2;1691:18;;;;1678:32;;-1:-1:-1;;;1401:315:1:o;2329:456::-;2406:6;2414;2422;2475:2;2463:9;2454:7;2450:23;2446:32;2443:52;;;2491:1;2488;2481:12;2443:52;2530:9;2517:23;2549:31;2574:5;2549:31;:::i;:::-;2599:5;-1:-1:-1;2656:2:1;2641:18;;2628:32;2669:33;2628:32;2669:33;:::i;:::-;2329:456;;2721:7;;-1:-1:-1;;;2775:2:1;2760:18;;;;2747:32;;2329:456::o;2979:247::-;3038:6;3091:2;3079:9;3070:7;3066:23;3062:32;3059:52;;;3107:1;3104;3097:12;3059:52;3146:9;3133:23;3165:31;3190:5;3165:31;:::i;3439:316::-;3516:6;3524;3532;3585:2;3573:9;3564:7;3560:23;3556:32;3553:52;;;3601:1;3598;3591:12;3553:52;-1:-1:-1;;3624:23:1;;;3694:2;3679:18;;3666:32;;-1:-1:-1;3745:2:1;3730:18;;;3717:32;;3439:316;-1:-1:-1;3439:316:1:o;3760:444::-;3831:6;3839;3847;3900:2;3888:9;3879:7;3875:23;3871:32;3868:52;;;3916:1;3913;3906:12;3868:52;3955:9;3942:23;3974:28;3996:5;3974:28;:::i;:::-;4021:5;-1:-1:-1;4073:2:1;4058:18;;4045:32;;-1:-1:-1;4129:2:1;4114:18;;4101:32;4142:30;4101:32;4142:30;:::i;:::-;4191:7;4181:17;;;3760:444;;;;;:::o;4209:180::-;4268:6;4321:2;4309:9;4300:7;4296:23;4292:32;4289:52;;;4337:1;4334;4327:12;4289:52;-1:-1:-1;4360:23:1;;4209:180;-1:-1:-1;4209:180:1:o;4394:127::-;4455:10;4450:3;4446:20;4443:1;4436:31;4486:4;4483:1;4476:15;4510:4;4507:1;4500:15;4526:1121;4610:6;4641:2;4684;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4740:9;4727:23;4769:18;4810:2;4802:6;4799:14;4796:34;;;4826:1;4823;4816:12;4796:34;4864:6;4853:9;4849:22;4839:32;;4909:7;4902:4;4898:2;4894:13;4890:27;4880:55;;4931:1;4928;4921:12;4880:55;4967:2;4954:16;4989:2;4985;4982:10;4979:36;;;4995:18;;:::i;:::-;5041:2;5038:1;5034:10;5073:2;5067:9;5136:2;5132:7;5127:2;5123;5119:11;5115:25;5107:6;5103:38;5191:6;5179:10;5176:22;5171:2;5159:10;5156:18;5153:46;5150:72;;;5202:18;;:::i;:::-;5238:2;5231:22;5288:18;;;5322:15;;;;-1:-1:-1;5364:11:1;;;5360:20;;;5392:19;;;5389:39;;;5424:1;5421;5414:12;5389:39;5448:11;;;;5468:148;5484:6;5479:3;5476:15;5468:148;;;5550:23;5569:3;5550:23;:::i;:::-;5538:36;;5501:12;;;;5594;;;;5468:148;;;5635:6;4526:1121;-1:-1:-1;;;;;;;;4526:1121:1:o;5652:241::-;5708:6;5761:2;5749:9;5740:7;5736:23;5732:32;5729:52;;;5777:1;5774;5767:12;5729:52;5816:9;5803:23;5835:28;5857:5;5835:28;:::i;5898:388::-;5966:6;5974;6027:2;6015:9;6006:7;6002:23;5998:32;5995:52;;;6043:1;6040;6033:12;5995:52;6082:9;6069:23;6101:31;6126:5;6101:31;:::i;:::-;6151:5;-1:-1:-1;6208:2:1;6193:18;;6180:32;6221:33;6180:32;6221:33;:::i;6700:356::-;6902:2;6884:21;;;6921:18;;;6914:30;6980:34;6975:2;6960:18;;6953:62;7047:2;7032:18;;6700:356::o;7417:380::-;7496:1;7492:12;;;;7539;;;7560:61;;7614:4;7606:6;7602:17;7592:27;;7560:61;7667:2;7659:6;7656:14;7636:18;7633:38;7630:161;;;7713:10;7708:3;7704:20;7701:1;7694:31;7748:4;7745:1;7738:15;7776:4;7773:1;7766:15;7630:161;;7417:380;;;:::o;8204:127::-;8265:10;8260:3;8256:20;8253:1;8246:31;8296:4;8293:1;8286:15;8320:4;8317:1;8310:15;8336:125;8376:4;8404:1;8401;8398:8;8395:34;;;8409:18;;:::i;:::-;-1:-1:-1;8446:9:1;;8336:125::o;8745:245::-;8812:6;8865:2;8853:9;8844:7;8840:23;8836:32;8833:52;;;8881:1;8878;8871:12;8833:52;8913:9;8907:16;8932:28;8954:5;8932:28;:::i;8995:128::-;9035:3;9066:1;9062:6;9059:1;9056:13;9053:39;;;9072:18;;:::i;:::-;-1:-1:-1;9108:9:1;;8995:128::o;10606:251::-;10676:6;10729:2;10717:9;10708:7;10704:23;10700:32;10697:52;;;10745:1;10742;10735:12;10697:52;10777:9;10771:16;10796:31;10821:5;10796:31;:::i;11940:127::-;12001:10;11996:3;11992:20;11989:1;11982:31;12032:4;12029:1;12022:15;12056:4;12053:1;12046:15;12072:175;12109:3;12153:4;12146:5;12142:16;12182:4;12173:7;12170:17;12167:43;;;12190:18;;:::i;:::-;12239:1;12226:15;;12072:175;-1:-1:-1;;12072:175:1:o;15530:168::-;15570:7;15636:1;15632;15628:6;15624:14;15621:1;15618:21;15613:1;15606:9;15599:17;15595:45;15592:71;;;15643:18;;:::i;:::-;-1:-1:-1;15683:9:1;;15530:168::o;15703:217::-;15743:1;15769;15759:132;;15813:10;15808:3;15804:20;15801:1;15794:31;15848:4;15845:1;15838:15;15876:4;15873:1;15866:15;15759:132;-1:-1:-1;15905:9:1;;15703:217::o;16271:184::-;16341:6;16394:2;16382:9;16373:7;16369:23;16365:32;16362:52;;;16410:1;16407;16400:12;16362:52;-1:-1:-1;16433:16:1;;16271:184;-1:-1:-1;16271:184:1:o;17132:980::-;17394:4;17442:3;17431:9;17427:19;17473:6;17462:9;17455:25;17499:2;17537:6;17532:2;17521:9;17517:18;17510:34;17580:3;17575:2;17564:9;17560:18;17553:31;17604:6;17639;17633:13;17670:6;17662;17655:22;17708:3;17697:9;17693:19;17686:26;;17747:2;17739:6;17735:15;17721:29;;17768:1;17778:195;17792:6;17789:1;17786:13;17778:195;;;17857:13;;-1:-1:-1;;;;;17853:39:1;17841:52;;17948:15;;;;17913:12;;;;17889:1;17807:9;17778:195;;;-1:-1:-1;;;;;;;18029:32:1;;;;18024:2;18009:18;;18002:60;-1:-1:-1;;;18093:3:1;18078:19;18071:35;17990:3;17132:980;-1:-1:-1;;;17132:980:1:o;18729:306::-;18817:6;18825;18833;18886:2;18874:9;18865:7;18861:23;18857:32;18854:52;;;18902:1;18899;18892:12;18854:52;18931:9;18925:16;18915:26;;18981:2;18970:9;18966:18;18960:25;18950:35;;19025:2;19014:9;19010:18;19004:25;18994:35;;18729:306;;;;;:::o

Swarm Source

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