ETH Price: $3,476.42 (+0.83%)

Token

BabyApe (BAPE)
 

Overview

Max Total Supply

1,000,000,000 BAPE

Holders

482

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
singalt.eth
Balance
0.52 BAPE

Value
$0.00
0x1649E2A2D94F25CF07CEb99d3C6e39673bdC4fA0
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:
BabyApe

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)


//Telegram: https://t.me/apereflections
//Twitter: https://twitter.com/BAPE_TO_APE

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: contracts/BabyApe.sol




pragma solidity ^0.8.0;





interface IBURNER {
    function burnEmUp() external payable;    
}

 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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
     function factory() external pure returns (address);
     function WETH() external pure returns (address);
     function addLiquidityETH(
         address token,
         uint amountTokenDesired,
         uint amountTokenMin,
         uint amountETHMin,
         address to,
         uint deadline
     ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidityETH(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountToken, uint amountETH);     
 }

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}


contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IUniswapV2Router02 router;
    IERC20 public RewardToken; 

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 30 minutes;
    uint256 public minDistribution = 1 * (10 ** 18);

    uint256 currentIndex;
    bool initialized;

    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router, address _reflectionToken, address token) {
        router = IUniswapV2Router02(_router);
        RewardToken = IERC20(_reflectionToken);
        _token = token;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }
    
    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {
        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}


