ETH Price: $3,287.77 (-0.75%)
Gas: 9 Gwei

Token

City of Gold (AZTEC)
 

Overview

Max Total Supply

1,000,000,000 AZTEC

Holders

83

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,151,715.499507547725756247 AZTEC

Value
$0.00
0x14ccbacec1f7dd883b8409517915e72f56f130d6
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:
CityOfGold

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
 *
 * The telegram community for this project is at: https://t.me/cityofgolderc20
 *
 * This project aims to be a DeFi primitive with utility built specifically for a bear and crab market
 * The project will be employing refined strategies from popular DeFi protocols such as Squeeth, Sphere, and others including 
 * technical strategies such as MEV and sandwich botting, sybil attacking, and others to generate revenue and 
 * create a token-value proposition that will greatly reward holders, even in a down market, through distribution of generated revenue.
 *
 * The Twitter account for this project is: @CityOfGoldERC20

 * The telegram community for this project is at: https://t.me/cityofgolderc20

 *
 * 
 * Let me be the first to welcome you to the City of Gold.
 */ 


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
pragma experimental ABIEncoderV2;

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

/* pragma solidity ^0.8.4*

/**
 * @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)

/* pragma solidity ^0.8.4*

/* 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.4; */

/**
 * @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/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.4; */

/* import "../IERC20.sol"; */

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

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

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

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

/* pragma solidity ^0.8.4; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

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

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

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

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

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

/* pragma solidity ^0.8.4; */

