ETH Price: $3,717.69 (+3.45%)

Token

ERC-20: CrypTIP (CTIP)
 

Overview

Max Total Supply

1,000,000,000 CTIP

Holders

408

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CrypTIP

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-15
*/

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

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

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

contract CrypTIP 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;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "CrypTIP";
    string private _symbol = "CTIP";
    uint8 private _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10 ** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public _maxBuyAmount = 5000000 * 10** _decimals;
    uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH
    uint public ethSellAmount = 1000000000000000000;  //1 ETH
    address public buyBackAddress = 0x800C3C9b2b132543917cbB5a54A6E99d47e39A7B;
    address public marketingAddress = 0x72B75111d243Cba98C8746cE261E390366616aA9;
    address public devAddress = 0x16ce829696166C382e1Dbbb5A1E23e4203Bd06D1;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);
    struct Distribution {
        uint256 devTeam;
        uint256 marketing;
        uint256 dividend;        
        uint256 buyBack;
    }

    struct TaxFees {
        uint256 reflectionBuyFee;
        uint256 liquidityBuyFee;
        uint256 sellReflectionFee;
        uint256 sellLiquidityFee;
        uint256 largeSellFee;
    }
    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    DividendTracker private dividendTracker;

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[buyBackAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromRewards[marketingAddress] = true;
        _isExcludedFromRewards[_msgSender()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[buyBackAddress] = true;
        _isExcludedFromRewards[devAddress] = true;
        //multisig addresses
        _isExcludedFromRewards[0x7a38eD4B61F5484B28E75505dD019C94A1537fed] = true;
        _isExcludedFromRewards[0xa6C8e281dC35eC14082A8FBe542DF40E1AC81eeD] = true;
        _isExcludedFromRewards[0xc633D6733b26fdf9f2209a91994F236291aE91B2] = true;
        taxFees = TaxFees(0,8,0,12,10);
        distribution = Distribution(30, 20, 30, 20);
        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 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 excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    receive() external payable {}

    function _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.reflectionBuyFee;
            if(isSellTxn) {
                reflectionFee = taxFees.sellReflectionFee;
            }
        }
        return _amount.mul(reflectionFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 totalLiquidityFee = 0;
        if(doTakeFees) {
            totalLiquidityFee = taxFees.liquidityBuyFee;
            if(isSellTxn) {
                totalLiquidityFee = taxFees.sellLiquidityFee;
                uint ethPrice = getEthPrice(_amount);
                if(ethPrice >= ethSellAmount) {
                    totalLiquidityFee = totalLiquidityFee.add(taxFees.largeSellFee);
                }
            }
        }
        return _amount.mul(totalLiquidityFee).div(10**2);
    }

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

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

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

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        //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();
            // dividendTracker.calculateDividendDistribution();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to] && isTaxFreeTransfer) {
            takeFees = false;
        }
        _tokenTransfer(from, to, amount, takeFees, isSell);
    }

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

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

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

    }

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell) private {
        doTakeFees = takeFees;
        isSellTxn = isSell;
        _transferStandard(sender, recipient, amount);
        try dividendTracker.setTokenBalance(sender) {} catch{}
        try dividendTracker.setTokenBalance(recipient) {} catch{}
        try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
            emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
        }catch {}
    }

    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 IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

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

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

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

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

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

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

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

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    uint256 public totalDividendsDistributed;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "CrypTIPTracker";
    string private _symbol = "CTIPTRACKER";
    uint8 private _decimals = 9;
    uint public processedEthFromContract = 0;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    address[] keys;
    uint256 public minimumTokenBalanceForDividends = 1000000 * 10 **  _decimals;
    CrypTIP private crypTIP;
    bool public doCalculation = false;
    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from,uint256 weiAmount);
    event DividendWithdrawn(address indexed to,uint256 weiAmount);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    receive() external payable {
        distributeDividends();
    }

    function setCrypTIPContract(address contractAddr) external onlyOwner {
        crypTIP = CrypTIP(payable(contractAddr));
    }

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

    function excludeFromDividends(address account) external onlyOwner {
        require(!crypTIP.isExcludedFromRewards(account), "Account already excluded from dividends");
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAddExchange","type":"bool"}],"name":"addRemoveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethSellAmount_","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthSwapSellSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"devAddr","type":"address"},{"internalType":"address","name":"buyBack","type":"address"},{"internalType":"address","name":"marketingAddr","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"reflectionBuyFee","type":"uint256"},{"internalType":"uint256","name":"liquidityBuyFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","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"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600781526020017f4372797054495000000000000000000000000000000000000000000000000000815250600890805190602001906200005192919062000ba4565b506040518060400160405280600481526020017f4354495000000000000000000000000000000000000000000000000000000000815250600990805190602001906200009f92919062000ba4565b506009600a60006101000a81548160ff021916908360ff160217905550600a60009054906101000a900460ff16600a620000da919062000dee565b633b9aca00620000eb919062000e3f565b600b55600b5460001962000100919062000ecf565b6000196200010f919062000f07565b600c55737a250d5630b4cf539739df2c5dacb4c659f2488d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60156101000a81548160ff0219169083151502179055506000600f60166101000a81548160ff021916908315150217905550600a60009054906101000a900460ff16600a620001fd919062000dee565b624c4b406200020d919062000e3f565b601055670429d069189e0000601155670de0b6b3a764000060125573800c3c9b2b132543917cbb5a54a6e99d47e39a7b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507372b75111d243cba98c8746ce261e390366616aa9601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507316ce829696166c382e1dbbb5a1e23e4203bd06d1601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c3506017553480156200037d57600080fd5b5060006200039062000b7360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600160006200044562000b7360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600560006200049962000b7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560006200050062000b7360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006200074f62000b7360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620007b662000b7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737a38ed4b61f5484b28e75505dd019c94a1537fed73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a6c8e281dc35ec14082a8fbe542df40e1ac81eed73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073c633d6733b26fdf9f2209a91994f236291ae91b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060a00160405280600081526020016008815260200160008152602001600c8152602001600a815250601960008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060800160405280601e815260200160148152602001601e81526020016014815250601e6000820151816000015560208201518160010155604082015181600201556060820151816003015590505062000b0462000b7360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405162000b65919062000f53565b60405180910390a362000fd4565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000bb29062000f9f565b90600052602060002090601f01602090048101928262000bd6576000855562000c22565b82601f1062000bf157805160ff191683800117855562000c22565b8280016001018555821562000c22579182015b8281111562000c2157825182559160200191906001019062000c04565b5b50905062000c31919062000c35565b5090565b5b8082111562000c5057600081600090555060010162000c36565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ce25780860481111562000cba5762000cb962000c54565b5b600185161562000cca5780820291505b808102905062000cda8562000c83565b945062000c9a565b94509492505050565b60008262000cfd576001905062000dd0565b8162000d0d576000905062000dd0565b816001811462000d26576002811462000d315762000d67565b600191505062000dd0565b60ff84111562000d465762000d4562000c54565b5b8360020a91508482111562000d605762000d5f62000c54565b5b5062000dd0565b5060208310610133831016604e8410600b841016171562000da15782820a90508381111562000d9b5762000d9a62000c54565b5b62000dd0565b62000db0848484600162000c90565b9250905081840481111562000dca5762000dc962000c54565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000dfb8262000dd7565b915062000e088362000de1565b925062000e377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ceb565b905092915050565b600062000e4c8262000dd7565b915062000e598362000dd7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e955762000e9462000c54565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000edc8262000dd7565b915062000ee98362000dd7565b92508262000efc5762000efb62000ea0565b5b828206905092915050565b600062000f148262000dd7565b915062000f218362000dd7565b92508282101562000f375762000f3662000c54565b5b828203905092915050565b62000f4d8162000dd7565b82525050565b600060208201905062000f6a600083018462000f42565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fb857607f821691505b60208210810362000fce5762000fcd62000f70565b5b50919050565b615e6a8062000fe46000396000f3fe6080604052600436106102b25760003560e01c8063783478ad116101755780639c1b8af5116100dc578063dc0aa9cf11610095578063e7dad4f91161006f578063e7dad4f914610ad8578063f2fde38b14610b15578063f34eb0b814610b3e578063fb6287d214610b67576102b9565b8063dc0aa9cf14610a49578063dcda6af314610a72578063dd62ed3e14610a9b576102b9565b80639c1b8af514610939578063a457c2d714610964578063a5ece941146109a1578063a9059cbb146109cc578063b6a9987214610a09578063c49b9a8014610a20576102b9565b80638da5cb5b1161012e5780638da5cb5b1461083d57806391142cb31461086857806395d89b411461089357806396848136146108be57806398acb5d8146108e75780639b0e2e8614610910576102b9565b8063783478ad1461072f5780637bde92bc1461075a57806385141a771461078357806385d4787b146107ae578063870d365d146107d7578063871c128d14610814576102b9565b806339509351116102195780635342acb4116101d25780635342acb41461061c57806354a5df1f146106595780635ee58efc1461068457806370a08231146106b2578063715018a6146106ef57806371cd56af14610706576102b9565b8063395093511461050c5780633ad10ef614610549578063441d801f1461057457806349bd5a5e1461059d5780634a74bb02146105c85780634e781233146105f3576102b9565b806313114a9d1161026b57806313114a9d146103e65780631694505e1461041157806318160ddd1461043c57806323b872dd146104675780632d838119146104a4578063313ce567146104e1576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e832273146103805780630fc709e5146103bd576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b90565b6040516102e0919061457a565b60405180910390f35b3480156102f557600080fd5b506102fe610b96565b60405161030b919061462e565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906146ee565b610c28565b6040516103489190614749565b60405180910390f35b34801561035d57600080fd5b50610366610c46565b604051610377959493929190614764565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a291906147b7565b610c6a565b6040516103b49190614749565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df91906147e4565b610cc0565b005b3480156103f257600080fd5b506103fb610d83565b604051610408919061457a565b60405180910390f35b34801561041d57600080fd5b50610426610d8d565b60405161043391906148aa565b60405180910390f35b34801561044857600080fd5b50610451610db3565b60405161045e919061457a565b60405180910390f35b34801561047357600080fd5b5061048e600480360381019061048991906148c5565b610dbd565b60405161049b9190614749565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614918565b610e96565b6040516104d8919061457a565b60405180910390f35b3480156104ed57600080fd5b506104f6610f04565b6040516105039190614961565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e91906146ee565b610f1b565b6040516105409190614749565b60405180910390f35b34801561055557600080fd5b5061055e610fce565b60405161056b919061498b565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190614a37565b610ff4565b005b3480156105a957600080fd5b506105b2611099565b6040516105bf919061498b565b60405180910390f35b3480156105d457600080fd5b506105dd6110bf565b6040516105ea9190614749565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614a97565b6110d2565b005b34801561062857600080fd5b50610643600480360381019061063e91906147b7565b611184565b6040516106509190614749565b60405180910390f35b34801561066557600080fd5b5061066e6111da565b60405161067b919061457a565b60405180910390f35b34801561069057600080fd5b506106996111e0565b6040516106a99493929190614ac4565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906147b7565b6111fe565b6040516106e6919061457a565b60405180910390f35b3480156106fb57600080fd5b5061070461124f565b005b34801561071257600080fd5b5061072d60048036038101906107289190614a37565b6113a2565b005b34801561073b57600080fd5b50610744611447565b604051610751919061498b565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190614b09565b61146d565b005b34801561078f57600080fd5b50610798611514565b6040516107a5919061498b565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190614c87565b61153a565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614918565b6115dd565b60405161080b919061457a565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614918565b611820565b005b34801561084957600080fd5b50610852611903565b60405161085f919061498b565b60405180910390f35b34801561087457600080fd5b5061087d61192c565b60405161088a919061457a565b60405180910390f35b34801561089f57600080fd5b506108a8611932565b6040516108b5919061462e565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e09190614a37565b6119c4565b005b3480156108f357600080fd5b5061090e600480360381019061090991906147b7565b611a69565b005b34801561091c57600080fd5b5061093760048036038101906109329190614c87565b611b42565b005b34801561094557600080fd5b5061094e611be5565b60405161095b919061457a565b60405180910390f35b34801561097057600080fd5b5061098b600480360381019061098691906146ee565b611beb565b6040516109989190614749565b60405180910390f35b3480156109ad57600080fd5b506109b6611cb8565b6040516109c3919061498b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906146ee565b611cde565b604051610a009190614749565b60405180910390f35b348015610a1557600080fd5b50610a1e611cfc565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190614a97565b61207c565b005b348015610a5557600080fd5b50610a706004803603810190610a6b9190614cd0565b612165565b005b348015610a7e57600080fd5b50610a996004803603810190610a949190614da1565b612233565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190614e22565b61239b565b604051610acf919061457a565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa91906147b7565b612422565b604051610b0c9190614749565b60405180910390f35b348015610b2157600080fd5b50610b3c6004803603810190610b3791906147b7565b612478565b005b348015610b4a57600080fd5b50610b656004803603810190610b609190614918565b612639565b005b348015610b7357600080fd5b50610b8e6004803603810190610b899190614e62565b6126e7565b005b60105481565b606060088054610ba590614ee4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190614ee4565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b5050505050905090565b6000610c3c610c35612844565b848461284c565b6001905092915050565b60198060000154908060010154908060020154908060030154908060040154905085565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610cc8612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90614f61565b60405180910390fd5b83601e6002018190555082601e6000018190555081601e6001018190555080601e6003018190555050505050565b6000600d54905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610dca848484612a15565b610e8b84610dd6612844565b610e8685604051806060016040528060288152602001615de860289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e3c612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328c9092919063ffffffff16565b61284c565b600190509392505050565b6000600c54821115610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490614ff3565b60405180910390fd5b6000610ee76132f0565b9050610efc818461331b90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610fc4610f28612844565b84610fbf8560036000610f39612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336590919063ffffffff16565b61284c565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ffc612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090614f61565b60405180910390fd5b6110948383836133c3565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60159054906101000a900460ff1681565b6110da612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90614f61565b60405180910390fd5b80600f60166101000a81548160ff02191690831515021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b601e8060000154908060010154908060020154908060030154905084565b6000611248600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e96565b9050919050565b611257612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113aa612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90614f61565b60405180910390fd5b61144283838361346e565b505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611475612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990614f61565b60405180910390fd5b81601281905550806011819055505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611542612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614f61565b60405180910390fd5b6115da816001613519565b50565b600080600267ffffffffffffffff8111156115fb576115fa614b49565b5b6040519080825280602002602001820160405280156116295781602001602082028036833780820191505090505b509050308160008151811061164157611640615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c9190615057565b816001815181106117205761171f615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117b7929190615142565b600060405180830381865afa1580156117d4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906117fd919061524a565b6001815181106118105761180f615013565b5b6020026020010151915050919050565b611828612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614f61565b60405180910390fd5b60175481036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090615305565b60405180910390fd5b8060178190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606009805461194190614ee4565b80601f016020809104026020016040519081016040528092919081815260200182805461196d90614ee4565b80156119ba5780601f1061198f576101008083540402835291602001916119ba565b820191906000526020600020905b81548152906001019060200180831161199d57829003601f168201915b5050505050905090565b6119cc612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090614f61565b60405180910390fd5b611a64838383613610565b505050565b611a71612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614f61565b60405180910390fd5b80602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b4a612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90614f61565b60405180910390fd5b611be2816000613519565b50565b60175481565b6000611cae611bf8612844565b84611ca985604051806060016040528060258152602001615e106025913960036000611c22612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328c9092919063ffffffff16565b61284c565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf2611ceb612844565b8484612a15565b6001905092915050565b611d04612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990615397565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190615057565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f609190615057565b6040518363ffffffff1660e01b8152600401611f7d9291906153b7565b6020604051808303816000875af1158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190615057565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b612084612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890614f61565b60405180910390fd5b80600f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161215a9190614749565b60405180910390a150565b61216d612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614f61565b60405180910390fd5b84601960000181905550836019600101819055508160196003018190555082601960020181905550806019600401819055505050505050565b600060056000612241612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90615452565b60405180910390fd5b828290508585905014612310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612307906154e4565b60405180910390fd5b5b8484905081101561239457612380612327612844565b86868481811061233a57612339615013565b5b905060200201602081019061234f91906147b7565b633b9aca0086868681811061236757612366615013565b5b905060200201356123789190615533565b6000806136bb565b60018161238d919061558d565b9050612311565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612480612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390615655565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c590614f61565b60405180910390fd5b633b9aca00816126de9190615533565b60108190555050565b6126ef612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614f61565b60405180910390fd5b82601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b2906156e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190615779565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a08919061457a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b9061580b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea9061589d565b60405180910390fd5b60008111612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d9061592f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe9061599b565b60405180910390fd5b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6e5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cad5750612c7d611903565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cec5750612cbc611903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050612cf6611903565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612d645750612d34611903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbe5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612ea757600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e675750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9d90615a2d565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612f4c5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9757601054831115612f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8d90615abf565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156130425750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806130ec5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130eb5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156130fe57600191506130fd61390b565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156131aa5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132005750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132565750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561326e5750600f60169054906101000a900460ff165b1561327857600090505b61328585858584866136bb565b5050505050565b60008383111582906132d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cb919061462e565b60405180910390fd5b50600083856132e39190615adf565b9050809150509392505050565b60008060006132fd613979565b91509150613314818361331b90919063ffffffff16565b9250505090565b600061335d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139c6565b905092915050565b6000808284613374919061558d565b9050838110156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090615b5f565b60405180910390fd5b8091505092915050565b60005b838390508110156134685760008484838181106133e6576133e5615013565b5b90506020020160208101906133fb91906147b7565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061346090615b7f565b9150506133c6565b50505050565b60005b8383905081101561351357600084848381811061349157613490615013565b5b90506020020160208101906134a691906147b7565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061350b90615b7f565b915050613471565b50505050565b60005b825181101561360b57600083828151811061353a57613539615013565b5b6020026020010151905082156135a7576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506135f7565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061360390615b7f565b91505061351c565b505050565b60005b838390508110156136b557600084848381811061363357613632615013565b5b905060200201602081019061364891906147b7565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136ad90615b7f565b915050613613565b50505050565b81601860006101000a81548160ff02191690831515021790555080601860016101000a81548160ff0219169083151502179055506136fa858585613a29565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1866040518263ffffffff1660e01b8152600401613755919061498b565b600060405180830381600087803b15801561376f57600080fd5b505af1925050508015613780575060015b50602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1856040518263ffffffff1660e01b81526004016137dc919061498b565b600060405180830381600087803b1580156137f657600080fd5b505af1925050508015613807575060015b50602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796017546040518263ffffffff1660e01b8152600401613865919061457a565b6060604051808303816000875af19250505080156138a157506040513d601f19601f8201168201806040525081019061389e9190615bc7565b60015b15613904573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a988585856017546040516138f89493929190614ac4565b60405180910390a35050505b5050505050565b6000613916306111fe565b9050600081111561397657600061392c826115dd565b9050601154811015801561394d5750600f60149054906101000a900460ff16155b80156139655750600f60159054906101000a900460ff165b156139745761397382613bf4565b5b505b50565b6000806000600c5490506000600b5490506139a1600b54600c5461331b90919063ffffffff16565b8210156139b957600c54600b549350935050506139c2565b81819350935050505b9091565b60008083118290613a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a04919061462e565b60405180910390fd5b5060008385613a1c9190615c49565b9050809150509392505050565b600080600080600080613a3b87613e40565b955095509550955095509550613a9986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e9c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336590919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7a81613ee6565b613b848483613fa3565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613be1919061457a565b60405180910390a3505050505050505050565b6001600f60146101000a81548160ff021916908315150217905550613c1881613fdd565b60004790506000613c4a6064613c3c601e600101548561422090919063ffffffff16565b61331b90919063ffffffff16565b90506000613c796064613c6b601e600201548661422090919063ffffffff16565b61331b90919063ffffffff16565b90506000613ca86064613c9a601e600001548761422090919063ffffffff16565b61331b90919063ffffffff16565b90506000613cd76064613cc9601e600301548861422090919063ffffffff16565b61331b90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613d41573d6000803e3d6000fd5b50613d4b8361429a565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613db3573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613e1c573d6000803e3d6000fd5b5050505050506000600f60146101000a81548160ff02191690831515021790555050565b6000806000806000806000806000613e578a61436a565b9250925092506000806000613e758d8686613e706132f0565b6143c4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613ede83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061328c565b905092915050565b6000613ef06132f0565b90506000613f07828461422090919063ffffffff16565b9050613f5b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336590919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613fb882600c54613e9c90919063ffffffff16565b600c81905550613fd381600d5461336590919063ffffffff16565b600d819055505050565b6000600267ffffffffffffffff811115613ffa57613ff9614b49565b5b6040519080825280602002602001820160405280156140285781602001602082028036833780820191505090505b50905030816000815181106140405761403f615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410b9190615057565b8160018151811061411f5761411e615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061418630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284c565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141ea959493929190615cb5565b600060405180830381600087803b15801561420457600080fd5b505af1158015614218573d6000803e3d6000fd5b505050505050565b60008083036142325760009050614294565b600082846142409190615533565b905082848261424f9190615c49565b1461428f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161428690615d81565b60405180910390fd5b809150505b92915050565b6000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142e290615dd2565b60006040518083038185875af1925050503d806000811461431f576040519150601f19603f3d011682016040523d82523d6000602084013e614324565b606091505b505090508015614366577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161435d919061457a565b60405180910390a15b5050565b6000806000806143798561444d565b90506000614386866144be565b905060006143af826143a1858a613e9c90919063ffffffff16565b613e9c90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806143dd858961422090919063ffffffff16565b905060006143f4868961422090919063ffffffff16565b9050600061440b878961422090919063ffffffff16565b90506000614434826144268587613e9c90919063ffffffff16565b613e9c90919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008060009050601860009054906101000a900460ff1615614490576019600001549050601860019054906101000a900460ff161561448f5760196002015490505b5b6144b660646144a8838661422090919063ffffffff16565b61331b90919063ffffffff16565b915050919050565b60008060009050601860009054906101000a900460ff1615614533576019600101549050601860019054906101000a900460ff1615614532576019600301549050600061450a846115dd565b905060125481106145305761452d6019600401548361336590919063ffffffff16565b91505b505b5b614559606461454b838661422090919063ffffffff16565b61331b90919063ffffffff16565b915050919050565b6000819050919050565b61457481614561565b82525050565b600060208201905061458f600083018461456b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145cf5780820151818401526020810190506145b4565b838111156145de576000848401525b50505050565b6000601f19601f8301169050919050565b600061460082614595565b61460a81856145a0565b935061461a8185602086016145b1565b614623816145e4565b840191505092915050565b6000602082019050818103600083015261464881846145f5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061468f82614664565b9050919050565b61469f81614684565b81146146aa57600080fd5b50565b6000813590506146bc81614696565b92915050565b6146cb81614561565b81146146d657600080fd5b50565b6000813590506146e8816146c2565b92915050565b600080604083850312156147055761470461465a565b5b6000614713858286016146ad565b9250506020614724858286016146d9565b9150509250929050565b60008115159050919050565b6147438161472e565b82525050565b600060208201905061475e600083018461473a565b92915050565b600060a082019050614779600083018861456b565b614786602083018761456b565b614793604083018661456b565b6147a0606083018561456b565b6147ad608083018461456b565b9695505050505050565b6000602082840312156147cd576147cc61465a565b5b60006147db848285016146ad565b91505092915050565b600080600080608085870312156147fe576147fd61465a565b5b600061480c878288016146d9565b945050602061481d878288016146d9565b935050604061482e878288016146d9565b925050606061483f878288016146d9565b91505092959194509250565b6000819050919050565b600061487061486b61486684614664565b61484b565b614664565b9050919050565b600061488282614855565b9050919050565b600061489482614877565b9050919050565b6148a481614889565b82525050565b60006020820190506148bf600083018461489b565b92915050565b6000806000606084860312156148de576148dd61465a565b5b60006148ec868287016146ad565b93505060206148fd868287016146ad565b925050604061490e868287016146d9565b9150509250925092565b60006020828403121561492e5761492d61465a565b5b600061493c848285016146d9565b91505092915050565b600060ff82169050919050565b61495b81614945565b82525050565b60006020820190506149766000830184614952565b92915050565b61498581614684565b82525050565b60006020820190506149a0600083018461497c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126149cb576149ca6149a6565b5b8235905067ffffffffffffffff8111156149e8576149e76149ab565b5b602083019150836020820283011115614a0457614a036149b0565b5b9250929050565b614a148161472e565b8114614a1f57600080fd5b50565b600081359050614a3181614a0b565b92915050565b600080600060408486031215614a5057614a4f61465a565b5b600084013567ffffffffffffffff811115614a6e57614a6d61465f565b5b614a7a868287016149b5565b93509350506020614a8d86828701614a22565b9150509250925092565b600060208284031215614aad57614aac61465a565b5b6000614abb84828501614a22565b91505092915050565b6000608082019050614ad9600083018761456b565b614ae6602083018661456b565b614af3604083018561456b565b614b00606083018461456b565b95945050505050565b60008060408385031215614b2057614b1f61465a565b5b6000614b2e858286016146d9565b9250506020614b3f858286016146d9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b81826145e4565b810181811067ffffffffffffffff82111715614ba057614b9f614b49565b5b80604052505050565b6000614bb3614650565b9050614bbf8282614b78565b919050565b600067ffffffffffffffff821115614bdf57614bde614b49565b5b602082029050602081019050919050565b6000614c03614bfe84614bc4565b614ba9565b90508083825260208201905060208402830185811115614c2657614c256149b0565b5b835b81811015614c4f5780614c3b88826146ad565b845260208401935050602081019050614c28565b5050509392505050565b600082601f830112614c6e57614c6d6149a6565b5b8135614c7e848260208601614bf0565b91505092915050565b600060208284031215614c9d57614c9c61465a565b5b600082013567ffffffffffffffff811115614cbb57614cba61465f565b5b614cc784828501614c59565b91505092915050565b600080600080600060a08688031215614cec57614ceb61465a565b5b6000614cfa888289016146d9565b9550506020614d0b888289016146d9565b9450506040614d1c888289016146d9565b9350506060614d2d888289016146d9565b9250506080614d3e888289016146d9565b9150509295509295909350565b60008083601f840112614d6157614d606149a6565b5b8235905067ffffffffffffffff811115614d7e57614d7d6149ab565b5b602083019150836020820283011115614d9a57614d996149b0565b5b9250929050565b60008060008060408587031215614dbb57614dba61465a565b5b600085013567ffffffffffffffff811115614dd957614dd861465f565b5b614de5878288016149b5565b9450945050602085013567ffffffffffffffff811115614e0857614e0761465f565b5b614e1487828801614d4b565b925092505092959194509250565b60008060408385031215614e3957614e3861465a565b5b6000614e47858286016146ad565b9250506020614e58858286016146ad565b9150509250929050565b600080600060608486031215614e7b57614e7a61465a565b5b6000614e89868287016146ad565b9350506020614e9a868287016146ad565b9250506040614eab868287016146ad565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614efc57607f821691505b602082108103614f0f57614f0e614eb5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f4b6020836145a0565b9150614f5682614f15565b602082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614fdd602a836145a0565b9150614fe882614f81565b604082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061505181614696565b92915050565b60006020828403121561506d5761506c61465a565b5b600061507b84828501615042565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150b981614684565b82525050565b60006150cb83836150b0565b60208301905092915050565b6000602082019050919050565b60006150ef82615084565b6150f9818561508f565b9350615104836150a0565b8060005b8381101561513557815161511c88826150bf565b9750615127836150d7565b925050600181019050615108565b5085935050505092915050565b6000604082019050615157600083018561456b565b818103602083015261516981846150e4565b90509392505050565b600067ffffffffffffffff82111561518d5761518c614b49565b5b602082029050602081019050919050565b6000815190506151ad816146c2565b92915050565b60006151c66151c184615172565b614ba9565b905080838252602082019050602084028301858111156151e9576151e86149b0565b5b835b8181101561521257806151fe888261519e565b8452602084019350506020810190506151eb565b5050509392505050565b600082601f830112615231576152306149a6565b5b81516152418482602086016151b3565b91505092915050565b6000602082840312156152605761525f61465a565b5b600082015167ffffffffffffffff81111561527e5761527d61465f565b5b61528a8482850161521c565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b60006152ef602c836145a0565b91506152fa82615293565b604082019050919050565b6000602082019050818103600083015261531e816152e2565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006153816022836145a0565b915061538c82615325565b604082019050919050565b600060208201905081810360008301526153b081615374565b9050919050565b60006040820190506153cc600083018561497c565b6153d9602083018461497c565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b600061543c602d836145a0565b9150615447826153e0565b604082019050919050565b6000602082019050818103600083015261546b8161542f565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b60006154ce602a836145a0565b91506154d982615472565b604082019050919050565b600060208201905081810360008301526154fd816154c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061553e82614561565b915061554983614561565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561558257615581615504565b5b828202905092915050565b600061559882614561565b91506155a383614561565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156155d8576155d7615504565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061563f6026836145a0565b915061564a826155e3565b604082019050919050565b6000602082019050818103600083015261566e81615632565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156d16024836145a0565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157636022836145a0565b915061576e82615707565b604082019050919050565b6000602082019050818103600083015261579281615756565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157f56025836145a0565b915061580082615799565b604082019050919050565b60006020820190508181036000830152615824816157e8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006158876023836145a0565b91506158928261582b565b604082019050919050565b600060208201905081810360008301526158b68161587a565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006159196029836145a0565b9150615924826158bd565b604082019050919050565b600060208201905081810360008301526159488161590c565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615985601e836145a0565b91506159908261594f565b602082019050919050565b600060208201905081810360008301526159b481615978565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615a17602f836145a0565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615aa96028836145a0565b9150615ab482615a4d565b604082019050919050565b60006020820190508181036000830152615ad881615a9c565b9050919050565b6000615aea82614561565b9150615af583614561565b925082821015615b0857615b07615504565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b49601b836145a0565b9150615b5482615b13565b602082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b6000615b8a82614561565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bbc57615bbb615504565b5b600182019050919050565b600080600060608486031215615be057615bdf61465a565b5b6000615bee8682870161519e565b9350506020615bff8682870161519e565b9250506040615c108682870161519e565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c5482614561565b9150615c5f83614561565b925082615c6f57615c6e615c1a565b5b828204905092915050565b6000819050919050565b6000615c9f615c9a615c9584615c7a565b61484b565b614561565b9050919050565b615caf81615c84565b82525050565b600060a082019050615cca600083018861456b565b615cd76020830187615ca6565b8181036040830152615ce981866150e4565b9050615cf8606083018561497c565b615d05608083018461456b565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615d6b6021836145a0565b9150615d7682615d0f565b604082019050919050565b60006020820190508181036000830152615d9a81615d5e565b9050919050565b600081905092915050565b50565b6000615dbc600083615da1565b9150615dc782615dac565b600082019050919050565b6000615ddd82615daf565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b6cab3c453e6e3de871418a175b185eec16762b2d16a1661291e40266b6641fd64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063783478ad116101755780639c1b8af5116100dc578063dc0aa9cf11610095578063e7dad4f91161006f578063e7dad4f914610ad8578063f2fde38b14610b15578063f34eb0b814610b3e578063fb6287d214610b67576102b9565b8063dc0aa9cf14610a49578063dcda6af314610a72578063dd62ed3e14610a9b576102b9565b80639c1b8af514610939578063a457c2d714610964578063a5ece941146109a1578063a9059cbb146109cc578063b6a9987214610a09578063c49b9a8014610a20576102b9565b80638da5cb5b1161012e5780638da5cb5b1461083d57806391142cb31461086857806395d89b411461089357806396848136146108be57806398acb5d8146108e75780639b0e2e8614610910576102b9565b8063783478ad1461072f5780637bde92bc1461075a57806385141a771461078357806385d4787b146107ae578063870d365d146107d7578063871c128d14610814576102b9565b806339509351116102195780635342acb4116101d25780635342acb41461061c57806354a5df1f146106595780635ee58efc1461068457806370a08231146106b2578063715018a6146106ef57806371cd56af14610706576102b9565b8063395093511461050c5780633ad10ef614610549578063441d801f1461057457806349bd5a5e1461059d5780634a74bb02146105c85780634e781233146105f3576102b9565b806313114a9d1161026b57806313114a9d146103e65780631694505e1461041157806318160ddd1461043c57806323b872dd146104675780632d838119146104a4578063313ce567146104e1576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e832273146103805780630fc709e5146103bd576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b90565b6040516102e0919061457a565b60405180910390f35b3480156102f557600080fd5b506102fe610b96565b60405161030b919061462e565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906146ee565b610c28565b6040516103489190614749565b60405180910390f35b34801561035d57600080fd5b50610366610c46565b604051610377959493929190614764565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a291906147b7565b610c6a565b6040516103b49190614749565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df91906147e4565b610cc0565b005b3480156103f257600080fd5b506103fb610d83565b604051610408919061457a565b60405180910390f35b34801561041d57600080fd5b50610426610d8d565b60405161043391906148aa565b60405180910390f35b34801561044857600080fd5b50610451610db3565b60405161045e919061457a565b60405180910390f35b34801561047357600080fd5b5061048e600480360381019061048991906148c5565b610dbd565b60405161049b9190614749565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614918565b610e96565b6040516104d8919061457a565b60405180910390f35b3480156104ed57600080fd5b506104f6610f04565b6040516105039190614961565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e91906146ee565b610f1b565b6040516105409190614749565b60405180910390f35b34801561055557600080fd5b5061055e610fce565b60405161056b919061498b565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190614a37565b610ff4565b005b3480156105a957600080fd5b506105b2611099565b6040516105bf919061498b565b60405180910390f35b3480156105d457600080fd5b506105dd6110bf565b6040516105ea9190614749565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614a97565b6110d2565b005b34801561062857600080fd5b50610643600480360381019061063e91906147b7565b611184565b6040516106509190614749565b60405180910390f35b34801561066557600080fd5b5061066e6111da565b60405161067b919061457a565b60405180910390f35b34801561069057600080fd5b506106996111e0565b6040516106a99493929190614ac4565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906147b7565b6111fe565b6040516106e6919061457a565b60405180910390f35b3480156106fb57600080fd5b5061070461124f565b005b34801561071257600080fd5b5061072d60048036038101906107289190614a37565b6113a2565b005b34801561073b57600080fd5b50610744611447565b604051610751919061498b565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190614b09565b61146d565b005b34801561078f57600080fd5b50610798611514565b6040516107a5919061498b565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190614c87565b61153a565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614918565b6115dd565b60405161080b919061457a565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614918565b611820565b005b34801561084957600080fd5b50610852611903565b60405161085f919061498b565b60405180910390f35b34801561087457600080fd5b5061087d61192c565b60405161088a919061457a565b60405180910390f35b34801561089f57600080fd5b506108a8611932565b6040516108b5919061462e565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e09190614a37565b6119c4565b005b3480156108f357600080fd5b5061090e600480360381019061090991906147b7565b611a69565b005b34801561091c57600080fd5b5061093760048036038101906109329190614c87565b611b42565b005b34801561094557600080fd5b5061094e611be5565b60405161095b919061457a565b60405180910390f35b34801561097057600080fd5b5061098b600480360381019061098691906146ee565b611beb565b6040516109989190614749565b60405180910390f35b3480156109ad57600080fd5b506109b6611cb8565b6040516109c3919061498b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906146ee565b611cde565b604051610a009190614749565b60405180910390f35b348015610a1557600080fd5b50610a1e611cfc565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190614a97565b61207c565b005b348015610a5557600080fd5b50610a706004803603810190610a6b9190614cd0565b612165565b005b348015610a7e57600080fd5b50610a996004803603810190610a949190614da1565b612233565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190614e22565b61239b565b604051610acf919061457a565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa91906147b7565b612422565b604051610b0c9190614749565b60405180910390f35b348015610b2157600080fd5b50610b3c6004803603810190610b3791906147b7565b612478565b005b348015610b4a57600080fd5b50610b656004803603810190610b609190614918565b612639565b005b348015610b7357600080fd5b50610b8e6004803603810190610b899190614e62565b6126e7565b005b60105481565b606060088054610ba590614ee4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190614ee4565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b5050505050905090565b6000610c3c610c35612844565b848461284c565b6001905092915050565b60198060000154908060010154908060020154908060030154908060040154905085565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610cc8612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90614f61565b60405180910390fd5b83601e6002018190555082601e6000018190555081601e6001018190555080601e6003018190555050505050565b6000600d54905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610dca848484612a15565b610e8b84610dd6612844565b610e8685604051806060016040528060288152602001615de860289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e3c612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328c9092919063ffffffff16565b61284c565b600190509392505050565b6000600c54821115610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490614ff3565b60405180910390fd5b6000610ee76132f0565b9050610efc818461331b90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610fc4610f28612844565b84610fbf8560036000610f39612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336590919063ffffffff16565b61284c565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ffc612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090614f61565b60405180910390fd5b6110948383836133c3565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60159054906101000a900460ff1681565b6110da612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90614f61565b60405180910390fd5b80600f60166101000a81548160ff02191690831515021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b601e8060000154908060010154908060020154908060030154905084565b6000611248600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e96565b9050919050565b611257612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113aa612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90614f61565b60405180910390fd5b61144283838361346e565b505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611475612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990614f61565b60405180910390fd5b81601281905550806011819055505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611542612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614f61565b60405180910390fd5b6115da816001613519565b50565b600080600267ffffffffffffffff8111156115fb576115fa614b49565b5b6040519080825280602002602001820160405280156116295781602001602082028036833780820191505090505b509050308160008151811061164157611640615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c9190615057565b816001815181106117205761171f615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117b7929190615142565b600060405180830381865afa1580156117d4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906117fd919061524a565b6001815181106118105761180f615013565b5b6020026020010151915050919050565b611828612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac90614f61565b60405180910390fd5b60175481036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090615305565b60405180910390fd5b8060178190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606009805461194190614ee4565b80601f016020809104026020016040519081016040528092919081815260200182805461196d90614ee4565b80156119ba5780601f1061198f576101008083540402835291602001916119ba565b820191906000526020600020905b81548152906001019060200180831161199d57829003601f168201915b5050505050905090565b6119cc612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090614f61565b60405180910390fd5b611a64838383613610565b505050565b611a71612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614f61565b60405180910390fd5b80602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b4a612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90614f61565b60405180910390fd5b611be2816000613519565b50565b60175481565b6000611cae611bf8612844565b84611ca985604051806060016040528060258152602001615e106025913960036000611c22612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328c9092919063ffffffff16565b61284c565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf2611ceb612844565b8484612a15565b6001905092915050565b611d04612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990615397565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190615057565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f609190615057565b6040518363ffffffff1660e01b8152600401611f7d9291906153b7565b6020604051808303816000875af1158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190615057565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b612084612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890614f61565b60405180910390fd5b80600f60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161215a9190614749565b60405180910390a150565b61216d612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614f61565b60405180910390fd5b84601960000181905550836019600101819055508160196003018190555082601960020181905550806019600401819055505050505050565b600060056000612241612844565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90615452565b60405180910390fd5b828290508585905014612310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612307906154e4565b60405180910390fd5b5b8484905081101561239457612380612327612844565b86868481811061233a57612339615013565b5b905060200201602081019061234f91906147b7565b633b9aca0086868681811061236757612366615013565b5b905060200201356123789190615533565b6000806136bb565b60018161238d919061558d565b9050612311565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612480612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390615655565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c590614f61565b60405180910390fd5b633b9aca00816126de9190615533565b60108190555050565b6126ef612844565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614f61565b60405180910390fd5b82601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b2906156e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190615779565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a08919061457a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b9061580b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea9061589d565b60405180910390fd5b60008111612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d9061592f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe9061599b565b60405180910390fd5b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6e5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cad5750612c7d611903565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cec5750612cbc611903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050612cf6611903565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612d645750612d34611903565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbe5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612ea757600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e675750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9d90615a2d565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612f4c5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9757601054831115612f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8d90615abf565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156130425750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806130ec5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130eb5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156130fe57600191506130fd61390b565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156131aa5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132005750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132565750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561326e5750600f60169054906101000a900460ff165b1561327857600090505b61328585858584866136bb565b5050505050565b60008383111582906132d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cb919061462e565b60405180910390fd5b50600083856132e39190615adf565b9050809150509392505050565b60008060006132fd613979565b91509150613314818361331b90919063ffffffff16565b9250505090565b600061335d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139c6565b905092915050565b6000808284613374919061558d565b9050838110156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090615b5f565b60405180910390fd5b8091505092915050565b60005b838390508110156134685760008484838181106133e6576133e5615013565b5b90506020020160208101906133fb91906147b7565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061346090615b7f565b9150506133c6565b50505050565b60005b8383905081101561351357600084848381811061349157613490615013565b5b90506020020160208101906134a691906147b7565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061350b90615b7f565b915050613471565b50505050565b60005b825181101561360b57600083828151811061353a57613539615013565b5b6020026020010151905082156135a7576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506135f7565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061360390615b7f565b91505061351c565b505050565b60005b838390508110156136b557600084848381811061363357613632615013565b5b905060200201602081019061364891906147b7565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136ad90615b7f565b915050613613565b50505050565b81601860006101000a81548160ff02191690831515021790555080601860016101000a81548160ff0219169083151502179055506136fa858585613a29565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1866040518263ffffffff1660e01b8152600401613755919061498b565b600060405180830381600087803b15801561376f57600080fd5b505af1925050508015613780575060015b50602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1856040518263ffffffff1660e01b81526004016137dc919061498b565b600060405180830381600087803b1580156137f657600080fd5b505af1925050508015613807575060015b50602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796017546040518263ffffffff1660e01b8152600401613865919061457a565b6060604051808303816000875af19250505080156138a157506040513d601f19601f8201168201806040525081019061389e9190615bc7565b60015b15613904573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a988585856017546040516138f89493929190614ac4565b60405180910390a35050505b5050505050565b6000613916306111fe565b9050600081111561397657600061392c826115dd565b9050601154811015801561394d5750600f60149054906101000a900460ff16155b80156139655750600f60159054906101000a900460ff165b156139745761397382613bf4565b5b505b50565b6000806000600c5490506000600b5490506139a1600b54600c5461331b90919063ffffffff16565b8210156139b957600c54600b549350935050506139c2565b81819350935050505b9091565b60008083118290613a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a04919061462e565b60405180910390fd5b5060008385613a1c9190615c49565b9050809150509392505050565b600080600080600080613a3b87613e40565b955095509550955095509550613a9986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e9c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336590919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b7a81613ee6565b613b848483613fa3565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613be1919061457a565b60405180910390a3505050505050505050565b6001600f60146101000a81548160ff021916908315150217905550613c1881613fdd565b60004790506000613c4a6064613c3c601e600101548561422090919063ffffffff16565b61331b90919063ffffffff16565b90506000613c796064613c6b601e600201548661422090919063ffffffff16565b61331b90919063ffffffff16565b90506000613ca86064613c9a601e600001548761422090919063ffffffff16565b61331b90919063ffffffff16565b90506000613cd76064613cc9601e600301548861422090919063ffffffff16565b61331b90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613d41573d6000803e3d6000fd5b50613d4b8361429a565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613db3573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613e1c573d6000803e3d6000fd5b5050505050506000600f60146101000a81548160ff02191690831515021790555050565b6000806000806000806000806000613e578a61436a565b9250925092506000806000613e758d8686613e706132f0565b6143c4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613ede83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061328c565b905092915050565b6000613ef06132f0565b90506000613f07828461422090919063ffffffff16565b9050613f5b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336590919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613fb882600c54613e9c90919063ffffffff16565b600c81905550613fd381600d5461336590919063ffffffff16565b600d819055505050565b6000600267ffffffffffffffff811115613ffa57613ff9614b49565b5b6040519080825280602002602001820160405280156140285781602001602082028036833780820191505090505b50905030816000815181106140405761403f615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410b9190615057565b8160018151811061411f5761411e615013565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061418630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284c565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141ea959493929190615cb5565b600060405180830381600087803b15801561420457600080fd5b505af1158015614218573d6000803e3d6000fd5b505050505050565b60008083036142325760009050614294565b600082846142409190615533565b905082848261424f9190615c49565b1461428f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161428690615d81565b60405180910390fd5b809150505b92915050565b6000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142e290615dd2565b60006040518083038185875af1925050503d806000811461431f576040519150601f19603f3d011682016040523d82523d6000602084013e614324565b606091505b505090508015614366577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161435d919061457a565b60405180910390a15b5050565b6000806000806143798561444d565b90506000614386866144be565b905060006143af826143a1858a613e9c90919063ffffffff16565b613e9c90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806143dd858961422090919063ffffffff16565b905060006143f4868961422090919063ffffffff16565b9050600061440b878961422090919063ffffffff16565b90506000614434826144268587613e9c90919063ffffffff16565b613e9c90919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008060009050601860009054906101000a900460ff1615614490576019600001549050601860019054906101000a900460ff161561448f5760196002015490505b5b6144b660646144a8838661422090919063ffffffff16565b61331b90919063ffffffff16565b915050919050565b60008060009050601860009054906101000a900460ff1615614533576019600101549050601860019054906101000a900460ff1615614532576019600301549050600061450a846115dd565b905060125481106145305761452d6019600401548361336590919063ffffffff16565b91505b505b5b614559606461454b838661422090919063ffffffff16565b61331b90919063ffffffff16565b915050919050565b6000819050919050565b61457481614561565b82525050565b600060208201905061458f600083018461456b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145cf5780820151818401526020810190506145b4565b838111156145de576000848401525b50505050565b6000601f19601f8301169050919050565b600061460082614595565b61460a81856145a0565b935061461a8185602086016145b1565b614623816145e4565b840191505092915050565b6000602082019050818103600083015261464881846145f5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061468f82614664565b9050919050565b61469f81614684565b81146146aa57600080fd5b50565b6000813590506146bc81614696565b92915050565b6146cb81614561565b81146146d657600080fd5b50565b6000813590506146e8816146c2565b92915050565b600080604083850312156147055761470461465a565b5b6000614713858286016146ad565b9250506020614724858286016146d9565b9150509250929050565b60008115159050919050565b6147438161472e565b82525050565b600060208201905061475e600083018461473a565b92915050565b600060a082019050614779600083018861456b565b614786602083018761456b565b614793604083018661456b565b6147a0606083018561456b565b6147ad608083018461456b565b9695505050505050565b6000602082840312156147cd576147cc61465a565b5b60006147db848285016146ad565b91505092915050565b600080600080608085870312156147fe576147fd61465a565b5b600061480c878288016146d9565b945050602061481d878288016146d9565b935050604061482e878288016146d9565b925050606061483f878288016146d9565b91505092959194509250565b6000819050919050565b600061487061486b61486684614664565b61484b565b614664565b9050919050565b600061488282614855565b9050919050565b600061489482614877565b9050919050565b6148a481614889565b82525050565b60006020820190506148bf600083018461489b565b92915050565b6000806000606084860312156148de576148dd61465a565b5b60006148ec868287016146ad565b93505060206148fd868287016146ad565b925050604061490e868287016146d9565b9150509250925092565b60006020828403121561492e5761492d61465a565b5b600061493c848285016146d9565b91505092915050565b600060ff82169050919050565b61495b81614945565b82525050565b60006020820190506149766000830184614952565b92915050565b61498581614684565b82525050565b60006020820190506149a0600083018461497c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126149cb576149ca6149a6565b5b8235905067ffffffffffffffff8111156149e8576149e76149ab565b5b602083019150836020820283011115614a0457614a036149b0565b5b9250929050565b614a148161472e565b8114614a1f57600080fd5b50565b600081359050614a3181614a0b565b92915050565b600080600060408486031215614a5057614a4f61465a565b5b600084013567ffffffffffffffff811115614a6e57614a6d61465f565b5b614a7a868287016149b5565b93509350506020614a8d86828701614a22565b9150509250925092565b600060208284031215614aad57614aac61465a565b5b6000614abb84828501614a22565b91505092915050565b6000608082019050614ad9600083018761456b565b614ae6602083018661456b565b614af3604083018561456b565b614b00606083018461456b565b95945050505050565b60008060408385031215614b2057614b1f61465a565b5b6000614b2e858286016146d9565b9250506020614b3f858286016146d9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b81826145e4565b810181811067ffffffffffffffff82111715614ba057614b9f614b49565b5b80604052505050565b6000614bb3614650565b9050614bbf8282614b78565b919050565b600067ffffffffffffffff821115614bdf57614bde614b49565b5b602082029050602081019050919050565b6000614c03614bfe84614bc4565b614ba9565b90508083825260208201905060208402830185811115614c2657614c256149b0565b5b835b81811015614c4f5780614c3b88826146ad565b845260208401935050602081019050614c28565b5050509392505050565b600082601f830112614c6e57614c6d6149a6565b5b8135614c7e848260208601614bf0565b91505092915050565b600060208284031215614c9d57614c9c61465a565b5b600082013567ffffffffffffffff811115614cbb57614cba61465f565b5b614cc784828501614c59565b91505092915050565b600080600080600060a08688031215614cec57614ceb61465a565b5b6000614cfa888289016146d9565b9550506020614d0b888289016146d9565b9450506040614d1c888289016146d9565b9350506060614d2d888289016146d9565b9250506080614d3e888289016146d9565b9150509295509295909350565b60008083601f840112614d6157614d606149a6565b5b8235905067ffffffffffffffff811115614d7e57614d7d6149ab565b5b602083019150836020820283011115614d9a57614d996149b0565b5b9250929050565b60008060008060408587031215614dbb57614dba61465a565b5b600085013567ffffffffffffffff811115614dd957614dd861465f565b5b614de5878288016149b5565b9450945050602085013567ffffffffffffffff811115614e0857614e0761465f565b5b614e1487828801614d4b565b925092505092959194509250565b60008060408385031215614e3957614e3861465a565b5b6000614e47858286016146ad565b9250506020614e58858286016146ad565b9150509250929050565b600080600060608486031215614e7b57614e7a61465a565b5b6000614e89868287016146ad565b9350506020614e9a868287016146ad565b9250506040614eab868287016146ad565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614efc57607f821691505b602082108103614f0f57614f0e614eb5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f4b6020836145a0565b9150614f5682614f15565b602082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614fdd602a836145a0565b9150614fe882614f81565b604082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061505181614696565b92915050565b60006020828403121561506d5761506c61465a565b5b600061507b84828501615042565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150b981614684565b82525050565b60006150cb83836150b0565b60208301905092915050565b6000602082019050919050565b60006150ef82615084565b6150f9818561508f565b9350615104836150a0565b8060005b8381101561513557815161511c88826150bf565b9750615127836150d7565b925050600181019050615108565b5085935050505092915050565b6000604082019050615157600083018561456b565b818103602083015261516981846150e4565b90509392505050565b600067ffffffffffffffff82111561518d5761518c614b49565b5b602082029050602081019050919050565b6000815190506151ad816146c2565b92915050565b60006151c66151c184615172565b614ba9565b905080838252602082019050602084028301858111156151e9576151e86149b0565b5b835b8181101561521257806151fe888261519e565b8452602084019350506020810190506151eb565b5050509392505050565b600082601f830112615231576152306149a6565b5b81516152418482602086016151b3565b91505092915050565b6000602082840312156152605761525f61465a565b5b600082015167ffffffffffffffff81111561527e5761527d61465f565b5b61528a8482850161521c565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b60006152ef602c836145a0565b91506152fa82615293565b604082019050919050565b6000602082019050818103600083015261531e816152e2565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006153816022836145a0565b915061538c82615325565b604082019050919050565b600060208201905081810360008301526153b081615374565b9050919050565b60006040820190506153cc600083018561497c565b6153d9602083018461497c565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b600061543c602d836145a0565b9150615447826153e0565b604082019050919050565b6000602082019050818103600083015261546b8161542f565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b60006154ce602a836145a0565b91506154d982615472565b604082019050919050565b600060208201905081810360008301526154fd816154c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061553e82614561565b915061554983614561565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561558257615581615504565b5b828202905092915050565b600061559882614561565b91506155a383614561565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156155d8576155d7615504565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061563f6026836145a0565b915061564a826155e3565b604082019050919050565b6000602082019050818103600083015261566e81615632565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156d16024836145a0565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157636022836145a0565b915061576e82615707565b604082019050919050565b6000602082019050818103600083015261579281615756565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157f56025836145a0565b915061580082615799565b604082019050919050565b60006020820190508181036000830152615824816157e8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006158876023836145a0565b91506158928261582b565b604082019050919050565b600060208201905081810360008301526158b68161587a565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006159196029836145a0565b9150615924826158bd565b604082019050919050565b600060208201905081810360008301526159488161590c565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615985601e836145a0565b91506159908261594f565b602082019050919050565b600060208201905081810360008301526159b481615978565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615a17602f836145a0565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615aa96028836145a0565b9150615ab482615a4d565b604082019050919050565b60006020820190508181036000830152615ad881615a9c565b9050919050565b6000615aea82614561565b9150615af583614561565b925082821015615b0857615b07615504565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b49601b836145a0565b9150615b5482615b13565b602082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b6000615b8a82614561565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bbc57615bbb615504565b5b600182019050919050565b600080600060608486031215615be057615bdf61465a565b5b6000615bee8682870161519e565b9350506020615bff8682870161519e565b9250506040615c108682870161519e565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c5482614561565b9150615c5f83614561565b925082615c6f57615c6e615c1a565b5b828204905092915050565b6000819050919050565b6000615c9f615c9a615c9584615c7a565b61484b565b614561565b9050919050565b615caf81615c84565b82525050565b600060a082019050615cca600083018861456b565b615cd76020830187615ca6565b8181036040830152615ce981866150e4565b9050615cf8606083018561497c565b615d05608083018461456b565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615d6b6021836145a0565b9150615d7682615d0f565b604082019050919050565b60006020820190508181036000830152615d9a81615d5e565b9050919050565b600081905092915050565b50565b6000615dbc600083615da1565b9150615dc782615dac565b600082019050919050565b6000615ddd82615daf565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b6cab3c453e6e3de871418a175b185eec16762b2d16a1661291e40266b6641fd64736f6c634300080d0033

Deployed Bytecode Sourcemap

18901:19499:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20319:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22636:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23488:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21493:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;25862:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27821:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24481:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20046:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22913:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23657:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25102:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22822:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23978:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20674:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25363:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20159:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20235:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32742:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32611:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20381:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21522:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;23016:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;25697:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20510:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26247:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20751:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28468:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32331:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35213:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20447:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22727:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25532:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36186:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28604:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20828:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24204:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20591:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23162:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26444:311;;;;;;;;;;;;;:::i;:::-;;29097:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27384:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24576:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23337:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28351:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27253:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28122:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20319:55;;;;:::o;22636:83::-;22673:13;22706:5;22699:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22636:83;:::o;23488:161::-;23563:4;23580:39;23589:12;:10;:12::i;:::-;23603:7;23612:6;23580:8;:39::i;:::-;23637:4;23630:11;;23488:161;;;;:::o;21493:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25862:125::-;25927:4;25951:22;:28;25974:4;25951:28;;;;;;;;;;;;;;;;;;;;;;;;;25944:35;;25862:125;;;:::o;27821:293::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27971:8:::1;27947:12;:21;;:32;;;;28013:7;27990:12;:20;;:30;;;;28056:9;28031:12;:22;;:34;;;;28099:7;28076:12;:20;;:30;;;;27821:293:::0;;;;:::o;24481:87::-;24523:7;24550:10;;24543:17;;24481:87;:::o;20046:106::-;;;;;;;;;;;;;:::o;22913:95::-;22966:7;22993;;22986:14;;22913:95;:::o;23657:313::-;23755:4;23772:36;23782:6;23790:9;23801:6;23772:9;:36::i;:::-;23819:121;23828:6;23836:12;:10;:12::i;:::-;23850:89;23888:6;23850:89;;;;;;;;;;;;;;;;;:11;:19;23862:6;23850:19;;;;;;;;;;;;;;;:33;23870:12;:10;:12::i;:::-;23850:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23819:8;:121::i;:::-;23958:4;23951:11;;23657:313;;;;;:::o;25102:253::-;25168:7;25207;;25196;:18;;25188:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25272:19;25295:10;:8;:10::i;:::-;25272:33;;25323:24;25335:11;25323:7;:11;;:24;;;;:::i;:::-;25316:31;;;25102:253;;;:::o;22822:83::-;22863:5;22888:9;;;;;;;;;;;22881:16;;22822:83;:::o;23978:218::-;24066:4;24083:83;24092:12;:10;:12::i;:::-;24106:7;24115:50;24154:10;24115:11;:25;24127:12;:10;:12::i;:::-;24115:25;;;;;;;;;;;;;;;:34;24141:7;24115:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24083:8;:83::i;:::-;24184:4;24177:11;;23978:218;;;;:::o;20674:70::-;;;;;;;;;;;;;:::o;25363:161::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25475:41:::1;25488:9;;25499:16;25475:12;:41::i;:::-;25363:161:::0;;;:::o;20159:41::-;;;;;;;;;;;;;:::o;20235:40::-;;;;;;;;;;;;;:::o;32742:130::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32851:13:::1;32831:17;;:33;;;;;;;;;;;;;;;;;;32742:130:::0;:::o;32611:123::-;32675:4;32699:18;:27;32718:7;32699:27;;;;;;;;;;;;;;;;;;;;;;;;;32692:34;;32611:123;;;:::o;20381:50::-;;;;:::o;21522:32::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;23016:138::-;23082:7;23109:37;23129:7;:16;23137:7;23129:16;;;;;;;;;;;;;;;;23109:19;:37::i;:::-;23102:44;;23016:138;;;:::o;17743:148::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17850:1:::1;17813:40;;17834:6;::::0;::::1;;;;;;;;17813:40;;;;;;;;;;;;17881:1;17864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17743:148::o:0;25697:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25807:39:::1;25824:9;;25835:10;25807:16;:39::i;:::-;25697:157:::0;;;:::o;20510:74::-;;;;;;;;;;;;;:::o;26247:189::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26371:14:::1;26355:13;:30;;;;26413:15;26396:14;:32;;;;26247:189:::0;;:::o;20751:70::-;;;;;;;;;;;;;:::o;28468:128::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28552:36:::1;28572:9;28583:4;28552:19;:36::i;:::-;28468:128:::0;:::o;32331:272::-;32391:4;32409:21;32447:1;32433:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32409:40;;32478:4;32460;32465:1;32460:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32504:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32494:4;32499:1;32494:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32544:15;;;;;;;;;;;:29;;;32574:11;32587:4;32544:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32593:1;32544:51;;;;;;;;:::i;:::-;;;;;;;;32537:58;;;32331:272;;;:::o;35213:209::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35311:16:::1;;35299:8;:28:::0;35291:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35406:8;35387:16;:27;;;;35213:209:::0;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;20447:47::-;;;;:::o;22727:87::-;22766:13;22799:7;22792:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22727:87;:::o;25532:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25637:44:::1;25656:9;;25667:13;25637:18;:44::i;:::-;25532:157:::0;;;:::o;36186:166::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36319:23:::1;36277:15;;:67;;;;;;;;;;;;;;;;;;36186:166:::0;:::o;28604:131::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28690:37:::1;28710:9;28721:5;28690:19;:37::i;:::-;28604:131:::0;:::o;20828:39::-;;;;:::o;24204:269::-;24297:4;24314:129;24323:12;:10;:12::i;:::-;24337:7;24346:96;24385:15;24346:96;;;;;;;;;;;;;;;;;:11;:25;24358:12;:10;:12::i;:::-;24346:25;;;;;;;;;;;;;;;:34;24372:7;24346:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24314:8;:129::i;:::-;24461:4;24454:11;;24204:269;;;;:::o;20591:76::-;;;;;;;;;;;;;:::o;23162:167::-;23240:4;23257:42;23267:12;:10;:12::i;:::-;23281:9;23292:6;23257:9;:42::i;:::-;23317:4;23310:11;;23162:167;;;;:::o;26444:311::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26531:1:::1;26506:27;;:13;;;;;;;;;;;:27;;;26498:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26616:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26598:55;;;26662:4;26669:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26598:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26582:13;;:110;;;;;;;;;;;;;;;;;;26743:4;26703:22;:37;26726:13;;;;;;;;;;;26703:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;26444:311::o:0;29097:171::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29198:8:::1;29174:21;;:32;;;;;;;;;;;;;;;;;;29222:38;29251:8;29222:38;;;;;;:::i;:::-;;;;;;;;29097:171:::0;:::o;27384:429::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27584:13:::1;27557:7;:24;;:40;;;;27634:12;27608:7;:23;;:38;;;;27684:16;27657:7;:24;;:43;;;;27739:17;27711:7;:25;;:45;;;;27790:15;27767:7;:20;;:38;;;;27384:429:::0;;;;;:::o;24576:518::-;24673:16;24712:18;:32;24731:12;:10;:12::i;:::-;24712:32;;;;;;;;;;;;;;;;;;;;;;;;;24704:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24834:7;;:14;;24813:10;;:17;;:35;24805:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24906:181;24923:10;;:17;;24912:8;:28;24906:181;;;24956:91;24971:12;:10;:12::i;:::-;24985:10;;24996:8;24985:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25027:5;25007:7;;25015:8;25007:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;25034:5;25041;24956:14;:91::i;:::-;25074:1;25062:13;;;;;:::i;:::-;;;24906:181;;;24662:432;24576:518;;;;:::o;23337:143::-;23418:7;23445:11;:18;23457:5;23445:18;;;;;;;;;;;;;;;:27;23464:7;23445:27;;;;;;;;;;;;;;;;23438:34;;23337:143;;;;:::o;28351:109::-;28412:4;28436:10;:16;28447:4;28436:16;;;;;;;;;;;;;;;;;;;;;;;;;28429:23;;28351:109;;;:::o;18046:244::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:1:::1;18135:22;;:8;:22;;::::0;18127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18245:8;18216:38;;18237:6;::::0;::::1;;;;;;;;18216:38;;;;;;;;;;;;18274:8;18265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18046:244:::0;:::o;27253:123::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27363:5:::1;27348:12;:20;;;;:::i;:::-;27332:13;:36;;;;27253:123:::0;:::o;28122:221::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28250:7:::1;28237:10;;:20;;;;;;;;;;;;;;;;;;28285:7;28268:14;;:24;;;;;;;;;;;;;;;;;;28322:13;28303:16;;:32;;;;;;;;;;;;;;;;;;28122:221:::0;;;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;32880:337::-;32990:1;32973:19;;:5;:19;;;32965:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33071:1;33052:21;;:7;:21;;;33044:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33155:6;33125:11;:18;33137:5;33125:18;;;;;;;;;;;;;;;:27;33144:7;33125:27;;;;;;;;;;;;;;;:36;;;;33193:7;33177:32;;33186:5;33177:32;;;33202:6;33177:32;;;;;;:::i;:::-;;;;;;;;32880:337;;;:::o;33225:1528::-;33329:1;33313:18;;:4;:18;;;33305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33406:1;33392:16;;:2;:16;;;33384:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33476:1;33467:6;:10;33459:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33567:1;33542:27;;:13;;;;;;;;;;;:27;;;33534:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33614:11;33644:13;33661:18;:24;33680:4;33661:24;;;;;;;;;;;;;;;;;;;;;;;;;33660:25;:52;;;;;33690:18;:22;33709:2;33690:22;;;;;;;;;;;;;;;;;;;;;;;;;33689:23;33660:52;:71;;;;;33724:7;:5;:7::i;:::-;33716:15;;:4;:15;;;;33660:71;:88;;;;;33741:7;:5;:7::i;:::-;33735:13;;:2;:13;;;;33660:88;33644:104;;33859:7;:5;:7::i;:::-;33851:15;;:4;:15;;;;:32;;;;;33876:7;:5;:7::i;:::-;33870:13;;:2;:13;;;;33851:32;:52;;;;;33893:10;;;;;;;;;;;33887:16;;:2;:16;;;;33851:52;33848:180;;;33929:10;:16;33940:4;33929:16;;;;;;;;;;;;;;;;;;;;;;;;;33928:17;:36;;;;;33950:10;:14;33961:2;33950:14;;;;;;;;;;;;;;;;;;;;;;;;;33949:15;33928:36;33920:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;33848:180;34049:13;;;;;;;;;;;34041:21;;:4;:21;;;:47;;;;34066:16;:22;34083:4;34066:22;;;;;;;;;;;;;;;;;;;;;;;;;34041:47;34038:155;;;34123:13;;34113:6;:23;;34105:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34038:155;34214:13;;;;;;;;;;;34206:21;;:4;:21;;;;:44;;;;;34237:13;;;;;;;;;;;34231:19;;:2;:19;;;34206:44;:97;;;;34256:16;:22;34273:4;34256:22;;;;;;;;;;;;;;;;;;;;;;;;;34255:23;:47;;;;;34282:16;:20;34299:2;34282:20;;;;;;;;;;;;;;;;;;;;;;;;;34255:47;34206:97;34203:307;;;34399:4;34390:13;;34418:15;:13;:15::i;:::-;34203:307;34531:13;;;;;;;;;;;34523:21;;:4;:21;;;;:44;;;;;34554:13;;;;;;;;;;;34548:19;;:2;:19;;;;34523:44;:71;;;;;34572:16;:22;34589:4;34572:22;;;;;;;;;;;;;;;;;;;;;;;;;34571:23;34523:71;:96;;;;;34599:16;:20;34616:2;34599:20;;;;;;;;;;;;;;;;;;;;;;;;;34598:21;34523:96;:117;;;;;34623:17;;;;;;;;;;;34523:117;34520:165;;;34668:5;34657:16;;34520:165;34695:50;34710:4;34716:2;34720:6;34728:8;34738:6;34695:14;:50::i;:::-;33294:1459;;33225:1528;;;:::o;5930:192::-;6016:7;6049:1;6044;:6;;6052:12;6036:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6076:9;6092:1;6088;:5;;;;:::i;:::-;6076:17;;6113:1;6106:8;;;5930:192;;;;;:::o;30670:163::-;30711:7;30732:15;30749;30768:19;:17;:19::i;:::-;30731:56;;;;30805:20;30817:7;30805;:11;;:20;;;;:::i;:::-;30798:27;;;;30670:163;:::o;7328:132::-;7386:7;7413:39;7417:1;7420;7413:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7406:46;;7328:132;;;;:::o;5027:181::-;5085:7;5105:9;5121:1;5117;:5;;;;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5192:8;;;5027:181;;;;:::o;27009:236::-;27096:9;27091:147;27115:9;;:16;;27111:1;:20;27091:147;;;27153:12;27168:9;;27178:1;27168:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27153:27;;27222:4;27195:18;:24;27214:4;27195:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;27138:100;27133:3;;;;;:::i;:::-;;;;27091:147;;;;27009:236;;;:::o;25995:244::-;26086:9;26081:151;26105:9;;:16;;26101:1;:20;26081:151;;;26143:12;26158:9;;26168:1;26158:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26143:27;;26216:4;26185:22;:28;26208:4;26185:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26128:104;26123:3;;;;;:::i;:::-;;;;26081:151;;;;25995:244;;;:::o;28743:346::-;28838:9;28833:249;28857:9;:16;28853:1;:20;28833:249;;;28895:12;28910:9;28920:1;28910:12;;;;;;;;:::i;:::-;;;;;;;;28895:27;;28940:7;28937:134;;;28987:4;28968:10;:16;28979:4;28968:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28937:134;;;29039:10;:16;29050:4;29039:16;;;;;;;;;;;;;;;;29032:23;;;;;;;;;;;28937:134;28880:202;28875:3;;;;;:::i;:::-;;;;28833:249;;;;28743:346;;:::o;26761:240::-;26854:9;26849:145;26873:9;;:16;;26869:1;:20;26849:145;;;26911:12;26926:9;;26936:1;26926:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26911:27;;26978:4;26953:16;:22;26970:4;26953:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26896:98;26891:3;;;;;:::i;:::-;;;;26849:145;;;;26761:240;;;:::o;37253:634::-;37388:8;37375:10;;:21;;;;;;;;;;;;;;;;;;37419:6;37407:9;;:18;;;;;;;;;;;;;;;;;;37436:44;37454:6;37462:9;37473:6;37436:17;:44::i;:::-;37495:15;;;;;;;;;;;:31;;;37527:6;37495:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37491:54;37559:15;;;;;;;;;;;:31;;;37591:9;37559:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37555:57;37626:15;;;;;;;;;;;:23;;;37650:16;;37626:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37622:258;;;37850:9;37761:99;;37826:4;37761:99;;;37786:10;37798:6;37806:18;37832:16;;37761:99;;;;;;;;;:::i;:::-;;;;;;;;37668:204;;;37622:258;37253:634;;;;;:::o;34761:444::-;34805:28;34836:24;34854:4;34836:9;:24::i;:::-;34805:55;;34897:1;34874:20;:24;34871:327;;;34915:13;34931:33;34943:20;34931:11;:33::i;:::-;34915:49;;34995:14;;34983:8;:26;;:47;;;;;35014:16;;;;;;;;;;;35013:17;34983:47;:72;;;;;35034:21;;;;;;;;;;;34983:72;34979:208;;;35133:38;35150:20;35133:16;:38::i;:::-;34979:208;34900:298;34871:327;34794:411;34761:444::o;30841:256::-;30891:7;30900;30920:15;30938:7;;30920:25;;30956:15;30974:7;;30956:25;;31006:20;31018:7;;31006;;:11;;:20;;;;:::i;:::-;30996:7;:30;30992:61;;;31036:7;;31045;;31028:25;;;;;;;;30992:61;31072:7;31081;31064:25;;;;;;30841:256;;;:::o;7956:278::-;8042:7;8074:1;8070;:5;8077:12;8062:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8101:9;8117:1;8113;:5;;;;:::i;:::-;8101:17;;8225:1;8218:8;;;7956:278;;;;;:::o;37895:502::-;37994:15;38011:23;38036:12;38050:23;38075:12;38089:18;38111:19;38122:7;38111:10;:19::i;:::-;37993:137;;;;;;;;;;;;38159:28;38179:7;38159;:15;38167:6;38159:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38141:7;:15;38149:6;38141:15;;;;;;;;;;;;;;;:46;;;;38219:39;38242:15;38219:7;:18;38227:9;38219:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38198:7;:18;38206:9;38198:18;;;;;;;;;;;;;;;:60;;;;38269:26;38284:10;38269:14;:26::i;:::-;38306:23;38318:4;38324;38306:11;:23::i;:::-;38362:9;38345:44;;38354:6;38345:44;;;38373:15;38345:44;;;;;;:::i;:::-;;;;;;;;37982:415;;;;;;37895:502;;;:::o;35430:748::-;19261:4;19242:16;;:23;;;;;;;;;;;;;;;;;;35517:38:::1;35534:20;35517:16;:38::i;:::-;35566:23;35592:21;35566:47;;35624:22;35649:52;35697:3;35649:43;35669:12;:22;;;35649:15;:19;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;35624:77;;35712:21;35736:51;35783:3;35736:42;35756:12;:21;;;35736:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;35712:75;;35798:20;35821:50;35867:3;35821:41;35841:12;:20;;;35821:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;35798:73;;35882:20;35905:50;35951:3;35905:41;35925:12;:20;;;35905:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;35882:73;;35974:16;;;;;;;;;;;35966:34;;:50;36001:14;35966:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36027:31;36044:13;36027:16;:31::i;:::-;36077:10;;;;;;;;;;;36069:28;;:42;36098:12;36069:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36130:14;;;;;;;;;;;36122:32;;:46;36155:12;36122:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35506:672;;;;;19307:5:::0;19288:16;;:24;;;;;;;;;;;;;;;;;;35430:748;:::o;29468:419::-;29527:7;29536;29545;29554;29563;29572;29593:23;29618:12;29632:18;29654:20;29666:7;29654:11;:20::i;:::-;29592:82;;;;;;29686:15;29703:23;29728:12;29744:50;29756:7;29765:4;29771:10;29783;:8;:10::i;:::-;29744:11;:50::i;:::-;29685:109;;;;;;29813:7;29822:15;29839:4;29845:15;29862:4;29868:10;29805:74;;;;;;;;;;;;;;;;;;29468:419;;;;;;;:::o;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5569:50;;5491:136;;;;:::o;31105:237::-;31168:19;31191:10;:8;:10::i;:::-;31168:33;;31212:18;31233:27;31248:11;31233:10;:14;;:27;;;;:::i;:::-;31212:48;;31296:38;31323:10;31296:7;:22;31312:4;31296:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;31271:7;:22;31287:4;31271:22;;;;;;;;;;;;;;;:63;;;;31157:185;;31105:237;:::o;29313:147::-;29391:17;29403:4;29391:7;;:11;;:17;;;;:::i;:::-;29381:7;:27;;;;29432:20;29447:4;29432:10;;:14;;:20;;;;:::i;:::-;29419:10;:33;;;;29313:147;;:::o;36587:585::-;36713:21;36751:1;36737:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36713:40;;36782:4;36764;36769:1;36764:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36808:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36798:4;36803:1;36798:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36841:62;36858:4;36873:15;;;;;;;;;;;36891:11;36841:8;:62::i;:::-;36940:15;;;;;;;;;;;:66;;;37021:11;37047:1;37091:4;37118;37138:15;36940:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36642:530;36587:585;:::o;6381:471::-;6439:7;6689:1;6684;:6;6680:47;;6714:1;6707:8;;;;6680:47;6739:9;6755:1;6751;:5;;;;:::i;:::-;6739:17;;6784:1;6779;6775;:5;;;;:::i;:::-;:10;6767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1;6836:8;;;6381:471;;;;;:::o;36360:221::-;36425:12;36450:15;;;;;;;;;;;36442:29;;36480:9;36442:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36424:70;;;36509:7;36505:69;;;36538:24;36552:9;36538:24;;;;;;:::i;:::-;;;;;;;;36505:69;36413:168;36360:221;:::o;29895:330::-;29955:7;29964;29973;29993:12;30008:24;30024:7;30008:15;:24::i;:::-;29993:39;;30043:18;30064:30;30086:7;30064:21;:30::i;:::-;30043:51;;30105:23;30131:33;30153:10;30131:17;30143:4;30131:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;30105:59;;30183:15;30200:4;30206:10;30175:42;;;;;;;;;29895:330;;;;;:::o;30233:429::-;30348:7;30357;30366;30386:15;30404:24;30416:11;30404:7;:11;;:24;;;;:::i;:::-;30386:42;;30439:12;30454:21;30463:11;30454:4;:8;;:21;;;;:::i;:::-;30439:36;;30486:18;30507:27;30522:11;30507:10;:14;;:27;;;;:::i;:::-;30486:48;;30545:23;30571:33;30593:10;30571:17;30583:4;30571:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;30545:59;;30623:7;30632:15;30649:4;30615:39;;;;;;;;;;30233:429;;;;;;;;:::o;31350:368::-;31414:7;31434:21;31458:1;31434:25;;31473:10;;;;;;;;;;;31470:186;;;31516:7;:24;;;31500:40;;31558:9;;;;;;;;;;;31555:90;;;31604:7;:25;;;31588:41;;31555:90;31470:186;31673:37;31704:5;31673:26;31685:13;31673:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;31666:44;;;31350:368;;;:::o;31726:597::-;31796:7;31816:25;31844:1;31816:29;;31859:10;;;;;;;;;;;31856:401;;;31906:7;:23;;;31886:43;;31947:9;;;;;;;;;;;31944:302;;;31997:7;:24;;;31977:44;;32040:13;32056:20;32068:7;32056:11;:20::i;:::-;32040:36;;32110:13;;32098:8;:25;32095:136;;32168:43;32190:7;:20;;;32168:17;:21;;:43;;;;:::i;:::-;32148:63;;32095:136;31958:288;31944:302;31856:401;32274:41;32309:5;32274:30;32286:17;32274:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;32267:48;;;31726:597;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:664::-;4051:4;4089:3;4078:9;4074:19;4066:27;;4103:71;4171:1;4160:9;4156:17;4147:6;4103:71;:::i;:::-;4184:72;4252:2;4241:9;4237:18;4228:6;4184:72;:::i;:::-;4266;4334:2;4323:9;4319:18;4310:6;4266:72;:::i;:::-;4348;4416:2;4405:9;4401:18;4392:6;4348:72;:::i;:::-;4430:73;4498:3;4487:9;4483:19;4474:6;4430:73;:::i;:::-;3846:664;;;;;;;;:::o;4516:329::-;4575:6;4624:2;4612:9;4603:7;4599:23;4595:32;4592:119;;;4630:79;;:::i;:::-;4592:119;4750:1;4775:53;4820:7;4811:6;4800:9;4796:22;4775:53;:::i;:::-;4765:63;;4721:117;4516:329;;;;:::o;4851:765::-;4937:6;4945;4953;4961;5010:3;4998:9;4989:7;4985:23;4981:33;4978:120;;;5017:79;;:::i;:::-;4978:120;5137:1;5162:53;5207:7;5198:6;5187:9;5183:22;5162:53;:::i;:::-;5152:63;;5108:117;5264:2;5290:53;5335:7;5326:6;5315:9;5311:22;5290:53;:::i;:::-;5280:63;;5235:118;5392:2;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5363:118;5520:2;5546:53;5591:7;5582:6;5571:9;5567:22;5546:53;:::i;:::-;5536:63;;5491:118;4851:765;;;;;;;:::o;5622:60::-;5650:3;5671:5;5664:12;;5622:60;;;:::o;5688:142::-;5738:9;5771:53;5789:34;5798:24;5816:5;5798:24;:::i;:::-;5789:34;:::i;:::-;5771:53;:::i;:::-;5758:66;;5688:142;;;:::o;5836:126::-;5886:9;5919:37;5950:5;5919:37;:::i;:::-;5906:50;;5836:126;;;:::o;5968:152::-;6044:9;6077:37;6108:5;6077:37;:::i;:::-;6064:50;;5968:152;;;:::o;6126:183::-;6239:63;6296:5;6239:63;:::i;:::-;6234:3;6227:76;6126:183;;:::o;6315:274::-;6434:4;6472:2;6461:9;6457:18;6449:26;;6485:97;6579:1;6568:9;6564:17;6555:6;6485:97;:::i;:::-;6315:274;;;;:::o;6595:619::-;6672:6;6680;6688;6737:2;6725:9;6716:7;6712:23;6708:32;6705:119;;;6743:79;;:::i;:::-;6705:119;6863:1;6888:53;6933:7;6924:6;6913:9;6909:22;6888:53;:::i;:::-;6878:63;;6834:117;6990:2;7016:53;7061:7;7052:6;7041:9;7037:22;7016:53;:::i;:::-;7006:63;;6961:118;7118:2;7144:53;7189:7;7180:6;7169:9;7165:22;7144:53;:::i;:::-;7134:63;;7089:118;6595:619;;;;;:::o;7220:329::-;7279:6;7328:2;7316:9;7307:7;7303:23;7299:32;7296:119;;;7334:79;;:::i;:::-;7296:119;7454:1;7479:53;7524:7;7515:6;7504:9;7500:22;7479:53;:::i;:::-;7469:63;;7425:117;7220:329;;;;:::o;7555:86::-;7590:7;7630:4;7623:5;7619:16;7608:27;;7555:86;;;:::o;7647:112::-;7730:22;7746:5;7730:22;:::i;:::-;7725:3;7718:35;7647:112;;:::o;7765:214::-;7854:4;7892:2;7881:9;7877:18;7869:26;;7905:67;7969:1;7958:9;7954:17;7945:6;7905:67;:::i;:::-;7765:214;;;;:::o;7985:118::-;8072:24;8090:5;8072:24;:::i;:::-;8067:3;8060:37;7985:118;;:::o;8109:222::-;8202:4;8240:2;8229:9;8225:18;8217:26;;8253:71;8321:1;8310:9;8306:17;8297:6;8253:71;:::i;:::-;8109:222;;;;:::o;8337:117::-;8446:1;8443;8436:12;8460:117;8569:1;8566;8559:12;8583:117;8692:1;8689;8682:12;8723:568;8796:8;8806:6;8856:3;8849:4;8841:6;8837:17;8833:27;8823:122;;8864:79;;:::i;:::-;8823:122;8977:6;8964:20;8954:30;;9007:18;8999:6;8996:30;8993:117;;;9029:79;;:::i;:::-;8993:117;9143:4;9135:6;9131:17;9119:29;;9197:3;9189:4;9181:6;9177:17;9167:8;9163:32;9160:41;9157:128;;;9204:79;;:::i;:::-;9157:128;8723:568;;;;;:::o;9297:116::-;9367:21;9382:5;9367:21;:::i;:::-;9360:5;9357:32;9347:60;;9403:1;9400;9393:12;9347:60;9297:116;:::o;9419:133::-;9462:5;9500:6;9487:20;9478:29;;9516:30;9540:5;9516:30;:::i;:::-;9419:133;;;;:::o;9558:698::-;9650:6;9658;9666;9715:2;9703:9;9694:7;9690:23;9686:32;9683:119;;;9721:79;;:::i;:::-;9683:119;9869:1;9858:9;9854:17;9841:31;9899:18;9891:6;9888:30;9885:117;;;9921:79;;:::i;:::-;9885:117;10034:80;10106:7;10097:6;10086:9;10082:22;10034:80;:::i;:::-;10016:98;;;;9812:312;10163:2;10189:50;10231:7;10222:6;10211:9;10207:22;10189:50;:::i;:::-;10179:60;;10134:115;9558:698;;;;;:::o;10262:323::-;10318:6;10367:2;10355:9;10346:7;10342:23;10338:32;10335:119;;;10373:79;;:::i;:::-;10335:119;10493:1;10518:50;10560:7;10551:6;10540:9;10536:22;10518:50;:::i;:::-;10508:60;;10464:114;10262:323;;;;:::o;10591:553::-;10768:4;10806:3;10795:9;10791:19;10783:27;;10820:71;10888:1;10877:9;10873:17;10864:6;10820:71;:::i;:::-;10901:72;10969:2;10958:9;10954:18;10945:6;10901:72;:::i;:::-;10983;11051:2;11040:9;11036:18;11027:6;10983:72;:::i;:::-;11065;11133:2;11122:9;11118:18;11109:6;11065:72;:::i;:::-;10591:553;;;;;;;:::o;11150:474::-;11218:6;11226;11275:2;11263:9;11254:7;11250:23;11246:32;11243:119;;;11281:79;;:::i;:::-;11243:119;11401:1;11426:53;11471:7;11462:6;11451:9;11447:22;11426:53;:::i;:::-;11416:63;;11372:117;11528:2;11554:53;11599:7;11590:6;11579:9;11575:22;11554:53;:::i;:::-;11544:63;;11499:118;11150:474;;;;;:::o;11630:180::-;11678:77;11675:1;11668:88;11775:4;11772:1;11765:15;11799:4;11796:1;11789:15;11816:281;11899:27;11921:4;11899:27;:::i;:::-;11891:6;11887:40;12029:6;12017:10;12014:22;11993:18;11981:10;11978:34;11975:62;11972:88;;;12040:18;;:::i;:::-;11972:88;12080:10;12076:2;12069:22;11859:238;11816:281;;:::o;12103:129::-;12137:6;12164:20;;:::i;:::-;12154:30;;12193:33;12221:4;12213:6;12193:33;:::i;:::-;12103:129;;;:::o;12238:311::-;12315:4;12405:18;12397:6;12394:30;12391:56;;;12427:18;;:::i;:::-;12391:56;12477:4;12469:6;12465:17;12457:25;;12537:4;12531;12527:15;12519:23;;12238:311;;;:::o;12572:710::-;12668:5;12693:81;12709:64;12766:6;12709:64;:::i;:::-;12693:81;:::i;:::-;12684:90;;12794:5;12823:6;12816:5;12809:21;12857:4;12850:5;12846:16;12839:23;;12910:4;12902:6;12898:17;12890:6;12886:30;12939:3;12931:6;12928:15;12925:122;;;12958:79;;:::i;:::-;12925:122;13073:6;13056:220;13090:6;13085:3;13082:15;13056:220;;;13165:3;13194:37;13227:3;13215:10;13194:37;:::i;:::-;13189:3;13182:50;13261:4;13256:3;13252:14;13245:21;;13132:144;13116:4;13111:3;13107:14;13100:21;;13056:220;;;13060:21;12674:608;;12572:710;;;;;:::o;13305:370::-;13376:5;13425:3;13418:4;13410:6;13406:17;13402:27;13392:122;;13433:79;;:::i;:::-;13392:122;13550:6;13537:20;13575:94;13665:3;13657:6;13650:4;13642:6;13638:17;13575:94;:::i;:::-;13566:103;;13382:293;13305:370;;;;:::o;13681:539::-;13765:6;13814:2;13802:9;13793:7;13789:23;13785:32;13782:119;;;13820:79;;:::i;:::-;13782:119;13968:1;13957:9;13953:17;13940:31;13998:18;13990:6;13987:30;13984:117;;;14020:79;;:::i;:::-;13984:117;14125:78;14195:7;14186:6;14175:9;14171:22;14125:78;:::i;:::-;14115:88;;13911:302;13681:539;;;;:::o;14226:911::-;14321:6;14329;14337;14345;14353;14402:3;14390:9;14381:7;14377:23;14373:33;14370:120;;;14409:79;;:::i;:::-;14370:120;14529:1;14554:53;14599:7;14590:6;14579:9;14575:22;14554:53;:::i;:::-;14544:63;;14500:117;14656:2;14682:53;14727:7;14718:6;14707:9;14703:22;14682:53;:::i;:::-;14672:63;;14627:118;14784:2;14810:53;14855:7;14846:6;14835:9;14831:22;14810:53;:::i;:::-;14800:63;;14755:118;14912:2;14938:53;14983:7;14974:6;14963:9;14959:22;14938:53;:::i;:::-;14928:63;;14883:118;15040:3;15067:53;15112:7;15103:6;15092:9;15088:22;15067:53;:::i;:::-;15057:63;;15011:119;14226:911;;;;;;;;:::o;15160:568::-;15233:8;15243:6;15293:3;15286:4;15278:6;15274:17;15270:27;15260:122;;15301:79;;:::i;:::-;15260:122;15414:6;15401:20;15391:30;;15444:18;15436:6;15433:30;15430:117;;;15466:79;;:::i;:::-;15430:117;15580:4;15572:6;15568:17;15556:29;;15634:3;15626:4;15618:6;15614:17;15604:8;15600:32;15597:41;15594:128;;;15641:79;;:::i;:::-;15594:128;15160:568;;;;;:::o;15734:934::-;15856:6;15864;15872;15880;15929:2;15917:9;15908:7;15904:23;15900:32;15897:119;;;15935:79;;:::i;:::-;15897:119;16083:1;16072:9;16068:17;16055:31;16113:18;16105:6;16102:30;16099:117;;;16135:79;;:::i;:::-;16099:117;16248:80;16320:7;16311:6;16300:9;16296:22;16248:80;:::i;:::-;16230:98;;;;16026:312;16405:2;16394:9;16390:18;16377:32;16436:18;16428:6;16425:30;16422:117;;;16458:79;;:::i;:::-;16422:117;16571:80;16643:7;16634:6;16623:9;16619:22;16571:80;:::i;:::-;16553:98;;;;16348:313;15734:934;;;;;;;:::o;16674:474::-;16742:6;16750;16799:2;16787:9;16778:7;16774:23;16770:32;16767:119;;;16805:79;;:::i;:::-;16767:119;16925:1;16950:53;16995:7;16986:6;16975:9;16971:22;16950:53;:::i;:::-;16940:63;;16896:117;17052:2;17078:53;17123:7;17114:6;17103:9;17099:22;17078:53;:::i;:::-;17068:63;;17023:118;16674:474;;;;;:::o;17154:619::-;17231:6;17239;17247;17296:2;17284:9;17275:7;17271:23;17267:32;17264:119;;;17302:79;;:::i;:::-;17264:119;17422:1;17447:53;17492:7;17483:6;17472:9;17468:22;17447:53;:::i;:::-;17437:63;;17393:117;17549:2;17575:53;17620:7;17611:6;17600:9;17596:22;17575:53;:::i;:::-;17565:63;;17520:118;17677:2;17703:53;17748:7;17739:6;17728:9;17724:22;17703:53;:::i;:::-;17693:63;;17648:118;17154:619;;;;;:::o;17779:180::-;17827:77;17824:1;17817:88;17924:4;17921:1;17914:15;17948:4;17945:1;17938:15;17965:320;18009:6;18046:1;18040:4;18036:12;18026:22;;18093:1;18087:4;18083:12;18114:18;18104:81;;18170:4;18162:6;18158:17;18148:27;;18104:81;18232:2;18224:6;18221:14;18201:18;18198:38;18195:84;;18251:18;;:::i;:::-;18195:84;18016:269;17965:320;;;:::o;18291:182::-;18431:34;18427:1;18419:6;18415:14;18408:58;18291:182;:::o;18479:366::-;18621:3;18642:67;18706:2;18701:3;18642:67;:::i;:::-;18635:74;;18718:93;18807:3;18718:93;:::i;:::-;18836:2;18831:3;18827:12;18820:19;;18479:366;;;:::o;18851:419::-;19017:4;19055:2;19044:9;19040:18;19032:26;;19104:9;19098:4;19094:20;19090:1;19079:9;19075:17;19068:47;19132:131;19258:4;19132:131;:::i;:::-;19124:139;;18851:419;;;:::o;19276:229::-;19416:34;19412:1;19404:6;19400:14;19393:58;19485:12;19480:2;19472:6;19468:15;19461:37;19276:229;:::o;19511:366::-;19653:3;19674:67;19738:2;19733:3;19674:67;:::i;:::-;19667:74;;19750:93;19839:3;19750:93;:::i;:::-;19868:2;19863:3;19859:12;19852:19;;19511:366;;;:::o;19883:419::-;20049:4;20087:2;20076:9;20072:18;20064:26;;20136:9;20130:4;20126:20;20122:1;20111:9;20107:17;20100:47;20164:131;20290:4;20164:131;:::i;:::-;20156:139;;19883:419;;;:::o;20308:180::-;20356:77;20353:1;20346:88;20453:4;20450:1;20443:15;20477:4;20474:1;20467:15;20494:143;20551:5;20582:6;20576:13;20567:22;;20598:33;20625:5;20598:33;:::i;:::-;20494:143;;;;:::o;20643:351::-;20713:6;20762:2;20750:9;20741:7;20737:23;20733:32;20730:119;;;20768:79;;:::i;:::-;20730:119;20888:1;20913:64;20969:7;20960:6;20949:9;20945:22;20913:64;:::i;:::-;20903:74;;20859:128;20643:351;;;;:::o;21000:114::-;21067:6;21101:5;21095:12;21085:22;;21000:114;;;:::o;21120:184::-;21219:11;21253:6;21248:3;21241:19;21293:4;21288:3;21284:14;21269:29;;21120:184;;;;:::o;21310:132::-;21377:4;21400:3;21392:11;;21430:4;21425:3;21421:14;21413:22;;21310:132;;;:::o;21448:108::-;21525:24;21543:5;21525:24;:::i;:::-;21520:3;21513:37;21448:108;;:::o;21562:179::-;21631:10;21652:46;21694:3;21686:6;21652:46;:::i;:::-;21730:4;21725:3;21721:14;21707:28;;21562:179;;;;:::o;21747:113::-;21817:4;21849;21844:3;21840:14;21832:22;;21747:113;;;:::o;21896:732::-;22015:3;22044:54;22092:5;22044:54;:::i;:::-;22114:86;22193:6;22188:3;22114:86;:::i;:::-;22107:93;;22224:56;22274:5;22224:56;:::i;:::-;22303:7;22334:1;22319:284;22344:6;22341:1;22338:13;22319:284;;;22420:6;22414:13;22447:63;22506:3;22491:13;22447:63;:::i;:::-;22440:70;;22533:60;22586:6;22533:60;:::i;:::-;22523:70;;22379:224;22366:1;22363;22359:9;22354:14;;22319:284;;;22323:14;22619:3;22612:10;;22020:608;;;21896:732;;;;:::o;22634:483::-;22805:4;22843:2;22832:9;22828:18;22820:26;;22856:71;22924:1;22913:9;22909:17;22900:6;22856:71;:::i;:::-;22974:9;22968:4;22964:20;22959:2;22948:9;22944:18;22937:48;23002:108;23105:4;23096:6;23002:108;:::i;:::-;22994:116;;22634:483;;;;;:::o;23123:311::-;23200:4;23290:18;23282:6;23279:30;23276:56;;;23312:18;;:::i;:::-;23276:56;23362:4;23354:6;23350:17;23342:25;;23422:4;23416;23412:15;23404:23;;23123:311;;;:::o;23440:143::-;23497:5;23528:6;23522:13;23513:22;;23544:33;23571:5;23544:33;:::i;:::-;23440:143;;;;:::o;23606:732::-;23713:5;23738:81;23754:64;23811:6;23754:64;:::i;:::-;23738:81;:::i;:::-;23729:90;;23839:5;23868:6;23861:5;23854:21;23902:4;23895:5;23891:16;23884:23;;23955:4;23947:6;23943:17;23935:6;23931:30;23984:3;23976:6;23973:15;23970:122;;;24003:79;;:::i;:::-;23970:122;24118:6;24101:231;24135:6;24130:3;24127:15;24101:231;;;24210:3;24239:48;24283:3;24271:10;24239:48;:::i;:::-;24234:3;24227:61;24317:4;24312:3;24308:14;24301:21;;24177:155;24161:4;24156:3;24152:14;24145:21;;24101:231;;;24105:21;23719:619;;23606:732;;;;;:::o;24361:385::-;24443:5;24492:3;24485:4;24477:6;24473:17;24469:27;24459:122;;24500:79;;:::i;:::-;24459:122;24610:6;24604:13;24635:105;24736:3;24728:6;24721:4;24713:6;24709:17;24635:105;:::i;:::-;24626:114;;24449:297;24361:385;;;;:::o;24752:554::-;24847:6;24896:2;24884:9;24875:7;24871:23;24867:32;24864:119;;;24902:79;;:::i;:::-;24864:119;25043:1;25032:9;25028:17;25022:24;25073:18;25065:6;25062:30;25059:117;;;25095:79;;:::i;:::-;25059:117;25200:89;25281:7;25272:6;25261:9;25257:22;25200:89;:::i;:::-;25190:99;;24993:306;24752:554;;;;:::o;25312:231::-;25452:34;25448:1;25440:6;25436:14;25429:58;25521:14;25516:2;25508:6;25504:15;25497:39;25312:231;:::o;25549:366::-;25691:3;25712:67;25776:2;25771:3;25712:67;:::i;:::-;25705:74;;25788:93;25877:3;25788:93;:::i;:::-;25906:2;25901:3;25897:12;25890:19;;25549:366;;;:::o;25921:419::-;26087:4;26125:2;26114:9;26110:18;26102:26;;26174:9;26168:4;26164:20;26160:1;26149:9;26145:17;26138:47;26202:131;26328:4;26202:131;:::i;:::-;26194:139;;25921:419;;;:::o;26346:221::-;26486:34;26482:1;26474:6;26470:14;26463:58;26555:4;26550:2;26542:6;26538:15;26531:29;26346:221;:::o;26573:366::-;26715:3;26736:67;26800:2;26795:3;26736:67;:::i;:::-;26729:74;;26812:93;26901:3;26812:93;:::i;:::-;26930:2;26925:3;26921:12;26914:19;;26573:366;;;:::o;26945:419::-;27111:4;27149:2;27138:9;27134:18;27126:26;;27198:9;27192:4;27188:20;27184:1;27173:9;27169:17;27162:47;27226:131;27352:4;27226:131;:::i;:::-;27218:139;;26945:419;;;:::o;27370:332::-;27491:4;27529:2;27518:9;27514:18;27506:26;;27542:71;27610:1;27599:9;27595:17;27586:6;27542:71;:::i;:::-;27623:72;27691:2;27680:9;27676:18;27667:6;27623:72;:::i;:::-;27370:332;;;;;:::o;27708:232::-;27848:34;27844:1;27836:6;27832:14;27825:58;27917:15;27912:2;27904:6;27900:15;27893:40;27708:232;:::o;27946:366::-;28088:3;28109:67;28173:2;28168:3;28109:67;:::i;:::-;28102:74;;28185:93;28274:3;28185:93;:::i;:::-;28303:2;28298:3;28294:12;28287:19;;27946:366;;;:::o;28318:419::-;28484:4;28522:2;28511:9;28507:18;28499:26;;28571:9;28565:4;28561:20;28557:1;28546:9;28542:17;28535:47;28599:131;28725:4;28599:131;:::i;:::-;28591:139;;28318:419;;;:::o;28743:229::-;28883:34;28879:1;28871:6;28867:14;28860:58;28952:12;28947:2;28939:6;28935:15;28928:37;28743:229;:::o;28978:366::-;29120:3;29141:67;29205:2;29200:3;29141:67;:::i;:::-;29134:74;;29217:93;29306:3;29217:93;:::i;:::-;29335:2;29330:3;29326:12;29319:19;;28978:366;;;:::o;29350:419::-;29516:4;29554:2;29543:9;29539:18;29531:26;;29603:9;29597:4;29593:20;29589:1;29578:9;29574:17;29567:47;29631:131;29757:4;29631:131;:::i;:::-;29623:139;;29350:419;;;:::o;29775:180::-;29823:77;29820:1;29813:88;29920:4;29917:1;29910:15;29944:4;29941:1;29934:15;29961:348;30001:7;30024:20;30042:1;30024:20;:::i;:::-;30019:25;;30058:20;30076:1;30058:20;:::i;:::-;30053:25;;30246:1;30178:66;30174:74;30171:1;30168:81;30163:1;30156:9;30149:17;30145:105;30142:131;;;30253:18;;:::i;:::-;30142:131;30301:1;30298;30294:9;30283:20;;29961:348;;;;:::o;30315:305::-;30355:3;30374:20;30392:1;30374:20;:::i;:::-;30369:25;;30408:20;30426:1;30408:20;:::i;:::-;30403:25;;30562:1;30494:66;30490:74;30487:1;30484:81;30481:107;;;30568:18;;:::i;:::-;30481:107;30612:1;30609;30605:9;30598:16;;30315:305;;;;:::o;30626:225::-;30766:34;30762:1;30754:6;30750:14;30743:58;30835:8;30830:2;30822:6;30818:15;30811:33;30626:225;:::o;30857:366::-;30999:3;31020:67;31084:2;31079:3;31020:67;:::i;:::-;31013:74;;31096:93;31185:3;31096:93;:::i;:::-;31214:2;31209:3;31205:12;31198:19;;30857:366;;;:::o;31229:419::-;31395:4;31433:2;31422:9;31418:18;31410:26;;31482:9;31476:4;31472:20;31468:1;31457:9;31453:17;31446:47;31510:131;31636:4;31510:131;:::i;:::-;31502:139;;31229:419;;;:::o;31654:223::-;31794:34;31790:1;31782:6;31778:14;31771:58;31863:6;31858:2;31850:6;31846:15;31839:31;31654:223;:::o;31883:366::-;32025:3;32046:67;32110:2;32105:3;32046:67;:::i;:::-;32039:74;;32122:93;32211:3;32122:93;:::i;:::-;32240:2;32235:3;32231:12;32224:19;;31883:366;;;:::o;32255:419::-;32421:4;32459:2;32448:9;32444:18;32436:26;;32508:9;32502:4;32498:20;32494:1;32483:9;32479:17;32472:47;32536:131;32662:4;32536:131;:::i;:::-;32528:139;;32255:419;;;:::o;32680:221::-;32820:34;32816:1;32808:6;32804:14;32797:58;32889:4;32884:2;32876:6;32872:15;32865:29;32680:221;:::o;32907:366::-;33049:3;33070:67;33134:2;33129:3;33070:67;:::i;:::-;33063:74;;33146:93;33235:3;33146:93;:::i;:::-;33264:2;33259:3;33255:12;33248:19;;32907:366;;;:::o;33279:419::-;33445:4;33483:2;33472:9;33468:18;33460:26;;33532:9;33526:4;33522:20;33518:1;33507:9;33503:17;33496:47;33560:131;33686:4;33560:131;:::i;:::-;33552:139;;33279:419;;;:::o;33704:224::-;33844:34;33840:1;33832:6;33828:14;33821:58;33913:7;33908:2;33900:6;33896:15;33889:32;33704:224;:::o;33934:366::-;34076:3;34097:67;34161:2;34156:3;34097:67;:::i;:::-;34090:74;;34173:93;34262:3;34173:93;:::i;:::-;34291:2;34286:3;34282:12;34275:19;;33934:366;;;:::o;34306:419::-;34472:4;34510:2;34499:9;34495:18;34487:26;;34559:9;34553:4;34549:20;34545:1;34534:9;34530:17;34523:47;34587:131;34713:4;34587:131;:::i;:::-;34579:139;;34306:419;;;:::o;34731:222::-;34871:34;34867:1;34859:6;34855:14;34848:58;34940:5;34935:2;34927:6;34923:15;34916:30;34731:222;:::o;34959:366::-;35101:3;35122:67;35186:2;35181:3;35122:67;:::i;:::-;35115:74;;35198:93;35287:3;35198:93;:::i;:::-;35316:2;35311:3;35307:12;35300:19;;34959:366;;;:::o;35331:419::-;35497:4;35535:2;35524:9;35520:18;35512:26;;35584:9;35578:4;35574:20;35570:1;35559:9;35555:17;35548:47;35612:131;35738:4;35612:131;:::i;:::-;35604:139;;35331:419;;;:::o;35756:228::-;35896:34;35892:1;35884:6;35880:14;35873:58;35965:11;35960:2;35952:6;35948:15;35941:36;35756:228;:::o;35990:366::-;36132:3;36153:67;36217:2;36212:3;36153:67;:::i;:::-;36146:74;;36229:93;36318:3;36229:93;:::i;:::-;36347:2;36342:3;36338:12;36331:19;;35990:366;;;:::o;36362:419::-;36528:4;36566:2;36555:9;36551:18;36543:26;;36615:9;36609:4;36605:20;36601:1;36590:9;36586:17;36579:47;36643:131;36769:4;36643:131;:::i;:::-;36635:139;;36362:419;;;:::o;36787:180::-;36927:32;36923:1;36915:6;36911:14;36904:56;36787:180;:::o;36973:366::-;37115:3;37136:67;37200:2;37195:3;37136:67;:::i;:::-;37129:74;;37212:93;37301:3;37212:93;:::i;:::-;37330:2;37325:3;37321:12;37314:19;;36973:366;;;:::o;37345:419::-;37511:4;37549:2;37538:9;37534:18;37526:26;;37598:9;37592:4;37588:20;37584:1;37573:9;37569:17;37562:47;37626:131;37752:4;37626:131;:::i;:::-;37618:139;;37345:419;;;:::o;37770:234::-;37910:34;37906:1;37898:6;37894:14;37887:58;37979:17;37974:2;37966:6;37962:15;37955:42;37770:234;:::o;38010:366::-;38152:3;38173:67;38237:2;38232:3;38173:67;:::i;:::-;38166:74;;38249:93;38338:3;38249:93;:::i;:::-;38367:2;38362:3;38358:12;38351:19;;38010:366;;;:::o;38382:419::-;38548:4;38586:2;38575:9;38571:18;38563:26;;38635:9;38629:4;38625:20;38621:1;38610:9;38606:17;38599:47;38663:131;38789:4;38663:131;:::i;:::-;38655:139;;38382:419;;;:::o;38807:227::-;38947:34;38943:1;38935:6;38931:14;38924:58;39016:10;39011:2;39003:6;38999:15;38992:35;38807:227;:::o;39040:366::-;39182:3;39203:67;39267:2;39262:3;39203:67;:::i;:::-;39196:74;;39279:93;39368:3;39279:93;:::i;:::-;39397:2;39392:3;39388:12;39381:19;;39040:366;;;:::o;39412:419::-;39578:4;39616:2;39605:9;39601:18;39593:26;;39665:9;39659:4;39655:20;39651:1;39640:9;39636:17;39629:47;39693:131;39819:4;39693:131;:::i;:::-;39685:139;;39412:419;;;:::o;39837:191::-;39877:4;39897:20;39915:1;39897:20;:::i;:::-;39892:25;;39931:20;39949:1;39931:20;:::i;:::-;39926:25;;39970:1;39967;39964:8;39961:34;;;39975:18;;:::i;:::-;39961:34;40020:1;40017;40013:9;40005:17;;39837:191;;;;:::o;40034:177::-;40174:29;40170:1;40162:6;40158:14;40151:53;40034:177;:::o;40217:366::-;40359:3;40380:67;40444:2;40439:3;40380:67;:::i;:::-;40373:74;;40456:93;40545:3;40456:93;:::i;:::-;40574:2;40569:3;40565:12;40558:19;;40217:366;;;:::o;40589:419::-;40755:4;40793:2;40782:9;40778:18;40770:26;;40842:9;40836:4;40832:20;40828:1;40817:9;40813:17;40806:47;40870:131;40996:4;40870:131;:::i;:::-;40862:139;;40589:419;;;:::o;41014:233::-;41053:3;41076:24;41094:5;41076:24;:::i;:::-;41067:33;;41122:66;41115:5;41112:77;41109:103;;41192:18;;:::i;:::-;41109:103;41239:1;41232:5;41228:13;41221:20;;41014:233;;;:::o;41253:663::-;41341:6;41349;41357;41406:2;41394:9;41385:7;41381:23;41377:32;41374:119;;;41412:79;;:::i;:::-;41374:119;41532:1;41557:64;41613:7;41604:6;41593:9;41589:22;41557:64;:::i;:::-;41547:74;;41503:128;41670:2;41696:64;41752:7;41743:6;41732:9;41728:22;41696:64;:::i;:::-;41686:74;;41641:129;41809:2;41835:64;41891:7;41882:6;41871:9;41867:22;41835:64;:::i;:::-;41825:74;;41780:129;41253:663;;;;;:::o;41922:180::-;41970:77;41967:1;41960:88;42067:4;42064:1;42057:15;42091:4;42088:1;42081:15;42108:185;42148:1;42165:20;42183:1;42165:20;:::i;:::-;42160:25;;42199:20;42217:1;42199:20;:::i;:::-;42194:25;;42238:1;42228:35;;42243:18;;:::i;:::-;42228:35;42285:1;42282;42278:9;42273:14;;42108:185;;;;:::o;42299:85::-;42344:7;42373:5;42362:16;;42299:85;;;:::o;42390:158::-;42448:9;42481:61;42499:42;42508:32;42534:5;42508:32;:::i;:::-;42499:42;:::i;:::-;42481:61;:::i;:::-;42468:74;;42390:158;;;:::o;42554:147::-;42649:45;42688:5;42649:45;:::i;:::-;42644:3;42637:58;42554:147;;:::o;42707:831::-;42970:4;43008:3;42997:9;42993:19;42985:27;;43022:71;43090:1;43079:9;43075:17;43066:6;43022:71;:::i;:::-;43103:80;43179:2;43168:9;43164:18;43155:6;43103:80;:::i;:::-;43230:9;43224:4;43220:20;43215:2;43204:9;43200:18;43193:48;43258:108;43361:4;43352:6;43258:108;:::i;:::-;43250:116;;43376:72;43444:2;43433:9;43429:18;43420:6;43376:72;:::i;:::-;43458:73;43526:3;43515:9;43511:19;43502:6;43458:73;:::i;:::-;42707:831;;;;;;;;:::o;43544:220::-;43684:34;43680:1;43672:6;43668:14;43661:58;43753:3;43748:2;43740:6;43736:15;43729:28;43544:220;:::o;43770:366::-;43912:3;43933:67;43997:2;43992:3;43933:67;:::i;:::-;43926:74;;44009:93;44098:3;44009:93;:::i;:::-;44127:2;44122:3;44118:12;44111:19;;43770:366;;;:::o;44142:419::-;44308:4;44346:2;44335:9;44331:18;44323:26;;44395:9;44389:4;44385:20;44381:1;44370:9;44366:17;44359:47;44423:131;44549:4;44423:131;:::i;:::-;44415:139;;44142:419;;;:::o;44567:147::-;44668:11;44705:3;44690:18;;44567:147;;;;:::o;44720:114::-;;:::o;44840:398::-;44999:3;45020:83;45101:1;45096:3;45020:83;:::i;:::-;45013:90;;45112:93;45201:3;45112:93;:::i;:::-;45230:1;45225:3;45221:11;45214:18;;44840:398;;;:::o;45244:379::-;45428:3;45450:147;45593:3;45450:147;:::i;:::-;45443:154;;45614:3;45607:10;;45244:379;;;:::o

Swarm Source

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