contract BabyApe is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    IDividendDistributor public dividendDistributor;
    uint256 distributorGas = 500000;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;


    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address payable public hldBurnerAddress;
    address public hldAdmin;

    bool public restrictWhales = true;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    uint256 public launchedAt;
    uint256 public hldFee = 2;

    uint256 public reflectionFee;
    uint256 public lpFee;
    uint256 public devFee;

    uint256 public reflectionFeeOnSell;
    uint256 public lpFeeOnSell;
    uint256 public devFeeOnSell;

    uint256 public totalFee;
    uint256 public totalFeeIfSelling;

    IUniswapV2Router02 public router;
    address public pair;
    address public factory;
    address public tokenOwner;
    address payable public devWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingStatus = true;

    mapping (address => bool) private bots;    

    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 public swapThreshold;
    
    constructor(uint256 initialSupply, address reflectionToken, address routerAddress, address initialHldAdmin, address initialHldBurner) {

        _name = "BabyApe";
        _symbol = "BAPE";
        _totalSupply += initialSupply;
        _balances[msg.sender] += initialSupply;        

        _maxTxAmount = initialSupply * 2 / 200;
        _walletMax = initialSupply * 3 / 100;    
        swapThreshold = initialSupply * 5 / 4000;

        router = IUniswapV2Router02(routerAddress);
        pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));

        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(routerAddress, reflectionToken, address(this));

        factory = msg.sender;

        isFeeExempt[address(this)] = true;
        isFeeExempt[factory] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[factory] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true; 

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true; 

        reflectionFee = 6;
        lpFee = 0;
        devFee = 2;

        reflectionFeeOnSell = 11;
        lpFeeOnSell = 0;
        devFeeOnSell = 2;

        totalFee = devFee.add(lpFee).add(reflectionFee).add(hldFee);
        totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(reflectionFeeOnSell).add(hldFee);         

        tokenOwner = msg.sender;
        devWallet = payable(msg.sender);
        hldBurnerAddress = payable(initialHldBurner);
        hldAdmin = initialHldAdmin;

    }

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

    modifier onlyHldAdmin() {
        require(hldAdmin == _msgSender(), "Ownable: caller is not the hldAdmin");
        _;
    }

    modifier onlyOwner() {
        require(tokenOwner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    //hldAdmin functions
    function updateHldAdmin(address newAdmin) public virtual onlyHldAdmin {     
        hldAdmin = newAdmin;
    }

    function updateHldBurnerAddress(address newhldBurnerAddress) public virtual onlyHldAdmin {     
        hldBurnerAddress = payable(newhldBurnerAddress);
    }    
    
    function setBots(address[] memory bots_) external onlyHldAdmin {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }


    //Owner functions
    function changeFees(uint256 initialReflectionFee, uint256 initialReflectionFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell,
        uint256 initialDevFee, uint256 initialDevFeeOnSell) external onlyOwner {

        reflectionFee = initialReflectionFee;
        lpFee = initialLpFee;
        devFee = initialDevFee;

        reflectionFeeOnSell = initialReflectionFeeOnSell;
        lpFeeOnSell = initialLpFeeOnSell;
        devFeeOnSell = initialDevFeeOnSell;

        totalFee = devFee.add(lpFee).add(reflectionFee).add(hldFee);
        totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(reflectionFeeOnSell).add(hldFee);

        require(totalFee <= 12, "Too high fee");
        require(totalFeeIfSelling <= 17, "Too high fee");
    } 

    function removeHldAdmin() public virtual onlyOwner {
        hldAdmin = address(0);
    }

    function changeTxLimit(uint256 newLimit) external onlyOwner {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
    
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external onlyOwner {            
        restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external onlyOwner {      
        isTxLimitExempt[holder] = exempt;
    }


    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    }

    function setOwnerWallet(address payable newOwnerWallet) external onlyOwner {
        tokenOwner = newOwnerWallet;
    }     

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external onlyOwner {
        dividendDistributor.setDistributionCriteria(newMinPeriod, newMinDistribution);        
    }

    function delBot(address notbot) external onlyOwner {
        bots[notbot] = false;
    }       

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     *
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        
        require(!bots[sender] && !bots[recipient]);

        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "tx");

        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax, "wallet");
        }

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try dividendDistributor.process(distributorGas) {} catch {}


        emit Transfer(sender, recipient, finalAmount);
        return true;
    }    

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }    

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */



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

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify.mul(lpFee).div(totalFee).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;
        uint256 devBalance = amountETH.mul(devFee).div(totalFee);
        uint256 hldBalance = amountETH.mul(hldFee).div(totalFee);

        uint256 amountEthLiquidity = amountETH.mul(lpFee).div(totalFee).div(2);
        uint256 amountEthReflection = amountETH.sub(devBalance).sub(hldBalance).sub(amountEthLiquidity);


        if(amountETH > 0){
            IBURNER(hldBurnerAddress).burnEmUp{value: hldBalance}();           
            devWallet.transfer(devBalance);
        }        

        try dividendDistributor.deposit{value: amountEthReflection}() {} catch {}

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountEthLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                0x000000000000000000000000000000000000dEaD,
                block.timestamp
            );
        }      
    
    }

    receive() external payable { }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"reflectionToken","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"initialHldAdmin","type":"address"},{"internalType":"address","name":"initialHldBurner","type":"address"}],"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":"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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialReflectionFee","type":"uint256"},{"internalType":"uint256","name":"initialReflectionFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldBurnerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldFee","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":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeHldAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"updateHldAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newhldBurnerAddress","type":"address"}],"name":"updateHldBurnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526207a12060015561dead600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60146101000a81548160ff0219169083151502179055506002600f556001601c60156101000a81548160ff0219169083151502179055506001601c60166101000a81548160ff021916908315150217905550348015620000f357600080fd5b506040516200781a3803806200781a833981810160405281019062000119919062000e6d565b6040518060400160405280600781526020017f4261627941706500000000000000000000000000000000000000000000000000815250600590805190602001906200016692919062000d4f565b506040518060400160405280600481526020017f424150450000000000000000000000000000000000000000000000000000000081525060069080519060200190620001b492919062000d4f565b508460046000828254620001c9919062000f70565b9250508190555084600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000221919062000f70565b9250508190555060c860028662000239919062001005565b62000245919062000fcd565b601e8190555060646003866200025c919062001005565b62000268919062000fcd565b601f81905550610fa060058662000280919062001005565b6200028c919062000fcd565b60208190555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033c57600080fd5b505afa15801562000351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000377919062000e3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003fb57600080fd5b505afa15801562000410573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000436919062000e3b565b306040518363ffffffff1660e01b81526004016200045692919062000f06565b602060405180830381600087803b1580156200047157600080fd5b505af115801562000486573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ac919062000e3b565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550828430604051620005c09062000de0565b620005ce9392919062000f33565b604051809103906000f080158015620005eb573d6000803e3d6000fd5b506000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600660108190555060006011819055506002601281905550600b6013819055506000601481905550600260158190555062000bc8600f5462000bb460105462000ba060115460125462000d3760201b620021861790919060201c565b62000d3760201b620021861790919060201c565b62000d3760201b620021861790919060201c565b60168190555062000c22600f5462000c0e60135462000bfa60145460155462000d3760201b620021861790919060201c565b62000d3760201b620021861790919060201c565b62000d3760201b620021861790919060201c565b60178190555033601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620011a0565b6000818362000d47919062000f70565b905092915050565b82805462000d5d90620010a4565b90600052602060002090601f01602090048101928262000d81576000855562000dcd565b82601f1062000d9c57805160ff191683800117855562000dcd565b8280016001018555821562000dcd579182015b8281111562000dcc57825182559160200191906001019062000daf565b5b50905062000ddc919062000dee565b5090565b611e5680620059c483390190565b5b8082111562000e0957600081600090555060010162000def565b5090565b60008151905062000e1e816200116c565b92915050565b60008151905062000e358162001186565b92915050565b60006020828403121562000e545762000e5362001167565b5b600062000e648482850162000e0d565b91505092915050565b600080600080600060a0868803121562000e8c5762000e8b62001167565b5b600062000e9c8882890162000e24565b955050602062000eaf8882890162000e0d565b945050604062000ec28882890162000e0d565b935050606062000ed58882890162000e0d565b925050608062000ee88882890162000e0d565b9150509295509295909350565b62000f008162001066565b82525050565b600060408201905062000f1d600083018562000ef5565b62000f2c602083018462000ef5565b9392505050565b600060608201905062000f4a600083018662000ef5565b62000f59602083018562000ef5565b62000f68604083018462000ef5565b949350505050565b600062000f7d826200109a565b915062000f8a836200109a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fc25762000fc1620010da565b5b828201905092915050565b600062000fda826200109a565b915062000fe7836200109a565b92508262000ffa5762000ff962001109565b5b828204905092915050565b600062001012826200109a565b91506200101f836200109a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200105b576200105a620010da565b5b828202905092915050565b600062001073826200107a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620010bd57607f821691505b60208210811415620010d457620010d362001138565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620011778162001066565b81146200118357600080fd5b50565b62001191816200109a565b81146200119d57600080fd5b50565b61481480620011b06000396000f3fe6080604052600436106103395760003560e01c806383ad7994116101ab578063bf56b371116100f7578063dd62ed3e11610095578063ede1588f1161006f578063ede1588f14610c33578063f7c7220514610c5e578063f887ea4014610c87578063fabe628314610cb257610340565b8063dd62ed3e14610ba2578063e5d8510814610bdf578063e66b1d1e14610c0a57610340565b8063cb29813c116100d1578063cb29813c14610afa578063cc6badb314610b23578063d4fb9a0114610b4e578063d920334e14610b7957610340565b8063bf56b37114610a79578063c45a015514610aa4578063ca987b0e14610acf57610340565b8063a3e6761011610164578063a9059cbb1161013e578063a9059cbb146109bf578063b515566a146109fc578063bad3ea6a14610a25578063bb542ef014610a5057610340565b8063a3e676101461092c578063a457c2d714610957578063a8aa1b311461099457610340565b806383ad79941461081a5780638b42507f146108455780638ea5220f146108825780639502c426146108ad57806395d89b41146108d8578063a3a2e89e1461090357610340565b80633f4218e011610285578063704ce43e116102235780637c0ff205116101fd5780637c0ff205146107705780637d1db4a51461079b5780637db1342c146107c6578063807c2d9c146107ef57610340565b8063704ce43e146106dd57806370a0823114610708578063774b58471461074557610340565b806344de2e4c1161025f57806344de2e4c146106455780634a74bb021461067057806366b5d8821461069b5780636827e764146106b257610340565b80633f4218e0146105a25780634355855a146105df57806343d49dda1461061c57610340565b806323b872dd116102f25780632d48e896116102cc5780632d48e896146104e8578063313ce56714610511578063395093511461053c5780633dab52691461057957610340565b806323b872dd14610457578063273123b7146104945780632b112e49146104bd57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b57806318160ddd146103d85780631df4ccfc146104035780631f53ac021461042e57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cdb565b6040516103679190614055565b60405180910390f35b34801561037c57600080fd5b50610385610ce1565b6040516103929190613f13565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd919061394e565b610d73565b6040516103cf9190613ec2565b60405180910390f35b3480156103e457600080fd5b506103ed610d96565b6040516103fa9190614055565b60405180910390f35b34801561040f57600080fd5b50610418610da0565b6040516104259190614055565b60405180910390f35b34801561043a57600080fd5b506104556004803603810190610450919061384e565b610da6565b005b34801561046357600080fd5b5061047e600480360381019061047991906138bb565b610e81565b60405161048b9190613ec2565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906137f4565b610eb1565b005b3480156104c957600080fd5b506104d2610fa3565b6040516104df9190614055565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613a71565b611025565b005b34801561051d57600080fd5b5061052661114d565b60405161053391906140f3565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061394e565b611156565b6040516105709190613ec2565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190613a04565b611200565b005b3480156105ae57600080fd5b506105c960048036038101906105c491906137f4565b6112bc565b6040516105d69190613ec2565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906137f4565b6112dc565b6040516106139190613ec2565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906137f4565b6112fc565b005b34801561065157600080fd5b5061065a6113d7565b6040516106679190613ec2565b60405180910390f35b34801561067c57600080fd5b506106856113ea565b6040516106929190613ec2565b60405180910390f35b3480156106a757600080fd5b506106b06113fd565b005b3480156106be57600080fd5b506106c76114d8565b6040516106d49190614055565b60405180910390f35b3480156106e957600080fd5b506106f26114de565b6040516106ff9190614055565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a91906137f4565b6114e4565b60405161073c9190614055565b60405180910390f35b34801561075157600080fd5b5061075a61152d565b6040516107679190613e1d565b60405180910390f35b34801561077c57600080fd5b50610785611553565b6040516107929190614055565b60405180910390f35b3480156107a757600080fd5b506107b0611559565b6040516107bd9190614055565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613a44565b61155f565b005b3480156107fb57600080fd5b50610804611600565b6040516108119190614055565b60405180910390f35b34801561082657600080fd5b5061082f611606565b60405161083c9190614055565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906137f4565b61160c565b6040516108799190613ec2565b60405180910390f35b34801561088e57600080fd5b5061089761162c565b6040516108a49190613e1d565b60405180910390f35b3480156108b957600080fd5b506108c2611652565b6040516108cf9190614055565b60405180910390f35b3480156108e457600080fd5b506108ed611658565b6040516108fa9190613f13565b60405180910390f35b34801561090f57600080fd5b5061092a6004803603810190610925919061390e565b6116ea565b005b34801561093857600080fd5b506109416117dc565b60405161094e9190613e02565b60405180910390f35b34801561096357600080fd5b5061097e6004803603810190610979919061394e565b611802565b60405161098b9190613ec2565b60405180910390f35b3480156109a057600080fd5b506109a96118ec565b6040516109b69190613e02565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e1919061394e565b611912565b6040516109f39190613ec2565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e919061398e565b611936565b005b348015610a3157600080fd5b50610a3a611a62565b604051610a479190613edd565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061384e565b611a86565b005b348015610a8557600080fd5b50610a8e611b61565b604051610a9b9190614055565b60405180910390f35b348015610ab057600080fd5b50610ab9611b67565b604051610ac69190613e02565b60405180910390f35b348015610adb57600080fd5b50610ae4611b8d565b604051610af19190614055565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190613b04565b611b93565b005b348015610b2f57600080fd5b50610b38611d72565b604051610b459190614055565b60405180910390f35b348015610b5a57600080fd5b50610b63611d78565b604051610b709190613ec2565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190613a44565b611d8b565b005b348015610bae57600080fd5b50610bc96004803603810190610bc4919061387b565b611e2c565b604051610bd69190614055565b60405180910390f35b348015610beb57600080fd5b50610bf4611eb3565b604051610c019190614055565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c91906139d7565b611eb9565b005b348015610c3f57600080fd5b50610c48611f6d565b604051610c559190613e02565b60405180910390f35b348015610c6a57600080fd5b50610c856004803603810190610c8091906137f4565b611f93565b005b348015610c9357600080fd5b50610c9c61206e565b604051610ca99190613ef8565b60405180910390f35b348015610cbe57600080fd5b50610cd96004803603810190610cd4919061390e565b612094565b005b60205481565b606060058054610cf0906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1c906143bd565b8015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b600080610d7e61219c565b9050610d8b8185856121a4565b600191505092915050565b6000600454905090565b60165481565b610dae61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613fb5565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610e8c61219c565b9050610e9985828561236f565b610ea48585856123fb565b5060019150509392505050565b610eb961219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613fb5565b60405180910390fd5b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611020610fd3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114e4565b611012611001600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114e4565b600454612cad90919063ffffffff16565b612cad90919063ffffffff16565b905090565b61102d61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613fb5565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016111179291906140ca565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050505050565b60006009905090565b60008061116161219c565b90506111f5818585600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f091906141b4565b6121a4565b600191505092915050565b61120861219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613fb5565b60405180910390fd5b81601c60156101000a81548160ff021916908315150217905550806020819055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b61130461219c565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90613f95565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60149054906101000a900460ff1681565b601c60159054906101000a900460ff1681565b61140561219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613fb5565b60405180910390fd5b6000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60115481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601e5481565b61156761219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613fb5565b60405180910390fd5b80601f8190555050565b601f5481565b60105481565b600c6020528060005260406000206000915054906101000a900460ff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b606060068054611667906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611693906143bd565b80156116e05780601f106116b5576101008083540402835291602001916116e0565b820191906000526020600020905b8154815290600101906020018083116116c357829003601f168201915b5050505050905090565b6116f261219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613fb5565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061180d61219c565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90614035565b60405180910390fd5b6118e082868684036121a4565b60019250505092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061191d61219c565b905061192a8185856123fb565b50600191505092915050565b61193e61219c565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c490613f95565b60405180910390fd5b60005b8151811015611a5e576001601d60008484815181106119f2576119f16144f6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a5690614420565b9150506119d0565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a8e61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490613fb5565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611b9b61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613fb5565b60405180910390fd5b856010819055508360118190555081601281905550846013819055508260148190555080601581905550611c93600f54611c85601054611c7760115460125461218690919063ffffffff16565b61218690919063ffffffff16565b61218690919063ffffffff16565b601681905550611cd8600f54611cca601354611cbc60145460155461218690919063ffffffff16565b61218690919063ffffffff16565b61218690919063ffffffff16565b601781905550600c6016541115611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90613fd5565b60405180910390fd5b60116017541115611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613fd5565b60405180910390fd5b505050505050565b60135481565b601c60169054906101000a900460ff1681565b611d9361219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990613fb5565b60405180910390fd5b80601e8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b611ec161219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790613fb5565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f9b61219c565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613f95565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61209c61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212290613fb5565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000818361219491906141b4565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614015565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613f35565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123629190614055565b60405180910390a3505050565b600061237b8484611e2c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123f557818110156123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de90613f55565b60405180910390fd5b6123f484848484036121a4565b5b50505050565b6000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124a15750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124aa57600080fd5b601c60149054906101000a900460ff16156124d1576124ca848484612cc3565b9050612ca6565b601e548211158061252b5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256190613ff5565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125d05750600a60149054906101000a900460ff165b1561266c57601f5461262a83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b111561266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290613f75565b60405180910390fd5b5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126d75750601c60149054906101000a900460ff16155b80156126ef5750601c60159054906101000a900460ff165b801561273c5750602054600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561274a57612749612e96565b5b6127d3826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af9092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128bc5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6128c657826128d2565b6128d1858585613504565b5b905061292681600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a54929190613e38565b600060405180830381600087803b158015612a6e57600080fd5b505af1925050508015612a7f575060015b612a8857612a89565b5b5b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bab5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612b75929190613e38565b600060405180830381600087803b158015612b8f57600080fd5b505af1925050508015612ba0575060015b612ba957612baa565b5b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796001546040518263ffffffff1660e01b8152600401612c069190614055565b600060405180830381600087803b158015612c2057600080fd5b505af1925050508015612c31575060015b612c3a57612c3b565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c989190614055565b60405180910390a360019150505b9392505050565b60008183612cbb9190614295565b905092915050565b6000612d4e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af9092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612de382600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e839190614055565b60405180910390a3600190509392505050565b6001601c60146101000a81548160ff0219169083151502179055506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000612f336002612f25601654612f17601154876136ac90919063ffffffff16565b6136c290919063ffffffff16565b6136c290919063ffffffff16565b90506000612f4a8284612cad90919063ffffffff16565b90506000600267ffffffffffffffff811115612f6957612f68614525565b5b604051908082528060200260200182016040528015612f975781602001602082028036833780820191505090505b5090503081600081518110612faf57612fae6144f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561305157600080fd5b505afa158015613065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130899190613821565b8160018151811061309d5761309c6144f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161313b959493929190614070565b600060405180830381600087803b15801561315557600080fd5b505af1158015613169573d6000803e3d6000fd5b505050506000479050600061319d60165461318f601254856136ac90919063ffffffff16565b6136c290919063ffffffff16565b905060006131ca6016546131bc600f54866136ac90919063ffffffff16565b6136c290919063ffffffff16565b9050600061320a60026131fc6016546131ee601154896136ac90919063ffffffff16565b6136c290919063ffffffff16565b6136c290919063ffffffff16565b905060006132458261323785613229888a612cad90919063ffffffff16565b612cad90919063ffffffff16565b612cad90919063ffffffff16565b9050600085111561333d57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c50f89d846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132ba57600080fd5b505af11580156132ce573d6000803e3d6000fd5b5050505050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561333b573d6000803e3d6000fd5b505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133a557600080fd5b505af1935050505080156133b7575060015b6133c0576133c1565b5b600088111561348957601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b60008061dead426040518863ffffffff1660e01b815260040161343396959493929190613e61565b6060604051808303818588803b15801561344c57600080fd5b505af1158015613460573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134859190613ab1565b5050505b5050505050505050506000601c60146101000a81548160ff021916908315150217905550565b60008383111582906134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ee9190613f13565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461356457601654613568565b6017545b90506000613592606461358484876136ac90919063ffffffff16565b6136c290919063ffffffff16565b90506135e681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136869190614055565b60405180910390a36136a18185612cad90919063ffffffff16565b925050509392505050565b600081836136ba919061423b565b905092915050565b600081836136d0919061420a565b905092915050565b60006136eb6136e684614133565b61410e565b9050808382526020820190508285602086028201111561370e5761370d614559565b5b60005b8581101561373e57816137248882613748565b845260208401935060208301925050600181019050613711565b5050509392505050565b60008135905061375781614782565b92915050565b60008151905061376c81614782565b92915050565b60008135905061378181614799565b92915050565b600082601f83011261379c5761379b614554565b5b81356137ac8482602086016136d8565b91505092915050565b6000813590506137c4816147b0565b92915050565b6000813590506137d9816147c7565b92915050565b6000815190506137ee816147c7565b92915050565b60006020828403121561380a57613809614563565b5b600061381884828501613748565b91505092915050565b60006020828403121561383757613836614563565b5b60006138458482850161375d565b91505092915050565b60006020828403121561386457613863614563565b5b600061387284828501613772565b91505092915050565b6000806040838503121561389257613891614563565b5b60006138a085828601613748565b92505060206138b185828601613748565b9150509250929050565b6000806000606084860312156138d4576138d3614563565b5b60006138e286828701613748565b93505060206138f386828701613748565b9250506040613904868287016137ca565b9150509250925092565b6000806040838503121561392557613924614563565b5b600061393385828601613748565b9250506020613944858286016137b5565b9150509250929050565b6000806040838503121561396557613964614563565b5b600061397385828601613748565b9250506020613984858286016137ca565b9150509250929050565b6000602082840312156139a4576139a3614563565b5b600082013567ffffffffffffffff8111156139c2576139c161455e565b5b6139ce84828501613787565b91505092915050565b6000602082840312156139ed576139ec614563565b5b60006139fb848285016137b5565b91505092915050565b60008060408385031215613a1b57613a1a614563565b5b6000613a29858286016137b5565b9250506020613a3a858286016137ca565b9150509250929050565b600060208284031215613a5a57613a59614563565b5b6000613a68848285016137ca565b91505092915050565b60008060408385031215613a8857613a87614563565b5b6000613a96858286016137ca565b9250506020613aa7858286016137ca565b9150509250929050565b600080600060608486031215613aca57613ac9614563565b5b6000613ad8868287016137df565b9350506020613ae9868287016137df565b9250506040613afa868287016137df565b9150509250925092565b60008060008060008060c08789031215613b2157613b20614563565b5b6000613b2f89828a016137ca565b9650506020613b4089828a016137ca565b9550506040613b5189828a016137ca565b9450506060613b6289828a016137ca565b9350506080613b7389828a016137ca565b92505060a0613b8489828a016137ca565b9150509295509295509295565b6000613b9d8383613bb8565b60208301905092915050565b613bb2816142db565b82525050565b613bc1816142c9565b82525050565b613bd0816142c9565b82525050565b6000613be18261416f565b613beb8185614192565b9350613bf68361415f565b8060005b83811015613c27578151613c0e8882613b91565b9750613c1983614185565b925050600181019050613bfa565b5085935050505092915050565b613c3d816142ed565b82525050565b613c4c81614330565b82525050565b613c5b81614342565b82525050565b613c6a81614354565b82525050565b6000613c7b8261417a565b613c8581856141a3565b9350613c9581856020860161438a565b613c9e81614568565b840191505092915050565b6000613cb66022836141a3565b9150613cc182614579565b604082019050919050565b6000613cd9601d836141a3565b9150613ce4826145c8565b602082019050919050565b6000613cfc6006836141a3565b9150613d07826145f1565b602082019050919050565b6000613d1f6023836141a3565b9150613d2a8261461a565b604082019050919050565b6000613d426020836141a3565b9150613d4d82614669565b602082019050919050565b6000613d65600c836141a3565b9150613d7082614692565b602082019050919050565b6000613d886002836141a3565b9150613d93826146bb565b602082019050919050565b6000613dab6024836141a3565b9150613db6826146e4565b604082019050919050565b6000613dce6025836141a3565b9150613dd982614733565b604082019050919050565b613ded81614319565b82525050565b613dfc81614323565b82525050565b6000602082019050613e176000830184613bc7565b92915050565b6000602082019050613e326000830184613ba9565b92915050565b6000604082019050613e4d6000830185613bc7565b613e5a6020830184613de4565b9392505050565b600060c082019050613e766000830189613bc7565b613e836020830188613de4565b613e906040830187613c61565b613e9d6060830186613c61565b613eaa6080830185613bc7565b613eb760a0830184613de4565b979650505050505050565b6000602082019050613ed76000830184613c34565b92915050565b6000602082019050613ef26000830184613c43565b92915050565b6000602082019050613f0d6000830184613c52565b92915050565b60006020820190508181036000830152613f2d8184613c70565b905092915050565b60006020820190508181036000830152613f4e81613ca9565b9050919050565b60006020820190508181036000830152613f6e81613ccc565b9050919050565b60006020820190508181036000830152613f8e81613cef565b9050919050565b60006020820190508181036000830152613fae81613d12565b9050919050565b60006020820190508181036000830152613fce81613d35565b9050919050565b60006020820190508181036000830152613fee81613d58565b9050919050565b6000602082019050818103600083015261400e81613d7b565b9050919050565b6000602082019050818103600083015261402e81613d9e565b9050919050565b6000602082019050818103600083015261404e81613dc1565b9050919050565b600060208201905061406a6000830184613de4565b92915050565b600060a0820190506140856000830188613de4565b6140926020830187613c61565b81810360408301526140a48186613bd6565b90506140b36060830185613bc7565b6140c06080830184613de4565b9695505050505050565b60006040820190506140df6000830185613de4565b6140ec6020830184613de4565b9392505050565b60006020820190506141086000830184613df3565b92915050565b6000614118614129565b905061412482826143ef565b919050565b6000604051905090565b600067ffffffffffffffff82111561414e5761414d614525565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006141bf82614319565b91506141ca83614319565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ff576141fe614469565b5b828201905092915050565b600061421582614319565b915061422083614319565b9250826142305761422f614498565b5b828204905092915050565b600061424682614319565b915061425183614319565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561428a57614289614469565b5b828202905092915050565b60006142a082614319565b91506142ab83614319565b9250828210156142be576142bd614469565b5b828203905092915050565b60006142d4826142f9565b9050919050565b60006142e6826142f9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061433b82614366565b9050919050565b600061434d82614366565b9050919050565b600061435f82614319565b9050919050565b600061437182614378565b9050919050565b6000614383826142f9565b9050919050565b60005b838110156143a857808201518184015260208101905061438d565b838111156143b7576000848401525b50505050565b600060028204905060018216806143d557607f821691505b602082108114156143e9576143e86144c7565b5b50919050565b6143f882614568565b810181811067ffffffffffffffff8211171561441757614416614525565b5b80604052505050565b600061442b82614319565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561445e5761445d614469565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460008201527f6d696e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f2068696768206665650000000000000000000000000000000000000000600082015250565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61478b816142c9565b811461479657600080fd5b50565b6147a2816142db565b81146147ad57600080fd5b50565b6147b9816142ed565b81146147c457600080fd5b50565b6147d081614319565b81146147db57600080fd5b5056fea2646970667358221220d2897d4a7005ea79f64a5e2dcf06e2948f02f29eeb2d940542d60e9b76776b1464736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600b55610708600c55670de0b6b3a7640000600d553480156200003657600080fd5b5060405162001e5638038062001e5683398181016040528101906200005c91906200013e565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620001ed565b6000815190506200013881620001d3565b92915050565b6000806000606084860312156200015a5762000159620001ce565b5b60006200016a8682870162000127565b93505060206200017d8682870162000127565b9250506040620001908682870162000127565b9150509250925092565b6000620001a782620001ae565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001de816200019a565b8114620001ea57600080fd5b50565b611c5980620001fd6000396000f3fe6080604052600436106100e85760003560e01c8063ce7c2ac21161008a578063f0fc6bca11610059578063f0fc6bca146102c7578063f1e9f1e5146102de578063ffb2c47914610309578063ffd49c8414610332576100e8565b8063ce7c2ac214610228578063d0e30db014610267578063e2d2e21914610271578063efca2eed1461029c576100e8565b80632d48e896116100c65780632d48e8961461017e5780633a98ef39146101a75780634fab0ae8146101d2578063997664d7146101fd576100e8565b806311ce023d146100ed57806314b6ca961461011857806328fd319814610141575b600080fd5b3480156100f957600080fd5b5061010261035d565b60405161010f919061183b565b60405180910390f35b34801561012457600080fd5b5061013f600480360381019061013a9190611585565b610363565b005b34801561014d57600080fd5b506101686004803603810190610163919061152b565b610622565b604051610175919061183b565b60405180910390f35b34801561018a57600080fd5b506101a560048036038101906101a0919061164c565b61073c565b005b3480156101b357600080fd5b506101bc6107a6565b6040516101c9919061183b565b60405180910390f35b3480156101de57600080fd5b506101e76107ac565b6040516101f4919061183b565b60405180910390f35b34801561020957600080fd5b506102126107b2565b60405161021f919061183b565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a919061152b565b6107b8565b60405161025e93929190611856565b60405180910390f35b61026f6107e2565b005b34801561027d57600080fd5b50610286610c4f565b604051610293919061183b565b60405180910390f35b3480156102a857600080fd5b506102b1610c55565b6040516102be919061183b565b60405180910390f35b3480156102d357600080fd5b506102dc610c5b565b005b3480156102ea57600080fd5b506102f3610cae565b60405161030091906117b4565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b91906115f2565b610cd4565b005b34801561033e57600080fd5b50610347610e68565b604051610354919061183b565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103bb57600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104105761040f82610e6e565b5b60008111801561046257506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104755761047082611115565b6104d7565b6000811480156104c757506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104d6576104d5826111c4565b5b5b61054081610532600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007546113cb90919063ffffffff16565b6113e190919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105d8600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113f7565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106775760009050610737565b60006106c4600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113f7565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161071f57600092505050610737565b61073281836113cb90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079457600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461083a57600080fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108979190611770565b60206040518083038186803b1580156108af57600080fd5b505afa1580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e7919061161f565b90506000600267ffffffffffffffff81111561090657610905611b81565b5b6040519080825280602002602001820160405280156109345781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561099f57600080fd5b505afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d79190611558565b816000815181106109eb576109ea611b52565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a5c57610a5b611b52565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610af994939291906117cf565b6000604051808303818588803b158015610b1257600080fd5b505af1158015610b26573d6000803e3d6000fd5b50505050506000610bea83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b8c9190611770565b60206040518083038186803b158015610ba457600080fd5b505afa158015610bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdc919061161f565b6113cb90919063ffffffff16565b9050610c01816008546113e190919063ffffffff16565b600881905550610c44610c33600754610c2584600b5461142990919063ffffffff16565b61143f90919063ffffffff16565b600a546113e190919063ffffffff16565b600a81905550505050565b600a5481565b60095481565b610c6433611455565b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a9061181b565b60405180910390fd5b610cac33610e6e565b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d2c57600080fd5b600060038054905090506000811415610d455750610e65565b60008060005a90505b8482108015610d5c57508383105b15610e605783600e5410610d73576000600e819055505b610dbc6003600e5481548110610d8c57610d8b611b52565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611455565b15610e0b57610e0a6003600e5481548110610dda57610dd9611b52565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e6e565b5b610e30610e215a836113cb90919063ffffffff16565b836113e190919063ffffffff16565b91505a9050600e6000815480929190610e4890611a7c565b91905055508280610e5890611a7c565b935050610d4e565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610ebe57611112565b6000610ec982610622565b9050600081111561111057610ee9816009546113e190919063ffffffff16565b600981905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610f4c92919061178b565b602060405180830381600087803b158015610f6657600080fd5b505af1158015610f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9e91906115c5565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061103881600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546113e190919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506110c9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113f7565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506111d891906119b8565b815481106111e9576111e8611b52565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061126757611266611b52565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600460006003600160038054905061130791906119b8565b8154811061131857611317611b52565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600380548061139357611392611b23565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836113d991906119b8565b905092915050565b600081836113ef91906118d7565b905092915050565b6000611422600b54611414600a548561142990919063ffffffff16565b61143f90919063ffffffff16565b9050919050565b60008183611437919061195e565b905092915050565b6000818361144d919061192d565b905092915050565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114a591906118d7565b1080156114bb5750600d546114b983610622565b115b9050919050565b6000813590506114d181611bde565b92915050565b6000815190506114e681611bde565b92915050565b6000815190506114fb81611bf5565b92915050565b60008135905061151081611c0c565b92915050565b60008151905061152581611c0c565b92915050565b60006020828403121561154157611540611bb0565b5b600061154f848285016114c2565b91505092915050565b60006020828403121561156e5761156d611bb0565b5b600061157c848285016114d7565b91505092915050565b6000806040838503121561159c5761159b611bb0565b5b60006115aa858286016114c2565b92505060206115bb85828601611501565b9150509250929050565b6000602082840312156115db576115da611bb0565b5b60006115e9848285016114ec565b91505092915050565b60006020828403121561160857611607611bb0565b5b600061161684828501611501565b91505092915050565b60006020828403121561163557611634611bb0565b5b600061164384828501611516565b91505092915050565b6000806040838503121561166357611662611bb0565b5b600061167185828601611501565b925050602061168285828601611501565b9150509250929050565b600061169883836116a4565b60208301905092915050565b6116ad816119ec565b82525050565b6116bc816119ec565b82525050565b60006116cd8261189d565b6116d781856118b5565b93506116e28361188d565b8060005b838110156117135781516116fa888261168c565b9750611705836118a8565b9250506001810190506116e6565b5085935050505092915050565b61172981611a34565b82525050565b61173881611a46565b82525050565b600061174b6017836118c6565b915061175682611bb5565b602082019050919050565b61176a81611a2a565b82525050565b600060208201905061178560008301846116b3565b92915050565b60006040820190506117a060008301856116b3565b6117ad6020830184611761565b9392505050565b60006020820190506117c96000830184611720565b92915050565b60006080820190506117e4600083018761172f565b81810360208301526117f681866116c2565b905061180560408301856116b3565b6118126060830184611761565b95945050505050565b600060208201905081810360008301526118348161173e565b9050919050565b60006020820190506118506000830184611761565b92915050565b600060608201905061186b6000830186611761565b6118786020830185611761565b6118856040830184611761565b949350505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006118e282611a2a565b91506118ed83611a2a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561192257611921611ac5565b5b828201905092915050565b600061193882611a2a565b915061194383611a2a565b92508261195357611952611af4565b5b828204905092915050565b600061196982611a2a565b915061197483611a2a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119ad576119ac611ac5565b5b828202905092915050565b60006119c382611a2a565b91506119ce83611a2a565b9250828210156119e1576119e0611ac5565b5b828203905092915050565b60006119f782611a0a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611a3f82611a58565b9050919050565b6000611a5182611a2a565b9050919050565b6000611a6382611a6a565b9050919050565b6000611a7582611a0a565b9050919050565b6000611a8782611a2a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611aba57611ab9611ac5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b7f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000600082015250565b611be7816119ec565b8114611bf257600080fd5b50565b611bfe816119fe565b8114611c0957600080fd5b50565b611c1581611a2a565b8114611c2057600080fd5b5056fea2646970667358221220e4db651e254537d446ad412eaa6b1266c91e306fe21417ef98a2381c1ba0268264736f6c634300080700330000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000004d224452801aced8b2f0aebe155379bb5d5943810000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000719183de756077eea0b389abea18f64b5caa1727000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf5