// 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.4; */
/* 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.4; */
/* 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;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity ^0.8.4; */
/* 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;
}


/* pragma solidity ^0.8.4; */

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("City of Gold", "AZTEC") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

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


        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 3;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 10;
        uint256 _sellDevFee = 2;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 10_000_000 * 1e18; // 1% from total supply maxTransactionAmountTxn
        maxWallet = 20_000_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 1% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x88c6264D75ec127462D04C678c4BF171A712a411); // set as marketing wallet
        devWallet = address(0x88c6264D75ec127462D04C678c4BF171A712a411); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = true;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

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

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

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

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600c81526020017f43697479206f6620476f6c6400000000000000000000000000000000000000008152506040518060400160405280600581526020017f415a54454300000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000a8a565b5080600490805190602001906200014792919062000a8a565b5050506200016a6200015e620005eb60201b60201c565b620005f360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000196816001620006b960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021457600080fd5b505afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f919062000b51565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b257600080fd5b505afa158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed919062000b51565b6040518363ffffffff1660e01b81526004016200030c92919062000bfe565b602060405180830381600087803b1580156200032757600080fd5b505af11580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000362919062000b51565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506000600290506000600390506000600290506000600290506000600a905060006002905060006b033b2e3c9fd0803ce800000090506a084595161401484a0000006008819055506a108b2a2c28029094000000600a81905550612710600a8262000403919062000d4f565b6200040f919062000d17565b6009819055508660158190555085601681905550846017819055506017546016546015546200043f919062000cba565b6200044b919062000cba565b6014819055508360198190555082601a8190555081601b81905550601b54601a546019546200047b919062000cba565b62000487919062000cba565b6018819055507388c6264d75ec127462d04c678c4bf171a712a411600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507388c6264d75ec127462d04c678c4bf171a712a411600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005596200054b620007a360201b60201c565b6001620007cd60201b60201c565b6200056c306001620007cd60201b60201c565b6200058161dead6001620007cd60201b60201c565b620005a362000595620007a360201b60201c565b6001620006b960201b60201c565b620005b6306001620006b960201b60201c565b620005cb61dead6001620006b960201b60201c565b620005dd33826200090760201b60201c565b505050505050505062000f29565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006c9620005eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ef620007a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000748576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073f9062000c48565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007dd620005eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000803620007a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200085c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008539062000c48565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008fb919062000c2b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200097a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009719062000c6a565b60405180910390fd5b6200098e6000838362000a8060201b60201c565b8060026000828254620009a2919062000cba565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009f9919062000cba565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a60919062000c8c565b60405180910390a362000a7c6000838362000a8560201b60201c565b5050565b505050565b505050565b82805462000a989062000dfa565b90600052602060002090601f01602090048101928262000abc576000855562000b08565b82601f1062000ad757805160ff191683800117855562000b08565b8280016001018555821562000b08579182015b8281111562000b0757825182559160200191906001019062000aea565b5b50905062000b17919062000b1b565b5090565b5b8082111562000b3657600081600090555060010162000b1c565b5090565b60008151905062000b4b8162000f0f565b92915050565b60006020828403121562000b6457600080fd5b600062000b748482850162000b3a565b91505092915050565b62000b888162000db0565b82525050565b62000b998162000dc4565b82525050565b600062000bae60208362000ca9565b915062000bbb8262000ebd565b602082019050919050565b600062000bd5601f8362000ca9565b915062000be28262000ee6565b602082019050919050565b62000bf88162000df0565b82525050565b600060408201905062000c15600083018562000b7d565b62000c24602083018462000b7d565b9392505050565b600060208201905062000c42600083018462000b8e565b92915050565b6000602082019050818103600083015262000c638162000b9f565b9050919050565b6000602082019050818103600083015262000c858162000bc6565b9050919050565b600060208201905062000ca3600083018462000bed565b92915050565b600082825260208201905092915050565b600062000cc78262000df0565b915062000cd48362000df0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d0c5762000d0b62000e30565b5b828201905092915050565b600062000d248262000df0565b915062000d318362000df0565b92508262000d445762000d4362000e5f565b5b828204905092915050565b600062000d5c8262000df0565b915062000d698362000df0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000da55762000da462000e30565b5b828202905092915050565b600062000dbd8262000dd0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e1357607f821691505b6020821081141562000e2a5762000e2962000e8e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000f1a8162000db0565b811462000f2657600080fd5b50565b60805160601c60a05160601c615c0c62000fb7600039600081816113ed01528181611bfc015281816127460152818161280c0152818161283901528181612e7d01528181613f81015281816140490152614076015260008181610f9001528181612e25015281816142380152818161434e015281816143750152818161441101526144380152615c0c6000f3fe6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190614d89565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190614678565b610f51565b60405161041c9190614d53565b60405180910390f35b34801561043157600080fd5b5061044c6004803603810190610447919061455f565b610f6f565b6040516104599190614d53565b60405180910390f35b34801561046e57600080fd5b50610477610f8e565b6040516104849190614d6e565b60405180910390f35b34801561049957600080fd5b506104a2610fb2565b6040516104af91906150cb565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da919061455f565b610fbc565b005b3480156104ed57600080fd5b506104f66110f8565b60405161050391906150cb565b60405180910390f35b34801561051857600080fd5b506105216110fe565b60405161052e91906150cb565b60405180910390f35b34801561054357600080fd5b5061054c611104565b60405161055991906150cb565b60405180910390f35b34801561056e57600080fd5b5061057761110a565b60405161058491906150cb565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906146dd565b611110565b005b3480156105c257600080fd5b506105dd60048036038101906105d891906145ed565b61121f565b6040516105ea9190614d53565b60405180910390f35b3480156105ff57600080fd5b50610608611317565b6040516106159190614cd7565b60405180910390f35b34801561062a57600080fd5b5061063361131d565b60405161064091906150cb565b60405180910390f35b34801561065557600080fd5b5061065e611323565b60405161066b9190614d53565b60405180910390f35b34801561068057600080fd5b50610689611336565b6040516106969190615177565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190614678565b61133f565b6040516106d39190614d53565b60405180910390f35b3480156106e857600080fd5b506106f16113eb565b6040516106fe9190614cd7565b60405180910390f35b34801561071357600080fd5b5061071c61140f565b6040516107299190614d53565b60405180910390f35b34801561073e57600080fd5b506107596004803603810190610754919061455f565b611422565b6040516107669190614d53565b60405180910390f35b34801561077b57600080fd5b50610784611478565b60405161079191906150cb565b60405180910390f35b3480156107a657600080fd5b506107af61147e565b6040516107bc9190614d53565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e7919061455f565b611491565b6040516107f991906150cb565b60405180910390f35b34801561080e57600080fd5b506108176114d9565b005b34801561082557600080fd5b50610840600480360381019061083b919061472f565b611561565b005b34801561084e57600080fd5b506108576116a1565b6040516108649190614d53565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061463c565b611741565b005b3480156108a257600080fd5b506108ab611818565b6040516108b89190614cd7565b60405180910390f35b3480156108cd57600080fd5b506108d661183e565b6040516108e391906150cb565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e919061477e565b611844565b005b34801561092157600080fd5b5061092a611942565b005b34801561093857600080fd5b506109416119fd565b60405161094e9190614cd7565b60405180910390f35b34801561096357600080fd5b5061096c611a27565b6040516109799190614cd7565b60405180910390f35b34801561098e57600080fd5b50610997611a4d565b6040516109a491906150cb565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf91906146b4565b611a53565b005b3480156109e257600080fd5b506109eb611aec565b6040516109f89190614d89565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a23919061463c565b611b7e565b005b348015610a3657600080fd5b50610a3f611c97565b604051610a4c91906150cb565b60405180910390f35b348015610a6157600080fd5b50610a6a611c9d565b604051610a7791906150cb565b60405180910390f35b348015610a8c57600080fd5b50610a95611ca3565b604051610aa291906150cb565b60405180910390f35b348015610ab757600080fd5b50610ac0611ca9565b604051610acd91906150cb565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190614678565b611caf565b604051610b0a9190614d53565b60405180910390f35b348015610b1f57600080fd5b50610b28611d9a565b604051610b3591906150cb565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190614678565b611da0565b604051610b729190614d53565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d919061455f565b611dbe565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc6919061455f565b611efa565b604051610bd89190614d53565b60405180910390f35b348015610bed57600080fd5b50610bf6611f1a565b604051610c039190614d53565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e919061463c565b611f2d565b005b348015610c4157600080fd5b50610c5c6004803603810190610c57919061477e565b612052565b005b348015610c6a57600080fd5b50610c856004803603810190610c8091906146dd565b612151565b005b348015610c9357600080fd5b50610c9c612260565b604051610ca99190614d53565b60405180910390f35b348015610cbe57600080fd5b50610cc7612273565b604051610cd491906150cb565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff91906146dd565b612279565b604051610d119190614d53565b60405180910390f35b348015610d2657600080fd5b50610d2f6123ce565b604051610d3c91906150cb565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d6791906145b1565b6123d4565b604051610d7991906150cb565b60405180910390f35b348015610d8e57600080fd5b50610d9761245b565b604051610da491906150cb565b60405180910390f35b348015610db957600080fd5b50610dc2612461565b604051610dcf9190614d53565b60405180910390f35b348015610de457600080fd5b50610ded612501565b604051610dfa91906150cb565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e25919061455f565b612507565b005b348015610e3857600080fd5b50610e416125ff565b604051610e4e91906150cb565b60405180910390f35b348015610e6357600080fd5b50610e6c612605565b604051610e7991906150cb565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea491906146dd565b61260b565b604051610eb69190614d53565b60405180910390f35b606060038054610ece906153c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906153c5565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b6000610f65610f5e6128f2565b84846128fa565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fc46128f2565b73ffffffffffffffffffffffffffffffffffffffff16610fe26119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90614fab565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6111186128f2565b73ffffffffffffffffffffffffffffffffffffffff166111366119fd565b73ffffffffffffffffffffffffffffffffffffffff161461118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390614fab565b60405180910390fd5b670de0b6b3a76400006103e860016111a2610fb2565b6111ac9190615279565b6111b69190615248565b6111c09190615248565b811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f9906150ab565b60405180910390fd5b670de0b6b3a7640000816112169190615279565b60088190555050565b600061122c848484612ac5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112776128f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614f8b565b60405180910390fd5b61130b856113036128f2565b8584036128fa565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113e161134c6128f2565b84846001600061135a6128f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113dc91906151f2565b6128fa565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e16128f2565b73ffffffffffffffffffffffffffffffffffffffff166114ff6119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90614fab565b60405180910390fd5b61155f600061385d565b565b6115696128f2565b73ffffffffffffffffffffffffffffffffffffffff166115876119fd565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614fab565b60405180910390fd5b610258831015611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614e2b565b60405180910390fd5b6103e88211158015611635575060008210155b611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b90614ecb565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116ab6128f2565b73ffffffffffffffffffffffffffffffffffffffff166116c96119fd565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690614fab565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506001905090565b6117496128f2565b73ffffffffffffffffffffffffffffffffffffffff166117676119fd565b73ffffffffffffffffffffffffffffffffffffffff16146117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490614fab565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61184c6128f2565b73ffffffffffffffffffffffffffffffffffffffff1661186a6119fd565b73ffffffffffffffffffffffffffffffffffffffff16146118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b790614fab565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118e891906151f2565b6118f291906151f2565b60148190555060148054111561193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614eeb565b60405180910390fd5b505050565b61194a6128f2565b73ffffffffffffffffffffffffffffffffffffffff166119686119fd565b73ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590614fab565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611a5b6128f2565b73ffffffffffffffffffffffffffffffffffffffff16611a796119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614fab565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611afb906153c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b27906153c5565b8015611b745780601f10611b4957610100808354040283529160200191611b74565b820191906000526020600020905b815481529060010190602001808311611b5757829003601f168201915b5050505050905090565b611b866128f2565b73ffffffffffffffffffffffffffffffffffffffff16611ba46119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190614fab565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614e6b565b60405180910390fd5b611c938282613923565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611cbe6128f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d729061508b565b60405180910390fd5b611d8f611d866128f2565b858584036128fa565b600191505092915050565b600e5481565b6000611db4611dad6128f2565b8484612ac5565b6001905092915050565b611dc66128f2565b73ffffffffffffffffffffffffffffffffffffffff16611de46119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614fab565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f356128f2565b73ffffffffffffffffffffffffffffffffffffffff16611f536119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614fab565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120469190614d53565b60405180910390a25050565b61205a6128f2565b73ffffffffffffffffffffffffffffffffffffffff166120786119fd565b73ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590614fab565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546120f691906151f2565b61210091906151f2565b6018819055506019601854111561214c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121439061506b565b60405180910390fd5b505050565b6121596128f2565b73ffffffffffffffffffffffffffffffffffffffff166121776119fd565b73ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c490614fab565b60405180910390fd5b670de0b6b3a76400006103e860056121e3610fb2565b6121ed9190615279565b6121f79190615248565b6122019190615248565b811015612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614e4b565b60405180910390fd5b670de0b6b3a7640000816122579190615279565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006122836128f2565b73ffffffffffffffffffffffffffffffffffffffff166122a16119fd565b73ffffffffffffffffffffffffffffffffffffffff16146122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90614fab565b60405180910390fd5b620186a06001612305610fb2565b61230f9190615279565b6123199190615248565b82101561235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614f0b565b60405180910390fd5b6103e86005612368610fb2565b6123729190615279565b61237c9190615248565b8211156123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590614f2b565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061246b6128f2565b73ffffffffffffffffffffffffffffffffffffffff166124896119fd565b73ffffffffffffffffffffffffffffffffffffffff16146124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614fab565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b61250f6128f2565b73ffffffffffffffffffffffffffffffffffffffff1661252d6119fd565b73ffffffffffffffffffffffffffffffffffffffff1614612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614fab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614deb565b60405180910390fd5b6125fc8161385d565b50565b601a5481565b600a5481565b60006126156128f2565b73ffffffffffffffffffffffffffffffffffffffff166126336119fd565b73ffffffffffffffffffffffffffffffffffffffff1614612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614fab565b60405180910390fd5b600f5460105461269991906151f2565b42116126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d19061500b565b60405180910390fd5b6103e882111561271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690614fcb565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016127819190614cd7565b60206040518083038186803b15801561279957600080fd5b505afa1580156127ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d19190614706565b905060006127fc6127106127ee86856139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000811115612835576128347f000000000000000000000000000000000000000000000000000000000000000061dead836139f0565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128a257600080fd5b505af11580156128b6573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129619061502b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614e0b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ab891906150cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c90614feb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90614dab565b60405180910390fd5b6000811415612bbf57612bba838360006139f0565b613858565b601160009054906101000a900460ff161561328257612bdc6119fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c4a5750612c1a6119fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c835750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd65750600560149054906101000a900460ff16155b1561328157601160019054906101000a900460ff16612dd057601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d905750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690614dcb565b60405180910390fd5b5b601360009054906101000a900460ff1615612f9857612ded6119fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ecc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f975743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4990614f6b565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303b5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e257600854811115613085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307c90614f4b565b60405180910390fd5b600a5461309183611491565b8261309c91906151f2565b11156130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061504b565b60405180910390fd5b613280565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131855750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d4576008548111156131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c690614eab565b60405180910390fd5b61327f565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327e57600a5461323183611491565b8261323c91906151f2565b111561327d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132749061504b565b60405180910390fd5b5b5b5b5b5b600061328d30611491565b9050600060095482101590508080156132b25750601160029054906101000a900460ff165b80156132cb5750600560149054906101000a900460ff16155b80156133215750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133775750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133cd5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613411576001600560146101000a81548160ff0219169083151502179055506133f5613c71565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134775750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561348f5750600c60009054906101000a900460ff165b80156134aa5750600d54600e546134a691906151f2565b4210155b80156135005750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561350f5761350d613f58565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c55750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135cf57600090505b6000811561384857602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363257506000601854115b156136ff5761365f6064613651601854886139c490919063ffffffff16565b6139da90919063ffffffff16565b9050601854601a54826136729190615279565b61367c9190615248565b601d600082825461368d91906151f2565b92505081905550601854601b54826136a59190615279565b6136af9190615248565b601e60008282546136c091906151f2565b92505081905550601854601954826136d89190615279565b6136e29190615248565b601c60008282546136f391906151f2565b92505081905550613824565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375a57506000601454115b15613823576137876064613779601454886139c490919063ffffffff16565b6139da90919063ffffffff16565b90506014546016548261379a9190615279565b6137a49190615248565b601d60008282546137b591906151f2565b92505081905550601454601754826137cd9190615279565b6137d79190615248565b601e60008282546137e891906151f2565b92505081905550601454601554826138009190615279565b61380a9190615248565b601c600082825461381b91906151f2565b925050819055505b5b6000811115613839576138388730836139f0565b5b808561384591906152d3565b94505b6138538787876139f0565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836139d29190615279565b905092915050565b600081836139e89190615248565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5790614feb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac790614dab565b60405180910390fd5b613adb83838361412d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5890614e8b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bf491906151f2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c5891906150cb565b60405180910390a3613c6b848484614132565b50505050565b6000613c7c30611491565b90506000601e54601c54601d54613c9391906151f2565b613c9d91906151f2565b9050600080831480613caf5750600082145b15613cbc57505050613f56565b6014600954613ccb9190615279565b831115613ce4576014600954613ce19190615279565b92505b6000600283601d5486613cf79190615279565b613d019190615248565b613d0b9190615248565b90506000613d22828661413790919063ffffffff16565b90506000479050613d328261414d565b6000613d47824761413790919063ffffffff16565b90506000613d7287613d64601c54856139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000613d9d88613d8f601e54866139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000818385613dae91906152d3565b613db891906152d3565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e1890614cc2565b60006040518083038185875af1925050503d8060008114613e55576040519150601f19603f3d011682016040523d82523d6000602084013e613e5a565b606091505b505080985050600087118015613e705750600081115b15613ebd57613e7f878261440b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613eb493929190615140565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f0390614cc2565b60006040518083038185875af1925050503d8060008114613f40576040519150601f19603f3d011682016040523d82523d6000602084013e613f45565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613fbc9190614cd7565b60206040518083038186803b158015613fd457600080fd5b505afa158015613fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061400c9190614706565b9050600061403961271061402b600b54856139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000811115614072576140717f000000000000000000000000000000000000000000000000000000000000000061dead836139f0565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140df57600080fd5b505af11580156140f3573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b6000818361414591906152d3565b905092915050565b6000600267ffffffffffffffff811115614190577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156141be5781602001602082028036833780820191505090505b50905030816000815181106141fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561429c57600080fd5b505afa1580156142b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d49190614588565b8160018151811061430e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614373307f0000000000000000000000000000000000000000000000000000000000000000846128fa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143d59594939291906150e6565b600060405180830381600087803b1580156143ef57600080fd5b505af1158015614403573d6000803e3d6000fd5b505050505050565b614436307f0000000000000000000000000000000000000000000000000000000000000000846128fa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161449d96959493929190614cf2565b6060604051808303818588803b1580156144b657600080fd5b505af11580156144ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144ef91906147cd565b5050505050565b60008135905061450581615b91565b92915050565b60008151905061451a81615b91565b92915050565b60008135905061452f81615ba8565b92915050565b60008135905061454481615bbf565b92915050565b60008151905061455981615bbf565b92915050565b60006020828403121561457157600080fd5b600061457f848285016144f6565b91505092915050565b60006020828403121561459a57600080fd5b60006145a88482850161450b565b91505092915050565b600080604083850312156145c457600080fd5b60006145d2858286016144f6565b92505060206145e3858286016144f6565b9150509250929050565b60008060006060848603121561460257600080fd5b6000614610868287016144f6565b9350506020614621868287016144f6565b925050604061463286828701614535565b9150509250925092565b6000806040838503121561464f57600080fd5b600061465d858286016144f6565b925050602061466e85828601614520565b9150509250929050565b6000806040838503121561468b57600080fd5b6000614699858286016144f6565b92505060206146aa85828601614535565b9150509250929050565b6000602082840312156146c657600080fd5b60006146d484828501614520565b91505092915050565b6000602082840312156146ef57600080fd5b60006146fd84828501614535565b91505092915050565b60006020828403121561471857600080fd5b60006147268482850161454a565b91505092915050565b60008060006060848603121561474457600080fd5b600061475286828701614535565b935050602061476386828701614535565b925050604061477486828701614520565b9150509250925092565b60008060006060848603121561479357600080fd5b60006147a186828701614535565b93505060206147b286828701614535565b92505060406147c386828701614535565b9150509250925092565b6000806000606084860312156147e257600080fd5b60006147f08682870161454a565b93505060206148018682870161454a565b92505060406148128682870161454a565b9150509250925092565b60006148288383614834565b60208301905092915050565b61483d81615307565b82525050565b61484c81615307565b82525050565b600061485d826151a2565b61486781856151c5565b935061487283615192565b8060005b838110156148a357815161488a888261481c565b9750614895836151b8565b925050600181019050614876565b5085935050505092915050565b6148b981615319565b82525050565b6148c88161535c565b82525050565b6148d781615380565b82525050565b60006148e8826151ad565b6148f281856151e1565b9350614902818560208601615392565b61490b81615484565b840191505092915050565b60006149236023836151e1565b915061492e82615495565b604082019050919050565b60006149466016836151e1565b9150614951826154e4565b602082019050919050565b60006149696026836151e1565b91506149748261550d565b604082019050919050565b600061498c6022836151e1565b91506149978261555c565b604082019050919050565b60006149af6033836151e1565b91506149ba826155ab565b604082019050919050565b60006149d26024836151e1565b91506149dd826155fa565b604082019050919050565b60006149f56039836151e1565b9150614a0082615649565b604082019050919050565b6000614a186026836151e1565b9150614a2382615698565b604082019050919050565b6000614a3b6036836151e1565b9150614a46826156e7565b604082019050919050565b6000614a5e6030836151e1565b9150614a6982615736565b604082019050919050565b6000614a81601d836151e1565b9150614a8c82615785565b602082019050919050565b6000614aa46035836151e1565b9150614aaf826157ae565b604082019050919050565b6000614ac76034836151e1565b9150614ad2826157fd565b604082019050919050565b6000614aea6035836151e1565b9150614af58261584c565b604082019050919050565b6000614b0d6049836151e1565b9150614b188261589b565b606082019050919050565b6000614b306028836151e1565b9150614b3b82615910565b604082019050919050565b6000614b536020836151e1565b9150614b5e8261595f565b602082019050919050565b6000614b76602a836151e1565b9150614b8182615988565b604082019050919050565b6000614b996025836151e1565b9150614ba4826159d7565b604082019050919050565b6000614bbc6020836151e1565b9150614bc782615a26565b602082019050919050565b6000614bdf6000836151d6565b9150614bea82615a4f565b600082019050919050565b6000614c026024836151e1565b9150614c0d82615a52565b604082019050919050565b6000614c256013836151e1565b9150614c3082615aa1565b602082019050919050565b6000614c48601d836151e1565b9150614c5382615aca565b602082019050919050565b6000614c6b6025836151e1565b9150614c7682615af3565b604082019050919050565b6000614c8e602f836151e1565b9150614c9982615b42565b604082019050919050565b614cad81615345565b82525050565b614cbc8161534f565b82525050565b6000614ccd82614bd2565b9150819050919050565b6000602082019050614cec6000830184614843565b92915050565b600060c082019050614d076000830189614843565b614d146020830188614ca4565b614d2160408301876148ce565b614d2e60608301866148ce565b614d3b6080830185614843565b614d4860a0830184614ca4565b979650505050505050565b6000602082019050614d6860008301846148b0565b92915050565b6000602082019050614d8360008301846148bf565b92915050565b60006020820190508181036000830152614da381846148dd565b905092915050565b60006020820190508181036000830152614dc481614916565b9050919050565b60006020820190508181036000830152614de481614939565b9050919050565b60006020820190508181036000830152614e048161495c565b9050919050565b60006020820190508181036000830152614e248161497f565b9050919050565b60006020820190508181036000830152614e44816149a2565b9050919050565b60006020820190508181036000830152614e64816149c5565b9050919050565b60006020820190508181036000830152614e84816149e8565b9050919050565b60006020820190508181036000830152614ea481614a0b565b9050919050565b60006020820190508181036000830152614ec481614a2e565b9050919050565b60006020820190508181036000830152614ee481614a51565b9050919050565b60006020820190508181036000830152614f0481614a74565b9050919050565b60006020820190508181036000830152614f2481614a97565b9050919050565b60006020820190508181036000830152614f4481614aba565b9050919050565b60006020820190508181036000830152614f6481614add565b9050919050565b60006020820190508181036000830152614f8481614b00565b9050919050565b60006020820190508181036000830152614fa481614b23565b9050919050565b60006020820190508181036000830152614fc481614b46565b9050919050565b60006020820190508181036000830152614fe481614b69565b9050919050565b6000602082019050818103600083015261500481614b8c565b9050919050565b6000602082019050818103600083015261502481614baf565b9050919050565b6000602082019050818103600083015261504481614bf5565b9050919050565b6000602082019050818103600083015261506481614c18565b9050919050565b6000602082019050818103600083015261508481614c3b565b9050919050565b600060208201905081810360008301526150a481614c5e565b9050919050565b600060208201905081810360008301526150c481614c81565b9050919050565b60006020820190506150e06000830184614ca4565b92915050565b600060a0820190506150fb6000830188614ca4565b61510860208301876148ce565b818103604083015261511a8186614852565b90506151296060830185614843565b6151366080830184614ca4565b9695505050505050565b60006060820190506151556000830186614ca4565b6151626020830185614ca4565b61516f6040830184614ca4565b949350505050565b600060208201905061518c6000830184614cb3565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006151fd82615345565b915061520883615345565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523d5761523c6153f7565b5b828201905092915050565b600061525382615345565b915061525e83615345565b92508261526e5761526d615426565b5b828204905092915050565b600061528482615345565b915061528f83615345565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152c8576152c76153f7565b5b828202905092915050565b60006152de82615345565b91506152e983615345565b9250828210156152fc576152fb6153f7565b5b828203905092915050565b600061531282615325565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153678261536e565b9050919050565b600061537982615325565b9050919050565b600061538b82615345565b9050919050565b60005b838110156153b0578082015181840152602081019050615395565b838111156153bf576000848401525b50505050565b600060028204905060018216806153dd57607f821691505b602082108114156153f1576153f0615455565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b615b9a81615307565b8114615ba557600080fd5b50565b615bb181615319565b8114615bbc57600080fd5b50565b615bc881615345565b8114615bd357600080fd5b5056fea26469706673582212208eb37f228d8681c778214ddd93137c6df015099f42b70a2d427cd231c274e2d964736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190614d89565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190614678565b610f51565b60405161041c9190614d53565b60405180910390f35b34801561043157600080fd5b5061044c6004803603810190610447919061455f565b610f6f565b6040516104599190614d53565b60405180910390f35b34801561046e57600080fd5b50610477610f8e565b6040516104849190614d6e565b60405180910390f35b34801561049957600080fd5b506104a2610fb2565b6040516104af91906150cb565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da919061455f565b610fbc565b005b3480156104ed57600080fd5b506104f66110f8565b60405161050391906150cb565b60405180910390f35b34801561051857600080fd5b506105216110fe565b60405161052e91906150cb565b60405180910390f35b34801561054357600080fd5b5061054c611104565b60405161055991906150cb565b60405180910390f35b34801561056e57600080fd5b5061057761110a565b60405161058491906150cb565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906146dd565b611110565b005b3480156105c257600080fd5b506105dd60048036038101906105d891906145ed565b61121f565b6040516105ea9190614d53565b60405180910390f35b3480156105ff57600080fd5b50610608611317565b6040516106159190614cd7565b60405180910390f35b34801561062a57600080fd5b5061063361131d565b60405161064091906150cb565b60405180910390f35b34801561065557600080fd5b5061065e611323565b60405161066b9190614d53565b60405180910390f35b34801561068057600080fd5b50610689611336565b6040516106969190615177565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190614678565b61133f565b6040516106d39190614d53565b60405180910390f35b3480156106e857600080fd5b506106f16113eb565b6040516106fe9190614cd7565b60405180910390f35b34801561071357600080fd5b5061071c61140f565b6040516107299190614d53565b60405180910390f35b34801561073e57600080fd5b506107596004803603810190610754919061455f565b611422565b6040516107669190614d53565b60405180910390f35b34801561077b57600080fd5b50610784611478565b60405161079191906150cb565b60405180910390f35b3480156107a657600080fd5b506107af61147e565b6040516107bc9190614d53565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e7919061455f565b611491565b6040516107f991906150cb565b60405180910390f35b34801561080e57600080fd5b506108176114d9565b005b34801561082557600080fd5b50610840600480360381019061083b919061472f565b611561565b005b34801561084e57600080fd5b506108576116a1565b6040516108649190614d53565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061463c565b611741565b005b3480156108a257600080fd5b506108ab611818565b6040516108b89190614cd7565b60405180910390f35b3480156108cd57600080fd5b506108d661183e565b6040516108e391906150cb565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e919061477e565b611844565b005b34801561092157600080fd5b5061092a611942565b005b34801561093857600080fd5b506109416119fd565b60405161094e9190614cd7565b60405180910390f35b34801561096357600080fd5b5061096c611a27565b6040516109799190614cd7565b60405180910390f35b34801561098e57600080fd5b50610997611a4d565b6040516109a491906150cb565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf91906146b4565b611a53565b005b3480156109e257600080fd5b506109eb611aec565b6040516109f89190614d89565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a23919061463c565b611b7e565b005b348015610a3657600080fd5b50610a3f611c97565b604051610a4c91906150cb565b60405180910390f35b348015610a6157600080fd5b50610a6a611c9d565b604051610a7791906150cb565b60405180910390f35b348015610a8c57600080fd5b50610a95611ca3565b604051610aa291906150cb565b60405180910390f35b348015610ab757600080fd5b50610ac0611ca9565b604051610acd91906150cb565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190614678565b611caf565b604051610b0a9190614d53565b60405180910390f35b348015610b1f57600080fd5b50610b28611d9a565b604051610b3591906150cb565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190614678565b611da0565b604051610b729190614d53565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d919061455f565b611dbe565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc6919061455f565b611efa565b604051610bd89190614d53565b60405180910390f35b348015610bed57600080fd5b50610bf6611f1a565b604051610c039190614d53565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e919061463c565b611f2d565b005b348015610c4157600080fd5b50610c5c6004803603810190610c57919061477e565b612052565b005b348015610c6a57600080fd5b50610c856004803603810190610c8091906146dd565b612151565b005b348015610c9357600080fd5b50610c9c612260565b604051610ca99190614d53565b60405180910390f35b348015610cbe57600080fd5b50610cc7612273565b604051610cd491906150cb565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff91906146dd565b612279565b604051610d119190614d53565b60405180910390f35b348015610d2657600080fd5b50610d2f6123ce565b604051610d3c91906150cb565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d6791906145b1565b6123d4565b604051610d7991906150cb565b60405180910390f35b348015610d8e57600080fd5b50610d9761245b565b604051610da491906150cb565b60405180910390f35b348015610db957600080fd5b50610dc2612461565b604051610dcf9190614d53565b60405180910390f35b348015610de457600080fd5b50610ded612501565b604051610dfa91906150cb565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e25919061455f565b612507565b005b348015610e3857600080fd5b50610e416125ff565b604051610e4e91906150cb565b60405180910390f35b348015610e6357600080fd5b50610e6c612605565b604051610e7991906150cb565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea491906146dd565b61260b565b604051610eb69190614d53565b60405180910390f35b606060038054610ece906153c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906153c5565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b6000610f65610f5e6128f2565b84846128fa565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fc46128f2565b73ffffffffffffffffffffffffffffffffffffffff16610fe26119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f90614fab565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6111186128f2565b73ffffffffffffffffffffffffffffffffffffffff166111366119fd565b73ffffffffffffffffffffffffffffffffffffffff161461118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390614fab565b60405180910390fd5b670de0b6b3a76400006103e860016111a2610fb2565b6111ac9190615279565b6111b69190615248565b6111c09190615248565b811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f9906150ab565b60405180910390fd5b670de0b6b3a7640000816112169190615279565b60088190555050565b600061122c848484612ac5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112776128f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614f8b565b60405180910390fd5b61130b856113036128f2565b8584036128fa565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113e161134c6128f2565b84846001600061135a6128f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113dc91906151f2565b6128fa565b6001905092915050565b7f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c14030481565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e16128f2565b73ffffffffffffffffffffffffffffffffffffffff166114ff6119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90614fab565b60405180910390fd5b61155f600061385d565b565b6115696128f2565b73ffffffffffffffffffffffffffffffffffffffff166115876119fd565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614fab565b60405180910390fd5b610258831015611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614e2b565b60405180910390fd5b6103e88211158015611635575060008210155b611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b90614ecb565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116ab6128f2565b73ffffffffffffffffffffffffffffffffffffffff166116c96119fd565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690614fab565b60405180910390fd5b6001601160006101000a81548160ff0219169083151502179055506001905090565b6117496128f2565b73ffffffffffffffffffffffffffffffffffffffff166117676119fd565b73ffffffffffffffffffffffffffffffffffffffff16146117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490614fab565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61184c6128f2565b73ffffffffffffffffffffffffffffffffffffffff1661186a6119fd565b73ffffffffffffffffffffffffffffffffffffffff16146118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b790614fab565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118e891906151f2565b6118f291906151f2565b60148190555060148054111561193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614eeb565b60405180910390fd5b505050565b61194a6128f2565b73ffffffffffffffffffffffffffffffffffffffff166119686119fd565b73ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590614fab565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611a5b6128f2565b73ffffffffffffffffffffffffffffffffffffffff16611a796119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614fab565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611afb906153c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b27906153c5565b8015611b745780601f10611b4957610100808354040283529160200191611b74565b820191906000526020600020905b815481529060010190602001808311611b5757829003601f168201915b5050505050905090565b611b866128f2565b73ffffffffffffffffffffffffffffffffffffffff16611ba46119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190614fab565b60405180910390fd5b7f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c14030473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090614e6b565b60405180910390fd5b611c938282613923565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611cbe6128f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d729061508b565b60405180910390fd5b611d8f611d866128f2565b858584036128fa565b600191505092915050565b600e5481565b6000611db4611dad6128f2565b8484612ac5565b6001905092915050565b611dc66128f2565b73ffffffffffffffffffffffffffffffffffffffff16611de46119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614fab565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f356128f2565b73ffffffffffffffffffffffffffffffffffffffff16611f536119fd565b73ffffffffffffffffffffffffffffffffffffffff1614611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614fab565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120469190614d53565b60405180910390a25050565b61205a6128f2565b73ffffffffffffffffffffffffffffffffffffffff166120786119fd565b73ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590614fab565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546120f691906151f2565b61210091906151f2565b6018819055506019601854111561214c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121439061506b565b60405180910390fd5b505050565b6121596128f2565b73ffffffffffffffffffffffffffffffffffffffff166121776119fd565b73ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c490614fab565b60405180910390fd5b670de0b6b3a76400006103e860056121e3610fb2565b6121ed9190615279565b6121f79190615248565b6122019190615248565b811015612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614e4b565b60405180910390fd5b670de0b6b3a7640000816122579190615279565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006122836128f2565b73ffffffffffffffffffffffffffffffffffffffff166122a16119fd565b73ffffffffffffffffffffffffffffffffffffffff16146122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90614fab565b60405180910390fd5b620186a06001612305610fb2565b61230f9190615279565b6123199190615248565b82101561235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614f0b565b60405180910390fd5b6103e86005612368610fb2565b6123729190615279565b61237c9190615248565b8211156123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590614f2b565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061246b6128f2565b73ffffffffffffffffffffffffffffffffffffffff166124896119fd565b73ffffffffffffffffffffffffffffffffffffffff16146124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614fab565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b61250f6128f2565b73ffffffffffffffffffffffffffffffffffffffff1661252d6119fd565b73ffffffffffffffffffffffffffffffffffffffff1614612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614fab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614deb565b60405180910390fd5b6125fc8161385d565b50565b601a5481565b600a5481565b60006126156128f2565b73ffffffffffffffffffffffffffffffffffffffff166126336119fd565b73ffffffffffffffffffffffffffffffffffffffff1614612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614fab565b60405180910390fd5b600f5460105461269991906151f2565b42116126da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d19061500b565b60405180910390fd5b6103e882111561271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690614fcb565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c1403046040518263ffffffff1660e01b81526004016127819190614cd7565b60206040518083038186803b15801561279957600080fd5b505afa1580156127ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d19190614706565b905060006127fc6127106127ee86856139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000811115612835576128347f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c14030461dead836139f0565b5b60007f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c14030490508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128a257600080fd5b505af11580156128b6573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129619061502b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614e0b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ab891906150cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c90614feb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90614dab565b60405180910390fd5b6000811415612bbf57612bba838360006139f0565b613858565b601160009054906101000a900460ff161561328257612bdc6119fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c4a5750612c1a6119fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c835750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd65750600560149054906101000a900460ff16155b1561328157601160019054906101000a900460ff16612dd057601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d905750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690614dcb565b60405180910390fd5b5b601360009054906101000a900460ff1615612f9857612ded6119fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ecc57507f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c14030473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f975743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4990614f6b565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303b5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e257600854811115613085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307c90614f4b565b60405180910390fd5b600a5461309183611491565b8261309c91906151f2565b11156130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061504b565b60405180910390fd5b613280565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131855750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d4576008548111156131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c690614eab565b60405180910390fd5b61327f565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661327e57600a5461323183611491565b8261323c91906151f2565b111561327d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132749061504b565b60405180910390fd5b5b5b5b5b5b600061328d30611491565b9050600060095482101590508080156132b25750601160029054906101000a900460ff165b80156132cb5750600560149054906101000a900460ff16155b80156133215750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133775750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133cd5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613411576001600560146101000a81548160ff0219169083151502179055506133f5613c71565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134775750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561348f5750600c60009054906101000a900460ff165b80156134aa5750600d54600e546134a691906151f2565b4210155b80156135005750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561350f5761350d613f58565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c55750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135cf57600090505b6000811561384857602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363257506000601854115b156136ff5761365f6064613651601854886139c490919063ffffffff16565b6139da90919063ffffffff16565b9050601854601a54826136729190615279565b61367c9190615248565b601d600082825461368d91906151f2565b92505081905550601854601b54826136a59190615279565b6136af9190615248565b601e60008282546136c091906151f2565b92505081905550601854601954826136d89190615279565b6136e29190615248565b601c60008282546136f391906151f2565b92505081905550613824565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375a57506000601454115b15613823576137876064613779601454886139c490919063ffffffff16565b6139da90919063ffffffff16565b90506014546016548261379a9190615279565b6137a49190615248565b601d60008282546137b591906151f2565b92505081905550601454601754826137cd9190615279565b6137d79190615248565b601e60008282546137e891906151f2565b92505081905550601454601554826138009190615279565b61380a9190615248565b601c600082825461381b91906151f2565b925050819055505b5b6000811115613839576138388730836139f0565b5b808561384591906152d3565b94505b6138538787876139f0565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836139d29190615279565b905092915050565b600081836139e89190615248565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5790614feb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac790614dab565b60405180910390fd5b613adb83838361412d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5890614e8b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bf491906151f2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c5891906150cb565b60405180910390a3613c6b848484614132565b50505050565b6000613c7c30611491565b90506000601e54601c54601d54613c9391906151f2565b613c9d91906151f2565b9050600080831480613caf5750600082145b15613cbc57505050613f56565b6014600954613ccb9190615279565b831115613ce4576014600954613ce19190615279565b92505b6000600283601d5486613cf79190615279565b613d019190615248565b613d0b9190615248565b90506000613d22828661413790919063ffffffff16565b90506000479050613d328261414d565b6000613d47824761413790919063ffffffff16565b90506000613d7287613d64601c54856139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000613d9d88613d8f601e54866139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000818385613dae91906152d3565b613db891906152d3565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e1890614cc2565b60006040518083038185875af1925050503d8060008114613e55576040519150601f19603f3d011682016040523d82523d6000602084013e613e5a565b606091505b505080985050600087118015613e705750600081115b15613ebd57613e7f878261440b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613eb493929190615140565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f0390614cc2565b60006040518083038185875af1925050503d8060008114613f40576040519150601f19603f3d011682016040523d82523d6000602084013e613f45565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c1403046040518263ffffffff1660e01b8152600401613fbc9190614cd7565b60206040518083038186803b158015613fd457600080fd5b505afa158015613fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061400c9190614706565b9050600061403961271061402b600b54856139c490919063ffffffff16565b6139da90919063ffffffff16565b90506000811115614072576140717f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c14030461dead836139f0565b5b60007f00000000000000000000000066d5ad679cfd356f5f4dd39a960caad27c14030490508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156140df57600080fd5b505af11580156140f3573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b6000818361414591906152d3565b905092915050565b6000600267ffffffffffffffff811115614190577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156141be5781602001602082028036833780820191505090505b50905030816000815181106141fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561429c57600080fd5b505afa1580156142b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d49190614588565b8160018151811061430e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614373307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128fa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143d59594939291906150e6565b600060405180830381600087803b1580156143ef57600080fd5b505af1158015614403573d6000803e3d6000fd5b505050505050565b614436307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128fa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161449d96959493929190614cf2565b6060604051808303818588803b1580156144b657600080fd5b505af11580156144ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144ef91906147cd565b5050505050565b60008135905061450581615b91565b92915050565b60008151905061451a81615b91565b92915050565b60008135905061452f81615ba8565b92915050565b60008135905061454481615bbf565b92915050565b60008151905061455981615bbf565b92915050565b60006020828403121561457157600080fd5b600061457f848285016144f6565b91505092915050565b60006020828403121561459a57600080fd5b60006145a88482850161450b565b91505092915050565b600080604083850312156145c457600080fd5b60006145d2858286016144f6565b92505060206145e3858286016144f6565b9150509250929050565b60008060006060848603121561460257600080fd5b6000614610868287016144f6565b9350506020614621868287016144f6565b925050604061463286828701614535565b9150509250925092565b6000806040838503121561464f57600080fd5b600061465d858286016144f6565b925050602061466e85828601614520565b9150509250929050565b6000806040838503121561468b57600080fd5b6000614699858286016144f6565b92505060206146aa85828601614535565b9150509250929050565b6000602082840312156146c657600080fd5b60006146d484828501614520565b91505092915050565b6000602082840312156146ef57600080fd5b60006146fd84828501614535565b91505092915050565b60006020828403121561471857600080fd5b60006147268482850161454a565b91505092915050565b60008060006060848603121561474457600080fd5b600061475286828701614535565b935050602061476386828701614535565b925050604061477486828701614520565b9150509250925092565b60008060006060848603121561479357600080fd5b60006147a186828701614535565b93505060206147b286828701614535565b92505060406147c386828701614535565b9150509250925092565b6000806000606084860312156147e257600080fd5b60006147f08682870161454a565b93505060206148018682870161454a565b92505060406148128682870161454a565b9150509250925092565b60006148288383614834565b60208301905092915050565b61483d81615307565b82525050565b61484c81615307565b82525050565b600061485d826151a2565b61486781856151c5565b935061487283615192565b8060005b838110156148a357815161488a888261481c565b9750614895836151b8565b925050600181019050614876565b5085935050505092915050565b6148b981615319565b82525050565b6148c88161535c565b82525050565b6148d781615380565b82525050565b60006148e8826151ad565b6148f281856151e1565b9350614902818560208601615392565b61490b81615484565b840191505092915050565b60006149236023836151e1565b915061492e82615495565b604082019050919050565b60006149466016836151e1565b9150614951826154e4565b602082019050919050565b60006149696026836151e1565b91506149748261550d565b604082019050919050565b600061498c6022836151e1565b91506149978261555c565b604082019050919050565b60006149af6033836151e1565b91506149ba826155ab565b604082019050919050565b60006149d26024836151e1565b91506149dd826155fa565b604082019050919050565b60006149f56039836151e1565b9150614a0082615649565b604082019050919050565b6000614a186026836151e1565b9150614a2382615698565b604082019050919050565b6000614a3b6036836151e1565b9150614a46826156e7565b604082019050919050565b6000614a5e6030836151e1565b9150614a6982615736565b604082019050919050565b6000614a81601d836151e1565b9150614a8c82615785565b602082019050919050565b6000614aa46035836151e1565b9150614aaf826157ae565b604082019050919050565b6000614ac76034836151e1565b9150614ad2826157fd565b604082019050919050565b6000614aea6035836151e1565b9150614af58261584c565b604082019050919050565b6000614b0d6049836151e1565b9150614b188261589b565b606082019050919050565b6000614b306028836151e1565b9150614b3b82615910565b604082019050919050565b6000614b536020836151e1565b9150614b5e8261595f565b602082019050919050565b6000614b76602a836151e1565b9150614b8182615988565b604082019050919050565b6000614b996025836151e1565b9150614ba4826159d7565b604082019050919050565b6000614bbc6020836151e1565b9150614bc782615a26565b602082019050919050565b6000614bdf6000836151d6565b9150614bea82615a4f565b600082019050919050565b6000614c026024836151e1565b9150614c0d82615a52565b604082019050919050565b6000614c256013836151e1565b9150614c3082615aa1565b602082019050919050565b6000614c48601d836151e1565b9150614c5382615aca565b602082019050919050565b6000614c6b6025836151e1565b9150614c7682615af3565b604082019050919050565b6000614c8e602f836151e1565b9150614c9982615b42565b604082019050919050565b614cad81615345565b82525050565b614cbc8161534f565b82525050565b6000614ccd82614bd2565b9150819050919050565b6000602082019050614cec6000830184614843565b92915050565b600060c082019050614d076000830189614843565b614d146020830188614ca4565b614d2160408301876148ce565b614d2e60608301866148ce565b614d3b6080830185614843565b614d4860a0830184614ca4565b979650505050505050565b6000602082019050614d6860008301846148b0565b92915050565b6000602082019050614d8360008301846148bf565b92915050565b60006020820190508181036000830152614da381846148dd565b905092915050565b60006020820190508181036000830152614dc481614916565b9050919050565b60006020820190508181036000830152614de481614939565b9050919050565b60006020820190508181036000830152614e048161495c565b9050919050565b60006020820190508181036000830152614e248161497f565b9050919050565b60006020820190508181036000830152614e44816149a2565b9050919050565b60006020820190508181036000830152614e64816149c5565b9050919050565b60006020820190508181036000830152614e84816149e8565b9050919050565b60006020820190508181036000830152614ea481614a0b565b9050919050565b60006020820190508181036000830152614ec481614a2e565b9050919050565b60006020820190508181036000830152614ee481614a51565b9050919050565b60006020820190508181036000830152614f0481614a74565b9050919050565b60006020820190508181036000830152614f2481614a97565b9050919050565b60006020820190508181036000830152614f4481614aba565b9050919050565b60006020820190508181036000830152614f6481614add565b9050919050565b60006020820190508181036000830152614f8481614b00565b9050919050565b60006020820190508181036000830152614fa481614b23565b9050919050565b60006020820190508181036000830152614fc481614b46565b9050919050565b60006020820190508181036000830152614fe481614b69565b9050919050565b6000602082019050818103600083015261500481614b8c565b9050919050565b6000602082019050818103600083015261502481614baf565b9050919050565b6000602082019050818103600083015261504481614bf5565b9050919050565b6000602082019050818103600083015261506481614c18565b9050919050565b6000602082019050818103600083015261508481614c3b565b9050919050565b600060208201905081810360008301526150a481614c5e565b9050919050565b600060208201905081810360008301526150c481614c81565b9050919050565b60006020820190506150e06000830184614ca4565b92915050565b600060a0820190506150fb6000830188614ca4565b61510860208301876148ce565b818103604083015261511a8186614852565b90506151296060830185614843565b6151366080830184614ca4565b9695505050505050565b60006060820190506151556000830186614ca4565b6151626020830185614ca4565b61516f6040830184614ca4565b949350505050565b600060208201905061518c6000830184614cb3565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006151fd82615345565b915061520883615345565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523d5761523c6153f7565b5b828201905092915050565b600061525382615345565b915061525e83615345565b92508261526e5761526d615426565b5b828204905092915050565b600061528482615345565b915061528f83615345565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152c8576152c76153f7565b5b828202905092915050565b60006152de82615345565b91506152e983615345565b9250828210156152fc576152fb6153f7565b5b828203905092915050565b600061531282615325565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153678261536e565b9050919050565b600061537982615325565b9050919050565b600061538b82615345565b9050919050565b60005b838110156153b0578082015181840152602081019050615395565b838111156153bf576000848401525b50505050565b600060028204905060018216806153dd57607f821691505b602082108114156153f1576153f0615455565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b615b9a81615307565b8114615ba557600080fd5b50565b615bb181615319565b8114615bbc57600080fd5b50565b615bc881615345565b8114615bd357600080fd5b5056fea26469706673582212208eb37f228d8681c778214ddd93137c6df015099f42b70a2d427cd231c274e2d964736f6c63430008040033

