ETH Price: $3,212.57 (+1.57%)

Token

SHINJIRO (SHINJIRO)
 

Overview

Max Total Supply

1,000,000,000,000,000,000 SHINJIRO

Holders

1,625 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 SHINJIRO

Value
$0.00
0x18a249743d7d58e5b782316bfb9ffb7b36e319b9
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

SHINJIRO token contract has migrated to 0x1726b8d5dc3A93CC08Fa079477d4EBe782b25Bf7

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Shinjiro

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-01
*/

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


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

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

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

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

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

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

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

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

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isExchangeWallet;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10 ** 6 * 10 ** 9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "SHINJIRO";
    string private _symbol = "SHINJIRO";
    uint8 private _decimals = 9;
    bool private tradingOpen = false;
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public _maxBuyAmount = 1500000000000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 500000000000000 * 10**9;
    uint256 private _largeSellNumOfTokens = 1000000000000000 * 10**9;
    address public marketingWallet = 0x376fF9F2fee139F5e0cb44b53aD97e07ED3c12E3;
    address public devWallet = 0x811D5D85EEcda2B9B5Ca6856B7a6C641Eb2542F4;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Distribution {
        uint256 sharePercentage;
        uint256 marketingFeePercentage;
        uint256 devFeePercentage;
    }

    struct TaxFees {
        uint256 reflectionFee;
        uint256 liquidityFee;
        uint256 sellReflectionFee;
        uint256 sellLiquidityFee;
        uint256 superSellOffFee;
    }
    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        taxFees = TaxFees(2,4,1,2,10);
        distribution = Distribution(75, 40, 60);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, true);
    }

    function includeInFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, false);
    }

    function addExchange(address[] calldata addresses) public onlyOwner {
        addRemoveExchange(addresses, true);
    }

    function removeExchange(address[] calldata addresses) public onlyOwner {
        addRemoveExchange(addresses, false);
    }

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

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

    function setLargeSellNumOfTokens(uint256 largeSellNumOfTokens) external onlyOwner {
        _largeSellNumOfTokens = largeSellNumOfTokens * 10**9;
    }

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

    function setTaxFees(uint256 reflectionFee, uint256 liquidityFee, uint256 sellReflectionFee, uint256 sellLiquidityFee, uint256 superSellOffFee) external onlyOwner {
        taxFees.reflectionFee = reflectionFee;
        taxFees.liquidityFee = liquidityFee;
        taxFees.sellLiquidityFee = sellLiquidityFee;
        taxFees.sellReflectionFee = sellReflectionFee;
        taxFees.superSellOffFee = superSellOffFee;
    }

    function setDistribution(uint256 marketingFeePercentage, uint256 devFeePercentage, uint256 sharePercentage) external onlyOwner {
        require(marketingFeePercentage.add(devFeePercentage) == 100, "Fee percentage must equal 100");
        distribution.marketingFeePercentage = marketingFeePercentage;
        distribution.devFeePercentage = devFeePercentage;
        distribution.sharePercentage = sharePercentage;
    }

    function setNumTokensToSell(uint256 numTokensSellToAddToLiquidity_) external onlyOwner {
        numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity_ * 10**9;
    }

    function setWallets(address _marketingWallet, address _devWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

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

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

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

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

    function getContractTokenBalance() public view returns (uint256) {
        return balanceOf(address(this));
    }

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

    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        uint256 reflectionFee = 0;
        if(doTakeFees) {
            reflectionFee = taxFees.reflectionFee;
            if(isSellTxn) {
                reflectionFee = reflectionFee.add(taxFees.sellReflectionFee);
            }
        }
        return _amount.mul(reflectionFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 totalLiquidityFee = 0;
        if(doTakeFees) {
            totalLiquidityFee = taxFees.liquidityFee;
            if(isSellTxn) {
                totalLiquidityFee = totalLiquidityFee.add(taxFees.sellLiquidityFee);
                if(_amount >= _largeSellNumOfTokens) {
                    totalLiquidityFee = totalLiquidityFee.add(taxFees.superSellOffFee);
                }
            }
        }
        return _amount.mul(totalLiquidityFee).div(10**2);
    }

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

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

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

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

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && swapAndLiquifyEnabled) {
            //distribution shares is the percentage to be shared between marketing, charity, and dev wallets
            //remainder will be for the liquidity pool
            uint256 balanceToShareTokens = contractTokenBalance.mul(distribution.sharePercentage).div(100);
            uint256 liquidityPoolTokens = contractTokenBalance.sub(balanceToShareTokens);

            //just in case distribution Share Percentage is set to 100%, there will be no tokens to be swapped for liquidity pool
            if(liquidityPoolTokens > 0) {
                //add liquidity
                swapAndLiquify(liquidityPoolTokens);
            }
            //send eth to wallets (marketing, charity, dev)
            distributeShares(balanceToShareTokens);
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 balanceToShare = address(this).balance;
        uint256 marketingShare = balanceToShare.mul(distribution.marketingFeePercentage).div(100);
        uint256 devShare = balanceToShare.mul(distribution.devFeePercentage).div(100);
        payable(marketingWallet).transfer(marketingShare);
        payable(devWallet).transfer(devShare);

    }

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell) private {
        doTakeFees = takeFees;
        isSellTxn = isSell;
        _transferStandard(sender, recipient, amount);
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"sharePercentage","type":"uint256"},{"internalType":"uint256","name":"marketingFeePercentage","type":"uint256"},{"internalType":"uint256","name":"devFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFeePercentage","type":"uint256"},{"internalType":"uint256","name":"devFeePercentage","type":"uint256"},{"internalType":"uint256","name":"sharePercentage","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"largeSellNumOfTokens","type":"uint256"}],"name":"setLargeSellNumOfTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity_","type":"uint256"}],"name":"setNumTokensToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"superSellOffFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"superSellOffFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b033b2e3c9fd0803ce8000000600755600754600019620000269190620006f3565b6000196200003591906200075a565b6008556040518060400160405280600881526020017f5348494e4a49524f000000000000000000000000000000000000000000000000815250600a9080519060200190620000859291906200060a565b506040518060400160405280600881526020017f5348494e4a49524f000000000000000000000000000000000000000000000000815250600b9080519060200190620000d39291906200060a565b506009600c60006101000a81548160ff021916908360ff1602179055506000600c60016101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600c60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60156101000a81548160ff0219169083151502179055506a013da329b6336471800000600e556969e10de76676d0800000600f5569d3c21bcecceda100000060105573376ff9f2fee139f5e0cb44b53ad97e07ed3c12e3601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073811d5d85eecda2b9b5ca6856b7a6c641eb2542f4601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620002e257600080fd5b506000620002f5620005d960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060085460016000620003aa620005d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160056000620003fe620005e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600062000465620005d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060a0016040528060028152602001600481526020016001815260200160028152602001600a815250601460008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060600160405280604b815260200160288152602001603c81525060196000820151816000015560208201518160010155604082015181600201559050506200056a620005d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620005cb9190620007a6565b60405180910390a362000828565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200061890620007f2565b90600052602060002090601f0160209004810192826200063c576000855562000688565b82601f106200065757805160ff191683800117855562000688565b8280016001018555821562000688579182015b82811115620006875782518255916020019190600101906200066a565b5b5090506200069791906200069b565b5090565b5b80821115620006b65760008160009055506001016200069c565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200070082620006ba565b91506200070d83620006ba565b92508262000720576200071f620006c4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200076782620006ba565b91506200077483620006ba565b9250828210156200078a57620007896200072b565b5b828203905092915050565b620007a081620006ba565b82525050565b6000602082019050620007bd600083018462000795565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200080b57607f821691505b60208210811415620008225762000821620007c3565b5b50919050565b61571b80620008386000396000f3fe6080604052600436106102815760003560e01c8063715018a61161014f578063a9059cbb116100c1578063dc0aa9cf1161007a578063dc0aa9cf146109ad578063dcda6af3146109d6578063dd62ed3e146109ff578063e7dad4f914610a3c578063f2fde38b14610a79578063f34eb0b814610aa257610288565b8063a9059cbb146108b3578063ab0d8b85146108f0578063b6a9987214610919578063c49b9a8014610930578063d12a768814610959578063d3f6a1571461098457610288565b806385d4787b1161011357806385d4787b146107a35780638da5cb5b146107cc5780638ea5220f146107f757806395d89b41146108225780639b0e2e861461084d578063a457c2d71461087657610288565b8063715018a6146106e457806371b9189c146106fb57806375f0a874146107245780637ca2ea441461074f57806385141a771461077857610288565b8063313ce567116101f35780634a74bb02116101ac5780634a74bb02146105c05780635342acb4146105eb57806354ed2dc2146106285780635ee58efc146106515780636f3430521461067e57806370a08231146106a757610288565b8063313ce5671461049c578063317d9453146104c757806339509351146104f25780633bd5d1731461052f5780634549b0391461055857806349bd5a5e1461059557610288565b80630ddc0976116102455780630ddc09761461037257806313114a9d146103a15780631694505e146103cc57806318160ddd146103f757806323b872dd146104225780632d8381191461045f57610288565b8063024022f71461028d578063035ae135146102b65780630492f055146102df57806306fdde031461030a578063095ea7b31461033557610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613fec565b610acb565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190613fec565b610b70565b005b3480156102eb57600080fd5b506102f4610c15565b6040516103019190614052565b60405180910390f35b34801561031657600080fd5b5061031f610c1b565b60405161032c9190614106565b60405180910390f35b34801561034157600080fd5b5061035c600480360381019061035791906141b2565b610cad565b604051610369919061420d565b60405180910390f35b34801561037e57600080fd5b50610387610ccb565b604051610398959493929190614228565b60405180910390f35b3480156103ad57600080fd5b506103b6610cef565b6040516103c39190614052565b60405180910390f35b3480156103d857600080fd5b506103e1610cf9565b6040516103ee91906142da565b60405180910390f35b34801561040357600080fd5b5061040c610d1f565b6040516104199190614052565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906142f5565b610d29565b604051610456919061420d565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190614348565b610e02565b6040516104939190614052565b60405180910390f35b3480156104a857600080fd5b506104b1610e70565b6040516104be9190614391565b60405180910390f35b3480156104d357600080fd5b506104dc610e87565b6040516104e99190614052565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906141b2565b610e97565b604051610526919061420d565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190614348565b610f4a565b005b34801561056457600080fd5b5061057f600480360381019061057a91906143d8565b611038565b60405161058c9190614052565b60405180910390f35b3480156105a157600080fd5b506105aa6110bc565b6040516105b79190614427565b60405180910390f35b3480156105cc57600080fd5b506105d56110e2565b6040516105e2919061420d565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614442565b6110f5565b60405161061f919061420d565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190614348565b61114b565b005b34801561065d57600080fd5b506106666111f9565b6040516106759392919061446f565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a091906144a6565b611211565b005b3480156106b357600080fd5b506106ce60048036038101906106c99190614442565b61131e565b6040516106db9190614052565b60405180910390f35b3480156106f057600080fd5b506106f961136f565b005b34801561070757600080fd5b50610722600480360381019061071d9190613fec565b6114c2565b005b34801561073057600080fd5b50610739611567565b6040516107469190614427565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190614348565b61158d565b005b34801561078457600080fd5b5061078d61163b565b60405161079a9190614427565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190614637565b611661565b005b3480156107d857600080fd5b506107e1611704565b6040516107ee9190614427565b60405180910390f35b34801561080357600080fd5b5061080c61172d565b6040516108199190614427565b60405180910390f35b34801561082e57600080fd5b50610837611753565b6040516108449190614106565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190614637565b6117e5565b005b34801561088257600080fd5b5061089d600480360381019061089891906141b2565b611888565b6040516108aa919061420d565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d591906141b2565b611955565b6040516108e7919061420d565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190613fec565b611973565b005b34801561092557600080fd5b5061092e611a18565b005b34801561093c57600080fd5b5061095760048036038101906109529190614680565b611d1e565b005b34801561096557600080fd5b5061096e611e07565b60405161097b9190614052565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a691906146ad565b611e0d565b005b3480156109b957600080fd5b506109d460048036038101906109cf91906146ed565b611f28565b005b3480156109e257600080fd5b506109fd60048036038101906109f891906147be565b611ff6565b005b348015610a0b57600080fd5b50610a266004803603810190610a2191906146ad565b61215e565b604051610a339190614052565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614442565b6121e5565b604051610a70919061420d565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190614442565b61223b565b005b348015610aae57600080fd5b50610ac96004803603810190610ac49190614348565b6123fd565b005b610ad36124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b579061488b565b60405180910390fd5b610b6c828260006124b3565b5050565b610b786124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc9061488b565b60405180910390fd5b610c118282600161255e565b5050565b600e5481565b6060600a8054610c2a906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054610c56906148da565b8015610ca35780601f10610c7857610100808354040283529160200191610ca3565b820191906000526020600020905b815481529060010190602001808311610c8657829003601f168201915b5050505050905090565b6000610cc1610cba6124ab565b8484612609565b6001905092915050565b60148060000154908060010154908060020154908060030154908060040154905085565b6000600954905090565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6000610d368484846127d4565b610df784610d426124ab565b610df28560405180606001604052806028815260200161569960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610da86124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130369092919063ffffffff16565b612609565b600190509392505050565b6000600854821115610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061497e565b60405180910390fd5b6000610e5361309a565b9050610e6881846130c590919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610e923061131e565b905090565b6000610f40610ea46124ab565b84610f3b8560036000610eb56124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310f90919063ffffffff16565b612609565b6001905092915050565b6000610f546124ab565b90506000610f618361316d565b50505050509050610fba81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611012816008546131c990919063ffffffff16565b60088190555061102d8360095461310f90919063ffffffff16565b600981905550505050565b600060075483111561107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906149ea565b60405180910390fd5b8161109f57600061108f8461316d565b50505050509050809150506110b6565b60006110aa8461316d565b50505050915050809150505b92915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111536124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061488b565b60405180910390fd5b633b9aca00816111f09190614a39565b60108190555050565b60198060000154908060010154908060020154905083565b6112196124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061488b565b60405180910390fd5b60646112bb838561310f90919063ffffffff16565b146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614adf565b60405180910390fd5b826019600101819055508160196002018190555080601960000181905550505050565b6000611368600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e02565b9050919050565b6113776124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb9061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114ca6124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9061488b565b60405180910390fd5b611563828260016124b3565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115956124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061488b565b60405180910390fd5b633b9aca00816116329190614a39565b600f8190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116696124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed9061488b565b60405180910390fd5b611701816001613213565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b8054611762906148da565b80601f016020809104026020016040519081016040528092919081815260200182805461178e906148da565b80156117db5780601f106117b0576101008083540402835291602001916117db565b820191906000526020600020905b8154815290600101906020018083116117be57829003601f168201915b5050505050905090565b6117ed6124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118719061488b565b60405180910390fd5b611885816000613213565b50565b600061194b6118956124ab565b84611946856040518060600160405280602581526020016156c160259139600360006118bf6124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130369092919063ffffffff16565b612609565b6001905092915050565b60006119696119626124ab565b84846127d4565b6001905092915050565b61197b6124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9061488b565b60405180910390fd5b611a148282600061255e565b5050565b611a206124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa49061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614b71565b60405180910390fd5b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcf9190614ba6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c9190614ba6565b6040518363ffffffff1660e01b8152600401611c99929190614bd3565b6020604051808303816000875af1158015611cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdc9190614ba6565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611d266124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061488b565b60405180910390fd5b80600d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dfc919061420d565b60405180910390a150565b600f5481565b611e156124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061488b565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611f306124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb49061488b565b60405180910390fd5b84601460000181905550836014600101819055508160146003018190555082601460020181905550806014600401819055505050505050565b6000600560006120046124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290614c6e565b60405180910390fd5b8282905085859050146120d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ca90614d00565b60405180910390fd5b5b84849050811015612157576121436120ea6124ab565b8686848181106120fd576120fc614d20565b5b90506020020160208101906121129190614442565b633b9aca0086868681811061212a57612129614d20565b5b9050602002013561213b9190614a39565b60008061330a565b6001816121509190614d4f565b90506120d4565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6122436124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c79061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790614e17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124056124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612492576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124899061488b565b60405180910390fd5b633b9aca00816124a29190614a39565b600e8190555050565b600033905090565b60005b838390508110156125585760008484838181106124d6576124d5614d20565b5b90506020020160208101906124eb9190614442565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061255090614e37565b9150506124b6565b50505050565b60005b8383905081101561260357600084848381811061258157612580614d20565b5b90506020020160208101906125969190614442565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806125fb90614e37565b915050612561565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267090614ef2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614f84565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127c79190614052565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b90615016565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab906150a8565b60405180910390fd5b600081116128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee9061513a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612980906151a6565b60405180910390fd5b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a305750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a6f5750612a3f611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612aae5750612a7e611704565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050612ab8611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612b265750612af6611704565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b805750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612c6957600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c295750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5f90615238565b60405180910390fd5b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612d0e5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600e54831115612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f906152ca565b60405180910390fd5b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612e045750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612eae5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ead5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612ec05760019150612ebf613350565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f6c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc25750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130185750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561302257600090505b61302f858585848661330a565b5050505050565b600083831115829061307e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130759190614106565b60405180910390fd5b506000838561308d91906152ea565b9050809150509392505050565b60008060006130a7613401565b915091506130be81836130c590919063ffffffff16565b9250505090565b600061310783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061344e565b905092915050565b600080828461311e9190614d4f565b905083811015613163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315a9061536a565b60405180910390fd5b8091505092915050565b60008060008060008060008060006131848a6134b1565b92509250925060008060006131a28d868661319d61309a565b61350b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061320b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613036565b905092915050565b60005b825181101561330557600083828151811061323457613233614d20565b5b6020026020010151905082156132a1576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506132f1565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806132fd90614e37565b915050613216565b505050565b81601360146101000a81548160ff02191690831515021790555080601360156101000a81548160ff021916908315150217905550613349858585613594565b5050505050565b600061335b3061131e565b9050600f54811015801561337c5750600d60149054906101000a900460ff16155b80156133945750600d60159054906101000a900460ff165b156133fe5760006133c660646133b86019600001548561375f90919063ffffffff16565b6130c590919063ffffffff16565b905060006133dd82846131c990919063ffffffff16565b905060008111156133f2576133f1816137da565b5b6133fb826138b0565b50505b50565b60008060006008549050600060075490506134296007546008546130c590919063ffffffff16565b8210156134415760085460075493509350505061344a565b81819350935050505b9091565b60008083118290613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348c9190614106565b60405180910390fd5b50600083856134a491906153b9565b9050809150509392505050565b6000806000806134c085613a2a565b905060006134cd86613aad565b905060006134f6826134e8858a6131c990919063ffffffff16565b6131c990919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613524858961375f90919063ffffffff16565b9050600061353b868961375f90919063ffffffff16565b90506000613552878961375f90919063ffffffff16565b9050600061357b8261356d85876131c990919063ffffffff16565b6131c990919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000806000806000806135a68761316d565b95509550955095509550955061360486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e581613b54565b6136ef8483613c11565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161374c9190614052565b60405180910390a3505050505050505050565b60008083141561377257600090506137d4565b600082846137809190614a39565b905082848261378f91906153b9565b146137cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c69061545c565b60405180910390fd5b809150505b92915050565b6001600d60146101000a81548160ff021916908315150217905550600061380b6002836130c590919063ffffffff16565b9050600061382282846131c990919063ffffffff16565b9050600047905061383283613c4b565b600061384782476131c990919063ffffffff16565b90506138538382613e8e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516138869392919061446f565b60405180910390a1505050506000600d60146101000a81548160ff02191690831515021790555050565b6001600d60146101000a81548160ff0219169083151502179055506138d481613c4b565b6000479050600061390660646138f86019600101548561375f90919063ffffffff16565b6130c590919063ffffffff16565b9050600061393560646139276019600201548661375f90919063ffffffff16565b6130c590919063ffffffff16565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561399f573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a08573d6000803e3d6000fd5b505050506000600d60146101000a81548160ff02191690831515021790555050565b60008060009050601360149054906101000a900460ff1615613a7f576014600001549050601360159054906101000a900460ff1615613a7e57613a7b6014600201548261310f90919063ffffffff16565b90505b5b613aa56064613a97838661375f90919063ffffffff16565b6130c590919063ffffffff16565b915050919050565b60008060009050601360149054906101000a900460ff1615613b26576014600101549050601360159054906101000a900460ff1615613b2557613afe6014600301548261310f90919063ffffffff16565b90506010548310613b2457613b216014600401548261310f90919063ffffffff16565b90505b5b5b613b4c6064613b3e838661375f90919063ffffffff16565b6130c590919063ffffffff16565b915050919050565b6000613b5e61309a565b90506000613b75828461375f90919063ffffffff16565b9050613bc981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310f90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613c26826008546131c990919063ffffffff16565b600881905550613c418160095461310f90919063ffffffff16565b6009819055505050565b6000600267ffffffffffffffff811115613c6857613c676144f9565b5b604051908082528060200260200182016040528015613c965781602001602082028036833780820191505090505b5090503081600081518110613cae57613cad614d20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d799190614ba6565b81600181518110613d8d57613d8c614d20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613df430600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612609565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e58959493929190615575565b600060405180830381600087803b158015613e7257600080fd5b505af1158015613e86573d6000803e3d6000fd5b505050505050565b613ebb30600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612609565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f07611704565b426040518863ffffffff1660e01b8152600401613f29969594939291906155cf565b60606040518083038185885af1158015613f47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f6c9190615645565b5050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112613fac57613fab613f87565b5b8235905067ffffffffffffffff811115613fc957613fc8613f8c565b5b602083019150836020820283011115613fe557613fe4613f91565b5b9250929050565b6000806020838503121561400357614002613f7d565b5b600083013567ffffffffffffffff81111561402157614020613f82565b5b61402d85828601613f96565b92509250509250929050565b6000819050919050565b61404c81614039565b82525050565b60006020820190506140676000830184614043565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140a757808201518184015260208101905061408c565b838111156140b6576000848401525b50505050565b6000601f19601f8301169050919050565b60006140d88261406d565b6140e28185614078565b93506140f2818560208601614089565b6140fb816140bc565b840191505092915050565b6000602082019050818103600083015261412081846140cd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061415382614128565b9050919050565b61416381614148565b811461416e57600080fd5b50565b6000813590506141808161415a565b92915050565b61418f81614039565b811461419a57600080fd5b50565b6000813590506141ac81614186565b92915050565b600080604083850312156141c9576141c8613f7d565b5b60006141d785828601614171565b92505060206141e88582860161419d565b9150509250929050565b60008115159050919050565b614207816141f2565b82525050565b600060208201905061422260008301846141fe565b92915050565b600060a08201905061423d6000830188614043565b61424a6020830187614043565b6142576040830186614043565b6142646060830185614043565b6142716080830184614043565b9695505050505050565b6000819050919050565b60006142a061429b61429684614128565b61427b565b614128565b9050919050565b60006142b282614285565b9050919050565b60006142c4826142a7565b9050919050565b6142d4816142b9565b82525050565b60006020820190506142ef60008301846142cb565b92915050565b60008060006060848603121561430e5761430d613f7d565b5b600061431c86828701614171565b935050602061432d86828701614171565b925050604061433e8682870161419d565b9150509250925092565b60006020828403121561435e5761435d613f7d565b5b600061436c8482850161419d565b91505092915050565b600060ff82169050919050565b61438b81614375565b82525050565b60006020820190506143a66000830184614382565b92915050565b6143b5816141f2565b81146143c057600080fd5b50565b6000813590506143d2816143ac565b92915050565b600080604083850312156143ef576143ee613f7d565b5b60006143fd8582860161419d565b925050602061440e858286016143c3565b9150509250929050565b61442181614148565b82525050565b600060208201905061443c6000830184614418565b92915050565b60006020828403121561445857614457613f7d565b5b600061446684828501614171565b91505092915050565b60006060820190506144846000830186614043565b6144916020830185614043565b61449e6040830184614043565b949350505050565b6000806000606084860312156144bf576144be613f7d565b5b60006144cd8682870161419d565b93505060206144de8682870161419d565b92505060406144ef8682870161419d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614531826140bc565b810181811067ffffffffffffffff821117156145505761454f6144f9565b5b80604052505050565b6000614563613f73565b905061456f8282614528565b919050565b600067ffffffffffffffff82111561458f5761458e6144f9565b5b602082029050602081019050919050565b60006145b36145ae84614574565b614559565b905080838252602082019050602084028301858111156145d6576145d5613f91565b5b835b818110156145ff57806145eb8882614171565b8452602084019350506020810190506145d8565b5050509392505050565b600082601f83011261461e5761461d613f87565b5b813561462e8482602086016145a0565b91505092915050565b60006020828403121561464d5761464c613f7d565b5b600082013567ffffffffffffffff81111561466b5761466a613f82565b5b61467784828501614609565b91505092915050565b60006020828403121561469657614695613f7d565b5b60006146a4848285016143c3565b91505092915050565b600080604083850312156146c4576146c3613f7d565b5b60006146d285828601614171565b92505060206146e385828601614171565b9150509250929050565b600080600080600060a0868803121561470957614708613f7d565b5b60006147178882890161419d565b95505060206147288882890161419d565b94505060406147398882890161419d565b935050606061474a8882890161419d565b925050608061475b8882890161419d565b9150509295509295909350565b60008083601f84011261477e5761477d613f87565b5b8235905067ffffffffffffffff81111561479b5761479a613f8c565b5b6020830191508360208202830111156147b7576147b6613f91565b5b9250929050565b600080600080604085870312156147d8576147d7613f7d565b5b600085013567ffffffffffffffff8111156147f6576147f5613f82565b5b61480287828801613f96565b9450945050602085013567ffffffffffffffff81111561482557614824613f82565b5b61483187828801614768565b925092505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614875602083614078565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148f257607f821691505b60208210811415614906576149056148ab565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614968602a83614078565b91506149738261490c565b604082019050919050565b600060208201905081810360008301526149978161495b565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006149d4601f83614078565b91506149df8261499e565b602082019050919050565b60006020820190508181036000830152614a03816149c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a4482614039565b9150614a4f83614039565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a8857614a87614a0a565b5b828202905092915050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b6000614ac9601d83614078565b9150614ad482614a93565b602082019050919050565b60006020820190508181036000830152614af881614abc565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b5b602283614078565b9150614b6682614aff565b604082019050919050565b60006020820190508181036000830152614b8a81614b4e565b9050919050565b600081519050614ba08161415a565b92915050565b600060208284031215614bbc57614bbb613f7d565b5b6000614bca84828501614b91565b91505092915050565b6000604082019050614be86000830185614418565b614bf56020830184614418565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000614c58602d83614078565b9150614c6382614bfc565b604082019050919050565b60006020820190508181036000830152614c8781614c4b565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000614cea602a83614078565b9150614cf582614c8e565b604082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d5a82614039565b9150614d6583614039565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d9a57614d99614a0a565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e01602683614078565b9150614e0c82614da5565b604082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b6000614e4282614039565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e7557614e74614a0a565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614edc602483614078565b9150614ee782614e80565b604082019050919050565b60006020820190508181036000830152614f0b81614ecf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6e602283614078565b9150614f7982614f12565b604082019050919050565b60006020820190508181036000830152614f9d81614f61565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615000602583614078565b915061500b82614fa4565b604082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615092602383614078565b915061509d82615036565b604082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615124602983614078565b915061512f826150c8565b604082019050919050565b6000602082019050818103600083015261515381615117565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615190601e83614078565b915061519b8261515a565b602082019050919050565b600060208201905081810360008301526151bf81615183565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615222602f83614078565b915061522d826151c6565b604082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006152b4602883614078565b91506152bf82615258565b604082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b60006152f582614039565b915061530083614039565b92508282101561531357615312614a0a565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615354601b83614078565b915061535f8261531e565b602082019050919050565b6000602082019050818103600083015261538381615347565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153c482614039565b91506153cf83614039565b9250826153df576153de61538a565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615446602183614078565b9150615451826153ea565b604082019050919050565b6000602082019050818103600083015261547581615439565b9050919050565b6000819050919050565b60006154a161549c6154978461547c565b61427b565b614039565b9050919050565b6154b181615486565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154ec81614148565b82525050565b60006154fe83836154e3565b60208301905092915050565b6000602082019050919050565b6000615522826154b7565b61552c81856154c2565b9350615537836154d3565b8060005b8381101561556857815161554f88826154f2565b975061555a8361550a565b92505060018101905061553b565b5085935050505092915050565b600060a08201905061558a6000830188614043565b61559760208301876154a8565b81810360408301526155a98186615517565b90506155b86060830185614418565b6155c56080830184614043565b9695505050505050565b600060c0820190506155e46000830189614418565b6155f16020830188614043565b6155fe60408301876154a8565b61560b60608301866154a8565b6156186080830185614418565b61562560a0830184614043565b979650505050505050565b60008151905061563f81614186565b92915050565b60008060006060848603121561565e5761565d613f7d565b5b600061566c86828701615630565b935050602061567d86828701615630565b925050604061568e86828701615630565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122030469d1795f8f527088298c7f57c006e8e6d7e9183a03151857d4175c82d2fc364736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063715018a61161014f578063a9059cbb116100c1578063dc0aa9cf1161007a578063dc0aa9cf146109ad578063dcda6af3146109d6578063dd62ed3e146109ff578063e7dad4f914610a3c578063f2fde38b14610a79578063f34eb0b814610aa257610288565b8063a9059cbb146108b3578063ab0d8b85146108f0578063b6a9987214610919578063c49b9a8014610930578063d12a768814610959578063d3f6a1571461098457610288565b806385d4787b1161011357806385d4787b146107a35780638da5cb5b146107cc5780638ea5220f146107f757806395d89b41146108225780639b0e2e861461084d578063a457c2d71461087657610288565b8063715018a6146106e457806371b9189c146106fb57806375f0a874146107245780637ca2ea441461074f57806385141a771461077857610288565b8063313ce567116101f35780634a74bb02116101ac5780634a74bb02146105c05780635342acb4146105eb57806354ed2dc2146106285780635ee58efc146106515780636f3430521461067e57806370a08231146106a757610288565b8063313ce5671461049c578063317d9453146104c757806339509351146104f25780633bd5d1731461052f5780634549b0391461055857806349bd5a5e1461059557610288565b80630ddc0976116102455780630ddc09761461037257806313114a9d146103a15780631694505e146103cc57806318160ddd146103f757806323b872dd146104225780632d8381191461045f57610288565b8063024022f71461028d578063035ae135146102b65780630492f055146102df57806306fdde031461030a578063095ea7b31461033557610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613fec565b610acb565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190613fec565b610b70565b005b3480156102eb57600080fd5b506102f4610c15565b6040516103019190614052565b60405180910390f35b34801561031657600080fd5b5061031f610c1b565b60405161032c9190614106565b60405180910390f35b34801561034157600080fd5b5061035c600480360381019061035791906141b2565b610cad565b604051610369919061420d565b60405180910390f35b34801561037e57600080fd5b50610387610ccb565b604051610398959493929190614228565b60405180910390f35b3480156103ad57600080fd5b506103b6610cef565b6040516103c39190614052565b60405180910390f35b3480156103d857600080fd5b506103e1610cf9565b6040516103ee91906142da565b60405180910390f35b34801561040357600080fd5b5061040c610d1f565b6040516104199190614052565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906142f5565b610d29565b604051610456919061420d565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190614348565b610e02565b6040516104939190614052565b60405180910390f35b3480156104a857600080fd5b506104b1610e70565b6040516104be9190614391565b60405180910390f35b3480156104d357600080fd5b506104dc610e87565b6040516104e99190614052565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906141b2565b610e97565b604051610526919061420d565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190614348565b610f4a565b005b34801561056457600080fd5b5061057f600480360381019061057a91906143d8565b611038565b60405161058c9190614052565b60405180910390f35b3480156105a157600080fd5b506105aa6110bc565b6040516105b79190614427565b60405180910390f35b3480156105cc57600080fd5b506105d56110e2565b6040516105e2919061420d565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614442565b6110f5565b60405161061f919061420d565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190614348565b61114b565b005b34801561065d57600080fd5b506106666111f9565b6040516106759392919061446f565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a091906144a6565b611211565b005b3480156106b357600080fd5b506106ce60048036038101906106c99190614442565b61131e565b6040516106db9190614052565b60405180910390f35b3480156106f057600080fd5b506106f961136f565b005b34801561070757600080fd5b50610722600480360381019061071d9190613fec565b6114c2565b005b34801561073057600080fd5b50610739611567565b6040516107469190614427565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190614348565b61158d565b005b34801561078457600080fd5b5061078d61163b565b60405161079a9190614427565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190614637565b611661565b005b3480156107d857600080fd5b506107e1611704565b6040516107ee9190614427565b60405180910390f35b34801561080357600080fd5b5061080c61172d565b6040516108199190614427565b60405180910390f35b34801561082e57600080fd5b50610837611753565b6040516108449190614106565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190614637565b6117e5565b005b34801561088257600080fd5b5061089d600480360381019061089891906141b2565b611888565b6040516108aa919061420d565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d591906141b2565b611955565b6040516108e7919061420d565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190613fec565b611973565b005b34801561092557600080fd5b5061092e611a18565b005b34801561093c57600080fd5b5061095760048036038101906109529190614680565b611d1e565b005b34801561096557600080fd5b5061096e611e07565b60405161097b9190614052565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a691906146ad565b611e0d565b005b3480156109b957600080fd5b506109d460048036038101906109cf91906146ed565b611f28565b005b3480156109e257600080fd5b506109fd60048036038101906109f891906147be565b611ff6565b005b348015610a0b57600080fd5b50610a266004803603810190610a2191906146ad565b61215e565b604051610a339190614052565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614442565b6121e5565b604051610a70919061420d565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190614442565b61223b565b005b348015610aae57600080fd5b50610ac96004803603810190610ac49190614348565b6123fd565b005b610ad36124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b579061488b565b60405180910390fd5b610b6c828260006124b3565b5050565b610b786124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc9061488b565b60405180910390fd5b610c118282600161255e565b5050565b600e5481565b6060600a8054610c2a906148da565b80601f0160208091040260200160405190810160405280929190818152602001828054610c56906148da565b8015610ca35780601f10610c7857610100808354040283529160200191610ca3565b820191906000526020600020905b815481529060010190602001808311610c8657829003601f168201915b5050505050905090565b6000610cc1610cba6124ab565b8484612609565b6001905092915050565b60148060000154908060010154908060020154908060030154908060040154905085565b6000600954905090565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6000610d368484846127d4565b610df784610d426124ab565b610df28560405180606001604052806028815260200161569960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610da86124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130369092919063ffffffff16565b612609565b600190509392505050565b6000600854821115610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061497e565b60405180910390fd5b6000610e5361309a565b9050610e6881846130c590919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610e923061131e565b905090565b6000610f40610ea46124ab565b84610f3b8560036000610eb56124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310f90919063ffffffff16565b612609565b6001905092915050565b6000610f546124ab565b90506000610f618361316d565b50505050509050610fba81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611012816008546131c990919063ffffffff16565b60088190555061102d8360095461310f90919063ffffffff16565b600981905550505050565b600060075483111561107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906149ea565b60405180910390fd5b8161109f57600061108f8461316d565b50505050509050809150506110b6565b60006110aa8461316d565b50505050915050809150505b92915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111536124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061488b565b60405180910390fd5b633b9aca00816111f09190614a39565b60108190555050565b60198060000154908060010154908060020154905083565b6112196124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061488b565b60405180910390fd5b60646112bb838561310f90919063ffffffff16565b146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614adf565b60405180910390fd5b826019600101819055508160196002018190555080601960000181905550505050565b6000611368600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e02565b9050919050565b6113776124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb9061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114ca6124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9061488b565b60405180910390fd5b611563828260016124b3565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115956124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061488b565b60405180910390fd5b633b9aca00816116329190614a39565b600f8190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116696124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed9061488b565b60405180910390fd5b611701816001613213565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b8054611762906148da565b80601f016020809104026020016040519081016040528092919081815260200182805461178e906148da565b80156117db5780601f106117b0576101008083540402835291602001916117db565b820191906000526020600020905b8154815290600101906020018083116117be57829003601f168201915b5050505050905090565b6117ed6124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118719061488b565b60405180910390fd5b611885816000613213565b50565b600061194b6118956124ab565b84611946856040518060600160405280602581526020016156c160259139600360006118bf6124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130369092919063ffffffff16565b612609565b6001905092915050565b60006119696119626124ab565b84846127d4565b6001905092915050565b61197b6124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff9061488b565b60405180910390fd5b611a148282600061255e565b5050565b611a206124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa49061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614b71565b60405180910390fd5b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcf9190614ba6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c9190614ba6565b6040518363ffffffff1660e01b8152600401611c99929190614bd3565b6020604051808303816000875af1158015611cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdc9190614ba6565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611d266124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa9061488b565b60405180910390fd5b80600d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dfc919061420d565b60405180910390a150565b600f5481565b611e156124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061488b565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611f306124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb49061488b565b60405180910390fd5b84601460000181905550836014600101819055508160146003018190555082601460020181905550806014600401819055505050505050565b6000600560006120046124ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290614c6e565b60405180910390fd5b8282905085859050146120d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ca90614d00565b60405180910390fd5b5b84849050811015612157576121436120ea6124ab565b8686848181106120fd576120fc614d20565b5b90506020020160208101906121129190614442565b633b9aca0086868681811061212a57612129614d20565b5b9050602002013561213b9190614a39565b60008061330a565b6001816121509190614d4f565b90506120d4565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6122436124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c79061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790614e17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124056124ab565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612492576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124899061488b565b60405180910390fd5b633b9aca00816124a29190614a39565b600e8190555050565b600033905090565b60005b838390508110156125585760008484838181106124d6576124d5614d20565b5b90506020020160208101906124eb9190614442565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061255090614e37565b9150506124b6565b50505050565b60005b8383905081101561260357600084848381811061258157612580614d20565b5b90506020020160208101906125969190614442565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806125fb90614e37565b915050612561565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267090614ef2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614f84565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127c79190614052565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b90615016565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab906150a8565b60405180910390fd5b600081116128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee9061513a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612980906151a6565b60405180910390fd5b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a305750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a6f5750612a3f611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612aae5750612a7e611704565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050612ab8611704565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612b265750612af6611704565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b805750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612c6957600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c295750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5f90615238565b60405180910390fd5b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612d0e5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600e54831115612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f906152ca565b60405180910390fd5b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612e045750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612eae5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ead5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612ec05760019150612ebf613350565b5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f6c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc25750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130185750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561302257600090505b61302f858585848661330a565b5050505050565b600083831115829061307e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130759190614106565b60405180910390fd5b506000838561308d91906152ea565b9050809150509392505050565b60008060006130a7613401565b915091506130be81836130c590919063ffffffff16565b9250505090565b600061310783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061344e565b905092915050565b600080828461311e9190614d4f565b905083811015613163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315a9061536a565b60405180910390fd5b8091505092915050565b60008060008060008060008060006131848a6134b1565b92509250925060008060006131a28d868661319d61309a565b61350b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061320b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613036565b905092915050565b60005b825181101561330557600083828151811061323457613233614d20565b5b6020026020010151905082156132a1576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506132f1565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806132fd90614e37565b915050613216565b505050565b81601360146101000a81548160ff02191690831515021790555080601360156101000a81548160ff021916908315150217905550613349858585613594565b5050505050565b600061335b3061131e565b9050600f54811015801561337c5750600d60149054906101000a900460ff16155b80156133945750600d60159054906101000a900460ff165b156133fe5760006133c660646133b86019600001548561375f90919063ffffffff16565b6130c590919063ffffffff16565b905060006133dd82846131c990919063ffffffff16565b905060008111156133f2576133f1816137da565b5b6133fb826138b0565b50505b50565b60008060006008549050600060075490506134296007546008546130c590919063ffffffff16565b8210156134415760085460075493509350505061344a565b81819350935050505b9091565b60008083118290613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348c9190614106565b60405180910390fd5b50600083856134a491906153b9565b9050809150509392505050565b6000806000806134c085613a2a565b905060006134cd86613aad565b905060006134f6826134e8858a6131c990919063ffffffff16565b6131c990919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613524858961375f90919063ffffffff16565b9050600061353b868961375f90919063ffffffff16565b90506000613552878961375f90919063ffffffff16565b9050600061357b8261356d85876131c990919063ffffffff16565b6131c990919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000806000806000806135a68761316d565b95509550955095509550955061360486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e581613b54565b6136ef8483613c11565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161374c9190614052565b60405180910390a3505050505050505050565b60008083141561377257600090506137d4565b600082846137809190614a39565b905082848261378f91906153b9565b146137cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c69061545c565b60405180910390fd5b809150505b92915050565b6001600d60146101000a81548160ff021916908315150217905550600061380b6002836130c590919063ffffffff16565b9050600061382282846131c990919063ffffffff16565b9050600047905061383283613c4b565b600061384782476131c990919063ffffffff16565b90506138538382613e8e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516138869392919061446f565b60405180910390a1505050506000600d60146101000a81548160ff02191690831515021790555050565b6001600d60146101000a81548160ff0219169083151502179055506138d481613c4b565b6000479050600061390660646138f86019600101548561375f90919063ffffffff16565b6130c590919063ffffffff16565b9050600061393560646139276019600201548661375f90919063ffffffff16565b6130c590919063ffffffff16565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561399f573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a08573d6000803e3d6000fd5b505050506000600d60146101000a81548160ff02191690831515021790555050565b60008060009050601360149054906101000a900460ff1615613a7f576014600001549050601360159054906101000a900460ff1615613a7e57613a7b6014600201548261310f90919063ffffffff16565b90505b5b613aa56064613a97838661375f90919063ffffffff16565b6130c590919063ffffffff16565b915050919050565b60008060009050601360149054906101000a900460ff1615613b26576014600101549050601360159054906101000a900460ff1615613b2557613afe6014600301548261310f90919063ffffffff16565b90506010548310613b2457613b216014600401548261310f90919063ffffffff16565b90505b5b5b613b4c6064613b3e838661375f90919063ffffffff16565b6130c590919063ffffffff16565b915050919050565b6000613b5e61309a565b90506000613b75828461375f90919063ffffffff16565b9050613bc981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310f90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613c26826008546131c990919063ffffffff16565b600881905550613c418160095461310f90919063ffffffff16565b6009819055505050565b6000600267ffffffffffffffff811115613c6857613c676144f9565b5b604051908082528060200260200182016040528015613c965781602001602082028036833780820191505090505b5090503081600081518110613cae57613cad614d20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d799190614ba6565b81600181518110613d8d57613d8c614d20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613df430600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612609565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e58959493929190615575565b600060405180830381600087803b158015613e7257600080fd5b505af1158015613e86573d6000803e3d6000fd5b505050505050565b613ebb30600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612609565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f07611704565b426040518863ffffffff1660e01b8152600401613f29969594939291906155cf565b60606040518083038185885af1158015613f47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f6c9190615645565b5050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112613fac57613fab613f87565b5b8235905067ffffffffffffffff811115613fc957613fc8613f8c565b5b602083019150836020820283011115613fe557613fe4613f91565b5b9250929050565b6000806020838503121561400357614002613f7d565b5b600083013567ffffffffffffffff81111561402157614020613f82565b5b61402d85828601613f96565b92509250509250929050565b6000819050919050565b61404c81614039565b82525050565b60006020820190506140676000830184614043565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140a757808201518184015260208101905061408c565b838111156140b6576000848401525b50505050565b6000601f19601f8301169050919050565b60006140d88261406d565b6140e28185614078565b93506140f2818560208601614089565b6140fb816140bc565b840191505092915050565b6000602082019050818103600083015261412081846140cd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061415382614128565b9050919050565b61416381614148565b811461416e57600080fd5b50565b6000813590506141808161415a565b92915050565b61418f81614039565b811461419a57600080fd5b50565b6000813590506141ac81614186565b92915050565b600080604083850312156141c9576141c8613f7d565b5b60006141d785828601614171565b92505060206141e88582860161419d565b9150509250929050565b60008115159050919050565b614207816141f2565b82525050565b600060208201905061422260008301846141fe565b92915050565b600060a08201905061423d6000830188614043565b61424a6020830187614043565b6142576040830186614043565b6142646060830185614043565b6142716080830184614043565b9695505050505050565b6000819050919050565b60006142a061429b61429684614128565b61427b565b614128565b9050919050565b60006142b282614285565b9050919050565b60006142c4826142a7565b9050919050565b6142d4816142b9565b82525050565b60006020820190506142ef60008301846142cb565b92915050565b60008060006060848603121561430e5761430d613f7d565b5b600061431c86828701614171565b935050602061432d86828701614171565b925050604061433e8682870161419d565b9150509250925092565b60006020828403121561435e5761435d613f7d565b5b600061436c8482850161419d565b91505092915050565b600060ff82169050919050565b61438b81614375565b82525050565b60006020820190506143a66000830184614382565b92915050565b6143b5816141f2565b81146143c057600080fd5b50565b6000813590506143d2816143ac565b92915050565b600080604083850312156143ef576143ee613f7d565b5b60006143fd8582860161419d565b925050602061440e858286016143c3565b9150509250929050565b61442181614148565b82525050565b600060208201905061443c6000830184614418565b92915050565b60006020828403121561445857614457613f7d565b5b600061446684828501614171565b91505092915050565b60006060820190506144846000830186614043565b6144916020830185614043565b61449e6040830184614043565b949350505050565b6000806000606084860312156144bf576144be613f7d565b5b60006144cd8682870161419d565b93505060206144de8682870161419d565b92505060406144ef8682870161419d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614531826140bc565b810181811067ffffffffffffffff821117156145505761454f6144f9565b5b80604052505050565b6000614563613f73565b905061456f8282614528565b919050565b600067ffffffffffffffff82111561458f5761458e6144f9565b5b602082029050602081019050919050565b60006145b36145ae84614574565b614559565b905080838252602082019050602084028301858111156145d6576145d5613f91565b5b835b818110156145ff57806145eb8882614171565b8452602084019350506020810190506145d8565b5050509392505050565b600082601f83011261461e5761461d613f87565b5b813561462e8482602086016145a0565b91505092915050565b60006020828403121561464d5761464c613f7d565b5b600082013567ffffffffffffffff81111561466b5761466a613f82565b5b61467784828501614609565b91505092915050565b60006020828403121561469657614695613f7d565b5b60006146a4848285016143c3565b91505092915050565b600080604083850312156146c4576146c3613f7d565b5b60006146d285828601614171565b92505060206146e385828601614171565b9150509250929050565b600080600080600060a0868803121561470957614708613f7d565b5b60006147178882890161419d565b95505060206147288882890161419d565b94505060406147398882890161419d565b935050606061474a8882890161419d565b925050608061475b8882890161419d565b9150509295509295909350565b60008083601f84011261477e5761477d613f87565b5b8235905067ffffffffffffffff81111561479b5761479a613f8c565b5b6020830191508360208202830111156147b7576147b6613f91565b5b9250929050565b600080600080604085870312156147d8576147d7613f7d565b5b600085013567ffffffffffffffff8111156147f6576147f5613f82565b5b61480287828801613f96565b9450945050602085013567ffffffffffffffff81111561482557614824613f82565b5b61483187828801614768565b925092505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614875602083614078565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148f257607f821691505b60208210811415614906576149056148ab565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614968602a83614078565b91506149738261490c565b604082019050919050565b600060208201905081810360008301526149978161495b565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006149d4601f83614078565b91506149df8261499e565b602082019050919050565b60006020820190508181036000830152614a03816149c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a4482614039565b9150614a4f83614039565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a8857614a87614a0a565b5b828202905092915050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b6000614ac9601d83614078565b9150614ad482614a93565b602082019050919050565b60006020820190508181036000830152614af881614abc565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b5b602283614078565b9150614b6682614aff565b604082019050919050565b60006020820190508181036000830152614b8a81614b4e565b9050919050565b600081519050614ba08161415a565b92915050565b600060208284031215614bbc57614bbb613f7d565b5b6000614bca84828501614b91565b91505092915050565b6000604082019050614be86000830185614418565b614bf56020830184614418565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000614c58602d83614078565b9150614c6382614bfc565b604082019050919050565b60006020820190508181036000830152614c8781614c4b565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000614cea602a83614078565b9150614cf582614c8e565b604082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d5a82614039565b9150614d6583614039565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d9a57614d99614a0a565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e01602683614078565b9150614e0c82614da5565b604082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b6000614e4282614039565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e7557614e74614a0a565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614edc602483614078565b9150614ee782614e80565b604082019050919050565b60006020820190508181036000830152614f0b81614ecf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f6e602283614078565b9150614f7982614f12565b604082019050919050565b60006020820190508181036000830152614f9d81614f61565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615000602583614078565b915061500b82614fa4565b604082019050919050565b6000602082019050818103600083015261502f81614ff3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615092602383614078565b915061509d82615036565b604082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615124602983614078565b915061512f826150c8565b604082019050919050565b6000602082019050818103600083015261515381615117565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615190601e83614078565b915061519b8261515a565b602082019050919050565b600060208201905081810360008301526151bf81615183565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615222602f83614078565b915061522d826151c6565b604082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006152b4602883614078565b91506152bf82615258565b604082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b60006152f582614039565b915061530083614039565b92508282101561531357615312614a0a565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615354601b83614078565b915061535f8261531e565b602082019050919050565b6000602082019050818103600083015261538381615347565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153c482614039565b91506153cf83614039565b9250826153df576153de61538a565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615446602183614078565b9150615451826153ea565b604082019050919050565b6000602082019050818103600083015261547581615439565b9050919050565b6000819050919050565b60006154a161549c6154978461547c565b61427b565b614039565b9050919050565b6154b181615486565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154ec81614148565b82525050565b60006154fe83836154e3565b60208301905092915050565b6000602082019050919050565b6000615522826154b7565b61552c81856154c2565b9350615537836154d3565b8060005b8381101561556857815161554f88826154f2565b975061555a8361550a565b92505060018101905061553b565b5085935050505092915050565b600060a08201905061558a6000830188614043565b61559760208301876154a8565b81810360408301526155a98186615517565b90506155b86060830185614418565b6155c56080830184614043565b9695505050505050565b600060c0820190506155e46000830189614418565b6155f16020830188614043565b6155fe60408301876154a8565b61560b60608301866154a8565b6156186080830185614418565b61562560a0830184614043565b979650505050505050565b60008151905061563f81614186565b92915050565b60008060006060848603121561565e5761565d613f7d565b5b600061566c86828701615630565b935050602061567d86828701615630565b925050604061568e86828701615630565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122030469d1795f8f527088298c7f57c006e8e6d7e9183a03151857d4175c82d2fc364736f6c634300080c0033

Deployed Bytecode Sourcemap

17513:18792:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23720:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23846:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18885:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20125:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20977:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19734:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;21970:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18649:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20402:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21146:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23332:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20311:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27130:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21467:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22591:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22888:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18762:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18838:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30478:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24861:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19763:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25587:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20505:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16195:148;;;;;;;;;;;;;:::i;:::-;;23593:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19095:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26021:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19253:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26501:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15559:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19177:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20216:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26637:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21693:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20651:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23975:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24108:256;;;;;;;;;;;;;:::i;:::-;;27253:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18947:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26205:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25153:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22065:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20826:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26384:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16498:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25022:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23720:118;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23800:30:::1;23813:9;;23824:5;23800:12;:30::i;:::-;23720:118:::0;;:::o;23846:121::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23925:34:::1;23943:9;;23954:4;23925:17;:34::i;:::-;23846:121:::0;;:::o;18885:55::-;;;;:::o;20125:83::-;20162:13;20195:5;20188:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20125:83;:::o;20977:161::-;21052:4;21069:39;21078:12;:10;:12::i;:::-;21092:7;21101:6;21069:8;:39::i;:::-;21126:4;21119:11;;20977:161;;;;:::o;19734:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21970:87::-;22012:7;22039:10;;22032:17;;21970:87;:::o;18649:106::-;;;;;;;;;;;;;:::o;20402:95::-;20455:7;20482;;20475:14;;20402:95;:::o;21146:313::-;21244:4;21261:36;21271:6;21279:9;21290:6;21261:9;:36::i;:::-;21308:121;21317:6;21325:12;:10;:12::i;:::-;21339:89;21377:6;21339:89;;;;;;;;;;;;;;;;;:11;:19;21351:6;21339:19;;;;;;;;;;;;;;;:33;21359:12;:10;:12::i;:::-;21339:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21308:8;:121::i;:::-;21447:4;21440:11;;21146:313;;;;;:::o;23332:253::-;23398:7;23437;;23426;:18;;23418:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23502:19;23525:10;:8;:10::i;:::-;23502:33;;23553:24;23565:11;23553:7;:11;;:24;;;;:::i;:::-;23546:31;;;23332:253;;;:::o;20311:83::-;20352:5;20377:9;;;;;;;;;;;20370:16;;20311:83;:::o;27130:115::-;27186:7;27213:24;27231:4;27213:9;:24::i;:::-;27206:31;;27130:115;:::o;21467:218::-;21555:4;21572:83;21581:12;:10;:12::i;:::-;21595:7;21604:50;21643:10;21604:11;:25;21616:12;:10;:12::i;:::-;21604:25;;;;;;;;;;;;;;;:34;21630:7;21604:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21572:8;:83::i;:::-;21673:4;21666:11;;21467:218;;;;:::o;22591:289::-;22643:14;22660:12;:10;:12::i;:::-;22643:29;;22684:15;22708:19;22719:7;22708:10;:19::i;:::-;22683:44;;;;;;;22756:28;22776:7;22756;:15;22764:6;22756:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22738:7;:15;22746:6;22738:15;;;;;;;;;;;;;;;:46;;;;22805:20;22817:7;22805;;:11;;:20;;;;:::i;:::-;22795:7;:30;;;;22849:23;22864:7;22849:10;;:14;;:23;;;;:::i;:::-;22836:10;:36;;;;22632:248;;22591:289;:::o;22888:436::-;22978:7;23017;;23006;:18;;22998:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23076:17;23071:246;;23111:15;23135:19;23146:7;23135:10;:19::i;:::-;23110:44;;;;;;;23176:7;23169:14;;;;;23071:246;23218:23;23249:19;23260:7;23249:10;:19::i;:::-;23216:52;;;;;;;23290:15;23283:22;;;22888:436;;;;;:::o;18762:41::-;;;;;;;;;;;;;:::o;18838:40::-;;;;;;;;;;;;;:::o;30478:123::-;30542:4;30566:18;:27;30585:7;30566:27;;;;;;;;;;;;;;;;;;;;;;;;;30559:34;;30478:123;;;:::o;24861:153::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25001:5:::1;24978:20;:28;;;;:::i;:::-;24954:21;:52;;;;24861:153:::0;:::o;19763:32::-;;;;;;;;;;;;;;;;;;;:::o;25587:426::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25781:3:::1;25733:44;25760:16;25733:22;:26;;:44;;;;:::i;:::-;:51;25725:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;25867:22;25829:12;:35;;:60;;;;25932:16;25900:12;:29;;:48;;;;25990:15;25959:12;:28;;:46;;;;25587:426:::0;;;:::o;20505:138::-;20571:7;20598:37;20618:7;:16;20626:7;20618:16;;;;;;;;;;;;;;;;20598:19;:37::i;:::-;20591:44;;20505:138;;;:::o;16195:148::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16302:1:::1;16265:40;;16286:6;::::0;::::1;;;;;;;;16265:40;;;;;;;;;;;;16333:1;16316:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16195:148::o:0;23593:119::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23675:29:::1;23688:9;;23699:4;23675:12;:29::i;:::-;23593:119:::0;;:::o;19095:75::-;;;;;;;;;;;;;:::o;26021:176::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26184:5:::1;26151:30;:38;;;;:::i;:::-;26119:29;:70;;;;26021:176:::0;:::o;19253:70::-;;;;;;;;;;;;;:::o;26501:128::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26585:36:::1;26605:9;26616:4;26585:19;:36::i;:::-;26501:128:::0;:::o;15559:79::-;15597:7;15624:6;;;;;;;;;;;15617:13;;15559:79;:::o;19177:69::-;;;;;;;;;;;;;:::o;20216:87::-;20255:13;20288:7;20281:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20216:87;:::o;26637:131::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26723:37:::1;26743:9;26754:5;26723:19;:37::i;:::-;26637:131:::0;:::o;21693:269::-;21786:4;21803:129;21812:12;:10;:12::i;:::-;21826:7;21835:96;21874:15;21835:96;;;;;;;;;;;;;;;;;:11;:25;21847:12;:10;:12::i;:::-;21835:25;;;;;;;;;;;;;;;:34;21861:7;21835:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21803:8;:129::i;:::-;21950:4;21943:11;;21693:269;;;;:::o;20651:167::-;20729:4;20746:42;20756:12;:10;:12::i;:::-;20770:9;20781:6;20746:9;:42::i;:::-;20806:4;20799:11;;20651:167;;;;:::o;23975:125::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24057:35:::1;24075:9;;24086:5;24057:17;:35::i;:::-;23975:125:::0;;:::o;24108:256::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24195:1:::1;24170:27;;:13;;;;;;;;;;;:27;;;24162:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24280:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24262:55;;;24326:4;24333:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24262:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24246:13;;:110;;;;;;;;;;;;;;;;;;24108:256::o:0;27253:171::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:8:::1;27330:21;;:32;;;;;;;;;;;;;;;;;;27378:38;27407:8;27378:38;;;;;;:::i;:::-;;;;;;;;27253:171:::0;:::o;18947:70::-;;;;:::o;26205:171::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26319:16:::1;26301:15;;:34;;;;;;;;;;;;;;;;;;26358:10;26346:9;;:22;;;;;;;;;;;;;;;;;;26205:171:::0;;:::o;25153:426::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25350:13:::1;25326:7;:21;;:37;;;;25397:12;25374:7;:20;;:35;;;;25447:16;25420:7;:24;;:43;;;;25502:17;25474:7;:25;;:45;;;;25556:15;25530:7;:23;;:41;;;;25153:426:::0;;;;;:::o;22065:518::-;22162:16;22201:18;:32;22220:12;:10;:12::i;:::-;22201:32;;;;;;;;;;;;;;;;;;;;;;;;;22193:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22323:7;;:14;;22302:10;;:17;;:35;22294:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22395:181;22412:10;;:17;;22401:8;:28;22395:181;;;22445:91;22460:12;:10;:12::i;:::-;22474:10;;22485:8;22474:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22516:5;22496:7;;22504:8;22496:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;22523:5;22530;22445:14;:91::i;:::-;22563:1;22551:13;;;;;:::i;:::-;;;22395:181;;;22151:432;22065:518;;;;:::o;20826:143::-;20907:7;20934:11;:18;20946:5;20934:18;;;;;;;;;;;;;;;:27;20953:7;20934:27;;;;;;;;;;;;;;;;20927:34;;20826:143;;;;:::o;26384:109::-;26445:4;26469:10;:16;26480:4;26469:16;;;;;;;;;;;;;;;;;;;;;;;;;26462:23;;26384:109;;;:::o;16498:244::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16607:1:::1;16587:22;;:8;:22;;;;16579:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16697:8;16668:38;;16689:6;::::0;::::1;;;;;;;;16668:38;;;;;;;;;;;;16726:8;16717:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16498:244:::0;:::o;25022:123::-;15781:12;:10;:12::i;:::-;15771:22;;:6;;;;;;;;;;:22;;;15763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25132:5:::1;25117:12;:20;;;;:::i;:::-;25101:13;:36;;;;25022:123:::0;:::o;8051:98::-;8104:7;8131:10;8124:17;;8051:98;:::o;24617:236::-;24704:9;24699:147;24723:9;;:16;;24719:1;:20;24699:147;;;24761:12;24776:9;;24786:1;24776:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24761:27;;24830:4;24803:18;:24;24822:4;24803:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24746:100;24741:3;;;;;:::i;:::-;;;;24699:147;;;;24617:236;;;:::o;24370:239::-;24462:9;24457:145;24481:9;;:16;;24477:1;:20;24457:145;;;24519:12;24534:9;;24544:1;24534:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24519:27;;24586:4;24561:16;:22;24578:4;24561:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24504:98;24499:3;;;;;:::i;:::-;;;;24457:145;;;;24370:239;;;:::o;30609:337::-;30719:1;30702:19;;:5;:19;;;;30694:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30800:1;30781:21;;:7;:21;;;;30773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30884:6;30854:11;:18;30866:5;30854:18;;;;;;;;;;;;;;;:27;30873:7;30854:27;;;;;;;;;;;;;;;:36;;;;30922:7;30906:32;;30915:5;30906:32;;;30931:6;30906:32;;;;;;:::i;:::-;;;;;;;;30609:337;;;:::o;30954:1442::-;31058:1;31042:18;;:4;:18;;;;31034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31135:1;31121:16;;:2;:16;;;;31113:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31205:1;31196:6;:10;31188:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31296:1;31271:27;;:13;;;;;;;;;;;:27;;;;31263:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31343:11;31373:13;31390:18;:24;31409:4;31390:24;;;;;;;;;;;;;;;;;;;;;;;;;31389:25;:52;;;;;31419:18;:22;31438:2;31419:22;;;;;;;;;;;;;;;;;;;;;;;;;31418:23;31389:52;:71;;;;;31453:7;:5;:7::i;:::-;31445:15;;:4;:15;;;;31389:71;:88;;;;;31470:7;:5;:7::i;:::-;31464:13;;:2;:13;;;;31389:88;31373:104;;31588:7;:5;:7::i;:::-;31580:15;;:4;:15;;;;:32;;;;;31605:7;:5;:7::i;:::-;31599:13;;:2;:13;;;;31580:32;:52;;;;;31622:10;;;;;;;;;;;31616:16;;:2;:16;;;;31580:52;31577:180;;;31658:10;:16;31669:4;31658:16;;;;;;;;;;;;;;;;;;;;;;;;;31657:17;:36;;;;;31679:10;:14;31690:2;31679:14;;;;;;;;;;;;;;;;;;;;;;;;;31678:15;31657:36;31649:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;31577:180;31778:13;;;;;;;;;;;31770:21;;:4;:21;;;:47;;;;31795:16;:22;31812:4;31795:22;;;;;;;;;;;;;;;;;;;;;;;;;31770:47;31767:155;;;31852:13;;31842:6;:23;;31834:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31767:155;31943:13;;;;;;;;;;;31935:21;;:4;:21;;;;:44;;;;;31966:13;;;;;;;;;;;31960:19;;:2;:19;;;31935:44;:97;;;;31985:16;:22;32002:4;31985:22;;;;;;;;;;;;;;;;;;;;;;;;;31984:23;:47;;;;;32011:16;:20;32028:2;32011:20;;;;;;;;;;;;;;;;;;;;;;;;;31984:47;31935:97;31932:242;;;32128:4;32119:13;;32147:15;:13;:15::i;:::-;31932:242;32195:13;;;;;;;;;;;32187:21;;:4;:21;;;;:44;;;;;32218:13;;;;;;;;;;;32212:19;;:2;:19;;;;32187:44;:71;;;;;32236:16;:22;32253:4;32236:22;;;;;;;;;;;;;;;;;;;;;;;;;32235:23;32187:71;:96;;;;;32263:16;:20;32280:2;32263:20;;;;;;;;;;;;;;;;;;;;;;;;;32262:21;32187:96;32184:144;;;32311:5;32300:16;;32184:144;32338:50;32353:4;32359:2;32363:6;32371:8;32381:6;32338:14;:50::i;:::-;31023:1373;;30954:1442;;;:::o;4382:192::-;4468:7;4501:1;4496;:6;;4504:12;4488:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4528:9;4544:1;4540;:5;;;;:::i;:::-;4528:17;;4565:1;4558:8;;;4382:192;;;;;:::o;28826:163::-;28867:7;28888:15;28905;28924:19;:17;:19::i;:::-;28887:56;;;;28961:20;28973:7;28961;:11;;:20;;;;:::i;:::-;28954:27;;;;28826:163;:::o;5780:132::-;5838:7;5865:39;5869:1;5872;5865:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5858:46;;5780:132;;;;:::o;3479:181::-;3537:7;3557:9;3573:1;3569;:5;;;;:::i;:::-;3557:17;;3598:1;3593;:6;;3585:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3651:1;3644:8;;;3479:181;;;;:::o;27624:419::-;27683:7;27692;27701;27710;27719;27728;27749:23;27774:12;27788:18;27810:20;27822:7;27810:11;:20::i;:::-;27748:82;;;;;;27842:15;27859:23;27884:12;27900:50;27912:7;27921:4;27927:10;27939;:8;:10::i;:::-;27900:11;:50::i;:::-;27841:109;;;;;;27969:7;27978:15;27995:4;28001:15;28018:4;28024:10;27961:74;;;;;;;;;;;;;;;;;;27624:419;;;;;;;:::o;3943:136::-;4001:7;4028:43;4032:1;4035;4028:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4021:50;;3943:136;;;;:::o;26776:346::-;26871:9;26866:249;26890:9;:16;26886:1;:20;26866:249;;;26928:12;26943:9;26953:1;26943:12;;;;;;;;:::i;:::-;;;;;;;;26928:27;;26973:7;26970:134;;;27020:4;27001:10;:16;27012:4;27001:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;26970:134;;;27072:10;:16;27083:4;27072:16;;;;;;;;;;;;;;;;27065:23;;;;;;;;;;;26970:134;26913:202;26908:3;;;;;:::i;:::-;;;;26866:249;;;;26776:346;;:::o;35557:235::-;35692:8;35679:10;;:21;;;;;;;;;;;;;;;;;;35723:6;35711:9;;:18;;;;;;;;;;;;;;;;;;35740:44;35758:6;35766:9;35777:6;35740:17;:44::i;:::-;35557:235;;;;;:::o;32404:992::-;32448:28;32479:24;32497:4;32479:9;:24::i;:::-;32448:55;;32542:29;;32518:20;:53;;:74;;;;;32576:16;;;;;;;;;;;32575:17;32518:74;:99;;;;;32596:21;;;;;;;;;;;32518:99;32514:875;;;32800:28;32831:63;32890:3;32831:54;32856:12;:28;;;32831:20;:24;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;32800:94;;32909:27;32939:46;32964:20;32939;:24;;:46;;;;:::i;:::-;32909:76;;33158:1;33136:19;:23;33133:131;;;33213:35;33228:19;33213:14;:35::i;:::-;33133:131;33339:38;33356:20;33339:16;:38::i;:::-;32619:770;;32514:875;32437:959;32404:992::o;28997:256::-;29047:7;29056;29076:15;29094:7;;29076:25;;29112:15;29130:7;;29112:25;;29162:20;29174:7;;29162;;:11;;:20;;;;:::i;:::-;29152:7;:30;29148:61;;;29192:7;;29201;;29184:25;;;;;;;;29148:61;29228:7;29237;29220:25;;;;;;28997:256;;;:::o;6408:278::-;6494:7;6526:1;6522;:5;6529:12;6514:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6553:9;6569:1;6565;:5;;;;:::i;:::-;6553:17;;6677:1;6670:8;;;6408:278;;;;;:::o;28051:330::-;28111:7;28120;28129;28149:12;28164:24;28180:7;28164:15;:24::i;:::-;28149:39;;28199:18;28220:30;28242:7;28220:21;:30::i;:::-;28199:51;;28261:23;28287:33;28309:10;28287:17;28299:4;28287:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28261:59;;28339:15;28356:4;28362:10;28331:42;;;;;;;;;28051:330;;;;;:::o;28389:429::-;28504:7;28513;28522;28542:15;28560:24;28572:11;28560:7;:11;;:24;;;;:::i;:::-;28542:42;;28595:12;28610:21;28619:11;28610:4;:8;;:21;;;;:::i;:::-;28595:36;;28642:18;28663:27;28678:11;28663:10;:14;;:27;;;;:::i;:::-;28642:48;;28701:23;28727:33;28749:10;28727:17;28739:4;28727:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28701:59;;28779:7;28788:15;28805:4;28771:39;;;;;;;;;;28389:429;;;;;;;;:::o;35800:502::-;35899:15;35916:23;35941:12;35955:23;35980:12;35994:18;36016:19;36027:7;36016:10;:19::i;:::-;35898:137;;;;;;;;;;;;36064:28;36084:7;36064;:15;36072:6;36064:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36046:7;:15;36054:6;36046:15;;;;;;;;;;;;;;;:46;;;;36124:39;36147:15;36124:7;:18;36132:9;36124:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36103:7;:18;36111:9;36103:18;;;;;;;;;;;;;;;:60;;;;36174:26;36189:10;36174:14;:26::i;:::-;36211:23;36223:4;36229;36211:11;:23::i;:::-;36267:9;36250:44;;36259:6;36250:44;;;36278:15;36250:44;;;;;;:::i;:::-;;;;;;;;35887:415;;;;;;35800:502;;;:::o;4833:471::-;4891:7;5141:1;5136;:6;5132:47;;;5166:1;5159:8;;;;5132:47;5191:9;5207:1;5203;:5;;;;:::i;:::-;5191:17;;5236:1;5231;5227;:5;;;;:::i;:::-;:10;5219:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5295:1;5288:8;;;4833:471;;;;;:::o;33404:464::-;17874:4;17855:16;;:23;;;;;;;;;;;;;;;;;;33489:12:::1;33504:27;33529:1;33504:20;:24;;:27;;;;:::i;:::-;33489:42;;33542:17;33562:30;33587:4;33562:20;:24;;:30;;;;:::i;:::-;33542:50;;33603:22;33628:21;33603:46;;33660:22;33677:4;33660:16;:22::i;:::-;33693:18;33714:41;33740:14;33714:21;:25;;:41;;;;:::i;:::-;33693:62;;33766:35;33779:9;33790:10;33766:12;:35::i;:::-;33817:43;33832:4;33838:10;33850:9;33817:43;;;;;;;;:::i;:::-;;;;;;;;33478:390;;;;17920:5:::0;17901:16;;:24;;;;;;;;;;;;;;;;;;33404:464;:::o;34395:488::-;17874:4;17855:16;;:23;;;;;;;;;;;;;;;;;;34482:38:::1;34499:20;34482:16;:38::i;:::-;34531:22;34556:21;34531:46;;34588:22;34613:64;34673:3;34613:55;34632:12;:35;;;34613:14;:18;;:55;;;;:::i;:::-;:59;;:64;;;;:::i;:::-;34588:89;;34688:16;34707:58;34761:3;34707:49;34726:12;:29;;;34707:14;:18;;:49;;;;:::i;:::-;:53;;:58;;;;:::i;:::-;34688:77;;34784:15;;;;;;;;;;;34776:33;;:49;34810:14;34776:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34844:9;;;;;;;;;;;34836:27;;:37;34864:8;34836:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34471:412;;;17920:5:::0;17901:16;;:24;;;;;;;;;;;;;;;;;;34395:488;:::o;29506:384::-;29570:7;29590:21;29614:1;29590:25;;29629:10;;;;;;;;;;;29626:202;;;29672:7;:21;;;29656:37;;29711:9;;;;;;;;;;;29708:109;;;29757:44;29775:7;:25;;;29757:13;:17;;:44;;;;:::i;:::-;29741:60;;29708:109;29626:202;29845:37;29876:5;29845:26;29857:13;29845:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;29838:44;;;29506:384;;;:::o;29898:572::-;29968:7;29988:25;30016:1;29988:29;;30031:10;;;;;;;;;;;30028:376;;;30078:7;:20;;;30058:40;;30116:9;;;;;;;;;;;30113:280;;;30166:47;30188:7;:24;;;30166:17;:21;;:47;;;;:::i;:::-;30146:67;;30246:21;;30235:7;:32;30232:146;;30312:46;30334:7;:23;;;30312:17;:21;;:46;;;;:::i;:::-;30292:66;;30232:146;30113:280;30028:376;30421:41;30456:5;30421:30;30433:17;30421:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;30414:48;;;29898:572;;;:::o;29261:237::-;29324:19;29347:10;:8;:10::i;:::-;29324:33;;29368:18;29389:27;29404:11;29389:10;:14;;:27;;;;:::i;:::-;29368:48;;29452:38;29479:10;29452:7;:22;29468:4;29452:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;29427:7;:22;29443:4;29427:22;;;;;;;;;;;;;;;:63;;;;29313:185;;29261:237;:::o;27469:147::-;27547:17;27559:4;27547:7;;:11;;:17;;;;:::i;:::-;27537:7;:27;;;;27588:20;27603:4;27588:10;;:14;;:20;;;;:::i;:::-;27575:10;:33;;;;27469:147;;:::o;34891:585::-;35017:21;35055:1;35041:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35017:40;;35086:4;35068;35073:1;35068:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35112:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35102:4;35107:1;35102:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35145:62;35162:4;35177:15;;;;;;;;;;;35195:11;35145:8;:62::i;:::-;35244:15;;;;;;;;;;;:66;;;35325:11;35351:1;35395:4;35422;35442:15;35244:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34946:530;34891:585;:::o;33876:513::-;34024:62;34041:4;34056:15;;;;;;;;;;;34074:11;34024:8;:62::i;:::-;34129:15;;;;;;;;;;;:31;;;34168:9;34201:4;34221:11;34247:1;34290;34333:7;:5;:7::i;:::-;34355:15;34129:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33876:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1294:559::-;1380:6;1388;1437:2;1425:9;1416:7;1412:23;1408:32;1405:119;;;1443:79;;:::i;:::-;1405:119;1591:1;1580:9;1576:17;1563:31;1621:18;1613:6;1610:30;1607:117;;;1643:79;;:::i;:::-;1607:117;1756:80;1828:7;1819:6;1808:9;1804:22;1756:80;:::i;:::-;1738:98;;;;1534:312;1294:559;;;;;:::o;1859:77::-;1896:7;1925:5;1914:16;;1859:77;;;:::o;1942:118::-;2029:24;2047:5;2029:24;:::i;:::-;2024:3;2017:37;1942:118;;:::o;2066:222::-;2159:4;2197:2;2186:9;2182:18;2174:26;;2210:71;2278:1;2267:9;2263:17;2254:6;2210:71;:::i;:::-;2066:222;;;;:::o;2294:99::-;2346:6;2380:5;2374:12;2364:22;;2294:99;;;:::o;2399:169::-;2483:11;2517:6;2512:3;2505:19;2557:4;2552:3;2548:14;2533:29;;2399:169;;;;:::o;2574:307::-;2642:1;2652:113;2666:6;2663:1;2660:13;2652:113;;;2751:1;2746:3;2742:11;2736:18;2732:1;2727:3;2723:11;2716:39;2688:2;2685:1;2681:10;2676:15;;2652:113;;;2783:6;2780:1;2777:13;2774:101;;;2863:1;2854:6;2849:3;2845:16;2838:27;2774:101;2623:258;2574:307;;;:::o;2887:102::-;2928:6;2979:2;2975:7;2970:2;2963:5;2959:14;2955:28;2945:38;;2887:102;;;:::o;2995:364::-;3083:3;3111:39;3144:5;3111:39;:::i;:::-;3166:71;3230:6;3225:3;3166:71;:::i;:::-;3159:78;;3246:52;3291:6;3286:3;3279:4;3272:5;3268:16;3246:52;:::i;:::-;3323:29;3345:6;3323:29;:::i;:::-;3318:3;3314:39;3307:46;;3087:272;2995:364;;;;:::o;3365:313::-;3478:4;3516:2;3505:9;3501:18;3493:26;;3565:9;3559:4;3555:20;3551:1;3540:9;3536:17;3529:47;3593:78;3666:4;3657:6;3593:78;:::i;:::-;3585:86;;3365:313;;;;:::o;3684:126::-;3721:7;3761:42;3754:5;3750:54;3739:65;;3684:126;;;:::o;3816:96::-;3853:7;3882:24;3900:5;3882:24;:::i;:::-;3871:35;;3816:96;;;:::o;3918:122::-;3991:24;4009:5;3991:24;:::i;:::-;3984:5;3981:35;3971:63;;4030:1;4027;4020:12;3971:63;3918:122;:::o;4046:139::-;4092:5;4130:6;4117:20;4108:29;;4146:33;4173:5;4146:33;:::i;:::-;4046:139;;;;:::o;4191:122::-;4264:24;4282:5;4264:24;:::i;:::-;4257:5;4254:35;4244:63;;4303:1;4300;4293:12;4244:63;4191:122;:::o;4319:139::-;4365:5;4403:6;4390:20;4381:29;;4419:33;4446:5;4419:33;:::i;:::-;4319:139;;;;:::o;4464:474::-;4532:6;4540;4589:2;4577:9;4568:7;4564:23;4560:32;4557:119;;;4595:79;;:::i;:::-;4557:119;4715:1;4740:53;4785:7;4776:6;4765:9;4761:22;4740:53;:::i;:::-;4730:63;;4686:117;4842:2;4868:53;4913:7;4904:6;4893:9;4889:22;4868:53;:::i;:::-;4858:63;;4813:118;4464:474;;;;;:::o;4944:90::-;4978:7;5021:5;5014:13;5007:21;4996:32;;4944:90;;;:::o;5040:109::-;5121:21;5136:5;5121:21;:::i;:::-;5116:3;5109:34;5040:109;;:::o;5155:210::-;5242:4;5280:2;5269:9;5265:18;5257:26;;5293:65;5355:1;5344:9;5340:17;5331:6;5293:65;:::i;:::-;5155:210;;;;:::o;5371:664::-;5576:4;5614:3;5603:9;5599:19;5591:27;;5628:71;5696:1;5685:9;5681:17;5672:6;5628:71;:::i;:::-;5709:72;5777:2;5766:9;5762:18;5753:6;5709:72;:::i;:::-;5791;5859:2;5848:9;5844:18;5835:6;5791:72;:::i;:::-;5873;5941:2;5930:9;5926:18;5917:6;5873:72;:::i;:::-;5955:73;6023:3;6012:9;6008:19;5999:6;5955:73;:::i;:::-;5371:664;;;;;;;;:::o;6041:60::-;6069:3;6090:5;6083:12;;6041:60;;;:::o;6107:142::-;6157:9;6190:53;6208:34;6217:24;6235:5;6217:24;:::i;:::-;6208:34;:::i;:::-;6190:53;:::i;:::-;6177:66;;6107:142;;;:::o;6255:126::-;6305:9;6338:37;6369:5;6338:37;:::i;:::-;6325:50;;6255:126;;;:::o;6387:152::-;6463:9;6496:37;6527:5;6496:37;:::i;:::-;6483:50;;6387:152;;;:::o;6545:183::-;6658:63;6715:5;6658:63;:::i;:::-;6653:3;6646:76;6545:183;;:::o;6734:274::-;6853:4;6891:2;6880:9;6876:18;6868:26;;6904:97;6998:1;6987:9;6983:17;6974:6;6904:97;:::i;:::-;6734:274;;;;:::o;7014:619::-;7091:6;7099;7107;7156:2;7144:9;7135:7;7131:23;7127:32;7124:119;;;7162:79;;:::i;:::-;7124:119;7282:1;7307:53;7352:7;7343:6;7332:9;7328:22;7307:53;:::i;:::-;7297:63;;7253:117;7409:2;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7380:118;7537:2;7563:53;7608:7;7599:6;7588:9;7584:22;7563:53;:::i;:::-;7553:63;;7508:118;7014:619;;;;;:::o;7639:329::-;7698:6;7747:2;7735:9;7726:7;7722:23;7718:32;7715:119;;;7753:79;;:::i;:::-;7715:119;7873:1;7898:53;7943:7;7934:6;7923:9;7919:22;7898:53;:::i;:::-;7888:63;;7844:117;7639:329;;;;:::o;7974:86::-;8009:7;8049:4;8042:5;8038:16;8027:27;;7974:86;;;:::o;8066:112::-;8149:22;8165:5;8149:22;:::i;:::-;8144:3;8137:35;8066:112;;:::o;8184:214::-;8273:4;8311:2;8300:9;8296:18;8288:26;;8324:67;8388:1;8377:9;8373:17;8364:6;8324:67;:::i;:::-;8184:214;;;;:::o;8404:116::-;8474:21;8489:5;8474:21;:::i;:::-;8467:5;8464:32;8454:60;;8510:1;8507;8500:12;8454:60;8404:116;:::o;8526:133::-;8569:5;8607:6;8594:20;8585:29;;8623:30;8647:5;8623:30;:::i;:::-;8526:133;;;;:::o;8665:468::-;8730:6;8738;8787:2;8775:9;8766:7;8762:23;8758:32;8755:119;;;8793:79;;:::i;:::-;8755:119;8913:1;8938:53;8983:7;8974:6;8963:9;8959:22;8938:53;:::i;:::-;8928:63;;8884:117;9040:2;9066:50;9108:7;9099:6;9088:9;9084:22;9066:50;:::i;:::-;9056:60;;9011:115;8665:468;;;;;:::o;9139:118::-;9226:24;9244:5;9226:24;:::i;:::-;9221:3;9214:37;9139:118;;:::o;9263:222::-;9356:4;9394:2;9383:9;9379:18;9371:26;;9407:71;9475:1;9464:9;9460:17;9451:6;9407:71;:::i;:::-;9263:222;;;;:::o;9491:329::-;9550:6;9599:2;9587:9;9578:7;9574:23;9570:32;9567:119;;;9605:79;;:::i;:::-;9567:119;9725:1;9750:53;9795:7;9786:6;9775:9;9771:22;9750:53;:::i;:::-;9740:63;;9696:117;9491:329;;;;:::o;9826:442::-;9975:4;10013:2;10002:9;9998:18;9990:26;;10026:71;10094:1;10083:9;10079:17;10070:6;10026:71;:::i;:::-;10107:72;10175:2;10164:9;10160:18;10151:6;10107:72;:::i;:::-;10189;10257:2;10246:9;10242:18;10233:6;10189:72;:::i;:::-;9826:442;;;;;;:::o;10274:619::-;10351:6;10359;10367;10416:2;10404:9;10395:7;10391:23;10387:32;10384:119;;;10422:79;;:::i;:::-;10384:119;10542:1;10567:53;10612:7;10603:6;10592:9;10588:22;10567:53;:::i;:::-;10557:63;;10513:117;10669:2;10695:53;10740:7;10731:6;10720:9;10716:22;10695:53;:::i;:::-;10685:63;;10640:118;10797:2;10823:53;10868:7;10859:6;10848:9;10844:22;10823:53;:::i;:::-;10813:63;;10768:118;10274:619;;;;;:::o;10899:180::-;10947:77;10944:1;10937:88;11044:4;11041:1;11034:15;11068:4;11065:1;11058:15;11085:281;11168:27;11190:4;11168:27;:::i;:::-;11160:6;11156:40;11298:6;11286:10;11283:22;11262:18;11250:10;11247:34;11244:62;11241:88;;;11309:18;;:::i;:::-;11241:88;11349:10;11345:2;11338:22;11128:238;11085:281;;:::o;11372:129::-;11406:6;11433:20;;:::i;:::-;11423:30;;11462:33;11490:4;11482:6;11462:33;:::i;:::-;11372:129;;;:::o;11507:311::-;11584:4;11674:18;11666:6;11663:30;11660:56;;;11696:18;;:::i;:::-;11660:56;11746:4;11738:6;11734:17;11726:25;;11806:4;11800;11796:15;11788:23;;11507:311;;;:::o;11841:710::-;11937:5;11962:81;11978:64;12035:6;11978:64;:::i;:::-;11962:81;:::i;:::-;11953:90;;12063:5;12092:6;12085:5;12078:21;12126:4;12119:5;12115:16;12108:23;;12179:4;12171:6;12167:17;12159:6;12155:30;12208:3;12200:6;12197:15;12194:122;;;12227:79;;:::i;:::-;12194:122;12342:6;12325:220;12359:6;12354:3;12351:15;12325:220;;;12434:3;12463:37;12496:3;12484:10;12463:37;:::i;:::-;12458:3;12451:50;12530:4;12525:3;12521:14;12514:21;;12401:144;12385:4;12380:3;12376:14;12369:21;;12325:220;;;12329:21;11943:608;;11841:710;;;;;:::o;12574:370::-;12645:5;12694:3;12687:4;12679:6;12675:17;12671:27;12661:122;;12702:79;;:::i;:::-;12661:122;12819:6;12806:20;12844:94;12934:3;12926:6;12919:4;12911:6;12907:17;12844:94;:::i;:::-;12835:103;;12651:293;12574:370;;;;:::o;12950:539::-;13034:6;13083:2;13071:9;13062:7;13058:23;13054:32;13051:119;;;13089:79;;:::i;:::-;13051:119;13237:1;13226:9;13222:17;13209:31;13267:18;13259:6;13256:30;13253:117;;;13289:79;;:::i;:::-;13253:117;13394:78;13464:7;13455:6;13444:9;13440:22;13394:78;:::i;:::-;13384:88;;13180:302;12950:539;;;;:::o;13495:323::-;13551:6;13600:2;13588:9;13579:7;13575:23;13571:32;13568:119;;;13606:79;;:::i;:::-;13568:119;13726:1;13751:50;13793:7;13784:6;13773:9;13769:22;13751:50;:::i;:::-;13741:60;;13697:114;13495:323;;;;:::o;13824:474::-;13892:6;13900;13949:2;13937:9;13928:7;13924:23;13920:32;13917:119;;;13955:79;;:::i;:::-;13917:119;14075:1;14100:53;14145:7;14136:6;14125:9;14121:22;14100:53;:::i;:::-;14090:63;;14046:117;14202:2;14228:53;14273:7;14264:6;14253:9;14249:22;14228:53;:::i;:::-;14218:63;;14173:118;13824:474;;;;;:::o;14304:911::-;14399:6;14407;14415;14423;14431;14480:3;14468:9;14459:7;14455:23;14451:33;14448:120;;;14487:79;;:::i;:::-;14448:120;14607:1;14632:53;14677:7;14668:6;14657:9;14653:22;14632:53;:::i;:::-;14622:63;;14578:117;14734:2;14760:53;14805:7;14796:6;14785:9;14781:22;14760:53;:::i;:::-;14750:63;;14705:118;14862:2;14888:53;14933:7;14924:6;14913:9;14909:22;14888:53;:::i;:::-;14878:63;;14833:118;14990:2;15016:53;15061:7;15052:6;15041:9;15037:22;15016:53;:::i;:::-;15006:63;;14961:118;15118:3;15145:53;15190:7;15181:6;15170:9;15166:22;15145:53;:::i;:::-;15135:63;;15089:119;14304:911;;;;;;;;:::o;15238:568::-;15311:8;15321:6;15371:3;15364:4;15356:6;15352:17;15348:27;15338:122;;15379:79;;:::i;:::-;15338:122;15492:6;15479:20;15469:30;;15522:18;15514:6;15511:30;15508:117;;;15544:79;;:::i;:::-;15508:117;15658:4;15650:6;15646:17;15634:29;;15712:3;15704:4;15696:6;15692:17;15682:8;15678:32;15675:41;15672:128;;;15719:79;;:::i;:::-;15672:128;15238:568;;;;;:::o;15812:934::-;15934:6;15942;15950;15958;16007:2;15995:9;15986:7;15982:23;15978:32;15975:119;;;16013:79;;:::i;:::-;15975:119;16161:1;16150:9;16146:17;16133:31;16191:18;16183:6;16180:30;16177:117;;;16213:79;;:::i;:::-;16177:117;16326:80;16398:7;16389:6;16378:9;16374:22;16326:80;:::i;:::-;16308:98;;;;16104:312;16483:2;16472:9;16468:18;16455:32;16514:18;16506:6;16503:30;16500:117;;;16536:79;;:::i;:::-;16500:117;16649:80;16721:7;16712:6;16701:9;16697:22;16649:80;:::i;:::-;16631:98;;;;16426:313;15812:934;;;;;;;:::o;16752:182::-;16892:34;16888:1;16880:6;16876:14;16869:58;16752:182;:::o;16940:366::-;17082:3;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17179:93;17268:3;17179:93;:::i;:::-;17297:2;17292:3;17288:12;17281:19;;16940:366;;;:::o;17312:419::-;17478:4;17516:2;17505:9;17501:18;17493:26;;17565:9;17559:4;17555:20;17551:1;17540:9;17536:17;17529:47;17593:131;17719:4;17593:131;:::i;:::-;17585:139;;17312:419;;;:::o;17737:180::-;17785:77;17782:1;17775:88;17882:4;17879:1;17872:15;17906:4;17903:1;17896:15;17923:320;17967:6;18004:1;17998:4;17994:12;17984:22;;18051:1;18045:4;18041:12;18072:18;18062:81;;18128:4;18120:6;18116:17;18106:27;;18062:81;18190:2;18182:6;18179:14;18159:18;18156:38;18153:84;;;18209:18;;:::i;:::-;18153:84;17974:269;17923:320;;;:::o;18249:229::-;18389:34;18385:1;18377:6;18373:14;18366:58;18458:12;18453:2;18445:6;18441:15;18434:37;18249:229;:::o;18484:366::-;18626:3;18647:67;18711:2;18706:3;18647:67;:::i;:::-;18640:74;;18723:93;18812:3;18723:93;:::i;:::-;18841:2;18836:3;18832:12;18825:19;;18484:366;;;:::o;18856:419::-;19022:4;19060:2;19049:9;19045:18;19037:26;;19109:9;19103:4;19099:20;19095:1;19084:9;19080:17;19073:47;19137:131;19263:4;19137:131;:::i;:::-;19129:139;;18856:419;;;:::o;19281:181::-;19421:33;19417:1;19409:6;19405:14;19398:57;19281:181;:::o;19468:366::-;19610:3;19631:67;19695:2;19690:3;19631:67;:::i;:::-;19624:74;;19707:93;19796:3;19707:93;:::i;:::-;19825:2;19820:3;19816:12;19809:19;;19468:366;;;:::o;19840:419::-;20006:4;20044:2;20033:9;20029:18;20021:26;;20093:9;20087:4;20083:20;20079:1;20068:9;20064:17;20057:47;20121:131;20247:4;20121:131;:::i;:::-;20113:139;;19840:419;;;:::o;20265:180::-;20313:77;20310:1;20303:88;20410:4;20407:1;20400:15;20434:4;20431:1;20424:15;20451:348;20491:7;20514:20;20532:1;20514:20;:::i;:::-;20509:25;;20548:20;20566:1;20548:20;:::i;:::-;20543:25;;20736:1;20668:66;20664:74;20661:1;20658:81;20653:1;20646:9;20639:17;20635:105;20632:131;;;20743:18;;:::i;:::-;20632:131;20791:1;20788;20784:9;20773:20;;20451:348;;;;:::o;20805:179::-;20945:31;20941:1;20933:6;20929:14;20922:55;20805:179;:::o;20990:366::-;21132:3;21153:67;21217:2;21212:3;21153:67;:::i;:::-;21146:74;;21229:93;21318:3;21229:93;:::i;:::-;21347:2;21342:3;21338:12;21331:19;;20990:366;;;:::o;21362:419::-;21528:4;21566:2;21555:9;21551:18;21543:26;;21615:9;21609:4;21605:20;21601:1;21590:9;21586:17;21579:47;21643:131;21769:4;21643:131;:::i;:::-;21635:139;;21362:419;;;:::o;21787:221::-;21927:34;21923:1;21915:6;21911:14;21904:58;21996:4;21991:2;21983:6;21979:15;21972:29;21787:221;:::o;22014:366::-;22156:3;22177:67;22241:2;22236:3;22177:67;:::i;:::-;22170:74;;22253:93;22342:3;22253:93;:::i;:::-;22371:2;22366:3;22362:12;22355:19;;22014:366;;;:::o;22386:419::-;22552:4;22590:2;22579:9;22575:18;22567:26;;22639:9;22633:4;22629:20;22625:1;22614:9;22610:17;22603:47;22667:131;22793:4;22667:131;:::i;:::-;22659:139;;22386:419;;;:::o;22811:143::-;22868:5;22899:6;22893:13;22884:22;;22915:33;22942:5;22915:33;:::i;:::-;22811:143;;;;:::o;22960:351::-;23030:6;23079:2;23067:9;23058:7;23054:23;23050:32;23047:119;;;23085:79;;:::i;:::-;23047:119;23205:1;23230:64;23286:7;23277:6;23266:9;23262:22;23230:64;:::i;:::-;23220:74;;23176:128;22960:351;;;;:::o;23317:332::-;23438:4;23476:2;23465:9;23461:18;23453:26;;23489:71;23557:1;23546:9;23542:17;23533:6;23489:71;:::i;:::-;23570:72;23638:2;23627:9;23623:18;23614:6;23570:72;:::i;:::-;23317:332;;;;;:::o;23655:232::-;23795:34;23791:1;23783:6;23779:14;23772:58;23864:15;23859:2;23851:6;23847:15;23840:40;23655:232;:::o;23893:366::-;24035:3;24056:67;24120:2;24115:3;24056:67;:::i;:::-;24049:74;;24132:93;24221:3;24132:93;:::i;:::-;24250:2;24245:3;24241:12;24234:19;;23893:366;;;:::o;24265:419::-;24431:4;24469:2;24458:9;24454:18;24446:26;;24518:9;24512:4;24508:20;24504:1;24493:9;24489:17;24482:47;24546:131;24672:4;24546:131;:::i;:::-;24538:139;;24265:419;;;:::o;24690:229::-;24830:34;24826:1;24818:6;24814:14;24807:58;24899:12;24894:2;24886:6;24882:15;24875:37;24690:229;:::o;24925:366::-;25067:3;25088:67;25152:2;25147:3;25088:67;:::i;:::-;25081:74;;25164:93;25253:3;25164:93;:::i;:::-;25282:2;25277:3;25273:12;25266:19;;24925:366;;;:::o;25297:419::-;25463:4;25501:2;25490:9;25486:18;25478:26;;25550:9;25544:4;25540:20;25536:1;25525:9;25521:17;25514:47;25578:131;25704:4;25578:131;:::i;:::-;25570:139;;25297:419;;;:::o;25722:180::-;25770:77;25767:1;25760:88;25867:4;25864:1;25857:15;25891:4;25888:1;25881:15;25908:305;25948:3;25967:20;25985:1;25967:20;:::i;:::-;25962:25;;26001:20;26019:1;26001:20;:::i;:::-;25996:25;;26155:1;26087:66;26083:74;26080:1;26077:81;26074:107;;;26161:18;;:::i;:::-;26074:107;26205:1;26202;26198:9;26191:16;;25908:305;;;;:::o;26219:225::-;26359:34;26355:1;26347:6;26343:14;26336:58;26428:8;26423:2;26415:6;26411:15;26404:33;26219:225;:::o;26450:366::-;26592:3;26613:67;26677:2;26672:3;26613:67;:::i;:::-;26606:74;;26689:93;26778:3;26689:93;:::i;:::-;26807:2;26802:3;26798:12;26791:19;;26450:366;;;:::o;26822:419::-;26988:4;27026:2;27015:9;27011:18;27003:26;;27075:9;27069:4;27065:20;27061:1;27050:9;27046:17;27039:47;27103:131;27229:4;27103:131;:::i;:::-;27095:139;;26822:419;;;:::o;27247:233::-;27286:3;27309:24;27327:5;27309:24;:::i;:::-;27300:33;;27355:66;27348:5;27345:77;27342:103;;;27425:18;;:::i;:::-;27342:103;27472:1;27465:5;27461:13;27454:20;;27247:233;;;:::o;27486:223::-;27626:34;27622:1;27614:6;27610:14;27603:58;27695:6;27690:2;27682:6;27678:15;27671:31;27486:223;:::o;27715:366::-;27857:3;27878:67;27942:2;27937:3;27878:67;:::i;:::-;27871:74;;27954:93;28043:3;27954:93;:::i;:::-;28072:2;28067:3;28063:12;28056:19;;27715:366;;;:::o;28087:419::-;28253:4;28291:2;28280:9;28276:18;28268:26;;28340:9;28334:4;28330:20;28326:1;28315:9;28311:17;28304:47;28368:131;28494:4;28368:131;:::i;:::-;28360:139;;28087:419;;;:::o;28512:221::-;28652:34;28648:1;28640:6;28636:14;28629:58;28721:4;28716:2;28708:6;28704:15;28697:29;28512:221;:::o;28739:366::-;28881:3;28902:67;28966:2;28961:3;28902:67;:::i;:::-;28895:74;;28978:93;29067:3;28978:93;:::i;:::-;29096:2;29091:3;29087:12;29080:19;;28739:366;;;:::o;29111:419::-;29277:4;29315:2;29304:9;29300:18;29292:26;;29364:9;29358:4;29354:20;29350:1;29339:9;29335:17;29328:47;29392:131;29518:4;29392:131;:::i;:::-;29384:139;;29111:419;;;:::o;29536:224::-;29676:34;29672:1;29664:6;29660:14;29653:58;29745:7;29740:2;29732:6;29728:15;29721:32;29536:224;:::o;29766:366::-;29908:3;29929:67;29993:2;29988:3;29929:67;:::i;:::-;29922:74;;30005:93;30094:3;30005:93;:::i;:::-;30123:2;30118:3;30114:12;30107:19;;29766:366;;;:::o;30138:419::-;30304:4;30342:2;30331:9;30327:18;30319:26;;30391:9;30385:4;30381:20;30377:1;30366:9;30362:17;30355:47;30419:131;30545:4;30419:131;:::i;:::-;30411:139;;30138:419;;;:::o;30563:222::-;30703:34;30699:1;30691:6;30687:14;30680:58;30772:5;30767:2;30759:6;30755:15;30748:30;30563:222;:::o;30791:366::-;30933:3;30954:67;31018:2;31013:3;30954:67;:::i;:::-;30947:74;;31030:93;31119:3;31030:93;:::i;:::-;31148:2;31143:3;31139:12;31132:19;;30791:366;;;:::o;31163:419::-;31329:4;31367:2;31356:9;31352:18;31344:26;;31416:9;31410:4;31406:20;31402:1;31391:9;31387:17;31380:47;31444:131;31570:4;31444:131;:::i;:::-;31436:139;;31163:419;;;:::o;31588:228::-;31728:34;31724:1;31716:6;31712:14;31705:58;31797:11;31792:2;31784:6;31780:15;31773:36;31588:228;:::o;31822:366::-;31964:3;31985:67;32049:2;32044:3;31985:67;:::i;:::-;31978:74;;32061:93;32150:3;32061:93;:::i;:::-;32179:2;32174:3;32170:12;32163:19;;31822:366;;;:::o;32194:419::-;32360:4;32398:2;32387:9;32383:18;32375:26;;32447:9;32441:4;32437:20;32433:1;32422:9;32418:17;32411:47;32475:131;32601:4;32475:131;:::i;:::-;32467:139;;32194:419;;;:::o;32619:180::-;32759:32;32755:1;32747:6;32743:14;32736:56;32619:180;:::o;32805:366::-;32947:3;32968:67;33032:2;33027:3;32968:67;:::i;:::-;32961:74;;33044:93;33133:3;33044:93;:::i;:::-;33162:2;33157:3;33153:12;33146:19;;32805:366;;;:::o;33177:419::-;33343:4;33381:2;33370:9;33366:18;33358:26;;33430:9;33424:4;33420:20;33416:1;33405:9;33401:17;33394:47;33458:131;33584:4;33458:131;:::i;:::-;33450:139;;33177:419;;;:::o;33602:234::-;33742:34;33738:1;33730:6;33726:14;33719:58;33811:17;33806:2;33798:6;33794:15;33787:42;33602:234;:::o;33842:366::-;33984:3;34005:67;34069:2;34064:3;34005:67;:::i;:::-;33998:74;;34081:93;34170:3;34081:93;:::i;:::-;34199:2;34194:3;34190:12;34183:19;;33842:366;;;:::o;34214:419::-;34380:4;34418:2;34407:9;34403:18;34395:26;;34467:9;34461:4;34457:20;34453:1;34442:9;34438:17;34431:47;34495:131;34621:4;34495:131;:::i;:::-;34487:139;;34214:419;;;:::o;34639:227::-;34779:34;34775:1;34767:6;34763:14;34756:58;34848:10;34843:2;34835:6;34831:15;34824:35;34639:227;:::o;34872:366::-;35014:3;35035:67;35099:2;35094:3;35035:67;:::i;:::-;35028:74;;35111:93;35200:3;35111:93;:::i;:::-;35229:2;35224:3;35220:12;35213:19;;34872:366;;;:::o;35244:419::-;35410:4;35448:2;35437:9;35433:18;35425:26;;35497:9;35491:4;35487:20;35483:1;35472:9;35468:17;35461:47;35525:131;35651:4;35525:131;:::i;:::-;35517:139;;35244:419;;;:::o;35669:191::-;35709:4;35729:20;35747:1;35729:20;:::i;:::-;35724:25;;35763:20;35781:1;35763:20;:::i;:::-;35758:25;;35802:1;35799;35796:8;35793:34;;;35807:18;;:::i;:::-;35793:34;35852:1;35849;35845:9;35837:17;;35669:191;;;;:::o;35866:177::-;36006:29;36002:1;35994:6;35990:14;35983:53;35866:177;:::o;36049:366::-;36191:3;36212:67;36276:2;36271:3;36212:67;:::i;:::-;36205:74;;36288:93;36377:3;36288:93;:::i;:::-;36406:2;36401:3;36397:12;36390:19;;36049:366;;;:::o;36421:419::-;36587:4;36625:2;36614:9;36610:18;36602:26;;36674:9;36668:4;36664:20;36660:1;36649:9;36645:17;36638:47;36702:131;36828:4;36702:131;:::i;:::-;36694:139;;36421:419;;;:::o;36846:180::-;36894:77;36891:1;36884:88;36991:4;36988:1;36981:15;37015:4;37012:1;37005:15;37032:185;37072:1;37089:20;37107:1;37089:20;:::i;:::-;37084:25;;37123:20;37141:1;37123:20;:::i;:::-;37118:25;;37162:1;37152:35;;37167:18;;:::i;:::-;37152:35;37209:1;37206;37202:9;37197:14;;37032:185;;;;:::o;37223:220::-;37363:34;37359:1;37351:6;37347:14;37340:58;37432:3;37427:2;37419:6;37415:15;37408:28;37223:220;:::o;37449:366::-;37591:3;37612:67;37676:2;37671:3;37612:67;:::i;:::-;37605:74;;37688:93;37777:3;37688:93;:::i;:::-;37806:2;37801:3;37797:12;37790:19;;37449:366;;;:::o;37821:419::-;37987:4;38025:2;38014:9;38010:18;38002:26;;38074:9;38068:4;38064:20;38060:1;38049:9;38045:17;38038:47;38102:131;38228:4;38102:131;:::i;:::-;38094:139;;37821:419;;;:::o;38246:85::-;38291:7;38320:5;38309:16;;38246:85;;;:::o;38337:158::-;38395:9;38428:61;38446:42;38455:32;38481:5;38455:32;:::i;:::-;38446:42;:::i;:::-;38428:61;:::i;:::-;38415:74;;38337:158;;;:::o;38501:147::-;38596:45;38635:5;38596:45;:::i;:::-;38591:3;38584:58;38501:147;;:::o;38654:114::-;38721:6;38755:5;38749:12;38739:22;;38654:114;;;:::o;38774:184::-;38873:11;38907:6;38902:3;38895:19;38947:4;38942:3;38938:14;38923:29;;38774:184;;;;:::o;38964:132::-;39031:4;39054:3;39046:11;;39084:4;39079:3;39075:14;39067:22;;38964:132;;;:::o;39102:108::-;39179:24;39197:5;39179:24;:::i;:::-;39174:3;39167:37;39102:108;;:::o;39216:179::-;39285:10;39306:46;39348:3;39340:6;39306:46;:::i;:::-;39384:4;39379:3;39375:14;39361:28;;39216:179;;;;:::o;39401:113::-;39471:4;39503;39498:3;39494:14;39486:22;;39401:113;;;:::o;39550:732::-;39669:3;39698:54;39746:5;39698:54;:::i;:::-;39768:86;39847:6;39842:3;39768:86;:::i;:::-;39761:93;;39878:56;39928:5;39878:56;:::i;:::-;39957:7;39988:1;39973:284;39998:6;39995:1;39992:13;39973:284;;;40074:6;40068:13;40101:63;40160:3;40145:13;40101:63;:::i;:::-;40094:70;;40187:60;40240:6;40187:60;:::i;:::-;40177:70;;40033:224;40020:1;40017;40013:9;40008:14;;39973:284;;;39977:14;40273:3;40266:10;;39674:608;;;39550:732;;;;:::o;40288:831::-;40551:4;40589:3;40578:9;40574:19;40566:27;;40603:71;40671:1;40660:9;40656:17;40647:6;40603:71;:::i;:::-;40684:80;40760:2;40749:9;40745:18;40736:6;40684:80;:::i;:::-;40811:9;40805:4;40801:20;40796:2;40785:9;40781:18;40774:48;40839:108;40942:4;40933:6;40839:108;:::i;:::-;40831:116;;40957:72;41025:2;41014:9;41010:18;41001:6;40957:72;:::i;:::-;41039:73;41107:3;41096:9;41092:19;41083:6;41039:73;:::i;:::-;40288:831;;;;;;;;:::o;41125:807::-;41374:4;41412:3;41401:9;41397:19;41389:27;;41426:71;41494:1;41483:9;41479:17;41470:6;41426:71;:::i;:::-;41507:72;41575:2;41564:9;41560:18;41551:6;41507:72;:::i;:::-;41589:80;41665:2;41654:9;41650:18;41641:6;41589:80;:::i;:::-;41679;41755:2;41744:9;41740:18;41731:6;41679:80;:::i;:::-;41769:73;41837:3;41826:9;41822:19;41813:6;41769:73;:::i;:::-;41852;41920:3;41909:9;41905:19;41896:6;41852:73;:::i;:::-;41125:807;;;;;;;;;:::o;41938:143::-;41995:5;42026:6;42020:13;42011:22;;42042:33;42069:5;42042:33;:::i;:::-;41938:143;;;;:::o;42087:663::-;42175:6;42183;42191;42240:2;42228:9;42219:7;42215:23;42211:32;42208:119;;;42246:79;;:::i;:::-;42208:119;42366:1;42391:64;42447:7;42438:6;42427:9;42423:22;42391:64;:::i;:::-;42381:74;;42337:128;42504:2;42530:64;42586:7;42577:6;42566:9;42562:22;42530:64;:::i;:::-;42520:74;;42475:129;42643:2;42669:64;42725:7;42716:6;42705:9;42701:22;42669:64;:::i;:::-;42659:74;;42614:129;42087:663;;;;;:::o

Swarm Source

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