ETH Price: $2,923.31 (+4.63%)
 

Overview

Max Total Supply

1,000,000,000,000 MAMAK

Holders

169

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
995,046,737.095311026 MAMAK

Value
$0.00
0xe03aea5f9574bb56ca28acfee6d1a31741e6ba3a
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:
MamaKong

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-05-13
*/

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

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 MamaKong is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping (address => uint256) private _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 _isExcludedFromRewards;
    string private _name = "MAMA KONG";
    string private _symbol = "MAMAK";
    uint8 private _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public _maxBuyAmount = 5000000000 * 10** _decimals;
    uint256 public ethPriceToSwap = 200000000000000000; //.2 ETH
    uint public ethSellAmount = 1000000000000000000;  //1 ETH
    uint256 public _maxWalletAmount = 15000000000 * 10** _decimals;
    address public buyBackAddress = 0xC00B6b4a2782F122878E953B769ABDc855c69313;
    address public marketingAddress = 0x28534719Df28daea005D864FEE6C79117C37480B;
    address public devAddress = 0x8811be15C1FdE25D4e4acA184e905104b66d49c8;
    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 buyFee;
        uint256 sellReflectionFee;
        uint256 sellFee;
        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[deadWallet] = true;
        taxFees = TaxFees(0,10,0,10,15);
        distribution = Distribution(50, 50, 0, 0);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return 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 airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false);
            iterator += 1;
        }
    }

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

    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 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 setEthLargeSellAmount(uint ethSellAmount_) external onlyOwner {
        ethSellAmount = ethSellAmount_;
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        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 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 setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10**9;
    }

    function setTaxFees(uint256 reflectionFee, uint256 liquidityFee, uint256 sellReflectionFee, uint256 sellLiquidityFee, uint256 superSellOffFee) external onlyOwner {
        taxFees.reflectionBuyFee = reflectionFee;
        taxFees.buyFee = liquidityFee;
        taxFees.sellFee = 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.buyFee;
            if(isSellTxn) {
                totalLiquidityFee = taxFees.sellFee;
                uint ethPrice = getEthPrice(_amount);
                if(ethPrice >= ethSellAmount) {
                    totalLiquidityFee = 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();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if(from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if(from == uniswapV2Pair) {
            require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if(from != uniswapV2Pair && to == uniswapV2Pair) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair) {
            takeFees = isTaxFreeTransfer ? false : true;
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

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

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

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 distributionEth = address(this).balance;
        uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100);
        uint256 buyBackShare = distributionEth.mul(distribution.buyBack).div(100);
        if(marketingShare > 0){
            payable(marketingAddress).transfer(marketingShare);
        }
        if(dividendShare > 0){
            sendEthDividends(dividendShare);
        }
        if(devTeamShare > 0){
            payable(devAddress).transfer(devTeamShare);
        }
        if(buyBackShare > 0){
            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 tAmount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        doTakeFees = takeFees;
        isSellTxn = isSell;
        (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);

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

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

    Map private map;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        mamKong = MamaKong(payable(contractAddr));
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        }
    }

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"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"}],"name":"setEthLargeSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","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":"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"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600981526020017f4d414d41204b4f4e47000000000000000000000000000000000000000000000081525060099080519060200190620000e8929190620008d4565b506040518060400160405280600581526020017f4d414d414b000000000000000000000000000000000000000000000000000000815250600a908051906020019062000136929190620008d4565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a62000171919062000b1e565b64e8d4a5100062000183919062000b6f565b600c55600c5460001962000198919062000bff565b600019620001a7919062000c37565b600d556001600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff021916908315150217905550600b60009054906101000a900460ff16600a620001fe919062000b1e565b64012a05f20062000210919062000b6f565b6010556702c68af0bb140000601155670de0b6b3a7640000601255600b60009054906101000a900460ff16600a62000249919062000b1e565b64037e11d6006200025b919062000b6f565b60135573c00b6b4a2782f122878e953b769abdc855c69313601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507328534719df28daea005d864fee6c79117c37480b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738811be15c1fde25d4e4aca184e905104b66d49c8601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c350601855348015620003b357600080fd5b506000620003c6620008a360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d54600360006200047b620008a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160076000620004cf620008ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600062000536620008a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060a0016040528060008152602001600a815260200160008152602001600a8152602001600f815250601a600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015590505060405180608001604052806032815260200160328152602001600081526020016000815250601f6000820151816000015560208201518160010155604082015181600201556060820151816003015590505062000834620008a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000895919062000c83565b60405180910390a362000d04565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620008e29062000ccf565b90600052602060002090601f01602090048101928262000906576000855562000952565b82601f106200092157805160ff191683800117855562000952565b8280016001018555821562000952579182015b828111156200095157825182559160200191906001019062000934565b5b50905062000961919062000965565b5090565b5b808211156200098057600081600090555060010162000966565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a1257808604811115620009ea57620009e962000984565b5b6001851615620009fa5780820291505b808102905062000a0a85620009b3565b9450620009ca565b94509492505050565b60008262000a2d576001905062000b00565b8162000a3d576000905062000b00565b816001811462000a56576002811462000a615762000a97565b600191505062000b00565b60ff84111562000a765762000a7562000984565b5b8360020a91508482111562000a905762000a8f62000984565b5b5062000b00565b5060208310610133831016604e8410600b841016171562000ad15782820a90508381111562000acb5762000aca62000984565b5b62000b00565b62000ae08484846001620009c0565b9250905081840481111562000afa5762000af962000984565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000b2b8262000b07565b915062000b388362000b11565b925062000b677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a1b565b905092915050565b600062000b7c8262000b07565b915062000b898362000b07565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bc55762000bc462000984565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c0c8262000b07565b915062000c198362000b07565b92508262000c2c5762000c2b62000bd0565b5b828206905092915050565b600062000c448262000b07565b915062000c518362000b07565b92508282101562000c675762000c6662000984565b5b828203905092915050565b62000c7d8162000b07565b82525050565b600060208201905062000c9a600083018462000c72565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ce857607f821691505b60208210810362000cfe5762000cfd62000ca0565b5b50919050565b615e178062000d146000396000f3fe6080604052600436106102cd5760003560e01c8063783478ad11610175578063a5ece941116100dc578063dcda6af311610095578063f2fde38b1161006f578063f2fde38b14610b30578063f34eb0b814610b59578063f959f81714610b82578063fb6287d214610bab576102d4565b8063dcda6af314610a8d578063dd62ed3e14610ab6578063e7dad4f914610af3576102d4565b8063a5ece94114610993578063a9059cbb146109be578063b2abbbc4146109fb578063b6a9987214610a24578063c49b9a8014610a3b578063dc0aa9cf14610a64576102d4565b806391142cb31161012e57806391142cb31461088357806395d89b41146108ae57806398acb5d8146108d95780639b0e2e86146109025780639c1b8af51461092b578063a457c2d714610956576102d4565b8063783478ad1461077357806385141a771461079e57806385d4787b146107c9578063870d365d146107f2578063871c128d1461082f5780638da5cb5b14610858576102d4565b806339509351116102345780635342acb4116101ed5780636c0a24eb116101c75780636c0a24eb146106cb57806370a08231146106f6578063715018a61461073357806371cd56af1461074a576102d4565b80635342acb41461063557806354a5df1f146106725780635ee58efc1461069d576102d4565b806339509351146105255780633ad10ef614610562578063441d801f1461058d57806349bd5a5e146105b65780634a74bb02146105e15780634e7812331461060c576102d4565b80631694505e116102865780631694505e1461040157806318160ddd1461042c57806323b872dd1461045757806327a14fc2146104945780632d838119146104bd578063313ce567146104fa576102d4565b80630492f055146102d957806306fdde0314610304578063095ea7b31461032f5780630ddc09761461036c5780630e8322731461039b5780630fc709e5146103d8576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bd4565b6040516102fb91906144d5565b60405180910390f35b34801561031057600080fd5b50610319610bda565b6040516103269190614589565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190614649565b610c6c565b60405161036391906146a4565b60405180910390f35b34801561037857600080fd5b50610381610c8a565b6040516103929594939291906146bf565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614712565b610cae565b6040516103cf91906146a4565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa919061473f565b610d04565b005b34801561040d57600080fd5b50610416610dc7565b6040516104239190614805565b60405180910390f35b34801561043857600080fd5b50610441610ded565b60405161044e91906144d5565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190614820565b610df7565b60405161048b91906146a4565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190614873565b610ed0565b005b3480156104c957600080fd5b506104e460048036038101906104df9190614873565b610f7e565b6040516104f191906144d5565b60405180910390f35b34801561050657600080fd5b5061050f610fec565b60405161051c91906148bc565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190614649565b611003565b60405161055991906146a4565b60405180910390f35b34801561056e57600080fd5b506105776110b6565b60405161058491906148e6565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614992565b6110dc565b005b3480156105c257600080fd5b506105cb611181565b6040516105d891906148e6565b60405180910390f35b3480156105ed57600080fd5b506105f66111a7565b60405161060391906146a4565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e91906149f2565b6111ba565b005b34801561064157600080fd5b5061065c60048036038101906106579190614712565b61126c565b60405161066991906146a4565b60405180910390f35b34801561067e57600080fd5b506106876112c2565b60405161069491906144d5565b60405180910390f35b3480156106a957600080fd5b506106b26112c8565b6040516106c29493929190614a1f565b60405180910390f35b3480156106d757600080fd5b506106e06112e6565b6040516106ed91906144d5565b60405180910390f35b34801561070257600080fd5b5061071d60048036038101906107189190614712565b6112ec565b60405161072a91906144d5565b60405180910390f35b34801561073f57600080fd5b5061074861133d565b005b34801561075657600080fd5b50610771600480360381019061076c9190614992565b611490565b005b34801561077f57600080fd5b50610788611535565b60405161079591906148e6565b60405180910390f35b3480156107aa57600080fd5b506107b361155b565b6040516107c091906148e6565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190614ba2565b611581565b005b3480156107fe57600080fd5b5061081960048036038101906108149190614873565b611624565b60405161082691906144d5565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614873565b611867565b005b34801561086457600080fd5b5061086d61194a565b60405161087a91906148e6565b60405180910390f35b34801561088f57600080fd5b50610898611973565b6040516108a591906144d5565b60405180910390f35b3480156108ba57600080fd5b506108c3611979565b6040516108d09190614589565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb9190614712565b611a0b565b005b34801561090e57600080fd5b5061092960048036038101906109249190614ba2565b611ae4565b005b34801561093757600080fd5b50610940611b87565b60405161094d91906144d5565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190614649565b611b8d565b60405161098a91906146a4565b60405180910390f35b34801561099f57600080fd5b506109a8611c5a565b6040516109b591906148e6565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190614649565b611c80565b6040516109f291906146a4565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d9190614873565b611c9e565b005b348015610a3057600080fd5b50610a39611d3d565b005b348015610a4757600080fd5b50610a626004803603810190610a5d91906149f2565b6120bd565b005b348015610a7057600080fd5b50610a8b6004803603810190610a869190614beb565b6121a6565b005b348015610a9957600080fd5b50610ab46004803603810190610aaf9190614cbc565b612274565b005b348015610ac257600080fd5b50610add6004803603810190610ad89190614d3d565b6123de565b604051610aea91906144d5565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b159190614712565b612465565b604051610b2791906146a4565b60405180910390f35b348015610b3c57600080fd5b50610b576004803603810190610b529190614712565b6124bb565b005b348015610b6557600080fd5b50610b806004803603810190610b7b9190614873565b61267c565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614873565b61272a565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd9190614d7d565b6127c9565b005b60105481565b606060098054610be990614dff565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1590614dff565b8015610c625780601f10610c3757610100808354040283529160200191610c62565b820191906000526020600020905b815481529060010190602001808311610c4557829003601f168201915b5050505050905090565b6000610c80610c79612926565b848461292e565b6001905092915050565b601a8060000154908060010154908060020154908060030154908060040154905085565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d0c612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614e7c565b60405180910390fd5b83601f6002018190555082601f6000018190555081601f6001018190555080601f6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610e04848484612af7565b610ec584610e10612926565b610ec085604051806060016040528060288152602001615d9560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e76612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132739092919063ffffffff16565b61292e565b600190509392505050565b610ed8612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614e7c565b60405180910390fd5b633b9aca0081610f759190614ecb565b60138190555050565b6000600d54821115610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc90614f97565b60405180910390fd5b6000610fcf6132d7565b9050610fe4818461330290919063ffffffff16565b915050919050565b6000600b60009054906101000a900460ff16905090565b60006110ac611010612926565b846110a78560056000611021612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334c90919063ffffffff16565b61292e565b6001905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110e4612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890614e7c565b60405180910390fd5b61117c8383836133aa565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60019054906101000a900460ff1681565b6111c2612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690614e7c565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b601f8060000154908060010154908060020154908060030154905084565b60135481565b6000611336600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f7e565b9050919050565b611345612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c990614e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611498612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90614e7c565b60405180910390fd5b611530838383613455565b505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611589612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90614e7c565b60405180910390fd5b611621816001613500565b50565b600080600267ffffffffffffffff81111561164257611641614a64565b5b6040519080825280602002602001820160405280156116705781602001602082028036833780820191505090505b509050308160008151811061168857611687614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190614ffb565b8160018151811061176757611766614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117fe9291906150e6565b600060405180830381865afa15801561181b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061184491906151ee565b60018151811061185757611856614fb7565b5b6020026020010151915050919050565b61186f612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390614e7c565b60405180910390fd5b6018548103611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906152a9565b60405180910390fd5b8060188190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6060600a805461198890614dff565b80601f01602080910402602001604051908101604052809291908181526020018280546119b490614dff565b8015611a015780601f106119d657610100808354040283529160200191611a01565b820191906000526020600020905b8154815290600101906020018083116119e457829003601f168201915b5050505050905090565b611a13612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614e7c565b60405180910390fd5b80602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611aec612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090614e7c565b60405180910390fd5b611b84816000613500565b50565b60185481565b6000611c50611b9a612926565b84611c4b85604051806060016040528060258152602001615dbd6025913960056000611bc4612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132739092919063ffffffff16565b61292e565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c94611c8d612926565b8484612af7565b6001905092915050565b611ca6612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90614e7c565b60405180910390fd5b8060118190555050565b611d45612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990614e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a9061533b565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef49190614ffb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa19190614ffb565b6040518363ffffffff1660e01b8152600401611fbe92919061535b565b6020604051808303816000875af1158015611fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120019190614ffb565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b6120c5612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614e7c565b60405180910390fd5b80600f60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161219b91906146a4565b60405180910390a150565b6121ae612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290614e7c565b60405180910390fd5b84601a6000018190555083601a6001018190555081601a6003018190555082601a6002018190555080601a600401819055505050505050565b600060076000612282612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612300906153f6565b60405180910390fd5b828290508585905014612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890615488565b60405180910390fd5b5b848490508110156123d7576123c3612368612926565b86868481811061237b5761237a614fb7565b5b90506020020160208101906123909190614712565b633b9aca008686868181106123a8576123a7614fb7565b5b905060200201356123b99190614ecb565b60008060006135f7565b6001816123d091906154a8565b9050612352565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6124c3612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790614e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690615570565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612684612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890614e7c565b60405180910390fd5b633b9aca00816127219190614ecb565b60108190555050565b612732612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b690614e7c565b60405180910390fd5b8060128190555050565b6127d1612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285590614e7c565b60405180910390fd5b82601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299490615602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0390615694565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aea91906144d5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90615726565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc906157b8565b60405180910390fd5b60008111612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061584a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca0906158b6565b60405180910390fd5b600080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d505750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d8f5750612d5f61194a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dce5750612d9e61194a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612ded84612ddf876112ec565b61334c90919063ffffffff16565b9050612df761194a565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612e655750612e3561194a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ebf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612fa857600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f685750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e90615948565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361308857601054841115613042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613039906159da565b60405180910390fd5b601354811115613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e90615a6c565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156131335750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156131455760019250613144613a1b565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156131f15750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561325c57600f60029054906101000a900460ff16613211576001613214565b60005b915060135481111561325b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325290615a6c565b60405180910390fd5b5b61326b868686858760016135f7565b505050505050565b60008383111582906132bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b29190614589565b60405180910390fd5b50600083856132ca9190615a8c565b9050809150509392505050565b60008060006132e4613a89565b915091506132fb818361330290919063ffffffff16565b9250505090565b600061334483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ad6565b905092915050565b600080828461335b91906154a8565b9050838110156133a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339790615b0c565b60405180910390fd5b8091505092915050565b60005b8383905081101561344f5760008484838181106133cd576133cc614fb7565b5b90506020020160208101906133e29190614712565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061344790615b2c565b9150506133ad565b50505050565b60005b838390508110156134fa57600084848381811061347857613477614fb7565b5b905060200201602081019061348d9190614712565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134f290615b2c565b915050613458565b50505050565b60005b82518110156135f257600083828151811061352157613520614fb7565b5b60200260200101519050821561358e576001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506135de565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806135ea90615b2c565b915050613503565b505050565b82601960006101000a81548160ff02191690831515021790555081601960016101000a81548160ff02191690831515021790555060008060008060008061363d8a613b39565b95509550955095509550955061369b86600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b9590919063ffffffff16565b600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373085600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377c81613bdf565b6137868483613c9c565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137e391906144d5565b60405180910390a38680156137fd57506000601f60020154115b15613a0d57602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b18d6040518263ffffffff1660e01b815260040161385d91906148e6565b600060405180830381600087803b15801561387757600080fd5b505af1925050508015613888575060015b50602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b18c6040518263ffffffff1660e01b81526004016138e491906148e6565b600060405180830381600087803b1580156138fe57600080fd5b505af192505050801561390f575060015b50602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796018546040518263ffffffff1660e01b815260040161396d91906144d5565b6060604051808303816000875af19250505080156139a957506040513d601f19601f820116820180604052508101906139a69190615b74565b60015b15613a0c573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601854604051613a009493929190614a1f565b60405180910390a35050505b5b505050505050505050505050565b6000613a26306112ec565b90506000811115613a86576000613a3c82611624565b90506011548110158015613a5d5750600f60009054906101000a900460ff16155b8015613a755750600f60019054906101000a900460ff165b15613a8457613a8382613cd6565b5b505b50565b6000806000600d5490506000600c549050613ab1600c54600d5461330290919063ffffffff16565b821015613ac957600d54600c54935093505050613ad2565b81819350935050505b9091565b60008083118290613b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b149190614589565b60405180910390fd5b5060008385613b2c9190615bf6565b9050809150509392505050565b6000806000806000806000806000613b508a613f4a565b9250925092506000806000613b6e8d8686613b696132d7565b613fa4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613bd783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613273565b905092915050565b6000613be96132d7565b90506000613c00828461402d90919063ffffffff16565b9050613c5481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613cb182600d54613b9590919063ffffffff16565b600d81905550613ccc81600e5461334c90919063ffffffff16565b600e819055505050565b6001600f60006101000a81548160ff021916908315150217905550613cfa816140a7565b60004790506000613d2c6064613d1e601f600101548561402d90919063ffffffff16565b61330290919063ffffffff16565b90506000613d5b6064613d4d601f600201548661402d90919063ffffffff16565b61330290919063ffffffff16565b90506000613d8a6064613d7c601f600001548761402d90919063ffffffff16565b61330290919063ffffffff16565b90506000613db96064613dab601f600301548861402d90919063ffffffff16565b61330290919063ffffffff16565b90506000841115613e2e57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613e2c573d6000803e3d6000fd5b505b6000831115613e4157613e40836142ea565b5b6000821115613eb457601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613eb2573d6000803e3d6000fd5b505b6000811115613f2757601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613f25573d6000803e3d6000fd5b505b50505050506000600f60006101000a81548160ff02191690831515021790555050565b600080600080613f59856143ba565b90506000613f668661442b565b90506000613f8f82613f81858a613b9590919063ffffffff16565b613b9590919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613fbd858961402d90919063ffffffff16565b90506000613fd4868961402d90919063ffffffff16565b90506000613feb878961402d90919063ffffffff16565b90506000614014826140068587613b9590919063ffffffff16565b613b9590919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080830361403f57600090506140a1565b6000828461404d9190614ecb565b905082848261405c9190615bf6565b1461409c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409390615c99565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156140c4576140c3614a64565b5b6040519080825280602002602001820160405280156140f25781602001602082028036833780820191505090505b509050308160008151811061410a57614109614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d59190614ffb565b816001815181106141e9576141e8614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061425030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461292e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016142b4959493929190615cf4565b600060405180830381600087803b1580156142ce57600080fd5b505af11580156142e2573d6000803e3d6000fd5b505050505050565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161433290615d7f565b60006040518083038185875af1925050503d806000811461436f576040519150601f19603f3d011682016040523d82523d6000602084013e614374565b606091505b5050905080156143b6577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516143ad91906144d5565b60405180910390a15b5050565b60008060009050601960009054906101000a900460ff16156143fd57601a600001549050601960019054906101000a900460ff16156143fc57601a6002015490505b5b6144236064614415838661402d90919063ffffffff16565b61330290919063ffffffff16565b915050919050565b60008060009050601960009054906101000a900460ff161561448e57601a600101549050601960019054906101000a900460ff161561448d57601a600301549050600061447784611624565b9050601254811061448b57601a6004015491505b505b5b6144b460646144a6838661402d90919063ffffffff16565b61330290919063ffffffff16565b915050919050565b6000819050919050565b6144cf816144bc565b82525050565b60006020820190506144ea60008301846144c6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561452a57808201518184015260208101905061450f565b83811115614539576000848401525b50505050565b6000601f19601f8301169050919050565b600061455b826144f0565b61456581856144fb565b935061457581856020860161450c565b61457e8161453f565b840191505092915050565b600060208201905081810360008301526145a38184614550565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145ea826145bf565b9050919050565b6145fa816145df565b811461460557600080fd5b50565b600081359050614617816145f1565b92915050565b614626816144bc565b811461463157600080fd5b50565b6000813590506146438161461d565b92915050565b600080604083850312156146605761465f6145b5565b5b600061466e85828601614608565b925050602061467f85828601614634565b9150509250929050565b60008115159050919050565b61469e81614689565b82525050565b60006020820190506146b96000830184614695565b92915050565b600060a0820190506146d460008301886144c6565b6146e160208301876144c6565b6146ee60408301866144c6565b6146fb60608301856144c6565b61470860808301846144c6565b9695505050505050565b600060208284031215614728576147276145b5565b5b600061473684828501614608565b91505092915050565b60008060008060808587031215614759576147586145b5565b5b600061476787828801614634565b945050602061477887828801614634565b935050604061478987828801614634565b925050606061479a87828801614634565b91505092959194509250565b6000819050919050565b60006147cb6147c66147c1846145bf565b6147a6565b6145bf565b9050919050565b60006147dd826147b0565b9050919050565b60006147ef826147d2565b9050919050565b6147ff816147e4565b82525050565b600060208201905061481a60008301846147f6565b92915050565b600080600060608486031215614839576148386145b5565b5b600061484786828701614608565b935050602061485886828701614608565b925050604061486986828701614634565b9150509250925092565b600060208284031215614889576148886145b5565b5b600061489784828501614634565b91505092915050565b600060ff82169050919050565b6148b6816148a0565b82525050565b60006020820190506148d160008301846148ad565b92915050565b6148e0816145df565b82525050565b60006020820190506148fb60008301846148d7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261492657614925614901565b5b8235905067ffffffffffffffff81111561494357614942614906565b5b60208301915083602082028301111561495f5761495e61490b565b5b9250929050565b61496f81614689565b811461497a57600080fd5b50565b60008135905061498c81614966565b92915050565b6000806000604084860312156149ab576149aa6145b5565b5b600084013567ffffffffffffffff8111156149c9576149c86145ba565b5b6149d586828701614910565b935093505060206149e88682870161497d565b9150509250925092565b600060208284031215614a0857614a076145b5565b5b6000614a168482850161497d565b91505092915050565b6000608082019050614a3460008301876144c6565b614a4160208301866144c6565b614a4e60408301856144c6565b614a5b60608301846144c6565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a9c8261453f565b810181811067ffffffffffffffff82111715614abb57614aba614a64565b5b80604052505050565b6000614ace6145ab565b9050614ada8282614a93565b919050565b600067ffffffffffffffff821115614afa57614af9614a64565b5b602082029050602081019050919050565b6000614b1e614b1984614adf565b614ac4565b90508083825260208201905060208402830185811115614b4157614b4061490b565b5b835b81811015614b6a5780614b568882614608565b845260208401935050602081019050614b43565b5050509392505050565b600082601f830112614b8957614b88614901565b5b8135614b99848260208601614b0b565b91505092915050565b600060208284031215614bb857614bb76145b5565b5b600082013567ffffffffffffffff811115614bd657614bd56145ba565b5b614be284828501614b74565b91505092915050565b600080600080600060a08688031215614c0757614c066145b5565b5b6000614c1588828901614634565b9550506020614c2688828901614634565b9450506040614c3788828901614634565b9350506060614c4888828901614634565b9250506080614c5988828901614634565b9150509295509295909350565b60008083601f840112614c7c57614c7b614901565b5b8235905067ffffffffffffffff811115614c9957614c98614906565b5b602083019150836020820283011115614cb557614cb461490b565b5b9250929050565b60008060008060408587031215614cd657614cd56145b5565b5b600085013567ffffffffffffffff811115614cf457614cf36145ba565b5b614d0087828801614910565b9450945050602085013567ffffffffffffffff811115614d2357614d226145ba565b5b614d2f87828801614c66565b925092505092959194509250565b60008060408385031215614d5457614d536145b5565b5b6000614d6285828601614608565b9250506020614d7385828601614608565b9150509250929050565b600080600060608486031215614d9657614d956145b5565b5b6000614da486828701614608565b9350506020614db586828701614608565b9250506040614dc686828701614608565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e1757607f821691505b602082108103614e2a57614e29614dd0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e666020836144fb565b9150614e7182614e30565b602082019050919050565b60006020820190508181036000830152614e9581614e59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ed6826144bc565b9150614ee1836144bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1a57614f19614e9c565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f81602a836144fb565b9150614f8c82614f25565b604082019050919050565b60006020820190508181036000830152614fb081614f74565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ff5816145f1565b92915050565b600060208284031215615011576150106145b5565b5b600061501f84828501614fe6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61505d816145df565b82525050565b600061506f8383615054565b60208301905092915050565b6000602082019050919050565b600061509382615028565b61509d8185615033565b93506150a883615044565b8060005b838110156150d95781516150c08882615063565b97506150cb8361507b565b9250506001810190506150ac565b5085935050505092915050565b60006040820190506150fb60008301856144c6565b818103602083015261510d8184615088565b90509392505050565b600067ffffffffffffffff82111561513157615130614a64565b5b602082029050602081019050919050565b6000815190506151518161461d565b92915050565b600061516a61516584615116565b614ac4565b9050808382526020820190506020840283018581111561518d5761518c61490b565b5b835b818110156151b657806151a28882615142565b84526020840193505060208101905061518f565b5050509392505050565b600082601f8301126151d5576151d4614901565b5b81516151e5848260208601615157565b91505092915050565b600060208284031215615204576152036145b5565b5b600082015167ffffffffffffffff811115615222576152216145ba565b5b61522e848285016151c0565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000615293602c836144fb565b915061529e82615237565b604082019050919050565b600060208201905081810360008301526152c281615286565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006153256022836144fb565b9150615330826152c9565b604082019050919050565b6000602082019050818103600083015261535481615318565b9050919050565b600060408201905061537060008301856148d7565b61537d60208301846148d7565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006153e0602d836144fb565b91506153eb82615384565b604082019050919050565b6000602082019050818103600083015261540f816153d3565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615472602a836144fb565b915061547d82615416565b604082019050919050565b600060208201905081810360008301526154a181615465565b9050919050565b60006154b3826144bc565b91506154be836144bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154f3576154f2614e9c565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061555a6026836144fb565b9150615565826154fe565b604082019050919050565b600060208201905081810360008301526155898161554d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155ec6024836144fb565b91506155f782615590565b604082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061567e6022836144fb565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157106025836144fb565b915061571b826156b4565b604082019050919050565b6000602082019050818103600083015261573f81615703565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157a26023836144fb565b91506157ad82615746565b604082019050919050565b600060208201905081810360008301526157d181615795565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006158346029836144fb565b915061583f826157d8565b604082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006158a0601e836144fb565b91506158ab8261586a565b602082019050919050565b600060208201905081810360008301526158cf81615893565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615932602f836144fb565b915061593d826158d6565b604082019050919050565b6000602082019050818103600083015261596181615925565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006159c46028836144fb565b91506159cf82615968565b604082019050919050565b600060208201905081810360008301526159f3816159b7565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615a566025836144fb565b9150615a61826159fa565b604082019050919050565b60006020820190508181036000830152615a8581615a49565b9050919050565b6000615a97826144bc565b9150615aa2836144bc565b925082821015615ab557615ab4614e9c565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615af6601b836144fb565b9150615b0182615ac0565b602082019050919050565b60006020820190508181036000830152615b2581615ae9565b9050919050565b6000615b37826144bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b6957615b68614e9c565b5b600182019050919050565b600080600060608486031215615b8d57615b8c6145b5565b5b6000615b9b86828701615142565b9350506020615bac86828701615142565b9250506040615bbd86828701615142565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c01826144bc565b9150615c0c836144bc565b925082615c1c57615c1b615bc7565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c836021836144fb565b9150615c8e82615c27565b604082019050919050565b60006020820190508181036000830152615cb281615c76565b9050919050565b6000819050919050565b6000615cde615cd9615cd484615cb9565b6147a6565b6144bc565b9050919050565b615cee81615cc3565b82525050565b600060a082019050615d0960008301886144c6565b615d166020830187615ce5565b8181036040830152615d288186615088565b9050615d3760608301856148d7565b615d4460808301846144c6565b9695505050505050565b600081905092915050565b50565b6000615d69600083615d4e565b9150615d7482615d59565b600082019050919050565b6000615d8a82615d5c565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207fa57ba038775b14e53e44b0246d49f3b835853c3acc3d519125da9731f860ba64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c8063783478ad11610175578063a5ece941116100dc578063dcda6af311610095578063f2fde38b1161006f578063f2fde38b14610b30578063f34eb0b814610b59578063f959f81714610b82578063fb6287d214610bab576102d4565b8063dcda6af314610a8d578063dd62ed3e14610ab6578063e7dad4f914610af3576102d4565b8063a5ece94114610993578063a9059cbb146109be578063b2abbbc4146109fb578063b6a9987214610a24578063c49b9a8014610a3b578063dc0aa9cf14610a64576102d4565b806391142cb31161012e57806391142cb31461088357806395d89b41146108ae57806398acb5d8146108d95780639b0e2e86146109025780639c1b8af51461092b578063a457c2d714610956576102d4565b8063783478ad1461077357806385141a771461079e57806385d4787b146107c9578063870d365d146107f2578063871c128d1461082f5780638da5cb5b14610858576102d4565b806339509351116102345780635342acb4116101ed5780636c0a24eb116101c75780636c0a24eb146106cb57806370a08231146106f6578063715018a61461073357806371cd56af1461074a576102d4565b80635342acb41461063557806354a5df1f146106725780635ee58efc1461069d576102d4565b806339509351146105255780633ad10ef614610562578063441d801f1461058d57806349bd5a5e146105b65780634a74bb02146105e15780634e7812331461060c576102d4565b80631694505e116102865780631694505e1461040157806318160ddd1461042c57806323b872dd1461045757806327a14fc2146104945780632d838119146104bd578063313ce567146104fa576102d4565b80630492f055146102d957806306fdde0314610304578063095ea7b31461032f5780630ddc09761461036c5780630e8322731461039b5780630fc709e5146103d8576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bd4565b6040516102fb91906144d5565b60405180910390f35b34801561031057600080fd5b50610319610bda565b6040516103269190614589565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190614649565b610c6c565b60405161036391906146a4565b60405180910390f35b34801561037857600080fd5b50610381610c8a565b6040516103929594939291906146bf565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614712565b610cae565b6040516103cf91906146a4565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa919061473f565b610d04565b005b34801561040d57600080fd5b50610416610dc7565b6040516104239190614805565b60405180910390f35b34801561043857600080fd5b50610441610ded565b60405161044e91906144d5565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190614820565b610df7565b60405161048b91906146a4565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190614873565b610ed0565b005b3480156104c957600080fd5b506104e460048036038101906104df9190614873565b610f7e565b6040516104f191906144d5565b60405180910390f35b34801561050657600080fd5b5061050f610fec565b60405161051c91906148bc565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190614649565b611003565b60405161055991906146a4565b60405180910390f35b34801561056e57600080fd5b506105776110b6565b60405161058491906148e6565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614992565b6110dc565b005b3480156105c257600080fd5b506105cb611181565b6040516105d891906148e6565b60405180910390f35b3480156105ed57600080fd5b506105f66111a7565b60405161060391906146a4565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e91906149f2565b6111ba565b005b34801561064157600080fd5b5061065c60048036038101906106579190614712565b61126c565b60405161066991906146a4565b60405180910390f35b34801561067e57600080fd5b506106876112c2565b60405161069491906144d5565b60405180910390f35b3480156106a957600080fd5b506106b26112c8565b6040516106c29493929190614a1f565b60405180910390f35b3480156106d757600080fd5b506106e06112e6565b6040516106ed91906144d5565b60405180910390f35b34801561070257600080fd5b5061071d60048036038101906107189190614712565b6112ec565b60405161072a91906144d5565b60405180910390f35b34801561073f57600080fd5b5061074861133d565b005b34801561075657600080fd5b50610771600480360381019061076c9190614992565b611490565b005b34801561077f57600080fd5b50610788611535565b60405161079591906148e6565b60405180910390f35b3480156107aa57600080fd5b506107b361155b565b6040516107c091906148e6565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190614ba2565b611581565b005b3480156107fe57600080fd5b5061081960048036038101906108149190614873565b611624565b60405161082691906144d5565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614873565b611867565b005b34801561086457600080fd5b5061086d61194a565b60405161087a91906148e6565b60405180910390f35b34801561088f57600080fd5b50610898611973565b6040516108a591906144d5565b60405180910390f35b3480156108ba57600080fd5b506108c3611979565b6040516108d09190614589565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb9190614712565b611a0b565b005b34801561090e57600080fd5b5061092960048036038101906109249190614ba2565b611ae4565b005b34801561093757600080fd5b50610940611b87565b60405161094d91906144d5565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190614649565b611b8d565b60405161098a91906146a4565b60405180910390f35b34801561099f57600080fd5b506109a8611c5a565b6040516109b591906148e6565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190614649565b611c80565b6040516109f291906146a4565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d9190614873565b611c9e565b005b348015610a3057600080fd5b50610a39611d3d565b005b348015610a4757600080fd5b50610a626004803603810190610a5d91906149f2565b6120bd565b005b348015610a7057600080fd5b50610a8b6004803603810190610a869190614beb565b6121a6565b005b348015610a9957600080fd5b50610ab46004803603810190610aaf9190614cbc565b612274565b005b348015610ac257600080fd5b50610add6004803603810190610ad89190614d3d565b6123de565b604051610aea91906144d5565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b159190614712565b612465565b604051610b2791906146a4565b60405180910390f35b348015610b3c57600080fd5b50610b576004803603810190610b529190614712565b6124bb565b005b348015610b6557600080fd5b50610b806004803603810190610b7b9190614873565b61267c565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614873565b61272a565b005b348015610bb757600080fd5b50610bd26004803603810190610bcd9190614d7d565b6127c9565b005b60105481565b606060098054610be990614dff565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1590614dff565b8015610c625780601f10610c3757610100808354040283529160200191610c62565b820191906000526020600020905b815481529060010190602001808311610c4557829003601f168201915b5050505050905090565b6000610c80610c79612926565b848461292e565b6001905092915050565b601a8060000154908060010154908060020154908060030154908060040154905085565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d0c612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090614e7c565b60405180910390fd5b83601f6002018190555082601f6000018190555081601f6001018190555080601f6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610e04848484612af7565b610ec584610e10612926565b610ec085604051806060016040528060288152602001615d9560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e76612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132739092919063ffffffff16565b61292e565b600190509392505050565b610ed8612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614e7c565b60405180910390fd5b633b9aca0081610f759190614ecb565b60138190555050565b6000600d54821115610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc90614f97565b60405180910390fd5b6000610fcf6132d7565b9050610fe4818461330290919063ffffffff16565b915050919050565b6000600b60009054906101000a900460ff16905090565b60006110ac611010612926565b846110a78560056000611021612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334c90919063ffffffff16565b61292e565b6001905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110e4612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890614e7c565b60405180910390fd5b61117c8383836133aa565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60019054906101000a900460ff1681565b6111c2612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690614e7c565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b601f8060000154908060010154908060020154908060030154905084565b60135481565b6000611336600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f7e565b9050919050565b611345612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c990614e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611498612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90614e7c565b60405180910390fd5b611530838383613455565b505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611589612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90614e7c565b60405180910390fd5b611621816001613500565b50565b600080600267ffffffffffffffff81111561164257611641614a64565b5b6040519080825280602002602001820160405280156116705781602001602082028036833780820191505090505b509050308160008151811061168857611687614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117539190614ffb565b8160018151811061176757611766614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117fe9291906150e6565b600060405180830381865afa15801561181b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061184491906151ee565b60018151811061185757611856614fb7565b5b6020026020010151915050919050565b61186f612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390614e7c565b60405180910390fd5b6018548103611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906152a9565b60405180910390fd5b8060188190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6060600a805461198890614dff565b80601f01602080910402602001604051908101604052809291908181526020018280546119b490614dff565b8015611a015780601f106119d657610100808354040283529160200191611a01565b820191906000526020600020905b8154815290600101906020018083116119e457829003601f168201915b5050505050905090565b611a13612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614e7c565b60405180910390fd5b80602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611aec612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090614e7c565b60405180910390fd5b611b84816000613500565b50565b60185481565b6000611c50611b9a612926565b84611c4b85604051806060016040528060258152602001615dbd6025913960056000611bc4612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132739092919063ffffffff16565b61292e565b6001905092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c94611c8d612926565b8484612af7565b6001905092915050565b611ca6612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90614e7c565b60405180910390fd5b8060118190555050565b611d45612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990614e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a9061533b565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef49190614ffb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa19190614ffb565b6040518363ffffffff1660e01b8152600401611fbe92919061535b565b6020604051808303816000875af1158015611fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120019190614ffb565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b6120c5612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614e7c565b60405180910390fd5b80600f60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161219b91906146a4565b60405180910390a150565b6121ae612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290614e7c565b60405180910390fd5b84601a6000018190555083601a6001018190555081601a6003018190555082601a6002018190555080601a600401819055505050505050565b600060076000612282612926565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612300906153f6565b60405180910390fd5b828290508585905014612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234890615488565b60405180910390fd5b5b848490508110156123d7576123c3612368612926565b86868481811061237b5761237a614fb7565b5b90506020020160208101906123909190614712565b633b9aca008686868181106123a8576123a7614fb7565b5b905060200201356123b99190614ecb565b60008060006135f7565b6001816123d091906154a8565b9050612352565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6124c3612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790614e7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690615570565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612684612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890614e7c565b60405180910390fd5b633b9aca00816127219190614ecb565b60108190555050565b612732612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b690614e7c565b60405180910390fd5b8060128190555050565b6127d1612926565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285590614e7c565b60405180910390fd5b82601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299490615602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0390615694565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aea91906144d5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90615726565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc906157b8565b60405180910390fd5b60008111612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061584a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca0906158b6565b60405180910390fd5b600080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d505750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d8f5750612d5f61194a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dce5750612d9e61194a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612ded84612ddf876112ec565b61334c90919063ffffffff16565b9050612df761194a565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612e655750612e3561194a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ebf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612fa857600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f685750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e90615948565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361308857601054841115613042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613039906159da565b60405180910390fd5b601354811115613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e90615a6c565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156131335750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156131455760019250613144613a1b565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156131f15750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561325c57600f60029054906101000a900460ff16613211576001613214565b60005b915060135481111561325b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325290615a6c565b60405180910390fd5b5b61326b868686858760016135f7565b505050505050565b60008383111582906132bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b29190614589565b60405180910390fd5b50600083856132ca9190615a8c565b9050809150509392505050565b60008060006132e4613a89565b915091506132fb818361330290919063ffffffff16565b9250505090565b600061334483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ad6565b905092915050565b600080828461335b91906154a8565b9050838110156133a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339790615b0c565b60405180910390fd5b8091505092915050565b60005b8383905081101561344f5760008484838181106133cd576133cc614fb7565b5b90506020020160208101906133e29190614712565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061344790615b2c565b9150506133ad565b50505050565b60005b838390508110156134fa57600084848381811061347857613477614fb7565b5b905060200201602081019061348d9190614712565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134f290615b2c565b915050613458565b50505050565b60005b82518110156135f257600083828151811061352157613520614fb7565b5b60200260200101519050821561358e576001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506135de565b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806135ea90615b2c565b915050613503565b505050565b82601960006101000a81548160ff02191690831515021790555081601960016101000a81548160ff02191690831515021790555060008060008060008061363d8a613b39565b95509550955095509550955061369b86600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b9590919063ffffffff16565b600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373085600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377c81613bdf565b6137868483613c9c565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137e391906144d5565b60405180910390a38680156137fd57506000601f60020154115b15613a0d57602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b18d6040518263ffffffff1660e01b815260040161385d91906148e6565b600060405180830381600087803b15801561387757600080fd5b505af1925050508015613888575060015b50602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b18c6040518263ffffffff1660e01b81526004016138e491906148e6565b600060405180830381600087803b1580156138fe57600080fd5b505af192505050801561390f575060015b50602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796018546040518263ffffffff1660e01b815260040161396d91906144d5565b6060604051808303816000875af19250505080156139a957506040513d601f19601f820116820180604052508101906139a69190615b74565b60015b15613a0c573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601854604051613a009493929190614a1f565b60405180910390a35050505b5b505050505050505050505050565b6000613a26306112ec565b90506000811115613a86576000613a3c82611624565b90506011548110158015613a5d5750600f60009054906101000a900460ff16155b8015613a755750600f60019054906101000a900460ff165b15613a8457613a8382613cd6565b5b505b50565b6000806000600d5490506000600c549050613ab1600c54600d5461330290919063ffffffff16565b821015613ac957600d54600c54935093505050613ad2565b81819350935050505b9091565b60008083118290613b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b149190614589565b60405180910390fd5b5060008385613b2c9190615bf6565b9050809150509392505050565b6000806000806000806000806000613b508a613f4a565b9250925092506000806000613b6e8d8686613b696132d7565b613fa4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613bd783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613273565b905092915050565b6000613be96132d7565b90506000613c00828461402d90919063ffffffff16565b9050613c5481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613cb182600d54613b9590919063ffffffff16565b600d81905550613ccc81600e5461334c90919063ffffffff16565b600e819055505050565b6001600f60006101000a81548160ff021916908315150217905550613cfa816140a7565b60004790506000613d2c6064613d1e601f600101548561402d90919063ffffffff16565b61330290919063ffffffff16565b90506000613d5b6064613d4d601f600201548661402d90919063ffffffff16565b61330290919063ffffffff16565b90506000613d8a6064613d7c601f600001548761402d90919063ffffffff16565b61330290919063ffffffff16565b90506000613db96064613dab601f600301548861402d90919063ffffffff16565b61330290919063ffffffff16565b90506000841115613e2e57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613e2c573d6000803e3d6000fd5b505b6000831115613e4157613e40836142ea565b5b6000821115613eb457601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613eb2573d6000803e3d6000fd5b505b6000811115613f2757601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613f25573d6000803e3d6000fd5b505b50505050506000600f60006101000a81548160ff02191690831515021790555050565b600080600080613f59856143ba565b90506000613f668661442b565b90506000613f8f82613f81858a613b9590919063ffffffff16565b613b9590919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613fbd858961402d90919063ffffffff16565b90506000613fd4868961402d90919063ffffffff16565b90506000613feb878961402d90919063ffffffff16565b90506000614014826140068587613b9590919063ffffffff16565b613b9590919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080830361403f57600090506140a1565b6000828461404d9190614ecb565b905082848261405c9190615bf6565b1461409c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409390615c99565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156140c4576140c3614a64565b5b6040519080825280602002602001820160405280156140f25781602001602082028036833780820191505090505b509050308160008151811061410a57614109614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d59190614ffb565b816001815181106141e9576141e8614fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061425030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461292e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016142b4959493929190615cf4565b600060405180830381600087803b1580156142ce57600080fd5b505af11580156142e2573d6000803e3d6000fd5b505050505050565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161433290615d7f565b60006040518083038185875af1925050503d806000811461436f576040519150601f19603f3d011682016040523d82523d6000602084013e614374565b606091505b5050905080156143b6577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516143ad91906144d5565b60405180910390a15b5050565b60008060009050601960009054906101000a900460ff16156143fd57601a600001549050601960019054906101000a900460ff16156143fc57601a6002015490505b5b6144236064614415838661402d90919063ffffffff16565b61330290919063ffffffff16565b915050919050565b60008060009050601960009054906101000a900460ff161561448e57601a600101549050601960019054906101000a900460ff161561448d57601a600301549050600061447784611624565b9050601254811061448b57601a6004015491505b505b5b6144b460646144a6838661402d90919063ffffffff16565b61330290919063ffffffff16565b915050919050565b6000819050919050565b6144cf816144bc565b82525050565b60006020820190506144ea60008301846144c6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561452a57808201518184015260208101905061450f565b83811115614539576000848401525b50505050565b6000601f19601f8301169050919050565b600061455b826144f0565b61456581856144fb565b935061457581856020860161450c565b61457e8161453f565b840191505092915050565b600060208201905081810360008301526145a38184614550565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145ea826145bf565b9050919050565b6145fa816145df565b811461460557600080fd5b50565b600081359050614617816145f1565b92915050565b614626816144bc565b811461463157600080fd5b50565b6000813590506146438161461d565b92915050565b600080604083850312156146605761465f6145b5565b5b600061466e85828601614608565b925050602061467f85828601614634565b9150509250929050565b60008115159050919050565b61469e81614689565b82525050565b60006020820190506146b96000830184614695565b92915050565b600060a0820190506146d460008301886144c6565b6146e160208301876144c6565b6146ee60408301866144c6565b6146fb60608301856144c6565b61470860808301846144c6565b9695505050505050565b600060208284031215614728576147276145b5565b5b600061473684828501614608565b91505092915050565b60008060008060808587031215614759576147586145b5565b5b600061476787828801614634565b945050602061477887828801614634565b935050604061478987828801614634565b925050606061479a87828801614634565b91505092959194509250565b6000819050919050565b60006147cb6147c66147c1846145bf565b6147a6565b6145bf565b9050919050565b60006147dd826147b0565b9050919050565b60006147ef826147d2565b9050919050565b6147ff816147e4565b82525050565b600060208201905061481a60008301846147f6565b92915050565b600080600060608486031215614839576148386145b5565b5b600061484786828701614608565b935050602061485886828701614608565b925050604061486986828701614634565b9150509250925092565b600060208284031215614889576148886145b5565b5b600061489784828501614634565b91505092915050565b600060ff82169050919050565b6148b6816148a0565b82525050565b60006020820190506148d160008301846148ad565b92915050565b6148e0816145df565b82525050565b60006020820190506148fb60008301846148d7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261492657614925614901565b5b8235905067ffffffffffffffff81111561494357614942614906565b5b60208301915083602082028301111561495f5761495e61490b565b5b9250929050565b61496f81614689565b811461497a57600080fd5b50565b60008135905061498c81614966565b92915050565b6000806000604084860312156149ab576149aa6145b5565b5b600084013567ffffffffffffffff8111156149c9576149c86145ba565b5b6149d586828701614910565b935093505060206149e88682870161497d565b9150509250925092565b600060208284031215614a0857614a076145b5565b5b6000614a168482850161497d565b91505092915050565b6000608082019050614a3460008301876144c6565b614a4160208301866144c6565b614a4e60408301856144c6565b614a5b60608301846144c6565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a9c8261453f565b810181811067ffffffffffffffff82111715614abb57614aba614a64565b5b80604052505050565b6000614ace6145ab565b9050614ada8282614a93565b919050565b600067ffffffffffffffff821115614afa57614af9614a64565b5b602082029050602081019050919050565b6000614b1e614b1984614adf565b614ac4565b90508083825260208201905060208402830185811115614b4157614b4061490b565b5b835b81811015614b6a5780614b568882614608565b845260208401935050602081019050614b43565b5050509392505050565b600082601f830112614b8957614b88614901565b5b8135614b99848260208601614b0b565b91505092915050565b600060208284031215614bb857614bb76145b5565b5b600082013567ffffffffffffffff811115614bd657614bd56145ba565b5b614be284828501614b74565b91505092915050565b600080600080600060a08688031215614c0757614c066145b5565b5b6000614c1588828901614634565b9550506020614c2688828901614634565b9450506040614c3788828901614634565b9350506060614c4888828901614634565b9250506080614c5988828901614634565b9150509295509295909350565b60008083601f840112614c7c57614c7b614901565b5b8235905067ffffffffffffffff811115614c9957614c98614906565b5b602083019150836020820283011115614cb557614cb461490b565b5b9250929050565b60008060008060408587031215614cd657614cd56145b5565b5b600085013567ffffffffffffffff811115614cf457614cf36145ba565b5b614d0087828801614910565b9450945050602085013567ffffffffffffffff811115614d2357614d226145ba565b5b614d2f87828801614c66565b925092505092959194509250565b60008060408385031215614d5457614d536145b5565b5b6000614d6285828601614608565b9250506020614d7385828601614608565b9150509250929050565b600080600060608486031215614d9657614d956145b5565b5b6000614da486828701614608565b9350506020614db586828701614608565b9250506040614dc686828701614608565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e1757607f821691505b602082108103614e2a57614e29614dd0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e666020836144fb565b9150614e7182614e30565b602082019050919050565b60006020820190508181036000830152614e9581614e59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ed6826144bc565b9150614ee1836144bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1a57614f19614e9c565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614f81602a836144fb565b9150614f8c82614f25565b604082019050919050565b60006020820190508181036000830152614fb081614f74565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ff5816145f1565b92915050565b600060208284031215615011576150106145b5565b5b600061501f84828501614fe6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61505d816145df565b82525050565b600061506f8383615054565b60208301905092915050565b6000602082019050919050565b600061509382615028565b61509d8185615033565b93506150a883615044565b8060005b838110156150d95781516150c08882615063565b97506150cb8361507b565b9250506001810190506150ac565b5085935050505092915050565b60006040820190506150fb60008301856144c6565b818103602083015261510d8184615088565b90509392505050565b600067ffffffffffffffff82111561513157615130614a64565b5b602082029050602081019050919050565b6000815190506151518161461d565b92915050565b600061516a61516584615116565b614ac4565b9050808382526020820190506020840283018581111561518d5761518c61490b565b5b835b818110156151b657806151a28882615142565b84526020840193505060208101905061518f565b5050509392505050565b600082601f8301126151d5576151d4614901565b5b81516151e5848260208601615157565b91505092915050565b600060208284031215615204576152036145b5565b5b600082015167ffffffffffffffff811115615222576152216145ba565b5b61522e848285016151c0565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000615293602c836144fb565b915061529e82615237565b604082019050919050565b600060208201905081810360008301526152c281615286565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006153256022836144fb565b9150615330826152c9565b604082019050919050565b6000602082019050818103600083015261535481615318565b9050919050565b600060408201905061537060008301856148d7565b61537d60208301846148d7565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006153e0602d836144fb565b91506153eb82615384565b604082019050919050565b6000602082019050818103600083015261540f816153d3565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615472602a836144fb565b915061547d82615416565b604082019050919050565b600060208201905081810360008301526154a181615465565b9050919050565b60006154b3826144bc565b91506154be836144bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154f3576154f2614e9c565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061555a6026836144fb565b9150615565826154fe565b604082019050919050565b600060208201905081810360008301526155898161554d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155ec6024836144fb565b91506155f782615590565b604082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061567e6022836144fb565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157106025836144fb565b915061571b826156b4565b604082019050919050565b6000602082019050818103600083015261573f81615703565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157a26023836144fb565b91506157ad82615746565b604082019050919050565b600060208201905081810360008301526157d181615795565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006158346029836144fb565b915061583f826157d8565b604082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006158a0601e836144fb565b91506158ab8261586a565b602082019050919050565b600060208201905081810360008301526158cf81615893565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615932602f836144fb565b915061593d826158d6565b604082019050919050565b6000602082019050818103600083015261596181615925565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006159c46028836144fb565b91506159cf82615968565b604082019050919050565b600060208201905081810360008301526159f3816159b7565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615a566025836144fb565b9150615a61826159fa565b604082019050919050565b60006020820190508181036000830152615a8581615a49565b9050919050565b6000615a97826144bc565b9150615aa2836144bc565b925082821015615ab557615ab4614e9c565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615af6601b836144fb565b9150615b0182615ac0565b602082019050919050565b60006020820190508181036000830152615b2581615ae9565b9050919050565b6000615b37826144bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b6957615b68614e9c565b5b600182019050919050565b600080600060608486031215615b8d57615b8c6145b5565b5b6000615b9b86828701615142565b9350506020615bac86828701615142565b9250506040615bbd86828701615142565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c01826144bc565b9150615c0c836144bc565b925082615c1c57615c1b615bc7565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c836021836144fb565b9150615c8e82615c27565b604082019050919050565b60006020820190508181036000830152615cb281615c76565b9050919050565b6000819050919050565b6000615cde615cd9615cd484615cb9565b6147a6565b6144bc565b9050919050565b615cee81615cc3565b82525050565b600060a082019050615d0960008301886144c6565b615d166020830187615ce5565b8181036040830152615d288186615088565b9050615d3760608301856148d7565b615d4460808301846144c6565b9695505050505050565b600081905092915050565b50565b6000615d69600083615d4e565b9150615d7482615d59565b600082019050919050565b6000615d8a82615d5c565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207fa57ba038775b14e53e44b0246d49f3b835853c3acc3d519125da9731f860ba64736f6c634300080d0033

Deployed Bytecode Sourcemap

18972:18869:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20337:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22204:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23056:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21561:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;25177:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27080:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19398:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22481:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23225:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26518:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24751:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22390:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23546:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20764:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24582:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19511:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20253:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31960:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31829:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20402:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21590:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;20531:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22584:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17814:148;;;;;;;;;;;;;:::i;:::-;;25012:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20600:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20841:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27727:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31549:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34503:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17178:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20468:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22295:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35663:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27863:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20918:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23772:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20681:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22730:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25690:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25820:311;;;;;;;;;;;;;:::i;:::-;;28356:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26661:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24049:525;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22905:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27610:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18117:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26387:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25562:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27381:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20337:58;;;;:::o;22204:83::-;22241:13;22274:5;22267:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22204:83;:::o;23056:161::-;23131:4;23148:39;23157:12;:10;:12::i;:::-;23171:7;23180:6;23148:8;:39::i;:::-;23205:4;23198:11;;23056:161;;;;:::o;21561:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25177:125::-;25242:4;25266:22;:28;25289:4;25266:28;;;;;;;;;;;;;;;;;;;;;;;;;25259:35;;25177:125;;;:::o;27080:293::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27230:8:::1;27206:12;:21;;:32;;;;27272:7;27249:12;:20;;:30;;;;27315:9;27290:12;:22;;:34;;;;27358:7;27335:12;:20;;:30;;;;27080:293:::0;;;;:::o;19398:106::-;;;;;;;;;;;;;:::o;22481:95::-;22534:7;22561;;22554:14;;22481:95;:::o;23225:313::-;23323:4;23340:36;23350:6;23358:9;23369:6;23340:9;:36::i;:::-;23387:121;23396:6;23404:12;:10;:12::i;:::-;23418:89;23456:6;23418:89;;;;;;;;;;;;;;;;;:11;:19;23430:6;23418:19;;;;;;;;;;;;;;;:33;23438:12;:10;:12::i;:::-;23418:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23387:8;:121::i;:::-;23526:4;23519:11;;23225:313;;;;;:::o;26518:135::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26640:5:::1;26622:15;:23;;;;:::i;:::-;26603:16;:42;;;;26518:135:::0;:::o;24751:253::-;24817:7;24856;;24845;:18;;24837:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24921:19;24944:10;:8;:10::i;:::-;24921:33;;24972:24;24984:11;24972:7;:11;;:24;;;;:::i;:::-;24965:31;;;24751:253;;;:::o;22390:83::-;22431:5;22456:9;;;;;;;;;;;22449:16;;22390:83;:::o;23546:218::-;23634:4;23651:83;23660:12;:10;:12::i;:::-;23674:7;23683:50;23722:10;23683:11;:25;23695:12;:10;:12::i;:::-;23683:25;;;;;;;;;;;;;;;:34;23709:7;23683:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23651:8;:83::i;:::-;23752:4;23745:11;;23546:218;;;;:::o;20764:70::-;;;;;;;;;;;;;:::o;24582:161::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24694:41:::1;24707:9;;24718:16;24694:12;:41::i;:::-;24582:161:::0;;;:::o;19511:41::-;;;;;;;;;;;;;:::o;20253:40::-;;;;;;;;;;;;;:::o;31960:130::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32069:13:::1;32049:17;;:33;;;;;;;;;;;;;;;;;;31960:130:::0;:::o;31829:123::-;31893:4;31917:18;:27;31936:7;31917:27;;;;;;;;;;;;;;;;;;;;;;;;;31910:34;;31829:123;;;:::o;20402:50::-;;;;:::o;21590:32::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20531:62::-;;;;:::o;22584:138::-;22650:7;22677:37;22697:7;:16;22705:7;22697:16;;;;;;;;;;;;;;;;22677:19;:37::i;:::-;22670:44;;22584:138;;;:::o;17814:148::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17921:1:::1;17884:40;;17905:6;::::0;::::1;;;;;;;;17884:40;;;;;;;;;;;;17952:1;17935:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17814:148::o:0;25012:157::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25122:39:::1;25139:9;;25150:10;25122:16;:39::i;:::-;25012:157:::0;;;:::o;20600:74::-;;;;;;;;;;;;;:::o;20841:70::-;;;;;;;;;;;;;:::o;27727:128::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27811:36:::1;27831:9;27842:4;27811:19;:36::i;:::-;27727:128:::0;:::o;31549:272::-;31609:4;31627:21;31665:1;31651:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31627:40;;31696:4;31678;31683:1;31678:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31722:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31712:4;31717:1;31712:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31762:15;;;;;;;;;;;:29;;;31792:11;31805:4;31762:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31811:1;31762:51;;;;;;;;:::i;:::-;;;;;;;;31755:58;;;31549:272;;;:::o;34503:209::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34601:16:::1;;34589:8;:28:::0;34581:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34696:8;34677:16;:27;;;;34503:209:::0;:::o;17178:79::-;17216:7;17243:6;;;;;;;;;;;17236:13;;17178:79;:::o;20468:47::-;;;;:::o;22295:87::-;22334:13;22367:7;22360:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22295:87;:::o;35663:166::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35796:23:::1;35754:15;;:67;;;;;;;;;;;;;;;;;;35663:166:::0;:::o;27863:131::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27949:37:::1;27969:9;27980:5;27949:19;:37::i;:::-;27863:131:::0;:::o;20918:39::-;;;;:::o;23772:269::-;23865:4;23882:129;23891:12;:10;:12::i;:::-;23905:7;23914:96;23953:15;23914:96;;;;;;;;;;;;;;;;;:11;:25;23926:12;:10;:12::i;:::-;23914:25;;;;;;;;;;;;;;;:34;23940:7;23914:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23882:8;:129::i;:::-;24029:4;24022:11;;23772:269;;;;:::o;20681:76::-;;;;;;;;;;;;;:::o;22730:167::-;22808:4;22825:42;22835:12;:10;:12::i;:::-;22849:9;22860:6;22825:9;:42::i;:::-;22885:4;22878:11;;22730:167;;;;:::o;25690:122::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25789:15:::1;25772:14;:32;;;;25690:122:::0;:::o;25820:311::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25907:1:::1;25882:27;;:13;;;;;;;;;;;:27;;;25874:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25992:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25974:55;;;26038:4;26045:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25974:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25958:13;;:110;;;;;;;;;;;;;;;;;;26119:4;26079:22;:37;26102:13;;;;;;;;;;;26079:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;25820:311::o:0;28356:171::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28457:8:::1;28433:21;;:32;;;;;;;;;;;;;;;;;;28481:38;28510:8;28481:38;;;;;;:::i;:::-;;;;;;;;28356:171:::0;:::o;26661:411::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26861:13:::1;26834:7;:24;;:40;;;;26902:12;26885:7;:14;;:29;;;;26943:16;26925:7;:15;;:34;;;;26998:17;26970:7;:25;;:45;;;;27049:15;27026:7;:20;;:38;;;;26661:411:::0;;;;;:::o;24049:525::-;24146:16;24185:18;:32;24204:12;:10;:12::i;:::-;24185:32;;;;;;;;;;;;;;;;;;;;;;;;;24177:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24307:7;;:14;;24286:10;;:17;;:35;24278:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24379:188;24396:10;;:17;;24385:8;:28;24379:188;;;24429:98;24444:12;:10;:12::i;:::-;24458:10;;24469:8;24458:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24500:5;24480:7;;24488:8;24480:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;24507:5;24514;24521;24429:14;:98::i;:::-;24554:1;24542:13;;;;;:::i;:::-;;;24379:188;;;24135:439;24049:525;;;;:::o;22905:143::-;22986:7;23013:11;:18;23025:5;23013:18;;;;;;;;;;;;;;;:27;23032:7;23013:27;;;;;;;;;;;;;;;;23006:34;;22905:143;;;;:::o;27610:109::-;27671:4;27695:10;:16;27706:4;27695:16;;;;;;;;;;;;;;;;;;;;;;;;;27688:23;;27610:109;;;:::o;18117:244::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18226:1:::1;18206:22;;:8;:22;;::::0;18198:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18316:8;18287:38;;18308:6;::::0;::::1;;;;;;;;18287:38;;;;;;;;;;;;18345:8;18336:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18117:244:::0;:::o;26387:123::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26497:5:::1;26482:12;:20;;;;:::i;:::-;26466:13;:36;;;;26387:123:::0;:::o;25562:120::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25660:14:::1;25644:13;:30;;;;25562:120:::0;:::o;27381:221::-;17400:12;:10;:12::i;:::-;17390:22;;:6;;;;;;;;;;:22;;;17382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27509:7:::1;27496:10;;:20;;;;;;;;;;;;;;;;;;27544:7;27527:14;;:24;;;;;;;;;;;;;;;;;;27581:13;27562:16;;:32;;;;;;;;;;;;;;;;;;27381:221:::0;;;:::o;9670:98::-;9723:7;9750:10;9743:17;;9670:98;:::o;32098:337::-;32208:1;32191:19;;:5;:19;;;32183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32289:1;32270:21;;:7;:21;;;32262:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32373:6;32343:11;:18;32355:5;32343:18;;;;;;;;;;;;;;;:27;32362:7;32343:27;;;;;;;;;;;;;;;:36;;;;32411:7;32395:32;;32404:5;32395:32;;;32420:6;32395:32;;;;;;:::i;:::-;;;;;;;;32098:337;;;:::o;32443:1600::-;32547:1;32531:18;;:4;:18;;;32523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32624:1;32610:16;;:2;:16;;;32602:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32694:1;32685:6;:10;32677:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32785:1;32760:27;;:13;;;;;;;;;;;:27;;;32752:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32832:11;32862:13;32879:18;:24;32898:4;32879:24;;;;;;;;;;;;;;;;;;;;;;;;;32878:25;:52;;;;;32908:18;:22;32927:2;32908:22;;;;;;;;;;;;;;;;;;;;;;;;;32907:23;32878:52;:71;;;;;32942:7;:5;:7::i;:::-;32934:15;;:4;:15;;;;32878:71;:88;;;;;32959:7;:5;:7::i;:::-;32953:13;;:2;:13;;;;32878:88;32862:104;;32977:21;33001:25;33019:6;33001:13;33011:2;33001:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;32977:49;;33137:7;:5;:7::i;:::-;33129:15;;:4;:15;;;;:32;;;;;33154:7;:5;:7::i;:::-;33148:13;;:2;:13;;;;33129:32;:52;;;;;33171:10;;;;;;;;;;;33165:16;;:2;:16;;;;33129:52;33126:180;;;33207:10;:16;33218:4;33207:16;;;;;;;;;;;;;;;;;;;;;;;;;33206:17;:36;;;;;33228:10;:14;33239:2;33228:14;;;;;;;;;;;;;;;;;;;;;;;;;33227:15;33206:36;33198:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;33126:180;33327:13;;;;;;;;;;;33319:21;;:4;:21;;;33316:227;;33375:13;;33365:6;:23;;33357:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33473:16;;33456:13;:33;;33448:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;33316:227;33564:13;;;;;;;;;;;33556:21;;:4;:21;;;;:44;;;;;33587:13;;;;;;;;;;;33581:19;;:2;:19;;;33556:44;33553:189;;;33696:4;33687:13;;33715:15;:13;:15::i;:::-;33553:189;33763:13;;;;;;;;;;;33755:21;;:4;:21;;;;:44;;;;;33786:13;;;;;;;;;;;33780:19;;:2;:19;;;;33755:44;33752:217;;;33827:17;;;;;;;;;;;:32;;33855:4;33827:32;;;33847:5;33827:32;33816:43;;33899:16;;33882:13;:33;;33874:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;33752:217;33979:56;33994:4;34000:2;34004:6;34012:8;34022:6;34030:4;33979:14;:56::i;:::-;32512:1531;;;32443:1600;;;:::o;6001:192::-;6087:7;6120:1;6115;:6;;6123:12;6107:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6147:9;6163:1;6159;:5;;;;:::i;:::-;6147:17;;6184:1;6177:8;;;6001:192;;;;;:::o;29929:163::-;29970:7;29991:15;30008;30027:19;:17;:19::i;:::-;29990:56;;;;30064:20;30076:7;30064;:11;;:20;;;;:::i;:::-;30057:27;;;;29929:163;:::o;7399:132::-;7457:7;7484:39;7488:1;7491;7484:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7477:46;;7399:132;;;;:::o;5098:181::-;5156:7;5176:9;5192:1;5188;:5;;;;:::i;:::-;5176:17;;5217:1;5212;:6;;5204:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5270:1;5263:8;;;5098:181;;;;:::o;26143:236::-;26230:9;26225:147;26249:9;;:16;;26245:1;:20;26225:147;;;26287:12;26302:9;;26312:1;26302:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26287:27;;26356:4;26329:18;:24;26348:4;26329:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26272:100;26267:3;;;;;:::i;:::-;;;;26225:147;;;;26143:236;;;:::o;25310:244::-;25401:9;25396:151;25420:9;;:16;;25416:1;:20;25396:151;;;25458:12;25473:9;;25483:1;25473:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25458:27;;25531:4;25500:22;:28;25523:4;25500:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25443:104;25438:3;;;;;:::i;:::-;;;;25396:151;;;;25310:244;;;:::o;28002:346::-;28097:9;28092:249;28116:9;:16;28112:1;:20;28092:249;;;28154:12;28169:9;28179:1;28169:12;;;;;;;;:::i;:::-;;;;;;;;28154:27;;28199:7;28196:134;;;28246:4;28227:10;:16;28238:4;28227:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28196:134;;;28298:10;:16;28309:4;28298:16;;;;;;;;;;;;;;;;28291:23;;;;;;;;;;;28196:134;28139:202;28134:3;;;;;:::i;:::-;;;;28092:249;;;;28002:346;;:::o;36732:1106::-;36892:8;36879:10;;:21;;;;;;;;;;;;;;;;;;36923:6;36911:9;;:18;;;;;;;;;;;;;;;;;;36941:15;36958:23;36983:12;36997:23;37022:12;37036:18;37058:19;37069:7;37058:10;:19::i;:::-;36940:137;;;;;;;;;;;;37106:28;37126:7;37106;:15;37114:6;37106:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37088:7;:15;37096:6;37088:15;;;;;;;;;;;;;;;:46;;;;37166:39;37189:15;37166:7;:18;37174:9;37166:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37145:7;:18;37153:9;37145:18;;;;;;;;;;;;;;;:60;;;;37216:26;37231:10;37216:14;:26::i;:::-;37253:23;37265:4;37271;37253:11;:23::i;:::-;37309:9;37292:44;;37301:6;37292:44;;;37320:15;37292:44;;;;;;:::i;:::-;;;;;;;;37352:17;:46;;;;;37397:1;37373:12;:21;;;:25;37352:46;37349:482;;;37419:15;;;;;;;;;;;:31;;;37451:6;37419:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37415:54;37487:15;;;;;;;;;;;:31;;;37519:9;37487:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37483:57;37558:15;;;;;;;;;;;:23;;;37582:16;;37558:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37554:266;;;37786:9;37697:99;;37762:4;37697:99;;;37722:10;37734:6;37742:18;37768:16;;37697:99;;;;;;;;;:::i;:::-;;;;;;;;37600:212;;;37554:266;37349:482;36868:970;;;;;;36732:1106;;;;;;:::o;34051:444::-;34095:28;34126:24;34144:4;34126:9;:24::i;:::-;34095:55;;34187:1;34164:20;:24;34161:327;;;34205:13;34221:33;34233:20;34221:11;:33::i;:::-;34205:49;;34285:14;;34273:8;:26;;:47;;;;;34304:16;;;;;;;;;;;34303:17;34273:47;:72;;;;;34324:21;;;;;;;;;;;34273:72;34269:208;;;34423:38;34440:20;34423:16;:38::i;:::-;34269:208;34190:298;34161:327;34084:411;34051:444::o;30100:256::-;30150:7;30159;30179:15;30197:7;;30179:25;;30215:15;30233:7;;30215:25;;30265:20;30277:7;;30265;;:11;;:20;;;;:::i;:::-;30255:7;:30;30251:61;;;30295:7;;30304;;30287:25;;;;;;;;30251:61;30331:7;30340;30323:25;;;;;;30100:256;;;:::o;8027:278::-;8113:7;8145:1;8141;:5;8148:12;8133:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8172:9;8188:1;8184;:5;;;;:::i;:::-;8172:17;;8296:1;8289:8;;;8027:278;;;;;:::o;28727:419::-;28786:7;28795;28804;28813;28822;28831;28852:23;28877:12;28891:18;28913:20;28925:7;28913:11;:20::i;:::-;28851:82;;;;;;28945:15;28962:23;28987:12;29003:50;29015:7;29024:4;29030:10;29042;:8;:10::i;:::-;29003:11;:50::i;:::-;28944:109;;;;;;29072:7;29081:15;29098:4;29104:15;29121:4;29127:10;29064:74;;;;;;;;;;;;;;;;;;28727:419;;;;;;;:::o;5562:136::-;5620:7;5647:43;5651:1;5654;5647:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5640:50;;5562:136;;;;:::o;30364:237::-;30427:19;30450:10;:8;:10::i;:::-;30427:33;;30471:18;30492:27;30507:11;30492:10;:14;;:27;;;;:::i;:::-;30471:48;;30555:38;30582:10;30555:7;:22;30571:4;30555:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30530:7;:22;30546:4;30530:22;;;;;;;;;;;;;;;:63;;;;30416:185;;30364:237;:::o;28572:147::-;28650:17;28662:4;28650:7;;:11;;:17;;;;:::i;:::-;28640:7;:27;;;;28691:20;28706:4;28691:10;;:14;;:20;;;;:::i;:::-;28678:10;:33;;;;28572:147;;:::o;34720:935::-;19333:4;19314:16;;:23;;;;;;;;;;;;;;;;;;34807:38:::1;34824:20;34807:16;:38::i;:::-;34856:23;34882:21;34856:47;;34914:22;34939:52;34987:3;34939:43;34959:12;:22;;;34939:15;:19;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;34914:77;;35002:21;35026:51;35073:3;35026:42;35046:12;:21;;;35026:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;35002:75;;35088:20;35111:50;35157:3;35111:41;35131:12;:20;;;35111:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;35088:73;;35172:20;35195:50;35241:3;35195:41;35215:12;:20;;;35195:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;35172:73;;35276:1;35259:14;:18;35256:99;;;35301:16;;;;;;;;;;;35293:34;;:50;35328:14;35293:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35256:99;35384:1;35368:13;:17;35365:79;;;35401:31;35418:13;35401:16;:31::i;:::-;35365:79;35472:1;35457:12;:16;35454:89;;;35497:10;;;;;;;;;;;35489:28;;:42;35518:12;35489:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35454:89;35571:1;35556:12;:16;35553:93;;;35596:14;;;;;;;;;;;35588:32;;:46;35621:12;35588:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35553:93;34796:859;;;;;19379:5:::0;19360:16;;:24;;;;;;;;;;;;;;;;;;34720:935;:::o;29154:330::-;29214:7;29223;29232;29252:12;29267:24;29283:7;29267:15;:24::i;:::-;29252:39;;29302:18;29323:30;29345:7;29323:21;:30::i;:::-;29302:51;;29364:23;29390:33;29412:10;29390:17;29402:4;29390:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29364:59;;29442:15;29459:4;29465:10;29434:42;;;;;;;;;29154:330;;;;;:::o;29492:429::-;29607:7;29616;29625;29645:15;29663:24;29675:11;29663:7;:11;;:24;;;;:::i;:::-;29645:42;;29698:12;29713:21;29722:11;29713:4;:8;;:21;;;;:::i;:::-;29698:36;;29745:18;29766:27;29781:11;29766:10;:14;;:27;;;;:::i;:::-;29745:48;;29804:23;29830:33;29852:10;29830:17;29842:4;29830:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29804:59;;29882:7;29891:15;29908:4;29874:39;;;;;;;;;;29492:429;;;;;;;;:::o;6452:471::-;6510:7;6760:1;6755;:6;6751:47;;6785:1;6778:8;;;;6751:47;6810:9;6826:1;6822;:5;;;;:::i;:::-;6810:17;;6855:1;6850;6846;:5;;;;:::i;:::-;:10;6838:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6914:1;6907:8;;;6452:471;;;;;:::o;36066:585::-;36192:21;36230:1;36216:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36192:40;;36261:4;36243;36248:1;36243:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36287:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36277:4;36282:1;36277:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36320:62;36337:4;36352:15;;;;;;;;;;;36370:11;36320:8;:62::i;:::-;36419:15;;;;;;;;;;;:66;;;36500:11;36526:1;36570:4;36597;36617:15;36419:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36121:530;36066:585;:::o;35837:221::-;35902:12;35927:15;;;;;;;;;;;35919:29;;35957:9;35919:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35901:70;;;35986:7;35982:69;;;36015:24;36029:9;36015:24;;;;;;:::i;:::-;;;;;;;;35982:69;35890:168;35837:221;:::o;30609:368::-;30673:7;30693:21;30717:1;30693:25;;30732:10;;;;;;;;;;;30729:186;;;30775:7;:24;;;30759:40;;30817:9;;;;;;;;;;;30814:90;;;30863:7;:25;;;30847:41;;30814:90;30729:186;30932:37;30963:5;30932:26;30944:13;30932:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;30925:44;;;30609:368;;;:::o;30985:556::-;31055:7;31075:25;31103:1;31075:29;;31118:10;;;;;;;;;;;31115:360;;;31165:7;:14;;;31145:34;;31197:9;;;;;;;;;;;31194:270;;;31247:7;:15;;;31227:35;;31281:13;31297:20;31309:7;31297:11;:20::i;:::-;31281:36;;31351:13;;31339:8;:25;31336:113;;31409:7;:20;;;31389:40;;31336:113;31208:256;31194:270;31115:360;31492:41;31527:5;31492:30;31504:17;31492:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;31485:48;;;30985:556;;;:::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:180::-;11198:77;11195:1;11188:88;11295:4;11292:1;11285:15;11319:4;11316:1;11309:15;11336:281;11419:27;11441:4;11419:27;:::i;:::-;11411:6;11407:40;11549:6;11537:10;11534:22;11513:18;11501:10;11498:34;11495:62;11492:88;;;11560:18;;:::i;:::-;11492:88;11600:10;11596:2;11589:22;11379:238;11336:281;;:::o;11623:129::-;11657:6;11684:20;;:::i;:::-;11674:30;;11713:33;11741:4;11733:6;11713:33;:::i;:::-;11623:129;;;:::o;11758:311::-;11835:4;11925:18;11917:6;11914:30;11911:56;;;11947:18;;:::i;:::-;11911:56;11997:4;11989:6;11985:17;11977:25;;12057:4;12051;12047:15;12039:23;;11758:311;;;:::o;12092:710::-;12188:5;12213:81;12229:64;12286:6;12229:64;:::i;:::-;12213:81;:::i;:::-;12204:90;;12314:5;12343:6;12336:5;12329:21;12377:4;12370:5;12366:16;12359:23;;12430:4;12422:6;12418:17;12410:6;12406:30;12459:3;12451:6;12448:15;12445:122;;;12478:79;;:::i;:::-;12445:122;12593:6;12576:220;12610:6;12605:3;12602:15;12576:220;;;12685:3;12714:37;12747:3;12735:10;12714:37;:::i;:::-;12709:3;12702:50;12781:4;12776:3;12772:14;12765:21;;12652:144;12636:4;12631:3;12627:14;12620:21;;12576:220;;;12580:21;12194:608;;12092:710;;;;;:::o;12825:370::-;12896:5;12945:3;12938:4;12930:6;12926:17;12922:27;12912:122;;12953:79;;:::i;:::-;12912:122;13070:6;13057:20;13095:94;13185:3;13177:6;13170:4;13162:6;13158:17;13095:94;:::i;:::-;13086:103;;12902:293;12825:370;;;;:::o;13201:539::-;13285:6;13334:2;13322:9;13313:7;13309:23;13305:32;13302:119;;;13340:79;;:::i;:::-;13302:119;13488:1;13477:9;13473:17;13460:31;13518:18;13510:6;13507:30;13504:117;;;13540:79;;:::i;:::-;13504:117;13645:78;13715:7;13706:6;13695:9;13691:22;13645:78;:::i;:::-;13635:88;;13431:302;13201:539;;;;:::o;13746:911::-;13841:6;13849;13857;13865;13873;13922:3;13910:9;13901:7;13897:23;13893:33;13890:120;;;13929:79;;:::i;:::-;13890:120;14049:1;14074:53;14119:7;14110:6;14099:9;14095:22;14074:53;:::i;:::-;14064:63;;14020:117;14176:2;14202:53;14247:7;14238:6;14227:9;14223:22;14202:53;:::i;:::-;14192:63;;14147:118;14304:2;14330:53;14375:7;14366:6;14355:9;14351:22;14330:53;:::i;:::-;14320:63;;14275:118;14432:2;14458:53;14503:7;14494:6;14483:9;14479:22;14458:53;:::i;:::-;14448:63;;14403:118;14560:3;14587:53;14632:7;14623:6;14612:9;14608:22;14587:53;:::i;:::-;14577:63;;14531:119;13746:911;;;;;;;;:::o;14680:568::-;14753:8;14763:6;14813:3;14806:4;14798:6;14794:17;14790:27;14780:122;;14821:79;;:::i;:::-;14780:122;14934:6;14921:20;14911:30;;14964:18;14956:6;14953:30;14950:117;;;14986:79;;:::i;:::-;14950:117;15100:4;15092:6;15088:17;15076:29;;15154:3;15146:4;15138:6;15134:17;15124:8;15120:32;15117:41;15114:128;;;15161:79;;:::i;:::-;15114:128;14680:568;;;;;:::o;15254:934::-;15376:6;15384;15392;15400;15449:2;15437:9;15428:7;15424:23;15420:32;15417:119;;;15455:79;;:::i;:::-;15417:119;15603:1;15592:9;15588:17;15575:31;15633:18;15625:6;15622:30;15619:117;;;15655:79;;:::i;:::-;15619:117;15768:80;15840:7;15831:6;15820:9;15816:22;15768:80;:::i;:::-;15750:98;;;;15546:312;15925:2;15914:9;15910:18;15897:32;15956:18;15948:6;15945:30;15942:117;;;15978:79;;:::i;:::-;15942:117;16091:80;16163:7;16154:6;16143:9;16139:22;16091:80;:::i;:::-;16073:98;;;;15868:313;15254:934;;;;;;;:::o;16194:474::-;16262:6;16270;16319:2;16307:9;16298:7;16294:23;16290:32;16287:119;;;16325:79;;:::i;:::-;16287:119;16445:1;16470:53;16515:7;16506:6;16495:9;16491:22;16470:53;:::i;:::-;16460:63;;16416:117;16572:2;16598:53;16643:7;16634:6;16623:9;16619:22;16598:53;:::i;:::-;16588:63;;16543:118;16194:474;;;;;:::o;16674:619::-;16751:6;16759;16767;16816:2;16804:9;16795:7;16791:23;16787:32;16784:119;;;16822:79;;:::i;:::-;16784:119;16942:1;16967:53;17012:7;17003:6;16992:9;16988:22;16967:53;:::i;:::-;16957:63;;16913:117;17069:2;17095:53;17140:7;17131:6;17120:9;17116:22;17095:53;:::i;:::-;17085:63;;17040:118;17197:2;17223:53;17268:7;17259:6;17248:9;17244:22;17223:53;:::i;:::-;17213:63;;17168:118;16674:619;;;;;:::o;17299:180::-;17347:77;17344:1;17337:88;17444:4;17441:1;17434:15;17468:4;17465:1;17458:15;17485:320;17529:6;17566:1;17560:4;17556:12;17546:22;;17613:1;17607:4;17603:12;17634:18;17624:81;;17690:4;17682:6;17678:17;17668:27;;17624:81;17752:2;17744:6;17741:14;17721:18;17718:38;17715:84;;17771:18;;:::i;:::-;17715:84;17536:269;17485:320;;;:::o;17811:182::-;17951:34;17947:1;17939:6;17935:14;17928:58;17811:182;:::o;17999:366::-;18141:3;18162:67;18226:2;18221:3;18162:67;:::i;:::-;18155:74;;18238:93;18327:3;18238:93;:::i;:::-;18356:2;18351:3;18347:12;18340:19;;17999:366;;;:::o;18371:419::-;18537:4;18575:2;18564:9;18560:18;18552:26;;18624:9;18618:4;18614:20;18610:1;18599:9;18595:17;18588:47;18652:131;18778:4;18652:131;:::i;:::-;18644:139;;18371:419;;;:::o;18796:180::-;18844:77;18841:1;18834:88;18941:4;18938:1;18931:15;18965:4;18962:1;18955:15;18982:348;19022:7;19045:20;19063:1;19045:20;:::i;:::-;19040:25;;19079:20;19097:1;19079:20;:::i;:::-;19074:25;;19267:1;19199:66;19195:74;19192:1;19189:81;19184:1;19177:9;19170:17;19166:105;19163:131;;;19274:18;;:::i;:::-;19163:131;19322:1;19319;19315:9;19304:20;;18982:348;;;;:::o;19336:229::-;19476:34;19472:1;19464:6;19460:14;19453:58;19545:12;19540:2;19532:6;19528:15;19521:37;19336:229;:::o;19571:366::-;19713:3;19734:67;19798:2;19793:3;19734:67;:::i;:::-;19727:74;;19810:93;19899:3;19810:93;:::i;:::-;19928:2;19923:3;19919:12;19912:19;;19571:366;;;:::o;19943:419::-;20109:4;20147:2;20136:9;20132:18;20124:26;;20196:9;20190:4;20186:20;20182:1;20171:9;20167:17;20160:47;20224:131;20350:4;20224:131;:::i;:::-;20216:139;;19943:419;;;:::o;20368:180::-;20416:77;20413:1;20406:88;20513:4;20510:1;20503:15;20537:4;20534:1;20527:15;20554:143;20611:5;20642:6;20636:13;20627:22;;20658:33;20685:5;20658:33;:::i;:::-;20554:143;;;;:::o;20703:351::-;20773:6;20822:2;20810:9;20801:7;20797:23;20793:32;20790:119;;;20828:79;;:::i;:::-;20790:119;20948:1;20973:64;21029:7;21020:6;21009:9;21005:22;20973:64;:::i;:::-;20963:74;;20919:128;20703:351;;;;:::o;21060:114::-;21127:6;21161:5;21155:12;21145:22;;21060:114;;;:::o;21180:184::-;21279:11;21313:6;21308:3;21301:19;21353:4;21348:3;21344:14;21329:29;;21180:184;;;;:::o;21370:132::-;21437:4;21460:3;21452:11;;21490:4;21485:3;21481:14;21473:22;;21370:132;;;:::o;21508:108::-;21585:24;21603:5;21585:24;:::i;:::-;21580:3;21573:37;21508:108;;:::o;21622:179::-;21691:10;21712:46;21754:3;21746:6;21712:46;:::i;:::-;21790:4;21785:3;21781:14;21767:28;;21622:179;;;;:::o;21807:113::-;21877:4;21909;21904:3;21900:14;21892:22;;21807:113;;;:::o;21956:732::-;22075:3;22104:54;22152:5;22104:54;:::i;:::-;22174:86;22253:6;22248:3;22174:86;:::i;:::-;22167:93;;22284:56;22334:5;22284:56;:::i;:::-;22363:7;22394:1;22379:284;22404:6;22401:1;22398:13;22379:284;;;22480:6;22474:13;22507:63;22566:3;22551:13;22507:63;:::i;:::-;22500:70;;22593:60;22646:6;22593:60;:::i;:::-;22583:70;;22439:224;22426:1;22423;22419:9;22414:14;;22379:284;;;22383:14;22679:3;22672:10;;22080:608;;;21956:732;;;;:::o;22694:483::-;22865:4;22903:2;22892:9;22888:18;22880:26;;22916:71;22984:1;22973:9;22969:17;22960:6;22916:71;:::i;:::-;23034:9;23028:4;23024:20;23019:2;23008:9;23004:18;22997:48;23062:108;23165:4;23156:6;23062:108;:::i;:::-;23054:116;;22694:483;;;;;:::o;23183:311::-;23260:4;23350:18;23342:6;23339:30;23336:56;;;23372:18;;:::i;:::-;23336:56;23422:4;23414:6;23410:17;23402:25;;23482:4;23476;23472:15;23464:23;;23183:311;;;:::o;23500:143::-;23557:5;23588:6;23582:13;23573:22;;23604:33;23631:5;23604:33;:::i;:::-;23500:143;;;;:::o;23666:732::-;23773:5;23798:81;23814:64;23871:6;23814:64;:::i;:::-;23798:81;:::i;:::-;23789:90;;23899:5;23928:6;23921:5;23914:21;23962:4;23955:5;23951:16;23944:23;;24015:4;24007:6;24003:17;23995:6;23991:30;24044:3;24036:6;24033:15;24030:122;;;24063:79;;:::i;:::-;24030:122;24178:6;24161:231;24195:6;24190:3;24187:15;24161:231;;;24270:3;24299:48;24343:3;24331:10;24299:48;:::i;:::-;24294:3;24287:61;24377:4;24372:3;24368:14;24361:21;;24237:155;24221:4;24216:3;24212:14;24205:21;;24161:231;;;24165:21;23779:619;;23666:732;;;;;:::o;24421:385::-;24503:5;24552:3;24545:4;24537:6;24533:17;24529:27;24519:122;;24560:79;;:::i;:::-;24519:122;24670:6;24664:13;24695:105;24796:3;24788:6;24781:4;24773:6;24769:17;24695:105;:::i;:::-;24686:114;;24509:297;24421:385;;;;:::o;24812:554::-;24907:6;24956:2;24944:9;24935:7;24931:23;24927:32;24924:119;;;24962:79;;:::i;:::-;24924:119;25103:1;25092:9;25088:17;25082:24;25133:18;25125:6;25122:30;25119:117;;;25155:79;;:::i;:::-;25119:117;25260:89;25341:7;25332:6;25321:9;25317:22;25260:89;:::i;:::-;25250:99;;25053:306;24812:554;;;;:::o;25372:231::-;25512:34;25508:1;25500:6;25496:14;25489:58;25581:14;25576:2;25568:6;25564:15;25557:39;25372:231;:::o;25609:366::-;25751:3;25772:67;25836:2;25831:3;25772:67;:::i;:::-;25765:74;;25848:93;25937:3;25848:93;:::i;:::-;25966:2;25961:3;25957:12;25950:19;;25609:366;;;:::o;25981:419::-;26147:4;26185:2;26174:9;26170:18;26162:26;;26234:9;26228:4;26224:20;26220:1;26209:9;26205:17;26198:47;26262:131;26388:4;26262:131;:::i;:::-;26254:139;;25981:419;;;:::o;26406:221::-;26546:34;26542:1;26534:6;26530:14;26523:58;26615:4;26610:2;26602:6;26598:15;26591:29;26406:221;:::o;26633:366::-;26775:3;26796:67;26860:2;26855:3;26796:67;:::i;:::-;26789:74;;26872:93;26961:3;26872:93;:::i;:::-;26990:2;26985:3;26981:12;26974:19;;26633:366;;;:::o;27005:419::-;27171:4;27209:2;27198:9;27194:18;27186:26;;27258:9;27252:4;27248:20;27244:1;27233:9;27229:17;27222:47;27286:131;27412:4;27286:131;:::i;:::-;27278:139;;27005:419;;;:::o;27430:332::-;27551:4;27589:2;27578:9;27574:18;27566:26;;27602:71;27670:1;27659:9;27655:17;27646:6;27602:71;:::i;:::-;27683:72;27751:2;27740:9;27736:18;27727:6;27683:72;:::i;:::-;27430:332;;;;;:::o;27768:232::-;27908:34;27904:1;27896:6;27892:14;27885:58;27977:15;27972:2;27964:6;27960:15;27953:40;27768:232;:::o;28006:366::-;28148:3;28169:67;28233:2;28228:3;28169:67;:::i;:::-;28162:74;;28245:93;28334:3;28245:93;:::i;:::-;28363:2;28358:3;28354:12;28347:19;;28006:366;;;:::o;28378:419::-;28544:4;28582:2;28571:9;28567:18;28559:26;;28631:9;28625:4;28621:20;28617:1;28606:9;28602:17;28595:47;28659:131;28785:4;28659:131;:::i;:::-;28651:139;;28378:419;;;:::o;28803:229::-;28943:34;28939:1;28931:6;28927:14;28920:58;29012:12;29007:2;28999:6;28995:15;28988:37;28803:229;:::o;29038:366::-;29180:3;29201:67;29265:2;29260:3;29201:67;:::i;:::-;29194:74;;29277:93;29366:3;29277:93;:::i;:::-;29395:2;29390:3;29386:12;29379:19;;29038:366;;;:::o;29410:419::-;29576:4;29614:2;29603:9;29599:18;29591:26;;29663:9;29657:4;29653:20;29649:1;29638:9;29634:17;29627:47;29691:131;29817:4;29691:131;:::i;:::-;29683:139;;29410:419;;;:::o;29835:305::-;29875:3;29894:20;29912:1;29894:20;:::i;:::-;29889:25;;29928:20;29946:1;29928:20;:::i;:::-;29923:25;;30082:1;30014:66;30010:74;30007:1;30004:81;30001:107;;;30088:18;;:::i;:::-;30001:107;30132:1;30129;30125:9;30118:16;;29835:305;;;;:::o;30146:225::-;30286:34;30282:1;30274:6;30270:14;30263:58;30355:8;30350:2;30342:6;30338:15;30331:33;30146:225;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:223::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:6;31378:2;31370:6;31366:15;31359:31;31174:223;:::o;31403:366::-;31545:3;31566:67;31630:2;31625:3;31566:67;:::i;:::-;31559:74;;31642:93;31731:3;31642:93;:::i;:::-;31760:2;31755:3;31751:12;31744:19;;31403:366;;;:::o;31775:419::-;31941:4;31979:2;31968:9;31964:18;31956:26;;32028:9;32022:4;32018:20;32014:1;32003:9;31999:17;31992:47;32056:131;32182:4;32056:131;:::i;:::-;32048:139;;31775:419;;;:::o;32200:221::-;32340:34;32336:1;32328:6;32324:14;32317:58;32409:4;32404:2;32396:6;32392:15;32385:29;32200:221;:::o;32427:366::-;32569:3;32590:67;32654:2;32649:3;32590:67;:::i;:::-;32583:74;;32666:93;32755:3;32666:93;:::i;:::-;32784:2;32779:3;32775:12;32768:19;;32427:366;;;:::o;32799:419::-;32965:4;33003:2;32992:9;32988:18;32980:26;;33052:9;33046:4;33042:20;33038:1;33027:9;33023:17;33016:47;33080:131;33206:4;33080:131;:::i;:::-;33072:139;;32799:419;;;:::o;33224:224::-;33364:34;33360:1;33352:6;33348:14;33341:58;33433:7;33428:2;33420:6;33416:15;33409:32;33224:224;:::o;33454:366::-;33596:3;33617:67;33681:2;33676:3;33617:67;:::i;:::-;33610:74;;33693:93;33782:3;33693:93;:::i;:::-;33811:2;33806:3;33802:12;33795:19;;33454:366;;;:::o;33826:419::-;33992:4;34030:2;34019:9;34015:18;34007:26;;34079:9;34073:4;34069:20;34065:1;34054:9;34050:17;34043:47;34107:131;34233:4;34107:131;:::i;:::-;34099:139;;33826:419;;;:::o;34251:222::-;34391:34;34387:1;34379:6;34375:14;34368:58;34460:5;34455:2;34447:6;34443:15;34436:30;34251:222;:::o;34479:366::-;34621:3;34642:67;34706:2;34701:3;34642:67;:::i;:::-;34635:74;;34718:93;34807:3;34718:93;:::i;:::-;34836:2;34831:3;34827:12;34820:19;;34479:366;;;:::o;34851:419::-;35017:4;35055:2;35044:9;35040:18;35032:26;;35104:9;35098:4;35094:20;35090:1;35079:9;35075:17;35068:47;35132:131;35258:4;35132:131;:::i;:::-;35124:139;;34851:419;;;:::o;35276:228::-;35416:34;35412:1;35404:6;35400:14;35393:58;35485:11;35480:2;35472:6;35468:15;35461:36;35276:228;:::o;35510:366::-;35652:3;35673:67;35737:2;35732:3;35673:67;:::i;:::-;35666:74;;35749:93;35838:3;35749:93;:::i;:::-;35867:2;35862:3;35858:12;35851:19;;35510:366;;;:::o;35882:419::-;36048:4;36086:2;36075:9;36071:18;36063:26;;36135:9;36129:4;36125:20;36121:1;36110:9;36106:17;36099:47;36163:131;36289:4;36163:131;:::i;:::-;36155:139;;35882:419;;;:::o;36307:180::-;36447:32;36443:1;36435:6;36431:14;36424:56;36307:180;:::o;36493:366::-;36635:3;36656:67;36720:2;36715:3;36656:67;:::i;:::-;36649:74;;36732:93;36821:3;36732:93;:::i;:::-;36850:2;36845:3;36841:12;36834:19;;36493:366;;;:::o;36865:419::-;37031:4;37069:2;37058:9;37054:18;37046:26;;37118:9;37112:4;37108:20;37104:1;37093:9;37089:17;37082:47;37146:131;37272:4;37146:131;:::i;:::-;37138:139;;36865:419;;;:::o;37290:234::-;37430:34;37426:1;37418:6;37414:14;37407:58;37499:17;37494:2;37486:6;37482:15;37475:42;37290:234;:::o;37530:366::-;37672:3;37693:67;37757:2;37752:3;37693:67;:::i;:::-;37686:74;;37769:93;37858:3;37769:93;:::i;:::-;37887:2;37882:3;37878:12;37871:19;;37530:366;;;:::o;37902:419::-;38068:4;38106:2;38095:9;38091:18;38083:26;;38155:9;38149:4;38145:20;38141:1;38130:9;38126:17;38119:47;38183:131;38309:4;38183:131;:::i;:::-;38175:139;;37902:419;;;:::o;38327:227::-;38467:34;38463:1;38455:6;38451:14;38444:58;38536:10;38531:2;38523:6;38519:15;38512:35;38327:227;:::o;38560:366::-;38702:3;38723:67;38787:2;38782:3;38723:67;:::i;:::-;38716:74;;38799:93;38888:3;38799:93;:::i;:::-;38917:2;38912:3;38908:12;38901:19;;38560:366;;;:::o;38932:419::-;39098:4;39136:2;39125:9;39121:18;39113:26;;39185:9;39179:4;39175:20;39171:1;39160:9;39156:17;39149:47;39213:131;39339:4;39213:131;:::i;:::-;39205:139;;38932:419;;;:::o;39357:224::-;39497:34;39493:1;39485:6;39481:14;39474:58;39566:7;39561:2;39553:6;39549:15;39542:32;39357:224;:::o;39587:366::-;39729:3;39750:67;39814:2;39809:3;39750:67;:::i;:::-;39743:74;;39826:93;39915:3;39826:93;:::i;:::-;39944:2;39939:3;39935:12;39928:19;;39587:366;;;:::o;39959:419::-;40125:4;40163:2;40152:9;40148:18;40140:26;;40212:9;40206:4;40202:20;40198:1;40187:9;40183:17;40176:47;40240:131;40366:4;40240:131;:::i;:::-;40232:139;;39959:419;;;:::o;40384:191::-;40424:4;40444:20;40462:1;40444:20;:::i;:::-;40439:25;;40478:20;40496:1;40478:20;:::i;:::-;40473:25;;40517:1;40514;40511:8;40508:34;;;40522:18;;:::i;:::-;40508:34;40567:1;40564;40560:9;40552:17;;40384:191;;;;:::o;40581:177::-;40721:29;40717:1;40709:6;40705:14;40698:53;40581:177;:::o;40764:366::-;40906:3;40927:67;40991:2;40986:3;40927:67;:::i;:::-;40920:74;;41003:93;41092:3;41003:93;:::i;:::-;41121:2;41116:3;41112:12;41105:19;;40764:366;;;:::o;41136:419::-;41302:4;41340:2;41329:9;41325:18;41317:26;;41389:9;41383:4;41379:20;41375:1;41364:9;41360:17;41353:47;41417:131;41543:4;41417:131;:::i;:::-;41409:139;;41136:419;;;:::o;41561:233::-;41600:3;41623:24;41641:5;41623:24;:::i;:::-;41614:33;;41669:66;41662:5;41659:77;41656:103;;41739:18;;:::i;:::-;41656:103;41786:1;41779:5;41775:13;41768:20;;41561:233;;;:::o;41800:663::-;41888:6;41896;41904;41953:2;41941:9;41932:7;41928:23;41924:32;41921:119;;;41959:79;;:::i;:::-;41921:119;42079:1;42104:64;42160:7;42151:6;42140:9;42136:22;42104:64;:::i;:::-;42094:74;;42050:128;42217:2;42243:64;42299:7;42290:6;42279:9;42275:22;42243:64;:::i;:::-;42233:74;;42188:129;42356:2;42382:64;42438:7;42429:6;42418:9;42414:22;42382:64;:::i;:::-;42372:74;;42327:129;41800:663;;;;;:::o;42469:180::-;42517:77;42514:1;42507:88;42614:4;42611:1;42604:15;42638:4;42635:1;42628:15;42655:185;42695:1;42712:20;42730:1;42712:20;:::i;:::-;42707:25;;42746:20;42764:1;42746:20;:::i;:::-;42741:25;;42785:1;42775:35;;42790:18;;:::i;:::-;42775:35;42832:1;42829;42825:9;42820:14;;42655:185;;;;:::o;42846:220::-;42986:34;42982:1;42974:6;42970:14;42963:58;43055:3;43050:2;43042:6;43038:15;43031:28;42846:220;:::o;43072:366::-;43214:3;43235:67;43299:2;43294:3;43235:67;:::i;:::-;43228:74;;43311:93;43400:3;43311:93;:::i;:::-;43429:2;43424:3;43420:12;43413:19;;43072:366;;;:::o;43444:419::-;43610:4;43648:2;43637:9;43633:18;43625:26;;43697:9;43691:4;43687:20;43683:1;43672:9;43668:17;43661:47;43725:131;43851:4;43725:131;:::i;:::-;43717:139;;43444:419;;;:::o;43869:85::-;43914:7;43943:5;43932:16;;43869:85;;;:::o;43960:158::-;44018:9;44051:61;44069:42;44078:32;44104:5;44078:32;:::i;:::-;44069:42;:::i;:::-;44051:61;:::i;:::-;44038:74;;43960:158;;;:::o;44124:147::-;44219:45;44258:5;44219:45;:::i;:::-;44214:3;44207:58;44124:147;;:::o;44277:831::-;44540:4;44578:3;44567:9;44563:19;44555:27;;44592:71;44660:1;44649:9;44645:17;44636:6;44592:71;:::i;:::-;44673:80;44749:2;44738:9;44734:18;44725:6;44673:80;:::i;:::-;44800:9;44794:4;44790:20;44785:2;44774:9;44770:18;44763:48;44828:108;44931:4;44922:6;44828:108;:::i;:::-;44820:116;;44946:72;45014:2;45003:9;44999:18;44990:6;44946:72;:::i;:::-;45028:73;45096:3;45085:9;45081:19;45072:6;45028:73;:::i;:::-;44277:831;;;;;;;;:::o;45114:147::-;45215:11;45252:3;45237:18;;45114:147;;;;:::o;45267:114::-;;:::o;45387:398::-;45546:3;45567:83;45648:1;45643:3;45567:83;:::i;:::-;45560:90;;45659:93;45748:3;45659:93;:::i;:::-;45777:1;45772:3;45768:11;45761:18;;45387:398;;;:::o;45791:379::-;45975:3;45997:147;46140:3;45997:147;:::i;:::-;45990:154;;46161:3;46154:10;;45791:379;;;:::o

Swarm Source

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