Deployed Bytecode

0x6080604052600436106103395760003560e01c806383ad7994116101ab578063bf56b371116100f7578063dd62ed3e11610095578063ede1588f1161006f578063ede1588f14610c33578063f7c7220514610c5e578063f887ea4014610c87578063fabe628314610cb257610340565b8063dd62ed3e14610ba2578063e5d8510814610bdf578063e66b1d1e14610c0a57610340565b8063cb29813c116100d1578063cb29813c14610afa578063cc6badb314610b23578063d4fb9a0114610b4e578063d920334e14610b7957610340565b8063bf56b37114610a79578063c45a015514610aa4578063ca987b0e14610acf57610340565b8063a3e6761011610164578063a9059cbb1161013e578063a9059cbb146109bf578063b515566a146109fc578063bad3ea6a14610a25578063bb542ef014610a5057610340565b8063a3e676101461092c578063a457c2d714610957578063a8aa1b311461099457610340565b806383ad79941461081a5780638b42507f146108455780638ea5220f146108825780639502c426146108ad57806395d89b41146108d8578063a3a2e89e1461090357610340565b80633f4218e011610285578063704ce43e116102235780637c0ff205116101fd5780637c0ff205146107705780637d1db4a51461079b5780637db1342c146107c6578063807c2d9c146107ef57610340565b8063704ce43e146106dd57806370a0823114610708578063774b58471461074557610340565b806344de2e4c1161025f57806344de2e4c146106455780634a74bb021461067057806366b5d8821461069b5780636827e764146106b257610340565b80633f4218e0146105a25780634355855a146105df57806343d49dda1461061c57610340565b806323b872dd116102f25780632d48e896116102cc5780632d48e896146104e8578063313ce56714610511578063395093511461053c5780633dab52691461057957610340565b806323b872dd14610457578063273123b7146104945780632b112e49146104bd57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b57806318160ddd146103d85780631df4ccfc146104035780631f53ac021461042e57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cdb565b6040516103679190614055565b60405180910390f35b34801561037c57600080fd5b50610385610ce1565b6040516103929190613f13565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd919061394e565b610d73565b6040516103cf9190613ec2565b60405180910390f35b3480156103e457600080fd5b506103ed610d96565b6040516103fa9190614055565b60405180910390f35b34801561040f57600080fd5b50610418610da0565b6040516104259190614055565b60405180910390f35b34801561043a57600080fd5b506104556004803603810190610450919061384e565b610da6565b005b34801561046357600080fd5b5061047e600480360381019061047991906138bb565b610e81565b60405161048b9190613ec2565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906137f4565b610eb1565b005b3480156104c957600080fd5b506104d2610fa3565b6040516104df9190614055565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613a71565b611025565b005b34801561051d57600080fd5b5061052661114d565b60405161053391906140f3565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061394e565b611156565b6040516105709190613ec2565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190613a04565b611200565b005b3480156105ae57600080fd5b506105c960048036038101906105c491906137f4565b6112bc565b6040516105d69190613ec2565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906137f4565b6112dc565b6040516106139190613ec2565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906137f4565b6112fc565b005b34801561065157600080fd5b5061065a6113d7565b6040516106679190613ec2565b60405180910390f35b34801561067c57600080fd5b506106856113ea565b6040516106929190613ec2565b60405180910390f35b3480156106a757600080fd5b506106b06113fd565b005b3480156106be57600080fd5b506106c76114d8565b6040516106d49190614055565b60405180910390f35b3480156106e957600080fd5b506106f26114de565b6040516106ff9190614055565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a91906137f4565b6114e4565b60405161073c9190614055565b60405180910390f35b34801561075157600080fd5b5061075a61152d565b6040516107679190613e1d565b60405180910390f35b34801561077c57600080fd5b50610785611553565b6040516107929190614055565b60405180910390f35b3480156107a757600080fd5b506107b0611559565b6040516107bd9190614055565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613a44565b61155f565b005b3480156107fb57600080fd5b50610804611600565b6040516108119190614055565b60405180910390f35b34801561082657600080fd5b5061082f611606565b60405161083c9190614055565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906137f4565b61160c565b6040516108799190613ec2565b60405180910390f35b34801561088e57600080fd5b5061089761162c565b6040516108a49190613e1d565b60405180910390f35b3480156108b957600080fd5b506108c2611652565b6040516108cf9190614055565b60405180910390f35b3480156108e457600080fd5b506108ed611658565b6040516108fa9190613f13565b60405180910390f35b34801561090f57600080fd5b5061092a6004803603810190610925919061390e565b6116ea565b005b34801561093857600080fd5b506109416117dc565b60405161094e9190613e02565b60405180910390f35b34801561096357600080fd5b5061097e6004803603810190610979919061394e565b611802565b60405161098b9190613ec2565b60405180910390f35b3480156109a057600080fd5b506109a96118ec565b6040516109b69190613e02565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e1919061394e565b611912565b6040516109f39190613ec2565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e919061398e565b611936565b005b348015610a3157600080fd5b50610a3a611a62565b604051610a479190613edd565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061384e565b611a86565b005b348015610a8557600080fd5b50610a8e611b61565b604051610a9b9190614055565b60405180910390f35b348015610ab057600080fd5b50610ab9611b67565b604051610ac69190613e02565b60405180910390f35b348015610adb57600080fd5b50610ae4611b8d565b604051610af19190614055565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190613b04565b611b93565b005b348015610b2f57600080fd5b50610b38611d72565b604051610b459190614055565b60405180910390f35b348015610b5a57600080fd5b50610b63611d78565b604051610b709190613ec2565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190613a44565b611d8b565b005b348015610bae57600080fd5b50610bc96004803603810190610bc4919061387b565b611e2c565b604051610bd69190614055565b60405180910390f35b348015610beb57600080fd5b50610bf4611eb3565b604051610c019190614055565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c91906139d7565b611eb9565b005b348015610c3f57600080fd5b50610c48611f6d565b604051610c559190613e02565b60405180910390f35b348015610c6a57600080fd5b50610c856004803603810190610c8091906137f4565b611f93565b005b348015610c9357600080fd5b50610c9c61206e565b604051610ca99190613ef8565b60405180910390f35b348015610cbe57600080fd5b50610cd96004803603810190610cd4919061390e565b612094565b005b60205481565b606060058054610cf0906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1c906143bd565b8015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b600080610d7e61219c565b9050610d8b8185856121a4565b600191505092915050565b6000600454905090565b60165481565b610dae61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613fb5565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610e8c61219c565b9050610e9985828561236f565b610ea48585856123fb565b5060019150509392505050565b610eb961219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613fb5565b60405180910390fd5b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611020610fd3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114e4565b611012611001600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114e4565b600454612cad90919063ffffffff16565b612cad90919063ffffffff16565b905090565b61102d61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613fb5565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016111179291906140ca565b600060405180830381600087803b15801561113157600080fd5b505af1158015611145573d6000803e3d6000fd5b505050505050565b60006009905090565b60008061116161219c565b90506111f5818585600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111f091906141b4565b6121a4565b600191505092915050565b61120861219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613fb5565b60405180910390fd5b81601c60156101000a81548160ff021916908315150217905550806020819055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b61130461219c565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90613f95565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60149054906101000a900460ff1681565b601c60159054906101000a900460ff1681565b61140561219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90613fb5565b60405180910390fd5b6000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60115481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601e5481565b61156761219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613fb5565b60405180910390fd5b80601f8190555050565b601f5481565b60105481565b600c6020528060005260406000206000915054906101000a900460ff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b606060068054611667906143bd565b80601f0160208091040260200160405190810160405280929190818152602001828054611693906143bd565b80156116e05780601f106116b5576101008083540402835291602001916116e0565b820191906000526020600020905b8154815290600101906020018083116116c357829003601f168201915b5050505050905090565b6116f261219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613fb5565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061180d61219c565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90614035565b60405180910390fd5b6118e082868684036121a4565b60019250505092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061191d61219c565b905061192a8185856123fb565b50600191505092915050565b61193e61219c565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c490613f95565b60405180910390fd5b60005b8151811015611a5e576001601d60008484815181106119f2576119f16144f6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a5690614420565b9150506119d0565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a8e61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490613fb5565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611b9b61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613fb5565b60405180910390fd5b856010819055508360118190555081601281905550846013819055508260148190555080601581905550611c93600f54611c85601054611c7760115460125461218690919063ffffffff16565b61218690919063ffffffff16565b61218690919063ffffffff16565b601681905550611cd8600f54611cca601354611cbc60145460155461218690919063ffffffff16565b61218690919063ffffffff16565b61218690919063ffffffff16565b601781905550600c6016541115611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90613fd5565b60405180910390fd5b60116017541115611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190613fd5565b60405180910390fd5b505050505050565b60135481565b601c60169054906101000a900460ff1681565b611d9361219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990613fb5565b60405180910390fd5b80601e8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b611ec161219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790613fb5565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f9b61219c565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613f95565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61209c61219c565b73ffffffffffffffffffffffffffffffffffffffff16601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212290613fb5565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000818361219491906141b4565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90614015565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613f35565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123629190614055565b60405180910390a3505050565b600061237b8484611e2c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123f557818110156123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de90613f55565b60405180910390fd5b6123f484848484036121a4565b5b50505050565b6000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124a15750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124aa57600080fd5b601c60149054906101000a900460ff16156124d1576124ca848484612cc3565b9050612ca6565b601e548211158061252b5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256190613ff5565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125d05750600a60149054906101000a900460ff165b1561266c57601f5461262a83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b111561266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290613f75565b60405180910390fd5b5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126d75750601c60149054906101000a900460ff16155b80156126ef5750601c60159054906101000a900460ff165b801561273c5750602054600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561274a57612749612e96565b5b6127d3826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af9092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128bc5750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6128c657826128d2565b6128d1858585613504565b5b905061292681600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a54929190613e38565b600060405180830381600087803b158015612a6e57600080fd5b505af1925050508015612a7f575060015b612a8857612a89565b5b5b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bab5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612b75929190613e38565b600060405180830381600087803b158015612b8f57600080fd5b505af1925050508015612ba0575060015b612ba957612baa565b5b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796001546040518263ffffffff1660e01b8152600401612c069190614055565b600060405180830381600087803b158015612c2057600080fd5b505af1925050508015612c31575060015b612c3a57612c3b565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c989190614055565b60405180910390a360019150505b9392505050565b60008183612cbb9190614295565b905092915050565b6000612d4e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134af9092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612de382600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e839190614055565b60405180910390a3600190509392505050565b6001601c60146101000a81548160ff0219169083151502179055506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000612f336002612f25601654612f17601154876136ac90919063ffffffff16565b6136c290919063ffffffff16565b6136c290919063ffffffff16565b90506000612f4a8284612cad90919063ffffffff16565b90506000600267ffffffffffffffff811115612f6957612f68614525565b5b604051908082528060200260200182016040528015612f975781602001602082028036833780820191505090505b5090503081600081518110612faf57612fae6144f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561305157600080fd5b505afa158015613065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130899190613821565b8160018151811061309d5761309c6144f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161313b959493929190614070565b600060405180830381600087803b15801561315557600080fd5b505af1158015613169573d6000803e3d6000fd5b505050506000479050600061319d60165461318f601254856136ac90919063ffffffff16565b6136c290919063ffffffff16565b905060006131ca6016546131bc600f54866136ac90919063ffffffff16565b6136c290919063ffffffff16565b9050600061320a60026131fc6016546131ee601154896136ac90919063ffffffff16565b6136c290919063ffffffff16565b6136c290919063ffffffff16565b905060006132458261323785613229888a612cad90919063ffffffff16565b612cad90919063ffffffff16565b612cad90919063ffffffff16565b9050600085111561333d57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c50f89d846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132ba57600080fd5b505af11580156132ce573d6000803e3d6000fd5b5050505050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561333b573d6000803e3d6000fd5b505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133a557600080fd5b505af1935050505080156133b7575060015b6133c0576133c1565b5b600088111561348957601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b60008061dead426040518863ffffffff1660e01b815260040161343396959493929190613e61565b6060604051808303818588803b15801561344c57600080fd5b505af1158015613460573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134859190613ab1565b5050505b5050505050505050506000601c60146101000a81548160ff021916908315150217905550565b60008383111582906134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ee9190613f13565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461356457601654613568565b6017545b90506000613592606461358484876136ac90919063ffffffff16565b6136c290919063ffffffff16565b90506135e681600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136869190614055565b60405180910390a36136a18185612cad90919063ffffffff16565b925050509392505050565b600081836136ba919061423b565b905092915050565b600081836136d0919061420a565b905092915050565b60006136eb6136e684614133565b61410e565b9050808382526020820190508285602086028201111561370e5761370d614559565b5b60005b8581101561373e57816137248882613748565b845260208401935060208301925050600181019050613711565b5050509392505050565b60008135905061375781614782565b92915050565b60008151905061376c81614782565b92915050565b60008135905061378181614799565b92915050565b600082601f83011261379c5761379b614554565b5b81356137ac8482602086016136d8565b91505092915050565b6000813590506137c4816147b0565b92915050565b6000813590506137d9816147c7565b92915050565b6000815190506137ee816147c7565b92915050565b60006020828403121561380a57613809614563565b5b600061381884828501613748565b91505092915050565b60006020828403121561383757613836614563565b5b60006138458482850161375d565b91505092915050565b60006020828403121561386457613863614563565b5b600061387284828501613772565b91505092915050565b6000806040838503121561389257613891614563565b5b60006138a085828601613748565b92505060206138b185828601613748565b9150509250929050565b6000806000606084860312156138d4576138d3614563565b5b60006138e286828701613748565b93505060206138f386828701613748565b9250506040613904868287016137ca565b9150509250925092565b6000806040838503121561392557613924614563565b5b600061393385828601613748565b9250506020613944858286016137b5565b9150509250929050565b6000806040838503121561396557613964614563565b5b600061397385828601613748565b9250506020613984858286016137ca565b9150509250929050565b6000602082840312156139a4576139a3614563565b5b600082013567ffffffffffffffff8111156139c2576139c161455e565b5b6139ce84828501613787565b91505092915050565b6000602082840312156139ed576139ec614563565b5b60006139fb848285016137b5565b91505092915050565b60008060408385031215613a1b57613a1a614563565b5b6000613a29858286016137b5565b9250506020613a3a858286016137ca565b9150509250929050565b600060208284031215613a5a57613a59614563565b5b6000613a68848285016137ca565b91505092915050565b60008060408385031215613a8857613a87614563565b5b6000613a96858286016137ca565b9250506020613aa7858286016137ca565b9150509250929050565b600080600060608486031215613aca57613ac9614563565b5b6000613ad8868287016137df565b9350506020613ae9868287016137df565b9250506040613afa868287016137df565b9150509250925092565b60008060008060008060c08789031215613b2157613b20614563565b5b6000613b2f89828a016137ca565b9650506020613b4089828a016137ca565b9550506040613b5189828a016137ca565b9450506060613b6289828a016137ca565b9350506080613b7389828a016137ca565b92505060a0613b8489828a016137ca565b9150509295509295509295565b6000613b9d8383613bb8565b60208301905092915050565b613bb2816142db565b82525050565b613bc1816142c9565b82525050565b613bd0816142c9565b82525050565b6000613be18261416f565b613beb8185614192565b9350613bf68361415f565b8060005b83811015613c27578151613c0e8882613b91565b9750613c1983614185565b925050600181019050613bfa565b5085935050505092915050565b613c3d816142ed565b82525050565b613c4c81614330565b82525050565b613c5b81614342565b82525050565b613c6a81614354565b82525050565b6000613c7b8261417a565b613c8581856141a3565b9350613c9581856020860161438a565b613c9e81614568565b840191505092915050565b6000613cb66022836141a3565b9150613cc182614579565b604082019050919050565b6000613cd9601d836141a3565b9150613ce4826145c8565b602082019050919050565b6000613cfc6006836141a3565b9150613d07826145f1565b602082019050919050565b6000613d1f6023836141a3565b9150613d2a8261461a565b604082019050919050565b6000613d426020836141a3565b9150613d4d82614669565b602082019050919050565b6000613d65600c836141a3565b9150613d7082614692565b602082019050919050565b6000613d886002836141a3565b9150613d93826146bb565b602082019050919050565b6000613dab6024836141a3565b9150613db6826146e4565b604082019050919050565b6000613dce6025836141a3565b9150613dd982614733565b604082019050919050565b613ded81614319565b82525050565b613dfc81614323565b82525050565b6000602082019050613e176000830184613bc7565b92915050565b6000602082019050613e326000830184613ba9565b92915050565b6000604082019050613e4d6000830185613bc7565b613e5a6020830184613de4565b9392505050565b600060c082019050613e766000830189613bc7565b613e836020830188613de4565b613e906040830187613c61565b613e9d6060830186613c61565b613eaa6080830185613bc7565b613eb760a0830184613de4565b979650505050505050565b6000602082019050613ed76000830184613c34565b92915050565b6000602082019050613ef26000830184613c43565b92915050565b6000602082019050613f0d6000830184613c52565b92915050565b60006020820190508181036000830152613f2d8184613c70565b905092915050565b60006020820190508181036000830152613f4e81613ca9565b9050919050565b60006020820190508181036000830152613f6e81613ccc565b9050919050565b60006020820190508181036000830152613f8e81613cef565b9050919050565b60006020820190508181036000830152613fae81613d12565b9050919050565b60006020820190508181036000830152613fce81613d35565b9050919050565b60006020820190508181036000830152613fee81613d58565b9050919050565b6000602082019050818103600083015261400e81613d7b565b9050919050565b6000602082019050818103600083015261402e81613d9e565b9050919050565b6000602082019050818103600083015261404e81613dc1565b9050919050565b600060208201905061406a6000830184613de4565b92915050565b600060a0820190506140856000830188613de4565b6140926020830187613c61565b81810360408301526140a48186613bd6565b90506140b36060830185613bc7565b6140c06080830184613de4565b9695505050505050565b60006040820190506140df6000830185613de4565b6140ec6020830184613de4565b9392505050565b60006020820190506141086000830184613df3565b92915050565b6000614118614129565b905061412482826143ef565b919050565b6000604051905090565b600067ffffffffffffffff82111561414e5761414d614525565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006141bf82614319565b91506141ca83614319565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ff576141fe614469565b5b828201905092915050565b600061421582614319565b915061422083614319565b9250826142305761422f614498565b5b828204905092915050565b600061424682614319565b915061425183614319565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561428a57614289614469565b5b828202905092915050565b60006142a082614319565b91506142ab83614319565b9250828210156142be576142bd614469565b5b828203905092915050565b60006142d4826142f9565b9050919050565b60006142e6826142f9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061433b82614366565b9050919050565b600061434d82614366565b9050919050565b600061435f82614319565b9050919050565b600061437182614378565b9050919050565b6000614383826142f9565b9050919050565b60005b838110156143a857808201518184015260208101905061438d565b838111156143b7576000848401525b50505050565b600060028204905060018216806143d557607f821691505b602082108114156143e9576143e86144c7565b5b50919050565b6143f882614568565b810181811067ffffffffffffffff8211171561441757614416614525565b5b80604052505050565b600061442b82614319565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561445e5761445d614469565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460008201527f6d696e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f2068696768206665650000000000000000000000000000000000000000600082015250565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61478b816142c9565b811461479657600080fd5b50565b6147a2816142db565b81146147ad57600080fd5b50565b6147b9816142ed565b81146147c457600080fd5b50565b6147d081614319565b81146147db57600080fd5b5056fea2646970667358221220d2897d4a7005ea79f64a5e2dcf06e2948f02f29eeb2d940542d60e9b76776b1464736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000004d224452801aced8b2f0aebe155379bb5d5943810000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000719183de756077eea0b389abea18f64b5caa1727000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf5