Deployed Bytecode Sourcemap

33498:19315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10326:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12493:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35129:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33578:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11446:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42141:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34143:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33958:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34913:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34873;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39455:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13144:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33681:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34053:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34014:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11288:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14045:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33636:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34241:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42306:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34728:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34321:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11617:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3561:103;;;;;;;;;;;;;:::i;:::-;;50395:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38564:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40002:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33773:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34621;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40373:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38357:155;;;;;;;;;;;;;:::i;:::-;;2910:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33810:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34763:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40265:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10545:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41394:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34695:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34197:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34953:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34839:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14763:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34105:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11957:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41902:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35350:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34281:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41204:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40784:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39738:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34539:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33843:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38950:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34587:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12195:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33885:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38745:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34658:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3819:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34801:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33925:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51754:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10326:100;10380:13;10413:5;10406:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10326:100;:::o;12493:169::-;12576:4;12593:39;12602:12;:10;:12::i;:::-;12616:7;12625:6;12593:8;:39::i;:::-;12650:4;12643:11;;12493:169;;;;:::o;35129:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;33578:51::-;;;:::o;11446:108::-;11507:7;11534:12;;11527:19;;11446:108;:::o;42141:157::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42248:9:::1;;;;;;;;;;;42220:38;;42237:9;42220:38;;;;;;;;;;;;42281:9;42269;;:21;;;;;;;;;;;;;;;;;;42141:157:::0;:::o;34143:47::-;;;;:::o;33958:36::-;;;;:::o;34913:33::-;;;;:::o;34873:::-;;;;:::o;39455:275::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39592:4:::1;39584;39579:1;39563:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39562:26;;;;:::i;:::-;39561:35;;;;:::i;:::-;39551:6;:45;;39529:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;39715:6;39705;:17;;;;:::i;:::-;39682:20;:40;;;;39455:275:::0;:::o;13144:492::-;13284:4;13301:36;13311:6;13319:9;13330:6;13301:9;:36::i;:::-;13350:24;13377:11;:19;13389:6;13377:19;;;;;;;;;;;;;;;:33;13397:12;:10;:12::i;:::-;13377:33;;;;;;;;;;;;;;;;13350:60;;13449:6;13429:16;:26;;13421:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13536:57;13545:6;13553:12;:10;:12::i;:::-;13586:6;13567:16;:25;13536:8;:57::i;:::-;13624:4;13617:11;;;13144:492;;;;;:::o;33681:53::-;33727:6;33681:53;:::o;34053:45::-;;;;:::o;34014:32::-;;;;;;;;;;;;;:::o;11288:93::-;11346:5;11371:2;11364:9;;11288:93;:::o;14045:215::-;14133:4;14150:80;14159:12;:10;:12::i;:::-;14173:7;14219:10;14182:11;:25;14194:12;:10;:12::i;:::-;14182:25;;;;;;;;;;;;;;;:34;14208:7;14182:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14150:8;:80::i;:::-;14248:4;14241:11;;14045:215;;;;:::o;33636:38::-;;;:::o;34241:33::-;;;;;;;;;;;;;:::o;42306:126::-;42372:4;42396:19;:28;42416:7;42396:28;;;;;;;;;;;;;;;;;;;;;;;;;42389:35;;42306:126;;;:::o;34728:28::-;;;;:::o;34321:31::-;;;;;;;;;;;;;:::o;11617:127::-;11691:7;11718:9;:18;11728:7;11718:18;;;;;;;;;;;;;;;;11711:25;;11617:127;;;:::o;3561:103::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3626:30:::1;3653:1;3626:18;:30::i;:::-;3561:103::o:0;50395:555::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50597:3:::1;50574:19;:26;;50552:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;50724:4;50712:8;:16;;:33;;;;;50744:1;50732:8;:13;;50712:33;50690:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;50850:19;50832:15;:37;;;;50899:8;50880:16;:27;;;;50934:8;50918:13;;:24;;;;;;;;;;;;;;;;;;50395:555:::0;;;:::o;38564:120::-;38616:4;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38650:4:::1;38633:14;;:21;;;;;;;;;;;;;;;;;;38672:4;38665:11;;38564:120:::0;:::o;40002:167::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40157:4:::1;40115:31;:39;40147:6;40115:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40002:167:::0;;:::o;33773:30::-;;;;;;;;;;;;;:::o;34621:::-;;;;:::o;40373:403::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40541:13:::1;40523:15;:31;;;;40583:13;40565:15;:31;;;;40619:7;40607:9;:19;;;;40688:9;;40670:15;;40652;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;40637:12;:60;;;;40732:2;40716:12:::0;::::1;:18;;40708:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40373:403:::0;;;:::o;38357:155::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38428:4:::1;38412:13;;:20;;;;;;;;;;;;;;;;;;38457:4;38443:11;;:18;;;;;;;;;;;;;;;;;;38489:15;38472:14;:32;;;;38357:155::o:0;2910:87::-;2956:7;2983:6;;;;;;;;;;;2976:13;;2910:87;:::o;33810:24::-;;;;;;;;;;;;;:::o;34763:31::-;;;;:::o;40265:100::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40350:7:::1;40336:11;;:21;;;;;;;;;;;;;;;;;;40265:100:::0;:::o;10545:104::-;10601:13;10634:7;10627:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10545:104;:::o;41394:304::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41538:13:::1;41530:21;;:4;:21;;;;41508:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;41649:41;41678:4;41684:5;41649:28;:41::i;:::-;41394:304:::0;;:::o;34695:24::-;;;;:::o;34197:35::-;;;;:::o;34953:27::-;;;;:::o;34839:25::-;;;;:::o;14763:413::-;14856:4;14873:24;14900:11;:25;14912:12;:10;:12::i;:::-;14900:25;;;;;;;;;;;;;;;:34;14926:7;14900:34;;;;;;;;;;;;;;;;14873:61;;14973:15;14953:16;:35;;14945:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15066:67;15075:12;:10;:12::i;:::-;15089:7;15117:15;15098:16;:34;15066:8;:67::i;:::-;15164:4;15157:11;;;14763:413;;;;:::o;34105:29::-;;;;:::o;11957:175::-;12043:4;12060:42;12070:12;:10;:12::i;:::-;12084:9;12095:6;12060:9;:42::i;:::-;12120:4;12113:11;;11957:175;;;;:::o;41902:231::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42062:15:::1;;;;;;;;;;;42019:59;;42042:18;42019:59;;;;;;;;;;;;42107:18;42089:15;;:36;;;;;;;;;;;;;;;;;;41902:231:::0;:::o;35350:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34281:33::-;;;;;;;;;;;;;:::o;41204:182::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41320:8:::1;41289:19;:28;41309:7;41289:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41360:7;41344:34;;;41369:8;41344:34;;;;;;:::i;:::-;;;;;;;;41204:182:::0;;:::o;40784:412::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40954:13:::1;40935:16;:32;;;;40997:13;40978:16;:32;;;;41034:7;41021:10;:20;;;;41106:10;;41087:16;;41068;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41052:13;:64;;;;41152:2;41135:13;;:19;;41127:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40784:412:::0;;;:::o;39738:256::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39878:4:::1;39870;39865:1;39849:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39848:26;;;;:::i;:::-;39847:35;;;;:::i;:::-;39837:6;:45;;39815:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39979:6;39969;:17;;;;:::i;:::-;39957:9;:29;;;;39738:256:::0;:::o;34539:39::-;;;;;;;;;;;;;:::o;33843:35::-;;;;:::o;38950:497::-;39058:4;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39137:6:::1;39132:1;39116:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39115:28;;;;:::i;:::-;39102:9;:41;;39080:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;39292:4;39287:1;39271:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39270:26;;;;:::i;:::-;39257:9;:39;;39235:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39408:9;39387:18;:30;;;;39435:4;39428:11;;38950:497:::0;;;:::o;34587:27::-;;;;:::o;12195:151::-;12284:7;12311:11;:18;12323:5;12311:18;;;;;;;;;;;;;;;:27;12330:7;12311:27;;;;;;;;;;;;;;;;12304:34;;12195:151;;;;:::o;33885:33::-;;;;:::o;38745:135::-;38805:4;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38845:5:::1;38822:20;;:28;;;;;;;;;;;;;;;;;;38868:4;38861:11;;38745:135:::0;:::o;34658:30::-;;;;:::o;3819:201::-;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3928:1:::1;3908:22;;:8;:22;;;;3900:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3984:28;4003:8;3984:18;:28::i;:::-;3819:201:::0;:::o;34801:31::-;;;;:::o;33925:24::-;;;;:::o;51754:1056::-;51865:4;3141:12;:10;:12::i;:::-;3130:23;;:7;:5;:7::i;:::-;:23;;;3122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51950:19:::1;;51927:20;;:42;;;;:::i;:::-;51909:15;:60;51887:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;52059:4;52048:7;:15;;52040:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;52144:15;52121:20;:38;;;;52214:28;52245:4;:14;;;52260:13;52245:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52214:60;;52324:20;52347:44;52385:5;52347:33;52372:7;52347:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;52324:67;;52511:1;52496:12;:16;52492:110;;;52529:61;52545:13;52568:6;52577:12;52529:15;:61::i;:::-;52492:110;52677:19;52714:13;52677:51;;52739:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52766:14;;;;;;;;;;52798:4;52791:11;;;;;51754:1056:::0;;;:::o;1586:98::-;1639:7;1666:10;1659:17;;1586:98;:::o;18447:380::-;18600:1;18583:19;;:5;:19;;;;18575:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18681:1;18662:21;;:7;:21;;;;18654:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18765:6;18735:11;:18;18747:5;18735:18;;;;;;;;;;;;;;;:27;18754:7;18735:27;;;;;;;;;;;;;;;:36;;;;18803:7;18787:32;;18796:5;18787:32;;;18812:6;18787:32;;;;;;:::i;:::-;;;;;;;;18447:380;;;:::o;42490:5011::-;42638:1;42622:18;;:4;:18;;;;42614:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42715:1;42701:16;;:2;:16;;;;42693:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42784:1;42774:6;:11;42770:93;;;42802:28;42818:4;42824:2;42828:1;42802:15;:28::i;:::-;42845:7;;42770:93;42879:14;;;;;;;;;;;42875:2487;;;42940:7;:5;:7::i;:::-;42932:15;;:4;:15;;;;:49;;;;;42974:7;:5;:7::i;:::-;42968:13;;:2;:13;;;;42932:49;:86;;;;;43016:1;43002:16;;:2;:16;;;;42932:86;:128;;;;;43053:6;43039:21;;:2;:21;;;;42932:128;:158;;;;;43082:8;;;;;;;;;;;43081:9;42932:158;42910:2441;;;43130:13;;;;;;;;;;;43125:223;;43202:19;:25;43222:4;43202:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43231:19;:23;43251:2;43231:23;;;;;;;;;;;;;;;;;;;;;;;;;43202:52;43168:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;43125:223;43504:20;;;;;;;;;;;43500:641;;;43585:7;:5;:7::i;:::-;43579:13;;:2;:13;;;;:72;;;;;43635:15;43621:30;;:2;:30;;;;43579:72;:129;;;;;43694:13;43680:28;;:2;:28;;;;43579:129;43549:573;;;43872:12;43797:28;:39;43826:9;43797:39;;;;;;;;;;;;;;;;:87;43759:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;44086:12;44044:28;:39;44073:9;44044:39;;;;;;;;;;;;;;;:54;;;;43549:573;43500:641;44215:25;:31;44241:4;44215:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44272:31;:35;44304:2;44272:35;;;;;;;;;;;;;;;;;;;;;;;;;44271:36;44215:92;44189:1147;;;44394:20;;44384:6;:30;;44350:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;44602:9;;44585:13;44595:2;44585:9;:13::i;:::-;44576:6;:22;;;;:::i;:::-;:35;;44542:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44189:1147;;;44780:25;:29;44806:2;44780:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44835:31;:37;44867:4;44835:37;;;;;;;;;;;;;;;;;;;;;;;;;44834:38;44780:92;44754:582;;;44959:20;;44949:6;:30;;44915:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44754:582;;;45116:31;:35;45148:2;45116:35;;;;;;;;;;;;;;;;;;;;;;;;;45111:225;;45236:9;;45219:13;45229:2;45219:9;:13::i;:::-;45210:6;:22;;;;:::i;:::-;:35;;45176:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45111:225;44754:582;44189:1147;42910:2441;42875:2487;45374:28;45405:24;45423:4;45405:9;:24::i;:::-;45374:55;;45442:12;45481:18;;45457:20;:42;;45442:57;;45530:7;:35;;;;;45554:11;;;;;;;;;;;45530:35;:61;;;;;45583:8;;;;;;;;;;;45582:9;45530:61;:110;;;;;45609:25;:31;45635:4;45609:31;;;;;;;;;;;;;;;;;;;;;;;;;45608:32;45530:110;:153;;;;;45658:19;:25;45678:4;45658:25;;;;;;;;;;;;;;;;;;;;;;;;;45657:26;45530:153;:194;;;;;45701:19;:23;45721:2;45701:23;;;;;;;;;;;;;;;;;;;;;;;;;45700:24;45530:194;45512:326;;;45762:4;45751:8;;:15;;;;;;;;;;;;;;;;;;45783:10;:8;:10::i;:::-;45821:5;45810:8;;:16;;;;;;;;;;;;;;;;;;45512:326;45869:8;;;;;;;;;;;45868:9;:55;;;;;45894:25;:29;45920:2;45894:29;;;;;;;;;;;;;;;;;;;;;;;;;45868:55;:85;;;;;45940:13;;;;;;;;;;;45868:85;:153;;;;;46006:15;;45989:14;;:32;;;;:::i;:::-;45970:15;:51;;45868:153;:196;;;;;46039:19;:25;46059:4;46039:25;;;;;;;;;;;;;;;;;;;;;;;;;46038:26;45868:196;45850:282;;;46091:29;:27;:29::i;:::-;;45850:282;46144:12;46160:8;;;;;;;;;;;46159:9;46144:24;;46270:19;:25;46290:4;46270:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46299:19;:23;46319:2;46299:23;;;;;;;;;;;;;;;;;;;;;;;;;46270:52;46266:100;;;46349:5;46339:15;;46266:100;46378:12;46483:7;46479:969;;;46535:25;:29;46561:2;46535:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;46584:1;46568:13;;:17;46535:50;46531:768;;;46613:34;46643:3;46613:25;46624:13;;46613:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46606:41;;46716:13;;46696:16;;46689:4;:23;;;;:::i;:::-;46688:41;;;;:::i;:::-;46666:18;;:63;;;;;;;:::i;:::-;;;;;;;;46786:13;;46772:10;;46765:4;:17;;;;:::i;:::-;46764:35;;;;:::i;:::-;46748:12;;:51;;;;;;;:::i;:::-;;;;;;;;46868:13;;46848:16;;46841:4;:23;;;;:::i;:::-;46840:41;;;;:::i;:::-;46818:18;;:63;;;;;;;:::i;:::-;;;;;;;;46531:768;;;46943:25;:31;46969:4;46943:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46993:1;46978:12;;:16;46943:51;46939:360;;;47022:33;47051:3;47022:24;47033:12;;47022:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;47015:40;;47123:12;;47104:15;;47097:4;:22;;;;:::i;:::-;47096:39;;;;:::i;:::-;47074:18;;:61;;;;;;;:::i;:::-;;;;;;;;47191:12;;47178:9;;47171:4;:16;;;;:::i;:::-;47170:33;;;;:::i;:::-;47154:12;;:49;;;;;;;:::i;:::-;;;;;;;;47271:12;;47252:15;;47245:4;:22;;;;:::i;:::-;47244:39;;;;:::i;:::-;47222:18;;:61;;;;;;;:::i;:::-;;;;;;;;46939:360;46531:768;47326:1;47319:4;:8;47315:91;;;47348:42;47364:4;47378;47385;47348:15;:42::i;:::-;47315:91;47432:4;47422:14;;;;;:::i;:::-;;;46479:969;47460:33;47476:4;47482:2;47486:6;47460:15;:33::i;:::-;42490:5011;;;;;;;;:::o;4180:191::-;4254:16;4273:6;;;;;;;;;;;4254:25;;4299:8;4290:6;;:17;;;;;;;;;;;;;;;;;;4354:8;4323:40;;4344:8;4323:40;;;;;;;;;;;;4180:191;;:::o;41706:188::-;41823:5;41789:25;:31;41815:4;41789:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41880:5;41846:40;;41874:4;41846:40;;;;;;;;;;;;41706:188;;:::o;23900:98::-;23958:7;23989:1;23985;:5;;;;:::i;:::-;23978:12;;23900:98;;;;:::o;24299:::-;24357:7;24388:1;24384;:5;;;;:::i;:::-;24377:12;;24299:98;;;;:::o;15666:733::-;15824:1;15806:20;;:6;:20;;;;15798:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15908:1;15887:23;;:9;:23;;;;15879:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15963:47;15984:6;15992:9;16003:6;15963:20;:47::i;:::-;16023:21;16047:9;:17;16057:6;16047:17;;;;;;;;;;;;;;;;16023:41;;16100:6;16083:13;:23;;16075:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16221:6;16205:13;:22;16185:9;:17;16195:6;16185:17;;;;;;;;;;;;;;;:42;;;;16273:6;16249:9;:20;16259:9;16249:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16314:9;16297:35;;16306:6;16297:35;;;16325:6;16297:35;;;;;;:::i;:::-;;;;;;;;16345:46;16365:6;16373:9;16384:6;16345:19;:46::i;:::-;15666:733;;;;:::o;48631:1756::-;48670:23;48696:24;48714:4;48696:9;:24::i;:::-;48670:50;;48731:25;48827:12;;48793:18;;48759;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;48731:108;;48850:12;48898:1;48879:15;:20;:46;;;;48924:1;48903:17;:22;48879:46;48875:85;;;48942:7;;;;;48875:85;49015:2;48994:18;;:23;;;;:::i;:::-;48976:15;:41;48972:115;;;49073:2;49052:18;;:23;;;;:::i;:::-;49034:41;;48972:115;49148:23;49261:1;49228:17;49193:18;;49175:15;:36;;;;:::i;:::-;49174:71;;;;:::i;:::-;:88;;;;:::i;:::-;49148:114;;49273:26;49302:36;49322:15;49302;:19;;:36;;;;:::i;:::-;49273:65;;49351:25;49379:21;49351:49;;49413:36;49430:18;49413:16;:36::i;:::-;49462:18;49483:44;49509:17;49483:21;:25;;:44;;;;:::i;:::-;49462:65;;49540:23;49566:81;49619:17;49566:34;49581:18;;49566:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;49540:107;;49658:17;49678:51;49711:17;49678:28;49693:12;;49678:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;49658:71;;49742:23;49799:9;49781:15;49768:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;49742:66;;49842:1;49821:18;:22;;;;49875:1;49854:18;:22;;;;49902:1;49887:12;:16;;;;49938:9;;;;;;;;;;;49930:23;;49961:9;49930:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49916:59;;;;;50010:1;49992:15;:19;:42;;;;;50033:1;50015:15;:19;49992:42;49988:278;;;50051:46;50064:15;50081;50051:12;:46::i;:::-;50117:137;50150:18;50187:15;50221:18;;50117:137;;;;;;;;:::i;:::-;;;;;;;;49988:278;50300:15;;;;;;;;;;;50292:29;;50343:21;50292:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50278:101;;;;;48631:1756;;;;;;;;;;;:::o;50958:788::-;51015:4;51049:15;51032:14;:32;;;;51119:28;51150:4;:14;;;51165:13;51150:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51119:60;;51229:20;51252:77;51313:5;51252:42;51277:16;;51252:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;51229:100;;51449:1;51434:12;:16;51430:110;;;51467:61;51483:13;51506:6;51515:12;51467:15;:61::i;:::-;51430:110;51615:19;51652:13;51615:51;;51677:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51704:12;;;;;;;;;;51734:4;51727:11;;;;;50958:788;:::o;19427:125::-;;;;:::o;20156:124::-;;;;:::o;23543:98::-;23601:7;23632:1;23628;:5;;;;:::i;:::-;23621:12;;23543:98;;;;:::o;47509:589::-;47635:21;47673:1;47659:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47635:40;;47704:4;47686;47691:1;47686:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;47730:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47720:4;47725:1;47720:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;47765:62;47782:4;47797:15;47815:11;47765:8;:62::i;:::-;47866:15;:66;;;47947:11;47973:1;48017:4;48044;48064:15;47866:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47509:589;;:::o;48106:517::-;48254:62;48271:4;48286:15;48304:11;48254:8;:62::i;:::-;48359:15;:31;;;48398:9;48431:4;48451:11;48477:1;48520;33727:6;48589:15;48359:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48106:517;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;2328:6;2336;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;2738:6;2746;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;3139:6;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;3404:6;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:284::-;3683:6;3732:2;3720:9;3711:7;3707:23;3703:32;3700:2;;;3748:1;3745;3738:12;3700:2;3791:1;3816:64;3872:7;3863:6;3852:9;3848:22;3816:64;:::i;:::-;3806:74;;3762:128;3690:207;;;;:::o;3903:546::-;3977:6;3985;3993;4042:2;4030:9;4021:7;4017:23;4013:32;4010:2;;;4058:1;4055;4048:12;4010:2;4101:1;4126:53;4171:7;4162:6;4151:9;4147:22;4126:53;:::i;:::-;4116:63;;4072:117;4228:2;4254:53;4299:7;4290:6;4279:9;4275:22;4254:53;:::i;:::-;4244:63;;4199:118;4356:2;4382:50;4424:7;4415:6;4404:9;4400:22;4382:50;:::i;:::-;4372:60;;4327:115;4000:449;;;;;:::o;4455:552::-;4532:6;4540;4548;4597:2;4585:9;4576:7;4572:23;4568:32;4565:2;;;4613:1;4610;4603:12;4565:2;4656:1;4681:53;4726:7;4717:6;4706:9;4702:22;4681:53;:::i;:::-;4671:63;;4627:117;4783:2;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4754:118;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;4555:452;;;;;:::o;5013:596::-;5101:6;5109;5117;5166:2;5154:9;5145:7;5141:23;5137:32;5134:2;;;5182:1;5179;5172:12;5134:2;5225:1;5250:64;5306:7;5297:6;5286:9;5282:22;5250:64;:::i;:::-;5240:74;;5196:128;5363:2;5389:64;5445:7;5436:6;5425:9;5421:22;5389:64;:::i;:::-;5379:74;;5334:129;5502:2;5528:64;5584:7;5575:6;5564:9;5560:22;5528:64;:::i;:::-;5518:74;;5473:129;5124:485;;;;;:::o;5615:179::-;5684:10;5705:46;5747:3;5739:6;5705:46;:::i;:::-;5783:4;5778:3;5774:14;5760:28;;5695:99;;;;:::o;5800:108::-;5877:24;5895:5;5877:24;:::i;:::-;5872:3;5865:37;5855:53;;:::o;5914:118::-;6001:24;6019:5;6001:24;:::i;:::-;5996:3;5989:37;5979:53;;:::o;6068:732::-;6187:3;6216:54;6264:5;6216:54;:::i;:::-;6286:86;6365:6;6360:3;6286:86;:::i;:::-;6279:93;;6396:56;6446:5;6396:56;:::i;:::-;6475:7;6506:1;6491:284;6516:6;6513:1;6510:13;6491:284;;;6592:6;6586:13;6619:63;6678:3;6663:13;6619:63;:::i;:::-;6612:70;;6705:60;6758:6;6705:60;:::i;:::-;6695:70;;6551:224;6538:1;6535;6531:9;6526:14;;6491:284;;;6495:14;6791:3;6784:10;;6192:608;;;;;;;:::o;6806:109::-;6887:21;6902:5;6887:21;:::i;:::-;6882:3;6875:34;6865:50;;:::o;6921:185::-;7035:64;7093:5;7035:64;:::i;:::-;7030:3;7023:77;7013:93;;:::o;7112:147::-;7207:45;7246:5;7207:45;:::i;:::-;7202:3;7195:58;7185:74;;:::o;7265:364::-;7353:3;7381:39;7414:5;7381:39;:::i;:::-;7436:71;7500:6;7495:3;7436:71;:::i;:::-;7429:78;;7516:52;7561:6;7556:3;7549:4;7542:5;7538:16;7516:52;:::i;:::-;7593:29;7615:6;7593:29;:::i;:::-;7588:3;7584:39;7577:46;;7357:272;;;;;:::o;7635:366::-;7777:3;7798:67;7862:2;7857:3;7798:67;:::i;:::-;7791:74;;7874:93;7963:3;7874:93;:::i;:::-;7992:2;7987:3;7983:12;7976:19;;7781:220;;;:::o;8007:366::-;8149:3;8170:67;8234:2;8229:3;8170:67;:::i;:::-;8163:74;;8246:93;8335:3;8246:93;:::i;:::-;8364:2;8359:3;8355:12;8348:19;;8153:220;;;:::o;8379:366::-;8521:3;8542:67;8606:2;8601:3;8542:67;:::i;:::-;8535:74;;8618:93;8707:3;8618:93;:::i;:::-;8736:2;8731:3;8727:12;8720:19;;8525:220;;;:::o;8751:366::-;8893:3;8914:67;8978:2;8973:3;8914:67;:::i;:::-;8907:74;;8990:93;9079:3;8990:93;:::i;:::-;9108:2;9103:3;9099:12;9092:19;;8897:220;;;:::o;9123:366::-;9265:3;9286:67;9350:2;9345:3;9286:67;:::i;:::-;9279:74;;9362:93;9451:3;9362:93;:::i;:::-;9480:2;9475:3;9471:12;9464:19;;9269:220;;;:::o;9495:366::-;9637:3;9658:67;9722:2;9717:3;9658:67;:::i;:::-;9651:74;;9734:93;9823:3;9734:93;:::i;:::-;9852:2;9847:3;9843:12;9836:19;;9641:220;;;:::o;9867:366::-;10009:3;10030:67;10094:2;10089:3;10030:67;:::i;:::-;10023:74;;10106:93;10195:3;10106:93;:::i;:::-;10224:2;10219:3;10215:12;10208:19;;10013:220;;;:::o;10239:366::-;10381:3;10402:67;10466:2;10461:3;10402:67;:::i;:::-;10395:74;;10478:93;10567:3;10478:93;:::i;:::-;10596:2;10591:3;10587:12;10580:19;;10385:220;;;:::o;10611:366::-;10753:3;10774:67;10838:2;10833:3;10774:67;:::i;:::-;10767:74;;10850:93;10939:3;10850:93;:::i;:::-;10968:2;10963:3;10959:12;10952:19;;10757:220;;;:::o;10983:366::-;11125:3;11146:67;11210:2;11205:3;11146:67;:::i;:::-;11139:74;;11222:93;11311:3;11222:93;:::i;:::-;11340:2;11335:3;11331:12;11324:19;;11129:220;;;:::o;11355:366::-;11497:3;11518:67;11582:2;11577:3;11518:67;:::i;:::-;11511:74;;11594:93;11683:3;11594:93;:::i;:::-;11712:2;11707:3;11703:12;11696:19;;11501:220;;;:::o;11727:366::-;11869:3;11890:67;11954:2;11949:3;11890:67;:::i;:::-;11883:74;;11966:93;12055:3;11966:93;:::i;:::-;12084:2;12079:3;12075:12;12068:19;;11873:220;;;:::o;12099:366::-;12241:3;12262:67;12326:2;12321:3;12262:67;:::i;:::-;12255:74;;12338:93;12427:3;12338:93;:::i;:::-;12456:2;12451:3;12447:12;12440:19;;12245:220;;;:::o;12471:366::-;12613:3;12634:67;12698:2;12693:3;12634:67;:::i;:::-;12627:74;;12710:93;12799:3;12710:93;:::i;:::-;12828:2;12823:3;12819:12;12812:19;;12617:220;;;:::o;12843:366::-;12985:3;13006:67;13070:2;13065:3;13006:67;:::i;:::-;12999:74;;13082:93;13171:3;13082:93;:::i;:::-;13200:2;13195:3;13191:12;13184:19;;12989:220;;;:::o;13215:366::-;13357:3;13378:67;13442:2;13437:3;13378:67;:::i;:::-;13371:74;;13454:93;13543:3;13454:93;:::i;:::-;13572:2;13567:3;13563:12;13556:19;;13361:220;;;:::o;13587:366::-;13729:3;13750:67;13814:2;13809:3;13750:67;:::i;:::-;13743:74;;13826:93;13915:3;13826:93;:::i;:::-;13944:2;13939:3;13935:12;13928:19;;13733:220;;;:::o;13959:366::-;14101:3;14122:67;14186:2;14181:3;14122:67;:::i;:::-;14115:74;;14198:93;14287:3;14198:93;:::i;:::-;14316:2;14311:3;14307:12;14300:19;;14105:220;;;:::o;14331:366::-;14473:3;14494:67;14558:2;14553:3;14494:67;:::i;:::-;14487:74;;14570:93;14659:3;14570:93;:::i;:::-;14688:2;14683:3;14679:12;14672:19;;14477:220;;;:::o;14703:366::-;14845:3;14866:67;14930:2;14925:3;14866:67;:::i;:::-;14859:74;;14942:93;15031:3;14942:93;:::i;:::-;15060:2;15055:3;15051:12;15044:19;;14849:220;;;:::o;15075:398::-;15234:3;15255:83;15336:1;15331:3;15255:83;:::i;:::-;15248:90;;15347:93;15436:3;15347:93;:::i;:::-;15465:1;15460:3;15456:11;15449:18;;15238:235;;;:::o;15479:366::-;15621:3;15642:67;15706:2;15701:3;15642:67;:::i;:::-;15635:74;;15718:93;15807:3;15718:93;:::i;:::-;15836:2;15831:3;15827:12;15820:19;;15625:220;;;:::o;15851:366::-;15993:3;16014:67;16078:2;16073:3;16014:67;:::i;:::-;16007:74;;16090:93;16179:3;16090:93;:::i;:::-;16208:2;16203:3;16199:12;16192:19;;15997:220;;;:::o;16223:366::-;16365:3;16386:67;16450:2;16445:3;16386:67;:::i;:::-;16379:74;;16462:93;16551:3;16462:93;:::i;:::-;16580:2;16575:3;16571:12;16564:19;;16369:220;;;:::o;16595:366::-;16737:3;16758:67;16822:2;16817:3;16758:67;:::i;:::-;16751:74;;16834:93;16923:3;16834:93;:::i;:::-;16952:2;16947:3;16943:12;16936:19;;16741:220;;;:::o;16967:366::-;17109:3;17130:67;17194:2;17189:3;17130:67;:::i;:::-;17123:74;;17206:93;17295:3;17206:93;:::i;:::-;17324:2;17319:3;17315:12;17308:19;;17113:220;;;:::o;17339:118::-;17426:24;17444:5;17426:24;:::i;:::-;17421:3;17414:37;17404:53;;:::o;17463:112::-;17546:22;17562:5;17546:22;:::i;:::-;17541:3;17534:35;17524:51;;:::o;17581:379::-;17765:3;17787:147;17930:3;17787:147;:::i;:::-;17780:154;;17951:3;17944:10;;17769:191;;;:::o;17966:222::-;18059:4;18097:2;18086:9;18082:18;18074:26;;18110:71;18178:1;18167:9;18163:17;18154:6;18110:71;:::i;:::-;18064:124;;;;:::o;18194:807::-;18443:4;18481:3;18470:9;18466:19;18458:27;;18495:71;18563:1;18552:9;18548:17;18539:6;18495:71;:::i;:::-;18576:72;18644:2;18633:9;18629:18;18620:6;18576:72;:::i;:::-;18658:80;18734:2;18723:9;18719:18;18710:6;18658:80;:::i;:::-;18748;18824:2;18813:9;18809:18;18800:6;18748:80;:::i;:::-;18838:73;18906:3;18895:9;18891:19;18882:6;18838:73;:::i;:::-;18921;18989:3;18978:9;18974:19;18965:6;18921:73;:::i;:::-;18448:553;;;;;;;;;:::o;19007:210::-;19094:4;19132:2;19121:9;19117:18;19109:26;;19145:65;19207:1;19196:9;19192:17;19183:6;19145:65;:::i;:::-;19099:118;;;;:::o;19223:276::-;19343:4;19381:2;19370:9;19366:18;19358:26;;19394:98;19489:1;19478:9;19474:17;19465:6;19394:98;:::i;:::-;19348:151;;;;:::o;19505:313::-;19618:4;19656:2;19645:9;19641:18;19633:26;;19705:9;19699:4;19695:20;19691:1;19680:9;19676:17;19669:47;19733:78;19806:4;19797:6;19733:78;:::i;:::-;19725:86;;19623:195;;;;:::o;19824:419::-;19990:4;20028:2;20017:9;20013:18;20005:26;;20077:9;20071:4;20067:20;20063:1;20052:9;20048:17;20041:47;20105:131;20231:4;20105:131;:::i;:::-;20097:139;;19995:248;;;:::o;20249:419::-;20415:4;20453:2;20442:9;20438:18;20430:26;;20502:9;20496:4;20492:20;20488:1;20477:9;20473:17;20466:47;20530:131;20656:4;20530:131;:::i;:::-;20522:139;;20420:248;;;:::o;20674:419::-;20840:4;20878:2;20867:9;20863:18;20855:26;;20927:9;20921:4;20917:20;20913:1;20902:9;20898:17;20891:47;20955:131;21081:4;20955:131;:::i;:::-;20947:139;;20845:248;;;:::o;21099:419::-;21265:4;21303:2;21292:9;21288:18;21280:26;;21352:9;21346:4;21342:20;21338:1;21327:9;21323:17;21316:47;21380:131;21506:4;21380:131;:::i;:::-;21372:139;;21270:248;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21695:248;;;:::o;21949:419::-;22115:4;22153:2;22142:9;22138:18;22130:26;;22202:9;22196:4;22192:20;22188:1;22177:9;22173:17;22166:47;22230:131;22356:4;22230:131;:::i;:::-;22222:139;;22120:248;;;:::o;22374:419::-;22540:4;22578:2;22567:9;22563:18;22555:26;;22627:9;22621:4;22617:20;22613:1;22602:9;22598:17;22591:47;22655:131;22781:4;22655:131;:::i;:::-;22647:139;;22545:248;;;:::o;22799:419::-;22965:4;23003:2;22992:9;22988:18;22980:26;;23052:9;23046:4;23042:20;23038:1;23027:9;23023:17;23016:47;23080:131;23206:4;23080:131;:::i;:::-;23072:139;;22970:248;;;:::o;23224:419::-;23390:4;23428:2;23417:9;23413:18;23405:26;;23477:9;23471:4;23467:20;23463:1;23452:9;23448:17;23441:47;23505:131;23631:4;23505:131;:::i;:::-;23497:139;;23395:248;;;:::o;23649:419::-;23815:4;23853:2;23842:9;23838:18;23830:26;;23902:9;23896:4;23892:20;23888:1;23877:9;23873:17;23866:47;23930:131;24056:4;23930:131;:::i;:::-;23922:139;;23820:248;;;:::o;24074:419::-;24240:4;24278:2;24267:9;24263:18;24255:26;;24327:9;24321:4;24317:20;24313:1;24302:9;24298:17;24291:47;24355:131;24481:4;24355:131;:::i;:::-;24347:139;;24245:248;;;:::o;24499:419::-;24665:4;24703:2;24692:9;24688:18;24680:26;;24752:9;24746:4;24742:20;24738:1;24727:9;24723:17;24716:47;24780:131;24906:4;24780:131;:::i;:::-;24772:139;;24670:248;;;:::o;24924:419::-;25090:4;25128:2;25117:9;25113:18;25105:26;;25177:9;25171:4;25167:20;25163:1;25152:9;25148:17;25141:47;25205:131;25331:4;25205:131;:::i;:::-;25197:139;;25095:248;;;:::o;25349:419::-;25515:4;25553:2;25542:9;25538:18;25530:26;;25602:9;25596:4;25592:20;25588:1;25577:9;25573:17;25566:47;25630:131;25756:4;25630:131;:::i;:::-;25622:139;;25520:248;;;:::o;25774:419::-;25940:4;25978:2;25967:9;25963:18;25955:26;;26027:9;26021:4;26017:20;26013:1;26002:9;25998:17;25991:47;26055:131;26181:4;26055:131;:::i;:::-;26047:139;;25945:248;;;:::o;26199:419::-;26365:4;26403:2;26392:9;26388:18;26380:26;;26452:9;26446:4;26442:20;26438:1;26427:9;26423:17;26416:47;26480:131;26606:4;26480:131;:::i;:::-;26472:139;;26370:248;;;:::o;26624:419::-;26790:4;26828:2;26817:9;26813:18;26805:26;;26877:9;26871:4;26867:20;26863:1;26852:9;26848:17;26841:47;26905:131;27031:4;26905:131;:::i;:::-;26897:139;;26795:248;;;:::o;27049:419::-;27215:4;27253:2;27242:9;27238:18;27230:26;;27302:9;27296:4;27292:20;27288:1;27277:9;27273:17;27266:47;27330:131;27456:4;27330:131;:::i;:::-;27322:139;;27220:248;;;:::o;27474:419::-;27640:4;27678:2;27667:9;27663:18;27655:26;;27727:9;27721:4;27717:20;27713:1;27702:9;27698:17;27691:47;27755:131;27881:4;27755:131;:::i;:::-;27747:139;;27645:248;;;:::o;27899:419::-;28065:4;28103:2;28092:9;28088:18;28080:26;;28152:9;28146:4;28142:20;28138:1;28127:9;28123:17;28116:47;28180:131;28306:4;28180:131;:::i;:::-;28172:139;;28070:248;;;:::o;28324:419::-;28490:4;28528:2;28517:9;28513:18;28505:26;;28577:9;28571:4;28567:20;28563:1;28552:9;28548:17;28541:47;28605:131;28731:4;28605:131;:::i;:::-;28597:139;;28495:248;;;:::o;28749:419::-;28915:4;28953:2;28942:9;28938:18;28930:26;;29002:9;28996:4;28992:20;28988:1;28977:9;28973:17;28966:47;29030:131;29156:4;29030:131;:::i;:::-;29022:139;;28920:248;;;:::o;29174:419::-;29340:4;29378:2;29367:9;29363:18;29355:26;;29427:9;29421:4;29417:20;29413:1;29402:9;29398:17;29391:47;29455:131;29581:4;29455:131;:::i;:::-;29447:139;;29345:248;;;:::o;29599:419::-;29765:4;29803:2;29792:9;29788:18;29780:26;;29852:9;29846:4;29842:20;29838:1;29827:9;29823:17;29816:47;29880:131;30006:4;29880:131;:::i;:::-;29872:139;;29770:248;;;:::o;30024:419::-;30190:4;30228:2;30217:9;30213:18;30205:26;;30277:9;30271:4;30267:20;30263:1;30252:9;30248:17;30241:47;30305:131;30431:4;30305:131;:::i;:::-;30297:139;;30195:248;;;:::o;30449:222::-;30542:4;30580:2;30569:9;30565:18;30557:26;;30593:71;30661:1;30650:9;30646:17;30637:6;30593:71;:::i;:::-;30547:124;;;;:::o;30677:831::-;30940:4;30978:3;30967:9;30963:19;30955:27;;30992:71;31060:1;31049:9;31045:17;31036:6;30992:71;:::i;:::-;31073:80;31149:2;31138:9;31134:18;31125:6;31073:80;:::i;:::-;31200:9;31194:4;31190:20;31185:2;31174:9;31170:18;31163:48;31228:108;31331:4;31322:6;31228:108;:::i;:::-;31220:116;;31346:72;31414:2;31403:9;31399:18;31390:6;31346:72;:::i;:::-;31428:73;31496:3;31485:9;31481:19;31472:6;31428:73;:::i;:::-;30945:563;;;;;;;;:::o;31514:442::-;31663:4;31701:2;31690:9;31686:18;31678:26;;31714:71;31782:1;31771:9;31767:17;31758:6;31714:71;:::i;:::-;31795:72;31863:2;31852:9;31848:18;31839:6;31795:72;:::i;:::-;31877;31945:2;31934:9;31930:18;31921:6;31877:72;:::i;:::-;31668:288;;;;;;:::o;31962:214::-;32051:4;32089:2;32078:9;32074:18;32066:26;;32102:67;32166:1;32155:9;32151:17;32142:6;32102:67;:::i;:::-;32056:120;;;;:::o;32182:132::-;32249:4;32272:3;32264:11;;32302:4;32297:3;32293:14;32285:22;;32254:60;;;:::o;32320:114::-;32387:6;32421:5;32415:12;32405:22;;32394:40;;;:::o;32440:99::-;32492:6;32526:5;32520:12;32510:22;;32499:40;;;:::o;32545:113::-;32615:4;32647;32642:3;32638:14;32630:22;;32620:38;;;:::o;32664:184::-;32763:11;32797:6;32792:3;32785:19;32837:4;32832:3;32828:14;32813:29;;32775:73;;;;:::o;32854:147::-;32955:11;32992:3;32977:18;;32967:34;;;;:::o;33007:169::-;33091:11;33125:6;33120:3;33113:19;33165:4;33160:3;33156:14;33141:29;;33103:73;;;;:::o;33182:305::-;33222:3;33241:20;33259:1;33241:20;:::i;:::-;33236:25;;33275:20;33293:1;33275:20;:::i;:::-;33270:25;;33429:1;33361:66;33357:74;33354:1;33351:81;33348:2;;;33435:18;;:::i;:::-;33348:2;33479:1;33476;33472:9;33465:16;;33226:261;;;;:::o;33493:185::-;33533:1;33550:20;33568:1;33550:20;:::i;:::-;33545:25;;33584:20;33602:1;33584:20;:::i;:::-;33579:25;;33623:1;33613:2;;33628:18;;:::i;:::-;33613:2;33670:1;33667;33663:9;33658:14;;33535:143;;;;:::o;33684:348::-;33724:7;33747:20;33765:1;33747:20;:::i;:::-;33742:25;;33781:20;33799:1;33781:20;:::i;:::-;33776:25;;33969:1;33901:66;33897:74;33894:1;33891:81;33886:1;33879:9;33872:17;33868:105;33865:2;;;33976:18;;:::i;:::-;33865:2;34024:1;34021;34017:9;34006:20;;33732:300;;;;:::o;34038:191::-;34078:4;34098:20;34116:1;34098:20;:::i;:::-;34093:25;;34132:20;34150:1;34132:20;:::i;:::-;34127:25;;34171:1;34168;34165:8;34162:2;;;34176:18;;:::i;:::-;34162:2;34221:1;34218;34214:9;34206:17;;34083:146;;;;:::o;34235:96::-;34272:7;34301:24;34319:5;34301:24;:::i;:::-;34290:35;;34280:51;;;:::o;34337:90::-;34371:7;34414:5;34407:13;34400:21;34389:32;;34379:48;;;:::o;34433:126::-;34470:7;34510:42;34503:5;34499:54;34488:65;;34478:81;;;:::o;34565:77::-;34602:7;34631:5;34620:16;;34610:32;;;:::o;34648:86::-;34683:7;34723:4;34716:5;34712:16;34701:27;;34691:43;;;:::o;34740:180::-;34817:9;34850:64;34908:5;34850:64;:::i;:::-;34837:77;;34827:93;;;:::o;34926:140::-;35003:9;35036:24;35054:5;35036:24;:::i;:::-;35023:37;;35013:53;;;:::o;35072:121::-;35130:9;35163:24;35181:5;35163:24;:::i;:::-;35150:37;;35140:53;;;:::o;35199:307::-;35267:1;35277:113;35291:6;35288:1;35285:13;35277:113;;;35376:1;35371:3;35367:11;35361:18;35357:1;35352:3;35348:11;35341:39;35313:2;35310:1;35306:10;35301:15;;35277:113;;;35408:6;35405:1;35402:13;35399:2;;;35488:1;35479:6;35474:3;35470:16;35463:27;35399:2;35248:258;;;;:::o;35512:320::-;35556:6;35593:1;35587:4;35583:12;35573:22;;35640:1;35634:4;35630:12;35661:18;35651:2;;35717:4;35709:6;35705:17;35695:27;;35651:2;35779;35771:6;35768:14;35748:18;35745:38;35742:2;;;35798:18;;:::i;:::-;35742:2;35563:269;;;;:::o;35838:180::-;35886:77;35883:1;35876:88;35983:4;35980:1;35973:15;36007:4;36004:1;35997:15;36024:180;36072:77;36069:1;36062:88;36169:4;36166:1;36159:15;36193:4;36190:1;36183:15;36210:180;36258:77;36255:1;36248:88;36355:4;36352:1;36345:15;36379:4;36376:1;36369:15;36396:102;36437:6;36488:2;36484:7;36479:2;36472:5;36468:14;36464:28;36454:38;;36444:54;;;:::o;36504:222::-;36644:34;36640:1;36632:6;36628:14;36621:58;36713:5;36708:2;36700:6;36696:15;36689:30;36610:116;:::o;36732:172::-;36872:24;36868:1;36860:6;36856:14;36849:48;36838:66;:::o;36910:225::-;37050:34;37046:1;37038:6;37034:14;37027:58;37119:8;37114:2;37106:6;37102:15;37095:33;37016:119;:::o;37141:221::-;37281:34;37277:1;37269:6;37265:14;37258:58;37350:4;37345:2;37337:6;37333:15;37326:29;37247:115;:::o;37368:238::-;37508:34;37504:1;37496:6;37492:14;37485:58;37577:21;37572:2;37564:6;37560:15;37553:46;37474:132;:::o;37612:223::-;37752:34;37748:1;37740:6;37736:14;37729:58;37821:6;37816:2;37808:6;37804:15;37797:31;37718:117;:::o;37841:244::-;37981:34;37977:1;37969:6;37965:14;37958:58;38050:27;38045:2;38037:6;38033:15;38026:52;37947:138;:::o;38091:225::-;38231:34;38227:1;38219:6;38215:14;38208:58;38300:8;38295:2;38287:6;38283:15;38276:33;38197:119;:::o;38322:241::-;38462:34;38458:1;38450:6;38446:14;38439:58;38531:24;38526:2;38518:6;38514:15;38507:49;38428:135;:::o;38569:235::-;38709:34;38705:1;38697:6;38693:14;38686:58;38778:18;38773:2;38765:6;38761:15;38754:43;38675:129;:::o;38810:179::-;38950:31;38946:1;38938:6;38934:14;38927:55;38916:73;:::o;38995:240::-;39135:34;39131:1;39123:6;39119:14;39112:58;39204:23;39199:2;39191:6;39187:15;39180:48;39101:134;:::o;39241:239::-;39381:34;39377:1;39369:6;39365:14;39358:58;39450:22;39445:2;39437:6;39433:15;39426:47;39347:133;:::o;39486:240::-;39626:34;39622:1;39614:6;39610:14;39603:58;39695:23;39690:2;39682:6;39678:15;39671:48;39592:134;:::o;39732:297::-;39872:34;39868:1;39860:6;39856:14;39849:58;39941:34;39936:2;39928:6;39924:15;39917:59;40010:11;40005:2;39997:6;39993:15;39986:36;39838:191;:::o;40035:227::-;40175:34;40171:1;40163:6;40159:14;40152:58;40244:10;40239:2;40231:6;40227:15;40220:35;40141:121;:::o;40268:182::-;40408:34;40404:1;40396:6;40392:14;40385:58;40374:76;:::o;40456:229::-;40596:34;40592:1;40584:6;40580:14;40573:58;40665:12;40660:2;40652:6;40648:15;40641:37;40562:123;:::o;40691:224::-;40831:34;40827:1;40819:6;40815:14;40808:58;40900:7;40895:2;40887:6;40883:15;40876:32;40797:118;:::o;40921:182::-;41061:34;41057:1;41049:6;41045:14;41038:58;41027:76;:::o;41109:114::-;41215:8;:::o;41229:223::-;41369:34;41365:1;41357:6;41353:14;41346:58;41438:6;41433:2;41425:6;41421:15;41414:31;41335:117;:::o;41458:169::-;41598:21;41594:1;41586:6;41582:14;41575:45;41564:63;:::o;41633:179::-;41773:31;41769:1;41761:6;41757:14;41750:55;41739:73;:::o;41818:224::-;41958:34;41954:1;41946:6;41942:14;41935:58;42027:7;42022:2;42014:6;42010:15;42003:32;41924:118;:::o;42048:234::-;42188:34;42184:1;42176:6;42172:14;42165:58;42257:17;42252:2;42244:6;42240:15;42233:42;42154:128;:::o;42288:122::-;42361:24;42379:5;42361:24;:::i;:::-;42354:5;42351:35;42341:2;;42400:1;42397;42390:12;42341:2;42331:79;:::o;42416:116::-;42486:21;42501:5;42486:21;:::i;:::-;42479:5;42476:32;42466:2;;42522:1;42519;42512:12;42466:2;42456:76;:::o;42538:122::-;42611:24;42629:5;42611:24;:::i;:::-;42604:5;42601:35;42591:2;;42650:1;42647;42640:12;42591:2;42581:79;:::o

Swarm Source

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