-----Decoded View---------------
Arg [0] : initialSupply (uint256): 1000000000000000000
Arg [1] : reflectionToken (address): 0x4d224452801ACEd8B2F0aebE155379bb5D594381
Arg [2] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [3] : initialHldAdmin (address): 0x719183De756077eea0b389aBea18F64B5CAa1727
Arg [4] : initialHldBurner (address): 0xf9859aB850A8cC66Ff33001798BaCa257b64bCf5

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [1] : 0000000000000000000000004d224452801aced8b2f0aebe155379bb5d594381
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 000000000000000000000000719183de756077eea0b389abea18f64b5caa1727
Arg [4] : 000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf5


Deployed Bytecode Sourcemap

21574:17510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23138:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28396:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30746:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29515:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22667:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27393:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31537:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28079:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28184:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27865:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29358:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32241:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27658:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22235:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22341:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25383:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22193:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22933:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26657:91;;;;;;;;;;;;;:::i;:::-;;22527:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22500:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29686:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22115:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22598:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23072:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26866:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23106:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22465:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22286:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22864:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22631:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28615:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27117:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22832:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32984:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22777:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30019:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25680:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21668:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27524:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22399:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22803:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22697:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25882:766;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22557:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22980:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26756:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30275:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22431:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26985:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22161:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25504:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22738:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27247:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23138:28;;;;:::o;28396:100::-;28450:13;28483:5;28476:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28396:100;:::o;30746:201::-;30829:4;30846:13;30862:12;:10;:12::i;:::-;30846:28;;30885:32;30894:5;30901:7;30910:6;30885:8;:32::i;:::-;30935:4;30928:11;;;30746:201;;;;:::o;29515:108::-;29576:7;29603:12;;29596:19;;29515:108;:::o;22667:23::-;;;;:::o;27393:123::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27495:12:::1;27475:9;;:33;;;;;;;;;;;;;;;;;;27393:123:::0;:::o;31537:295::-;31668:4;31685:15;31703:12;:10;:12::i;:::-;31685:30;;31726:38;31742:4;31748:7;31757:6;31726:15;:38::i;:::-;31775:27;31785:4;31791:2;31795:6;31775:9;:27::i;:::-;;31820:4;31813:11;;;31537:295;;;;;:::o;28079:90::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28156:5:::1;28141:4;:12;28146:6;28141:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;28079:90:::0;:::o;28184:142::-;28237:7;28264:54;28302:15;28312:4;;;;;;;;;;;28302:9;:15::i;:::-;28264:33;28281:15;28291:4;;;;;;;;;;;28281:9;:15::i;:::-;28264:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;28257:61;;28184:142;:::o;27865:206::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27978:19:::1;::::0;::::1;;;;;;;;:43;;;28022:12;28036:18;27978:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27865:206:::0;;:::o;29358:92::-;29416:5;29441:1;29434:8;;29358:92;:::o;32241:240::-;32329:4;32346:13;32362:12;:10;:12::i;:::-;32346:28;;32385:66;32394:5;32401:7;32440:10;32410:11;:18;32422:5;32410:18;;;;;;;;;;;;;;;:27;32429:7;32410:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;32385:8;:66::i;:::-;32469:4;32462:11;;;32241:240;;;;:::o;27658:199::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27792:14:::1;27767:21;;:39;;;;;;;;;;;;;;;;;;27833:16;27817:13;:32;;;;27658:199:::0;;:::o;22235:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;22341:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;25383:113::-;25146:12;:10;:12::i;:::-;25134:24;;:8;;;;;;;;;;;:24;;;25126:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25480:8:::1;25469;;:19;;;;;;;;;;;;;;;;;;25383:113:::0;:::o;22193:33::-;;;;;;;;;;;;;:::o;22933:40::-;;;;;;;;;;;;;:::o;26657:91::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26738:1:::1;26719:8;;:21;;;;;;;;;;;;;;;;;;26657:91::o:0;22527:21::-;;;;:::o;22500:20::-;;;;:::o;29686:127::-;29760:7;29787:9;:18;29797:7;29787:18;;;;;;;;;;;;;;;;29780:25;;29686:127;;;:::o;22115:39::-;;;;;;;;;;;;;:::o;22598:26::-;;;;:::o;23072:27::-;;;;:::o;26866:111::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26961:8:::1;26947:10;:22;;;;26866:111:::0;:::o;23106:25::-;;;;:::o;22465:28::-;;;;:::o;22286:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;22864:32::-;;;;;;;;;;;;;:::o;22631:27::-;;;;:::o;28615:104::-;28671:13;28704:7;28697:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28615:104;:::o;27117:122::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27225:6:::1;27203:11;:19;27215:6;27203:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27117:122:::0;;:::o;22832:25::-;;;;;;;;;;;;;:::o;32984:438::-;33077:4;33094:13;33110:12;:10;:12::i;:::-;33094:28;;33133:24;33160:11;:18;33172:5;33160:18;;;;;;;;;;;;;;;:27;33179:7;33160:27;;;;;;;;;;;;;;;;33133:54;;33226:15;33206:16;:35;;33198:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33319:60;33328:5;33335:7;33363:15;33344:16;:34;33319:8;:60::i;:::-;33410:4;33403:11;;;;32984:438;;;;:::o;22777:19::-;;;;;;;;;;;;;:::o;30019:193::-;30098:4;30115:13;30131:12;:10;:12::i;:::-;30115:28;;30154;30164:5;30171:2;30175:6;30154:9;:28::i;:::-;;30200:4;30193:11;;;30019:193;;;;:::o;25680:169::-;25146:12;:10;:12::i;:::-;25134:24;;:8;;;;;;;;;;;:24;;;25126:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25759:6:::1;25754:88;25775:5;:12;25771:1;:16;25754:88;;;25826:4;25809;:14;25814:5;25820:1;25814:8;;;;;;;;:::i;:::-;;;;;;;;25809:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25789:3;;;;;:::i;:::-;;;;25754:88;;;;25680:169:::0;:::o;21668:47::-;;;;;;;;;;;;:::o;27524:121::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27623:14:::1;27610:10;;:27;;;;;;;;;;;;;;;;;;27524:121:::0;:::o;22399:25::-;;;;:::o;22803:22::-;;;;;;;;;;;;;:::o;22697:32::-;;;;:::o;25882:766::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:20:::1;26111:13;:36;;;;26166:12;26158:5;:20;;;;26198:13;26189:6;:22;;;;26246:26;26224:19;:48;;;;26297:18;26283:11;:32;;;;26341:19;26326:12;:34;;;;26384:48;26425:6;;26384:36;26406:13;;26384:17;26395:5;;26384:6;;:10;;:17;;;;:::i;:::-;:21;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;26373:8;:59;;;;26463:66;26522:6;;26463:54;26497:19;;26463:29;26480:11;;26463:12;;:16;;:29;;;;:::i;:::-;:33;;:54;;;;:::i;:::-;:58;;:66;;;;:::i;:::-;26443:17;:86;;;;26562:2;26550:8;;:14;;26542:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;26621:2;26600:17;;:23;;26592:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25882:766:::0;;;;;;:::o;22557:34::-;;;;:::o;22980:32::-;;;;;;;;;;;;;:::o;26756:102::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26842:8:::1;26827:12;:23;;;;26756:102:::0;:::o;30275:151::-;30364:7;30391:11;:18;30403:5;30391:18;;;;;;;;;;;;;;;:27;30410:7;30391:27;;;;;;;;;;;;;;;;30384:34;;30275:151;;;;:::o;22431:25::-;;;;:::o;26985:120::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27089:8:::1;27072:14;;:25;;;;;;;;;;;;;;;;;;26985:120:::0;:::o;22161:23::-;;;;;;;;;;;;;:::o;25504:160::-;25146:12;:10;:12::i;:::-;25134:24;;:8;;;;;;;;;;;:24;;;25126:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25636:19:::1;25609:16;;:47;;;;;;;;;;;;;;;;;;25504:160:::0;:::o;22738:32::-;;;;;;;;;;;;;:::o;27247:136::-;25280:12;:10;:12::i;:::-;25266:26;;:10;;;;;;;;;;;:26;;;25258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27369:6:::1;27343:15;:23;27359:6;27343:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27247:136:::0;;:::o;7504:98::-;7562:7;7593:1;7589;:5;;;;:::i;:::-;7582:12;;7504:98;;;;:::o;4428:::-;4481:7;4508:10;4501:17;;4428:98;:::o;35892:380::-;36045:1;36028:19;;:5;:19;;;;36020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36126:1;36107:21;;:7;:21;;;;36099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36210:6;36180:11;:18;36192:5;36180:18;;;;;;;;;;;;;;;:27;36199:7;36180:27;;;;;;;;;;;;;;;:36;;;;36248:7;36232:32;;36241:5;36232:32;;;36257:6;36232:32;;;;;;:::i;:::-;;;;;;;;35892:380;;;:::o;36559:453::-;36694:24;36721:25;36731:5;36738:7;36721:9;:25::i;:::-;36694:52;;36781:17;36761:16;:37;36757:248;;36843:6;36823:16;:26;;36815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36927:51;36936:5;36943:7;36971:6;36952:16;:25;36927:8;:51::i;:::-;36757:248;36683:329;36559:453;;;:::o;33430:1393::-;33518:4;33554;:12;33559:6;33554:12;;;;;;;;;;;;;;;;;;;;;;;;;33553:13;:33;;;;;33571:4;:15;33576:9;33571:15;;;;;;;;;;;;;;;;;;;;;;;;;33570:16;33553:33;33545:42;;;;;;33603:16;;;;;;;;;;;33600:73;;;33629:41;33644:6;33652:9;33663:6;33629:14;:41::i;:::-;33622:48;;;;33600:73;33703:12;;33693:6;:22;;:49;;;;33719:15;:23;33735:6;33719:23;;;;;;;;;;;;;;;;;;;;;;;;;33693:49;33685:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33766:15;:26;33782:9;33766:26;;;;;;;;;;;;;;;;;;;;;;;;;33765:27;:45;;;;;33796:14;;;;;;;;;;;33765:45;33762:151;;;33880:10;;33844:32;33869:6;33844:9;:20;33854:9;33844:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;33836:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33762:151;33942:4;;;;;;;;;;;33928:18;;:10;:18;;;;:39;;;;;33951:16;;;;;;;;;;;33950:17;33928:39;:64;;;;;33971:21;;;;;;;;;;;33928:64;:109;;;;;34024:13;;33996:9;:24;34014:4;33996:24;;;;;;;;;;;;;;;;:41;;33928:109;33925:128;;;34040:10;:8;:10::i;:::-;33925:128;34085:53;34107:6;34085:53;;;;;;;;;;;;;;;;;:9;:17;34095:6;34085:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;34065:9;:17;34075:6;34065:17;;;;;;;;;;;;;;;:73;;;;34159:19;34182:11;:19;34194:6;34182:19;;;;;;;;;;;;;;;;;;;;;;;;;34181:20;:47;;;;;34206:11;:22;34218:9;34206:22;;;;;;;;;;;;;;;;;;;;;;;;;34205:23;34181:47;:93;;34268:6;34181:93;;;34231:34;34239:6;34247:9;34258:6;34231:7;:34::i;:::-;34181:93;34159:115;;34308:37;34333:11;34308:9;:20;34318:9;34308:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;34285:9;:20;34295:9;34285:20;;;;;;;;;;;;;;;:60;;;;34391:16;:24;34408:6;34391:24;;;;;;;;;;;;;;;;;;;;;;;;;34387:127;;34436:19;;;;;;;;;;:28;;;34465:6;34473:9;:17;34483:6;34473:17;;;;;;;;;;;;;;;;34436:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34432:71;;;;;;34387:127;34530:16;:27;34547:9;34530:27;;;;;;;;;;;;;;;;;;;;;;;;;34526:137;;34578:19;;;;;;;;;;:28;;;34607:9;34618;:20;34628:9;34618:20;;;;;;;;;;;;;;;;34578:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34574:77;;;;;;34526:137;34679:19;;;;;;;;;;:27;;;34707:14;;34679:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34675:59;;;;;;34770:9;34753:40;;34762:6;34753:40;;;34781:11;34753:40;;;;;;:::i;:::-;;;;;;;;34811:4;34804:11;;;33430:1393;;;;;;:::o;7885:98::-;7943:7;7974:1;7970;:5;;;;:::i;:::-;7963:12;;7885:98;;;;:::o;34835:330::-;34928:4;34965:53;34987:6;34965:53;;;;;;;;;;;;;;;;;:9;:17;34975:6;34965:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;34945:9;:17;34955:6;34945:17;;;;;;;;;;;;;;;:73;;;;35052:32;35077:6;35052:9;:20;35062:9;35052:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;35029:9;:20;35039:9;35029:20;;;;;;;;;;;;;;;:55;;;;35117:9;35100:35;;35109:6;35100:35;;;35128:6;35100:35;;;;;;:::i;:::-;;;;;;;;35153:4;35146:11;;34835:330;;;;;:::o;37467:1574::-;25024:4;25005:16;;:23;;;;;;;;;;;;;;;;;;37529::::1;37555:9;:24;37573:4;37555:24;;;;;;;;;;;;;;;;37529:50;;37590:23;37616:47;37661:1;37616:40;37647:8;;37616:26;37636:5;;37616:15;:19;;:26;;;;:::i;:::-;:30;;:40;;;;:::i;:::-;:44;;:47;;;;:::i;:::-;37590:73;;37674:20;37697:36;37717:15;37697;:19;;:36;;;;:::i;:::-;37674:59;;37746:21;37784:1;37770:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37746:40;;37815:4;37797;37802:1;37797:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;37841:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37831:4;37836:1;37831:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;37867:6;;;;;;;;;;;:57;;;37939:12;37966:1;37982:4;38009;38029:15;37867:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38068:17;38088:21;38068:41;;38120:18;38141:35;38167:8;;38141:21;38155:6;;38141:9;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;38120:56;;38187:18;38208:35;38234:8;;38208:21;38222:6;;38208:9;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;38187:56;;38256:26;38285:41;38324:1;38285:34;38310:8;;38285:20;38299:5;;38285:9;:13;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;38256:70;;38337:27;38367:65;38413:18;38367:41;38397:10;38367:25;38381:10;38367:9;:13;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;:45;;:65;;;;:::i;:::-;38337:95;;38462:1;38450:9;:13;38447:155;;;38487:16;;;;;;;;;;;38479:34;;;38521:10;38479:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;38560:9;;;;;;;;;;;:18;;:30;38579:10;38560:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38447:155;38626:19;::::0;::::1;;;;;;;;:27;;;38661:19;38626:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;38622:73;;;;;;38728:1;38710:15;:19;38707:315;;;38745:6;;;;;;;;;;;:22;;;38775:18;38821:4;38845:15;38879:1;38899::::0;38919:42:::1;38980:15;38745:265;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38707:315;37508:1533;;;;;;;;;25070:5:::0;25051:16;;:24;;;;;;;;;;;;;;;;;;37467:1574::o;9783:240::-;9903:7;9961:1;9956;:6;;9964:12;9948:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10003:1;9999;:5;9992:12;;9783:240;;;;;:::o;37020:439::-;37106:7;37136:21;37168:9;37160:17;;:4;;;;;;;;;;;:17;;;:48;;37200:8;;37160:48;;;37180:17;;37160:48;37136:72;;37219:17;37239:34;37269:3;37239:25;37250:13;37239:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;37219:54;;37313:39;37342:9;37313;:24;37331:4;37313:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;37286:9;:24;37304:4;37286:24;;;;;;;;;;;;;;;:66;;;;37393:4;37368:42;;37377:6;37368:42;;;37400:9;37368:42;;;;;;:::i;:::-;;;;;;;;37430:21;37441:9;37430:6;:10;;:21;;;;:::i;:::-;37423:28;;;;37020:439;;;;;:::o;8242:98::-;8300:7;8331:1;8327;:5;;;;:::i;:::-;8320:12;;8242:98;;;;:::o;8641:::-;8699:7;8730:1;8726;:5;;;;:::i;:::-;8719:12;;8641:98;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1046:155::-;1100:5;1138:6;1125:20;1116:29;;1154:41;1189:5;1154:41;:::i;:::-;1046:155;;;;:::o;1224:370::-;1295:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:122;;1352:79;;:::i;:::-;1311:122;1469:6;1456:20;1494:94;1584:3;1576:6;1569:4;1561:6;1557:17;1494:94;:::i;:::-;1485:103;;1301:293;1224:370;;;;:::o;1600:133::-;1643:5;1681:6;1668:20;1659:29;;1697:30;1721:5;1697:30;:::i;:::-;1600:133;;;;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:143::-;1941:5;1972:6;1966:13;1957:22;;1988:33;2015:5;1988:33;:::i;:::-;1884:143;;;;:::o;2033:329::-;2092:6;2141:2;2129:9;2120:7;2116:23;2112:32;2109:119;;;2147:79;;:::i;:::-;2109:119;2267:1;2292:53;2337:7;2328:6;2317:9;2313:22;2292:53;:::i;:::-;2282:63;;2238:117;2033:329;;;;:::o;2368:351::-;2438:6;2487:2;2475:9;2466:7;2462:23;2458:32;2455:119;;;2493:79;;:::i;:::-;2455:119;2613:1;2638:64;2694:7;2685:6;2674:9;2670:22;2638:64;:::i;:::-;2628:74;;2584:128;2368:351;;;;:::o;2725:345::-;2792:6;2841:2;2829:9;2820:7;2816:23;2812:32;2809:119;;;2847:79;;:::i;:::-;2809:119;2967:1;2992:61;3045:7;3036:6;3025:9;3021:22;2992:61;:::i;:::-;2982:71;;2938:125;2725:345;;;;:::o;3076:474::-;3144:6;3152;3201:2;3189:9;3180:7;3176:23;3172:32;3169:119;;;3207:79;;:::i;:::-;3169:119;3327:1;3352:53;3397:7;3388:6;3377:9;3373:22;3352:53;:::i;:::-;3342:63;;3298:117;3454:2;3480:53;3525:7;3516:6;3505:9;3501:22;3480:53;:::i;:::-;3470:63;;3425:118;3076:474;;;;;:::o;3556:619::-;3633:6;3641;3649;3698:2;3686:9;3677:7;3673:23;3669:32;3666:119;;;3704:79;;:::i;:::-;3666:119;3824:1;3849:53;3894:7;3885:6;3874:9;3870:22;3849:53;:::i;:::-;3839:63;;3795:117;3951:2;3977:53;4022:7;4013:6;4002:9;3998:22;3977:53;:::i;:::-;3967:63;;3922:118;4079:2;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4050:118;3556:619;;;;;:::o;4181:468::-;4246:6;4254;4303:2;4291:9;4282:7;4278:23;4274:32;4271:119;;;4309:79;;:::i;:::-;4271:119;4429:1;4454:53;4499:7;4490:6;4479:9;4475:22;4454:53;:::i;:::-;4444:63;;4400:117;4556:2;4582:50;4624:7;4615:6;4604:9;4600:22;4582:50;:::i;:::-;4572:60;;4527:115;4181:468;;;;;:::o;4655:474::-;4723:6;4731;4780:2;4768:9;4759:7;4755:23;4751:32;4748:119;;;4786:79;;:::i;:::-;4748:119;4906:1;4931:53;4976:7;4967:6;4956:9;4952:22;4931:53;:::i;:::-;4921:63;;4877:117;5033:2;5059:53;5104:7;5095:6;5084:9;5080:22;5059:53;:::i;:::-;5049:63;;5004:118;4655:474;;;;;:::o;5135:539::-;5219:6;5268:2;5256:9;5247:7;5243:23;5239:32;5236:119;;;5274:79;;:::i;:::-;5236:119;5422:1;5411:9;5407:17;5394:31;5452:18;5444:6;5441:30;5438:117;;;5474:79;;:::i;:::-;5438:117;5579:78;5649:7;5640:6;5629:9;5625:22;5579:78;:::i;:::-;5569:88;;5365:302;5135:539;;;;:::o;5680:323::-;5736:6;5785:2;5773:9;5764:7;5760:23;5756:32;5753:119;;;5791:79;;:::i;:::-;5753:119;5911:1;5936:50;5978:7;5969:6;5958:9;5954:22;5936:50;:::i;:::-;5926:60;;5882:114;5680:323;;;;:::o;6009:468::-;6074:6;6082;6131:2;6119:9;6110:7;6106:23;6102:32;6099:119;;;6137:79;;:::i;:::-;6099:119;6257:1;6282:50;6324:7;6315:6;6304:9;6300:22;6282:50;:::i;:::-;6272:60;;6228:114;6381:2;6407:53;6452:7;6443:6;6432:9;6428:22;6407:53;:::i;:::-;6397:63;;6352:118;6009:468;;;;;:::o;6483:329::-;6542:6;6591:2;6579:9;6570:7;6566:23;6562:32;6559:119;;;6597:79;;:::i;:::-;6559:119;6717:1;6742:53;6787:7;6778:6;6767:9;6763:22;6742:53;:::i;:::-;6732:63;;6688:117;6483:329;;;;:::o;6818:474::-;6886:6;6894;6943:2;6931:9;6922:7;6918:23;6914:32;6911:119;;;6949:79;;:::i;:::-;6911:119;7069:1;7094:53;7139:7;7130:6;7119:9;7115:22;7094:53;:::i;:::-;7084:63;;7040:117;7196:2;7222:53;7267:7;7258:6;7247:9;7243:22;7222:53;:::i;:::-;7212:63;;7167:118;6818:474;;;;;:::o;7298:663::-;7386:6;7394;7402;7451:2;7439:9;7430:7;7426:23;7422:32;7419:119;;;7457:79;;:::i;:::-;7419:119;7577:1;7602:64;7658:7;7649:6;7638:9;7634:22;7602:64;:::i;:::-;7592:74;;7548:128;7715:2;7741:64;7797:7;7788:6;7777:9;7773:22;7741:64;:::i;:::-;7731:74;;7686:129;7854:2;7880:64;7936:7;7927:6;7916:9;7912:22;7880:64;:::i;:::-;7870:74;;7825:129;7298:663;;;;;:::o;7967:1057::-;8071:6;8079;8087;8095;8103;8111;8160:3;8148:9;8139:7;8135:23;8131:33;8128:120;;;8167:79;;:::i;:::-;8128:120;8287:1;8312:53;8357:7;8348:6;8337:9;8333:22;8312:53;:::i;:::-;8302:63;;8258:117;8414:2;8440:53;8485:7;8476:6;8465:9;8461:22;8440:53;:::i;:::-;8430:63;;8385:118;8542:2;8568:53;8613:7;8604:6;8593:9;8589:22;8568:53;:::i;:::-;8558:63;;8513:118;8670:2;8696:53;8741:7;8732:6;8721:9;8717:22;8696:53;:::i;:::-;8686:63;;8641:118;8798:3;8825:53;8870:7;8861:6;8850:9;8846:22;8825:53;:::i;:::-;8815:63;;8769:119;8927:3;8954:53;8999:7;8990:6;8979:9;8975:22;8954:53;:::i;:::-;8944:63;;8898:119;7967:1057;;;;;;;;:::o;9030:179::-;9099:10;9120:46;9162:3;9154:6;9120:46;:::i;:::-;9198:4;9193:3;9189:14;9175:28;;9030:179;;;;:::o;9215:142::-;9318:32;9344:5;9318:32;:::i;:::-;9313:3;9306:45;9215:142;;:::o;9363:108::-;9440:24;9458:5;9440:24;:::i;:::-;9435:3;9428:37;9363:108;;:::o;9477:118::-;9564:24;9582:5;9564:24;:::i;:::-;9559:3;9552:37;9477:118;;:::o;9631:732::-;9750:3;9779:54;9827:5;9779:54;:::i;:::-;9849:86;9928:6;9923:3;9849:86;:::i;:::-;9842:93;;9959:56;10009:5;9959:56;:::i;:::-;10038:7;10069:1;10054:284;10079:6;10076:1;10073:13;10054:284;;;10155:6;10149:13;10182:63;10241:3;10226:13;10182:63;:::i;:::-;10175:70;;10268:60;10321:6;10268:60;:::i;:::-;10258:70;;10114:224;10101:1;10098;10094:9;10089:14;;10054:284;;;10058:14;10354:3;10347:10;;9755:608;;;9631:732;;;;:::o;10369:109::-;10450:21;10465:5;10450:21;:::i;:::-;10445:3;10438:34;10369:109;;:::o;10484:187::-;10599:65;10658:5;10599:65;:::i;:::-;10594:3;10587:78;10484:187;;:::o;10677:183::-;10790:63;10847:5;10790:63;:::i;:::-;10785:3;10778:76;10677:183;;:::o;10866:147::-;10961:45;11000:5;10961:45;:::i;:::-;10956:3;10949:58;10866:147;;:::o;11019:364::-;11107:3;11135:39;11168:5;11135:39;:::i;:::-;11190:71;11254:6;11249:3;11190:71;:::i;:::-;11183:78;;11270:52;11315:6;11310:3;11303:4;11296:5;11292:16;11270:52;:::i;:::-;11347:29;11369:6;11347:29;:::i;:::-;11342:3;11338:39;11331:46;;11111:272;11019:364;;;;:::o;11389:366::-;11531:3;11552:67;11616:2;11611:3;11552:67;:::i;:::-;11545:74;;11628:93;11717:3;11628:93;:::i;:::-;11746:2;11741:3;11737:12;11730:19;;11389:366;;;:::o;11761:::-;11903:3;11924:67;11988:2;11983:3;11924:67;:::i;:::-;11917:74;;12000:93;12089:3;12000:93;:::i;:::-;12118:2;12113:3;12109:12;12102:19;;11761:366;;;:::o;12133:365::-;12275:3;12296:66;12360:1;12355:3;12296:66;:::i;:::-;12289:73;;12371:93;12460:3;12371:93;:::i;:::-;12489:2;12484:3;12480:12;12473:19;;12133:365;;;:::o;12504:366::-;12646:3;12667:67;12731:2;12726:3;12667:67;:::i;:::-;12660:74;;12743:93;12832:3;12743:93;:::i;:::-;12861:2;12856:3;12852:12;12845:19;;12504:366;;;:::o;12876:::-;13018:3;13039:67;13103:2;13098:3;13039:67;:::i;:::-;13032:74;;13115:93;13204:3;13115:93;:::i;:::-;13233:2;13228:3;13224:12;13217:19;;12876:366;;;:::o;13248:::-;13390:3;13411:67;13475:2;13470:3;13411:67;:::i;:::-;13404:74;;13487:93;13576:3;13487:93;:::i;:::-;13605:2;13600:3;13596:12;13589:19;;13248:366;;;:::o;13620:365::-;13762:3;13783:66;13847:1;13842:3;13783:66;:::i;:::-;13776:73;;13858:93;13947:3;13858:93;:::i;:::-;13976:2;13971:3;13967:12;13960:19;;13620:365;;;:::o;13991:366::-;14133:3;14154:67;14218:2;14213:3;14154:67;:::i;:::-;14147:74;;14230:93;14319:3;14230:93;:::i;:::-;14348:2;14343:3;14339:12;14332:19;;13991:366;;;:::o;14363:::-;14505:3;14526:67;14590:2;14585:3;14526:67;:::i;:::-;14519:74;;14602:93;14691:3;14602:93;:::i;:::-;14720:2;14715:3;14711:12;14704:19;;14363:366;;;:::o;14735:118::-;14822:24;14840:5;14822:24;:::i;:::-;14817:3;14810:37;14735:118;;:::o;14859:112::-;14942:22;14958:5;14942:22;:::i;:::-;14937:3;14930:35;14859:112;;:::o;14977:222::-;15070:4;15108:2;15097:9;15093:18;15085:26;;15121:71;15189:1;15178:9;15174:17;15165:6;15121:71;:::i;:::-;14977:222;;;;:::o;15205:254::-;15314:4;15352:2;15341:9;15337:18;15329:26;;15365:87;15449:1;15438:9;15434:17;15425:6;15365:87;:::i;:::-;15205:254;;;;:::o;15465:332::-;15586:4;15624:2;15613:9;15609:18;15601:26;;15637:71;15705:1;15694:9;15690:17;15681:6;15637:71;:::i;:::-;15718:72;15786:2;15775:9;15771:18;15762:6;15718:72;:::i;:::-;15465:332;;;;;:::o;15803:807::-;16052:4;16090:3;16079:9;16075:19;16067:27;;16104:71;16172:1;16161:9;16157:17;16148:6;16104:71;:::i;:::-;16185:72;16253:2;16242:9;16238:18;16229:6;16185:72;:::i;:::-;16267:80;16343:2;16332:9;16328:18;16319:6;16267:80;:::i;:::-;16357;16433:2;16422:9;16418:18;16409:6;16357:80;:::i;:::-;16447:73;16515:3;16504:9;16500:19;16491:6;16447:73;:::i;:::-;16530;16598:3;16587:9;16583:19;16574:6;16530:73;:::i;:::-;15803:807;;;;;;;;;:::o;16616:210::-;16703:4;16741:2;16730:9;16726:18;16718:26;;16754:65;16816:1;16805:9;16801:17;16792:6;16754:65;:::i;:::-;16616:210;;;;:::o;16832:278::-;16953:4;16991:2;16980:9;16976:18;16968:26;;17004:99;17100:1;17089:9;17085:17;17076:6;17004:99;:::i;:::-;16832:278;;;;:::o;17116:274::-;17235:4;17273:2;17262:9;17258:18;17250:26;;17286:97;17380:1;17369:9;17365:17;17356:6;17286:97;:::i;:::-;17116:274;;;;:::o;17396:313::-;17509:4;17547:2;17536:9;17532:18;17524:26;;17596:9;17590:4;17586:20;17582:1;17571:9;17567:17;17560:47;17624:78;17697:4;17688:6;17624:78;:::i;:::-;17616:86;;17396:313;;;;:::o;17715:419::-;17881:4;17919:2;17908:9;17904:18;17896:26;;17968:9;17962:4;17958:20;17954:1;17943:9;17939:17;17932:47;17996:131;18122:4;17996:131;:::i;:::-;17988:139;;17715:419;;;:::o;18140:::-;18306:4;18344:2;18333:9;18329:18;18321:26;;18393:9;18387:4;18383:20;18379:1;18368:9;18364:17;18357:47;18421:131;18547:4;18421:131;:::i;:::-;18413:139;;18140:419;;;:::o;18565:::-;18731:4;18769:2;18758:9;18754:18;18746:26;;18818:9;18812:4;18808:20;18804:1;18793:9;18789:17;18782:47;18846:131;18972:4;18846:131;:::i;:::-;18838:139;;18565:419;;;:::o;18990:::-;19156:4;19194:2;19183:9;19179:18;19171:26;;19243:9;19237:4;19233:20;19229:1;19218:9;19214:17;19207:47;19271:131;19397:4;19271:131;:::i;:::-;19263:139;;18990:419;;;:::o;19415:::-;19581:4;19619:2;19608:9;19604:18;19596:26;;19668:9;19662:4;19658:20;19654:1;19643:9;19639:17;19632:47;19696:131;19822:4;19696:131;:::i;:::-;19688:139;;19415:419;;;:::o;19840:::-;20006:4;20044:2;20033:9;20029:18;20021:26;;20093:9;20087:4;20083:20;20079:1;20068:9;20064:17;20057:47;20121:131;20247:4;20121:131;:::i;:::-;20113:139;;19840:419;;;:::o;20265:::-;20431:4;20469:2;20458:9;20454:18;20446:26;;20518:9;20512:4;20508:20;20504:1;20493:9;20489:17;20482:47;20546:131;20672:4;20546:131;:::i;:::-;20538:139;;20265:419;;;:::o;20690:::-;20856:4;20894:2;20883:9;20879:18;20871:26;;20943:9;20937:4;20933:20;20929:1;20918:9;20914:17;20907:47;20971:131;21097:4;20971:131;:::i;:::-;20963:139;;20690:419;;;:::o;21115:::-;21281:4;21319:2;21308:9;21304:18;21296:26;;21368:9;21362:4;21358:20;21354:1;21343:9;21339:17;21332:47;21396:131;21522:4;21396:131;:::i;:::-;21388:139;;21115:419;;;:::o;21540:222::-;21633:4;21671:2;21660:9;21656:18;21648:26;;21684:71;21752:1;21741:9;21737:17;21728:6;21684:71;:::i;:::-;21540:222;;;;:::o;21768:831::-;22031:4;22069:3;22058:9;22054:19;22046:27;;22083:71;22151:1;22140:9;22136:17;22127:6;22083:71;:::i;:::-;22164:80;22240:2;22229:9;22225:18;22216:6;22164:80;:::i;:::-;22291:9;22285:4;22281:20;22276:2;22265:9;22261:18;22254:48;22319:108;22422:4;22413:6;22319:108;:::i;:::-;22311:116;;22437:72;22505:2;22494:9;22490:18;22481:6;22437:72;:::i;:::-;22519:73;22587:3;22576:9;22572:19;22563:6;22519:73;:::i;:::-;21768:831;;;;;;;;:::o;22605:332::-;22726:4;22764:2;22753:9;22749:18;22741:26;;22777:71;22845:1;22834:9;22830:17;22821:6;22777:71;:::i;:::-;22858:72;22926:2;22915:9;22911:18;22902:6;22858:72;:::i;:::-;22605:332;;;;;:::o;22943:214::-;23032:4;23070:2;23059:9;23055:18;23047:26;;23083:67;23147:1;23136:9;23132:17;23123:6;23083:67;:::i;:::-;22943:214;;;;:::o;23163:129::-;23197:6;23224:20;;:::i;:::-;23214:30;;23253:33;23281:4;23273:6;23253:33;:::i;:::-;23163:129;;;:::o;23298:75::-;23331:6;23364:2;23358:9;23348:19;;23298:75;:::o;23379:311::-;23456:4;23546:18;23538:6;23535:30;23532:56;;;23568:18;;:::i;:::-;23532:56;23618:4;23610:6;23606:17;23598:25;;23678:4;23672;23668:15;23660:23;;23379:311;;;:::o;23696:132::-;23763:4;23786:3;23778:11;;23816:4;23811:3;23807:14;23799:22;;23696:132;;;:::o;23834:114::-;23901:6;23935:5;23929:12;23919:22;;23834:114;;;:::o;23954:99::-;24006:6;24040:5;24034:12;24024:22;;23954:99;;;:::o;24059:113::-;24129:4;24161;24156:3;24152:14;24144:22;;24059:113;;;:::o;24178:184::-;24277:11;24311:6;24306:3;24299:19;24351:4;24346:3;24342:14;24327:29;;24178:184;;;;:::o;24368:169::-;24452:11;24486:6;24481:3;24474:19;24526:4;24521:3;24517:14;24502:29;;24368:169;;;;:::o;24543:305::-;24583:3;24602:20;24620:1;24602:20;:::i;:::-;24597:25;;24636:20;24654:1;24636:20;:::i;:::-;24631:25;;24790:1;24722:66;24718:74;24715:1;24712:81;24709:107;;;24796:18;;:::i;:::-;24709:107;24840:1;24837;24833:9;24826:16;;24543:305;;;;:::o;24854:185::-;24894:1;24911:20;24929:1;24911:20;:::i;:::-;24906:25;;24945:20;24963:1;24945:20;:::i;:::-;24940:25;;24984:1;24974:35;;24989:18;;:::i;:::-;24974:35;25031:1;25028;25024:9;25019:14;;24854:185;;;;:::o;25045:348::-;25085:7;25108:20;25126:1;25108:20;:::i;:::-;25103:25;;25142:20;25160:1;25142:20;:::i;:::-;25137:25;;25330:1;25262:66;25258:74;25255:1;25252:81;25247:1;25240:9;25233:17;25229:105;25226:131;;;25337:18;;:::i;:::-;25226:131;25385:1;25382;25378:9;25367:20;;25045:348;;;;:::o;25399:191::-;25439:4;25459:20;25477:1;25459:20;:::i;:::-;25454:25;;25493:20;25511:1;25493:20;:::i;:::-;25488:25;;25532:1;25529;25526:8;25523:34;;;25537:18;;:::i;:::-;25523:34;25582:1;25579;25575:9;25567:17;;25399:191;;;;:::o;25596:96::-;25633:7;25662:24;25680:5;25662:24;:::i;:::-;25651:35;;25596:96;;;:::o;25698:104::-;25743:7;25772:24;25790:5;25772:24;:::i;:::-;25761:35;;25698:104;;;:::o;25808:90::-;25842:7;25885:5;25878:13;25871:21;25860:32;;25808:90;;;:::o;25904:126::-;25941:7;25981:42;25974:5;25970:54;25959:65;;25904:126;;;:::o;26036:77::-;26073:7;26102:5;26091:16;;26036:77;;;:::o;26119:86::-;26154:7;26194:4;26187:5;26183:16;26172:27;;26119:86;;;:::o;26211:154::-;26289:9;26322:37;26353:5;26322:37;:::i;:::-;26309:50;;26211:154;;;:::o;26371:152::-;26447:9;26480:37;26511:5;26480:37;:::i;:::-;26467:50;;26371:152;;;:::o;26529:121::-;26587:9;26620:24;26638:5;26620:24;:::i;:::-;26607:37;;26529:121;;;:::o;26656:126::-;26706:9;26739:37;26770:5;26739:37;:::i;:::-;26726:50;;26656:126;;;:::o;26788:113::-;26838:9;26871:24;26889:5;26871:24;:::i;:::-;26858:37;;26788:113;;;:::o;26907:307::-;26975:1;26985:113;26999:6;26996:1;26993:13;26985:113;;;27084:1;27079:3;27075:11;27069:18;27065:1;27060:3;27056:11;27049:39;27021:2;27018:1;27014:10;27009:15;;26985:113;;;27116:6;27113:1;27110:13;27107:101;;;27196:1;27187:6;27182:3;27178:16;27171:27;27107:101;26956:258;26907:307;;;:::o;27220:320::-;27264:6;27301:1;27295:4;27291:12;27281:22;;27348:1;27342:4;27338:12;27369:18;27359:81;;27425:4;27417:6;27413:17;27403:27;;27359:81;27487:2;27479:6;27476:14;27456:18;27453:38;27450:84;;;27506:18;;:::i;:::-;27450:84;27271:269;27220:320;;;:::o;27546:281::-;27629:27;27651:4;27629:27;:::i;:::-;27621:6;27617:40;27759:6;27747:10;27744:22;27723:18;27711:10;27708:34;27705:62;27702:88;;;27770:18;;:::i;:::-;27702:88;27810:10;27806:2;27799:22;27589:238;27546:281;;:::o;27833:233::-;27872:3;27895:24;27913:5;27895:24;:::i;:::-;27886:33;;27941:66;27934:5;27931:77;27928:103;;;28011:18;;:::i;:::-;27928:103;28058:1;28051:5;28047:13;28040:20;;27833:233;;;:::o;28072:180::-;28120:77;28117:1;28110:88;28217:4;28214:1;28207:15;28241:4;28238:1;28231:15;28258:180;28306:77;28303:1;28296:88;28403:4;28400:1;28393:15;28427:4;28424:1;28417:15;28444:180;28492:77;28489:1;28482:88;28589:4;28586:1;28579:15;28613:4;28610:1;28603:15;28630:180;28678:77;28675:1;28668:88;28775:4;28772:1;28765:15;28799:4;28796:1;28789:15;28816:180;28864:77;28861:1;28854:88;28961:4;28958:1;28951:15;28985:4;28982:1;28975:15;29002:117;29111:1;29108;29101:12;29125:117;29234:1;29231;29224:12;29248:117;29357:1;29354;29347:12;29371:117;29480:1;29477;29470:12;29494:102;29535:6;29586:2;29582:7;29577:2;29570:5;29566:14;29562:28;29552:38;;29494:102;;;:::o;29602:221::-;29742:34;29738:1;29730:6;29726:14;29719:58;29811:4;29806:2;29798:6;29794:15;29787:29;29602:221;:::o;29829:179::-;29969:31;29965:1;29957:6;29953:14;29946:55;29829:179;:::o;30014:156::-;30154:8;30150:1;30142:6;30138:14;30131:32;30014:156;:::o;30176:222::-;30316:34;30312:1;30304:6;30300:14;30293:58;30385:5;30380:2;30372:6;30368:15;30361:30;30176:222;:::o;30404:182::-;30544:34;30540:1;30532:6;30528:14;30521:58;30404:182;:::o;30592:162::-;30732:14;30728:1;30720:6;30716:14;30709:38;30592:162;:::o;30760:152::-;30900:4;30896:1;30888:6;30884:14;30877:28;30760:152;:::o;30918:223::-;31058:34;31054:1;31046:6;31042:14;31035:58;31127:6;31122:2;31114:6;31110:15;31103:31;30918:223;:::o;31147:224::-;31287:34;31283:1;31275:6;31271:14;31264:58;31356:7;31351:2;31343:6;31339:15;31332:32;31147:224;:::o;31377:122::-;31450:24;31468:5;31450:24;:::i;:::-;31443:5;31440:35;31430:63;;31489:1;31486;31479:12;31430:63;31377:122;:::o;31505:138::-;31586:32;31612:5;31586:32;:::i;:::-;31579:5;31576:43;31566:71;;31633:1;31630;31623:12;31566:71;31505:138;:::o;31649:116::-;31719:21;31734:5;31719:21;:::i;:::-;31712:5;31709:32;31699:60;;31755:1;31752;31745:12;31699:60;31649:116;:::o;31771:122::-;31844:24;31862:5;31844:24;:::i;:::-;31837:5;31834:35;31824:63;;31883:1;31880;31873:12;31824:63;31771:122;:::o

Swarm Source

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