ETH Price: $2,627.77 (+1.01%)

Token

Baby Dubbz (bDubbz)
 

Overview

Max Total Supply

1,000,000 bDubbz

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,213.996350000392205701 bDubbz

Value
$0.00
0x5ad16baa3ab19adbed1e21ae3b4dae72c8c2d0f6
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:
BabyDubbz

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Baby Dubbz
// https://t.me/Babydubbzerc20
// SPDX-License-Identifier: MIT
// File: contracts/Auth.sol


pragma solidity ^0.8.9;
abstract contract Auth {
  address internal owner;
  mapping(address => bool) internal authorizations;

  constructor(address _owner) {
    owner = _owner;
    authorizations[_owner] = true;
  }

  /**
   * Function modifier to require caller to be contract owner
   */
  modifier onlyOwner() {
    require(isOwner(msg.sender), "!OWNER");
    _;
  }

  /**
   * Function modifier to require caller to be authorized
   */
  modifier authorized() {
    require(isAuthorized(msg.sender), "!AUTHORIZED");
    _;
  }

  /**
   * Authorize address. Owner only
   */
  function authorize(address adr) public onlyOwner {
    authorizations[adr] = true;
  }

  /**
   * Remove address' authorization. Owner only
   */
  function unauthorize(address adr) public onlyOwner {
    authorizations[adr] = false;
  }

  /**
   * Check if address is owner
   */
  function isOwner(address account) public view returns (bool) {
    return account == owner;
  }

  /**
   * Return address' authorization status
   */
  function isAuthorized(address adr) public view returns (bool) {
    return authorizations[adr];
  }

  /**
   * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
   */
  function transferOwnership(address payable adr) public onlyOwner {
    owner = adr;
    authorizations[adr] = true;
    emit OwnershipTransferred(adr);
  }

  event OwnershipTransferred(address owner);
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol


pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: contracts/IERC20.sol


pragma solidity ^0.8.9;

interface IERC20 {
  function totalSupply() external view returns (uint256);

  function decimals() external view returns (uint8);

  function symbol() external view returns (string memory);

  function name() external view returns (string memory);

  function getOwner() external view returns (address);

  function balanceOf(address account) external view returns (uint256);

  function transfer(address recipient, uint256 amount) external returns (bool);

  function allowance(address _owner, address spender) external view returns (uint256);

  function approve(address spender, uint256 amount) external returns (bool);

  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (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 subtraction 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: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol


pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol


pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: contracts/DividendDistributor.sol


pragma solidity ^0.8.9;




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; // excluded dividend
    uint256 totalRealised;
  }

  IERC20 MAGIC = IERC20(0x38029C62DfA30D9FD3CaDf4C64e9b2ab21DbDa17);
  IUniswapV2Router02 router;

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

  mapping(address => Share) public shares;

  uint256 public totalShares;
  uint256 public totalDividends;
  uint256 public totalDistributed; // to be shown in UI
  uint256 public dividendsPerShare;
  uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

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

  uint256 currentIndex;

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

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

  constructor(address _router) {
    router = _router != address(0)
      ? IUniswapV2Router02(_router)
      : IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    _token = msg.sender;
  }

  function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
    minPeriod = _minPeriod;
    minDistribution = _minDistribution;
  }

  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 = MAGIC.balanceOf(address(this));

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

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

    uint256 amount = MAGIC.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 gasUsed = 0;
    uint256 gasLeft = gasleft();

    uint256 iterations = 0;

    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);
      MAGIC.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 {
    distributeDividend(msg.sender);
  }

  // returns the  unpaid earnings
  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();
  }
}
// File: contracts/zxcxz.sol

// Baby Dubbz

pragma solidity ^0.8.9;





contract BabyDubbz is IERC20, Auth {
  using SafeMath for uint256;

  address private constant ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
  address private constant  DEAD = 0x000000000000000000000000000000000000dEaD;
  address private constant ZERO = 0x0000000000000000000000000000000000000000;

  string private constant _name = "Baby Dubbz";
  string private constant _symbol = "bDubbz";
  uint8 private constant _decimals = 18;

  uint256 private _totalSupply = 1_000_000 * (10 ** _decimals);
  uint256 public _maxTxAmount = _totalSupply.div(800); // 0.25% (2_500)
  uint256 public _maxWallet = _totalSupply.div(40); // 2.5% (25_000)

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

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


  uint256 private liquidityFee;
  uint256 private buybackFee;
  uint256 private reflectionFee;
  uint256 private investmentFee;
  uint256 private totalFee;
  uint256 public feeDenominator = 10000;

  // Buy Fees
  uint256 public liquidityFeeBuy = 100;
  uint256 public buybackFeeBuy = 0;
  uint256 public reflectionFeeBuy = 500;
  uint256 public investmentFeeBuy = 200;
  uint256 public totalFeeBuy = 800;
  // Sell Fees
  uint256 public liquidityFeeSell = 100;
  uint256 public buybackFeeSell = 0;
  uint256 public reflectionFeeSell = 500;
  uint256 public investmentFeeSell = 200;
  uint256 public totalFeeSell = 800;

  uint256 public targetLiquidity = 10;
  uint256 public targetLiquidityDenominator = 100;

  IUniswapV2Router02 public router;
  address public pair;

  uint256 public launchedAt;
  uint256 public launchedAtTimestamp;

      // Fees receivers
  address public autoLiquidityReceiver = 0xc1d93220b77958e5d8CcFd3B7BCD20Ef97BE74a0;
  address public investmentFeeReceiver = 0xc1d93220b77958e5d8CcFd3B7BCD20Ef97BE74a0;


  bool public autoBuybackEnabled = false;
  uint256 public autoBuybackCap;
  uint256 public autoBuybackAccumulator;
  uint256 public autoBuybackAmount;
  uint256 public autoBuybackBlockPeriod;
  uint256 public autoBuybackBlockLast;

  DividendDistributor public distributor;
  address public distributorAddress;
  uint256 private distributorGas = 500000;

  bool public swapEnabled = true;
  uint256 public swapThreshold = _totalSupply / 2000; // 0.05% (500)
  bool public inSwap;
  modifier swapping() {
    inSwap = true;
    _;
    inSwap = false;
  }

  constructor() Auth(msg.sender) {
    router = IUniswapV2Router02(ROUTER);
    pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));
    _allowances[address(this)][address(router)] = _totalSupply;

    distributor = new DividendDistributor(address(router));
    distributorAddress = address(distributor);

    isFeeExempt[msg.sender] = true;
    isTxLimitExempt[msg.sender] = true;

    canAddLiquidityBeforeLaunch[msg.sender] = true;

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

    approve(address(router), _totalSupply);
    approve(address(pair), _totalSupply);
    _balances[msg.sender] = _totalSupply;
    emit Transfer(address(0), msg.sender, _totalSupply);
  }

  receive() external payable {}

    function totalSupply() external view override returns (uint256) {
      return _totalSupply;
    }

    function decimals() external pure override returns (uint8) {
      return _decimals;
    }

    function symbol() external pure override returns (string memory) {
      return _symbol;
    }

    function name() external pure override returns (string memory) {
      return _name;
    }

    function getOwner() external view override returns (address) {
      return owner;
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
      _allowances[msg.sender][spender] = amount;
      emit Approval(msg.sender, spender, amount);
      return true;
    }

    function approveMax(address spender) external returns (bool) {
      return approve(spender, _totalSupply);
    }

  function transfer(address recipient, uint256 amount) external override returns (bool) {
    return _transferFrom(msg.sender, recipient, amount);
  }

  function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
    if (_allowances[sender][msg.sender] != _totalSupply) {
      _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
    }

    return _transferFrom(sender, recipient, amount);
  }

  function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
    if (inSwap) {
      return _basicTransfer(sender, recipient, amount);
    }

   // Avoid lauchpad buyers from ADD LP before launch
    if (!launched() && recipient == pair && sender == pair) {
      require(canAddLiquidityBeforeLaunch[sender]);
    }

    if (!authorizations[sender] && !authorizations[recipient]) {
      require(launched(), "Trading not open yet");
    }

   // max wallet code
    if (
      !authorizations[sender] &&
      recipient != address(this) &&
      recipient != address(DEAD) &&
      recipient != pair &&
      recipient != investmentFeeReceiver &&
      recipient != autoLiquidityReceiver
    ) {
      uint256 heldTokens = balanceOf(recipient);
      require(
        (heldTokens + amount) <= _maxWallet,
        "Total Holding is currently limited, you can not buy that much."
      );
    }

    checkTxLimit(sender, amount);

    // Set Fees
    if (sender == pair) {
      buyFees();
    }
    if (recipient == pair) {
      sellFees();
    }

    //Exchange tokens
    if (shouldSwapBack()) {
      swapBack();
    }

    if (shouldAutoBuyback()) {
      triggerAutoBuyback();
    }

    _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

    uint256 amountReceived = shouldTakeFee(sender) ? takeFee(recipient, amount) : amount;

    _balances[recipient] = _balances[recipient].add(amountReceived);

    // Dividend tracker
    if (!isDividendExempt[sender]) {
      try distributor.setShare(sender,  balanceOf(sender)) {} catch {}
    }
    if (!isDividendExempt[recipient]) {
      try distributor.setShare(recipient, balanceOf(recipient)) {} catch {}
    }

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

    emit Transfer(sender, recipient, amountReceived);
    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;
  }

  function checkTxLimit(address sender, uint256 amount) internal view {
    require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
  }

  // Internal Functions
  function buyFees() internal {
    liquidityFee = liquidityFeeBuy;
    buybackFee = buybackFeeBuy;
    reflectionFee = reflectionFeeBuy;
    investmentFee = investmentFeeBuy;
    totalFee = totalFeeBuy;
  }

  function sellFees() internal {
    liquidityFee = liquidityFeeSell;
    buybackFee = buybackFeeSell;
    reflectionFee = reflectionFeeSell;
    investmentFee = investmentFeeSell;
    totalFee = totalFeeSell;
  }

  function shouldTakeFee(address sender) internal view returns (bool) {
    return !isFeeExempt[sender];
  }

  function takeFee(address sender, uint256 amount) internal returns (uint256) {
    uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

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

    return amount.sub(feeAmount);
  }

  function shouldSwapBack() internal view returns (bool) {
    return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold;
  }

  function swapBack() internal swapping {

    uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
    uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
    uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

    uint256 balanceBefore = address(this).balance;

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

    uint256 amountETH = address(this).balance.sub(balanceBefore);

    uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));

    uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
    uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee);
    uint256 amountETHInvestment = amountETH.mul(investmentFee).div(totalETHFee);

    try distributor.deposit{value: amountETHReflection}() {} catch {}
    payable(investmentFeeReceiver).transfer(amountETHInvestment);

    if (amountToLiquify > 0) {
      router.addLiquidityETH{value: amountETHLiquidity}(
        address(this),
        amountToLiquify,
        0,
        0,
        autoLiquidityReceiver,
        block.timestamp
      );
      emit AutoLiquify(amountETHLiquidity, amountToLiquify);
    }
  }

  // BuyBack functions
  function shouldAutoBuyback() internal view returns (bool) {
    return
      msg.sender != pair &&
      !inSwap &&
      autoBuybackEnabled &&
      autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number && // After N blocks from last buyback
      address(this).balance >= autoBuybackAmount;
  }

  function triggerAutoBuyback() internal {
    buyTokens(autoBuybackAmount, DEAD);
    autoBuybackBlockLast = block.number;
    autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
    if (autoBuybackAccumulator > autoBuybackCap) {
      autoBuybackEnabled = false;
    }
  }

  function triggerZeusBuyback(uint256 amount) external onlyOwner {
    buyTokens(amount, DEAD);
    autoBuybackBlockLast = block.number;
    autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
    if (autoBuybackAccumulator > autoBuybackCap) {
      autoBuybackEnabled = false;
    }
  }

  function buyTokens(uint256 amount, address to) internal swapping {
    address[] memory path = new address[](2);
    path[0] = router.WETH();
    path[1] = address(this);

    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, to, block.timestamp);
  }

  function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external onlyOwner {
    autoBuybackEnabled = _enabled;
    autoBuybackCap = _cap;
    autoBuybackAccumulator = 0;
    autoBuybackAmount = _amount;
    autoBuybackBlockPeriod = _period;
    autoBuybackBlockLast = block.number;
  }  

  // Add extra rewards to holders
  function deposit() external payable onlyOwner {
    try distributor.deposit{value: msg.value}() {} catch {}
  } 
  
  // Process rewards distributions to holders
  function process() external onlyOwner {
    try distributor.process(distributorGas) {} catch {}
  }
  

  // Stuck Balances Functions
  function rescueToken(address tokenAddress, uint256 tokens) public onlyOwner returns (bool success) {
    return IERC20(tokenAddress).transfer(msg.sender, tokens);
  }

  function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
    uint256 amountETH = address(this).balance;
    payable(investmentFeeReceiver).transfer((amountETH * amountPercentage) / 100);
  }

  function setSellFees(
    uint256 _liquidityFee,
    uint256 _buybackFee,
    uint256 _reflectionFee,
    uint256 _investmentFee
  ) external onlyOwner {

    liquidityFeeSell = _liquidityFee;
    buybackFeeSell = _buybackFee;
    reflectionFeeSell = _reflectionFee;
    investmentFeeSell = _investmentFee;
    totalFeeSell = _liquidityFee + (_buybackFee) + (_reflectionFee) + (_investmentFee);
  }

  function setBuyFees(
    uint256 _liquidityFee,
    uint256 _buybackFee,
    uint256 _reflectionFee,
    uint256 _investmentFee
  ) external onlyOwner {

    liquidityFeeBuy = _liquidityFee;
    buybackFeeBuy = _buybackFee;
    reflectionFeeBuy = _reflectionFee;
    investmentFeeBuy = _investmentFee;
    totalFeeBuy = _liquidityFee + (_buybackFee) + (_reflectionFee) + (_investmentFee);
  }

  function setFeeReceivers(address _autoLiquidityReceiver, address _investmentFeeReceiver) external onlyOwner {
    autoLiquidityReceiver = _autoLiquidityReceiver;
    investmentFeeReceiver = _investmentFeeReceiver;
  }

  function launched() internal view returns (bool) {
    return launchedAt != 0;
  }

  function launch() public onlyOwner {
    require(launchedAt == 0, "Already launched boi");
    launchedAt = block.number;
    launchedAtTimestamp = block.timestamp;
  }

  function setMaxWallet(uint256 amount) external onlyOwner {
    require(amount >= _totalSupply / 1000);
    _maxWallet = amount;
  }

  function setTxLimit(uint256 amount) external onlyOwner {
    require(amount >= _totalSupply / 1000);
    _maxTxAmount = amount;
  }

  function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
    require(holder != address(this) && holder != pair);
    isDividendExempt[holder] = exempt;
    if (exempt) {
      distributor.setShare(holder, 0);
    } else {
      distributor.setShare(holder, _balances[holder]);
    }
  }

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

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

  function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
    swapEnabled = _enabled;
    swapThreshold = _amount;
  }


  function setCanTransferBeforeLaunch(address holder, bool exempt) external onlyOwner {
    canAddLiquidityBeforeLaunch[holder] = exempt; //Presale Address will be added as Exempt
    isTxLimitExempt[holder] = exempt;
    isFeeExempt[holder] = exempt;
  }

  function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
    targetLiquidity = _target;
    targetLiquidityDenominator = _denominator;
  }

  function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
    distributor.setDistributionCriteria(_minPeriod, _minDistribution);
  }

  function setDistributorSettings(uint256 gas) external onlyOwner {
    require(gas < 900000);
    distributorGas = gas;
  }

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

  function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
    return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
  }

  function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
    return getLiquidityBacking(accuracy) > target;
  }

  event AutoLiquify(uint256 amountETH, uint256 amountMRLN);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMRLN","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackAccumulator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackBlockLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackBlockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAddLiquidityBeforeLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","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":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"process","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_investmentFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setCanTransferBeforeLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_investmentFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_investmentFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"pure","type":"function"},{"inputs":[],"name":"targetLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetLiquidityDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062000c3e565b620f424062000024919062000c8f565b600255620000456103206002546200098a60201b62002b131790919060201c565b6003556200006560286002546200098a60201b62002b131790919060201c565b600455612710601055606460115560006012556101f460135560c8601455610320601555606460165560006017556101f460185560c8601955610320601a55600a601b556064601c5573c1d93220b77958e5d8ccfd3b7bcd20ef97be74a0602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c1d93220b77958e5d8ccfd3b7bcd20ef97be74a0602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602260146101000a81548160ff0219169083151502179055506207a120602a556001602b60006101000a81548160ff0219169083151502179055506107d0600254620001a7919062000d09565b602c55348015620001b757600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050737a250d5630b4cf539739df2c5dacb4c659f2488d601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062000dab565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e9919062000dab565b306040518363ffffffff1660e01b81526004016200040992919062000dee565b6020604051808303816000875af115801562000429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044f919062000dab565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620005659062000a96565b62000571919062000e1b565b604051809103906000f0801580156200058e573d6000803e3d6000fd5b50602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200089c601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600254620009a260201b60201c565b50620008d3601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600254620009a260201b60201c565b50600254600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6002546040516200097c919062000e49565b60405180910390a362000e66565b600081836200099a919062000d09565b905092915050565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000a84919062000e49565b60405180910390a36001905092915050565b611cb48062005fdd83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b325780860481111562000b0a5762000b0962000aa4565b5b600185161562000b1a5780820291505b808102905062000b2a8562000ad3565b945062000aea565b94509492505050565b60008262000b4d576001905062000c20565b8162000b5d576000905062000c20565b816001811462000b76576002811462000b815762000bb7565b600191505062000c20565b60ff84111562000b965762000b9562000aa4565b5b8360020a91508482111562000bb05762000baf62000aa4565b5b5062000c20565b5060208310610133831016604e8410600b841016171562000bf15782820a90508381111562000beb5762000bea62000aa4565b5b62000c20565b62000c00848484600162000ae0565b9250905081840481111562000c1a5762000c1962000aa4565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c4b8262000c27565b915062000c588362000c31565b925062000c877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b3b565b905092915050565b600062000c9c8262000c27565b915062000ca98362000c27565b925082820262000cb98162000c27565b9150828204841483151762000cd35762000cd262000aa4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d168262000c27565b915062000d238362000c27565b92508262000d365762000d3562000cda565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d738262000d46565b9050919050565b62000d858162000d66565b811462000d9157600080fd5b50565b60008151905062000da58162000d7a565b92915050565b60006020828403121562000dc45762000dc362000d41565b5b600062000dd48482850162000d94565b91505092915050565b62000de88162000d66565b82525050565b600060408201905062000e05600083018562000ddd565b62000e14602083018462000ddd565b9392505050565b600060208201905062000e32600083018462000ddd565b92915050565b62000e438162000c27565b82525050565b600060208201905062000e60600083018462000e38565b92915050565b6151678062000e766000396000f3fe6080604052600436106104405760003560e01c80636e78eb4911610234578063b6a5d7de1161012e578063d8306786116100b6578063f708a64f1161007a578063f708a64f1461109f578063f84ba65d146110c8578063f887ea40146110f1578063fb5f27fb1461111c578063fe9fbb801461114757610447565b8063d830678614610fbc578063dd62ed3e14610fe7578063df20fd4914611024578063f0b37c041461104d578063f2fde38b1461107657610447565b8063c33fb877116100fd578063c33fb87714610f08578063c6d2577d14610f1f578063ca33e64c14610f4a578063d0e30db014610f75578063d51ed1c814610f7f57610447565b8063b6a5d7de14610e5e578063b91854f414610e87578063bf56b37114610eb2578063bfe1092814610edd57610447565b80638b81f868116101bc578063a4b45c0011610180578063a4b45c0014610d77578063a51af4c514610da0578063a8aa1b3114610dcb578063a9059cbb14610df6578063ac45ed1c14610e3357610447565b80638b81f86814610ca2578063920eee6f14610ccd57806392258ec814610cf857806395d89b4114610d235780639d1944f514610d4e57610447565b806382247ec01161020357806382247ec014610bb957806382d2011614610be4578063893d20e814610c0f5780638ab6ffc714610c3a5780638b42507f14610c6557610447565b80636e78eb4914610ae957806370a0823114610b145780637d1db4a514610b515780638072250b14610b7c57610447565b80632f54bf6e1161034557806353148416116102cd5780635d0044ca116102915780635d0044ca14610a1a57806363a9549214610a43578063658d4b7f14610a6c5780636c5b285514610a955780636ddd171314610abe57610447565b80635314841614610933578063571ac8b01461095e578063591cf08d1461099b5780635a53c1fb146109c65780635c85974f146109f157610447565b80633bb8a8d4116103145780633bb8a8d4146108385780633f4218e014610863578063409d0566146108a05780634355855a146108cb5780634896a6321461090857610447565b80632f54bf6e14610768578063313ce567146107a557806333f3d628146107d057806337bc957e1461080d57610447565b806318160ddd116103c8578063215a62d411610397578063215a62d41461068357806323b872dd146106ac5780632b112e49146106e95780632d48e896146107145780632e4a9bd71461073d57610447565b806318160ddd146105db5780631da1db5e146106065780631f619a641461062f578063201e79911461065a57610447565b8063095ea7b31161040f578063095ea7b3146104e25780631107b3a51461051f5780631161ae391461054a578063178d9b8e14610587578063180b0d7e146105b057610447565b806301339c211461044c5780630445b66714610463578063048c7baf1461048e57806306fdde03146104b757610447565b3661044757005b600080fd5b34801561045857600080fd5b50610461611184565b005b34801561046f57600080fd5b50610478611221565b60405161048591906143ba565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b0919061443e565b611227565b005b3480156104c357600080fd5b506104cc6112b3565b6040516104d99190614535565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906145b5565b6112f0565b6040516105169190614604565b60405180910390f35b34801561052b57600080fd5b506105346113e2565b60405161054191906143ba565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c919061461f565b6113e8565b60405161057e9190614604565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a9919061465f565b6113fd565b005b3480156105bc57600080fd5b506105c561148f565b6040516105d291906143ba565b60405180910390f35b3480156105e757600080fd5b506105f0611495565b6040516105fd91906143ba565b60405180910390f35b34801561061257600080fd5b5061062d600480360381019061062891906146c6565b61149f565b005b34801561063b57600080fd5b50610644611570565b6040516106519190614702565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c919061461f565b611596565b005b34801561068f57600080fd5b506106aa60048036038101906106a5919061471d565b6115f0565b005b3480156106b857600080fd5b506106d360048036038101906106ce919061475d565b611741565b6040516106e09190614604565b60405180910390f35b3480156106f557600080fd5b506106fe611923565b60405161070b91906143ba565b60405180910390f35b34801561072057600080fd5b5061073b6004803603810190610736919061461f565b611964565b005b34801561074957600080fd5b50610752611a3f565b60405161075f91906143ba565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906147b0565b611a45565b60405161079c9190614604565b60405180910390f35b3480156107b157600080fd5b506107ba611a9e565b6040516107c791906147f9565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906145b5565b611aa7565b6040516108049190614604565b60405180910390f35b34801561081957600080fd5b50610822611b77565b60405161082f91906143ba565b60405180910390f35b34801561084457600080fd5b5061084d611b7d565b60405161085a9190614604565b60405180910390f35b34801561086f57600080fd5b5061088a600480360381019061088591906147b0565b611b90565b6040516108979190614604565b60405180910390f35b3480156108ac57600080fd5b506108b5611bb0565b6040516108c291906143ba565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed91906147b0565b611bb6565b6040516108ff9190614604565b60405180910390f35b34801561091457600080fd5b5061091d611bd6565b60405161092a91906143ba565b60405180910390f35b34801561093f57600080fd5b50610948611bdc565b60405161095591906143ba565b60405180910390f35b34801561096a57600080fd5b50610985600480360381019061098091906147b0565b611be2565b6040516109929190614604565b60405180910390f35b3480156109a757600080fd5b506109b0611bf7565b6040516109bd91906143ba565b60405180910390f35b3480156109d257600080fd5b506109db611bfd565b6040516109e891906143ba565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a1391906146c6565b611c03565b005b348015610a2657600080fd5b50610a416004803603810190610a3c91906146c6565b611c71565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a6591906146c6565b611cdf565b005b348015610a7857600080fd5b50610a936004803603810190610a8e919061471d565b611d82565b005b348015610aa157600080fd5b50610abc6004803603810190610ab7919061465f565b611e25565b005b348015610aca57600080fd5b50610ad3611eb7565b604051610ae09190614604565b60405180910390f35b348015610af557600080fd5b50610afe611eca565b604051610b0b91906143ba565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b3691906147b0565b611ed0565b604051610b4891906143ba565b60405180910390f35b348015610b5d57600080fd5b50610b66611f19565b604051610b7391906143ba565b60405180910390f35b348015610b8857600080fd5b50610ba36004803603810190610b9e91906147b0565b611f1f565b604051610bb09190614604565b60405180910390f35b348015610bc557600080fd5b50610bce611f3f565b604051610bdb91906143ba565b60405180910390f35b348015610bf057600080fd5b50610bf9611f45565b604051610c0691906143ba565b60405180910390f35b348015610c1b57600080fd5b50610c24611f4b565b604051610c319190614702565b60405180910390f35b348015610c4657600080fd5b50610c4f611f74565b604051610c5c91906143ba565b60405180910390f35b348015610c7157600080fd5b50610c8c6004803603810190610c8791906147b0565b611f7a565b604051610c999190614604565b60405180910390f35b348015610cae57600080fd5b50610cb7611f9a565b604051610cc491906143ba565b60405180910390f35b348015610cd957600080fd5b50610ce2611fa0565b604051610cef91906143ba565b60405180910390f35b348015610d0457600080fd5b50610d0d611fa6565b604051610d1a91906143ba565b60405180910390f35b348015610d2f57600080fd5b50610d38611fac565b604051610d459190614535565b60405180910390f35b348015610d5a57600080fd5b50610d756004803603810190610d7091906146c6565b611fe9565b005b348015610d8357600080fd5b50610d9e6004803603810190610d999190614814565b61204a565b005b348015610dac57600080fd5b50610db5612118565b604051610dc29190614702565b60405180910390f35b348015610dd757600080fd5b50610de061213e565b604051610ded9190614702565b60405180910390f35b348015610e0257600080fd5b50610e1d6004803603810190610e1891906145b5565b612164565b604051610e2a9190614604565b60405180910390f35b348015610e3f57600080fd5b50610e48612179565b604051610e5591906143ba565b60405180910390f35b348015610e6a57600080fd5b50610e856004803603810190610e8091906147b0565b61217f565b005b348015610e9357600080fd5b50610e9c612221565b604051610ea991906143ba565b60405180910390f35b348015610ebe57600080fd5b50610ec7612227565b604051610ed491906143ba565b60405180910390f35b348015610ee957600080fd5b50610ef261222d565b604051610eff91906148b3565b60405180910390f35b348015610f1457600080fd5b50610f1d612253565b005b348015610f2b57600080fd5b50610f34612326565b604051610f4191906143ba565b60405180910390f35b348015610f5657600080fd5b50610f5f61232c565b604051610f6c9190614702565b60405180910390f35b610f7d612352565b005b348015610f8b57600080fd5b50610fa66004803603810190610fa191906146c6565b612419565b604051610fb391906143ba565b60405180910390f35b348015610fc857600080fd5b50610fd161248b565b604051610fde9190614604565b60405180910390f35b348015610ff357600080fd5b5061100e60048036038101906110099190614814565b61249e565b60405161101b91906143ba565b60405180910390f35b34801561103057600080fd5b5061104b600480360381019061104691906148ce565b612525565b005b34801561105957600080fd5b50611074600480360381019061106f91906147b0565b612592565b005b34801561108257600080fd5b5061109d6004803603810190611098919061494c565b612635565b005b3480156110ab57600080fd5b506110c660048036038101906110c1919061471d565b61274e565b005b3480156110d457600080fd5b506110ef60048036038101906110ea919061471d565b6129ee565b005b3480156110fd57600080fd5b50611106612a91565b604051611113919061499a565b60405180910390f35b34801561112857600080fd5b50611131612ab7565b60405161113e91906143ba565b60405180910390f35b34801561115357600080fd5b5061116e600480360381019061116991906147b0565b612abd565b60405161117b9190614604565b60405180910390f35b61118d33611a45565b6111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390614a01565b60405180910390fd5b6000601f5414611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890614a6d565b60405180910390fd5b43601f8190555042602081905550565b602c5481565b61123033611a45565b61126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690614a01565b60405180910390fd5b83602260146101000a81548160ff02191690831515021790555082602381905550600060248190555081602581905550806026819055504360278190555050505050565b60606040518060400160405280600a81526020017f4261627920447562627a00000000000000000000000000000000000000000000815250905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113d091906143ba565b60405180910390a36001905092915050565b60165481565b6000826113f483612419565b11905092915050565b61140633611a45565b611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614a01565b60405180910390fd5b836011819055508260128190555081601381905550806014819055508082848661146f9190614abc565b6114799190614abc565b6114839190614abc565b60158190555050505050565b60105481565b6000600254905090565b6114a833611a45565b6114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90614a01565b60405180910390fd5b6000479050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846115369190614af0565b6115409190614b61565b9081150290604051600060405180830381858888f1935050505015801561156b573d6000803e3d6000fd5b505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61159f33611a45565b6115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590614a01565b60405180910390fd5b81601b8190555080601c819055505050565b6115f933611a45565b611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614a01565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461190f5761188e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b299092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61191a848484612b7e565b90509392505050565b600061195f6119326000611ed0565b61195161194061dead611ed0565b60025461351790919063ffffffff16565b61351790919063ffffffff16565b905090565b61196d33611a45565b6119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390614a01565b60405180910390fd5b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611a09929190614b92565b600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b505050505050565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6000611ab233611a45565b611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890614a01565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611b2c929190614bbb565b6020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190614bf9565b905092915050565b60175481565b602260149054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60135481565b60096020528060005260406000206000915054906101000a900460ff1681565b60255481565b601a5481565b6000611bf0826002546112f0565b9050919050565b60235481565b60265481565b611c0c33611a45565b611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290614a01565b60405180910390fd5b6103e8600254611c5b9190614b61565b811015611c6757600080fd5b8060038190555050565b611c7a33611a45565b611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090614a01565b60405180910390fd5b6103e8600254611cc99190614b61565b811015611cd557600080fd5b8060048190555050565b611ce833611a45565b611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90614a01565b60405180910390fd5b611d338161dead61352d565b43602781905550611d5160255460245461377990919063ffffffff16565b6024819055506023546024541115611d7f576000602260146101000a81548160ff0219169083151502179055505b50565b611d8b33611a45565b611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190614a01565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e2e33611a45565b611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490614a01565b60405180910390fd5b8360168190555082601781905550816018819055508060198190555080828486611e979190614abc565b611ea19190614abc565b611eab9190614abc565b601a8190555050505050565b602b60009054906101000a900460ff1681565b60245481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60045481565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601c5481565b60086020528060005260406000206000915054906101000a900460ff1681565b60145481565b60195481565b601b5481565b60606040518060400160405280600681526020017f62447562627a0000000000000000000000000000000000000000000000000000815250905090565b611ff233611a45565b612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614a01565b60405180910390fd5b620dbba0811061204057600080fd5b80602a8190555050565b61205333611a45565b612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990614a01565b60405180910390fd5b81602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612171338484612b7e565b905092915050565b60185481565b61218833611a45565b6121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90614a01565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60275481565b601f5481565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61225c33611a45565b61229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614a01565b60405180910390fd5b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602a546040518263ffffffff1660e01b81526004016122f891906143ba565b600060405180830381600087803b15801561231257600080fd5b505af1925050508015612323575060015b50565b60205481565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61235b33611a45565b61239a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239190614a01565b60405180910390fd5b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561240457600080fd5b505af193505050508015612416575060015b50565b6000612484612426611923565b6124766124676002612459601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ed0565b61378f90919063ffffffff16565b8561378f90919063ffffffff16565b612b1390919063ffffffff16565b9050919050565b602d60009054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61252e33611a45565b61256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256490614a01565b60405180910390fd5b81602b60006101000a81548160ff02191690831515021790555080602c819055505050565b61259b33611a45565b6125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d190614a01565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61263e33611a45565b61267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490614a01565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516127439190614c47565b60405180910390a150565b61275733611a45565b612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d90614a01565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128205750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61282957600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561291b57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016128e4929190614c9d565b600060405180830381600087803b1580156128fe57600080fd5b505af1158015612912573d6000803e3d6000fd5b505050506129ea565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016129b7929190614bbb565b600060405180830381600087803b1580156129d157600080fd5b505af11580156129e5573d6000803e3d6000fd5b505050505b5050565b6129f733611a45565b612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614a01565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008183612b219190614b61565b905092915050565b6000838311158290612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b689190614535565b60405180910390fd5b5082840390509392505050565b6000602d60009054906101000a900460ff1615612ba757612ba08484846137a5565b9050613510565b612baf613978565b158015612c095750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612c625750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612cbe57600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cbd57600080fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d625750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612daf57612d6f613978565b612dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da590614d12565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e3557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612e6f575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec95750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612f235750602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612f7d5750602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612fe1576000612f8d84611ed0565b90506004548382612f9e9190614abc565b1115612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd690614da4565b60405180910390fd5b505b612feb8483613985565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361304957613048613a22565b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130a7576130a6613a51565b5b6130af613a80565b156130bd576130bc613b57565b5b6130c56140f7565b156130d3576130d26141aa565b5b61315c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b299092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006131aa85614206565b6131b457826131bf565b6131be848461425d565b5b905061321381600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461377990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661333957602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866132ef88611ed0565b6040518363ffffffff1660e01b815260040161330c929190614bbb565b600060405180830381600087803b15801561332657600080fd5b505af1925050508015613337575060015b505b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661341c57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856133d287611ed0565b6040518363ffffffff1660e01b81526004016133ef929190614bbb565b600060405180830381600087803b15801561340957600080fd5b505af192505050801561341a575060015b505b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602a546040518263ffffffff1660e01b815260040161347991906143ba565b600060405180830381600087803b15801561349357600080fd5b505af19250505080156134a4575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161350291906143ba565b60405180910390a360019150505b9392505050565b600081836135259190614dc4565b905092915050565b6001602d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561356557613564614df8565b5b6040519080825280602002602001820160405280156135935781602001602082028036833780820191505090505b509050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136279190614e3c565b8160008151811061363b5761363a614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061368a57613689614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b81526004016137279493929190614f56565b6000604051808303818588803b15801561374057600080fd5b505af1158015613754573d6000803e3d6000fd5b5050505050506000602d60006101000a81548160ff0219169083151502179055505050565b600081836137879190614abc565b905092915050565b6000818361379d9190614af0565b905092915050565b6000613830826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b299092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138c582600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461377990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161396591906143ba565b60405180910390a3600190509392505050565b600080601f541415905090565b600354811115806139df5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1590614fee565b60405180910390fd5b5050565b601154600b81905550601254600c81905550601354600d81905550601454600e81905550601554600f81905550565b601654600b81905550601754600c81905550601854600d81905550601954600e81905550601a54600f81905550565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613aed5750602d60009054906101000a900460ff16155b8015613b055750602b60009054906101000a900460ff165b8015613b525750602c54600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602d60006101000a81548160ff0219169083151502179055506000613b82601b54601c546113e8565b613b8e57600b54613b91565b60005b90506000613bd16002613bc3600f54613bb586602c5461378f90919063ffffffff16565b612b1390919063ffffffff16565b612b1390919063ffffffff16565b90506000613bea82602c5461351790919063ffffffff16565b90506000600267ffffffffffffffff811115613c0957613c08614df8565b5b604051908082528060200260200182016040528015613c375781602001602082028036833780820191505090505b5090503081600081518110613c4f57613c4e614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1a9190614e3c565b81600181518110613d2e57613d2d614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613dd195949392919061500e565b600060405180830381600087803b158015613deb57600080fd5b505af1158015613dff573d6000803e3d6000fd5b505050506000613e18824761351790919063ffffffff16565b90506000613e44613e33600289612b1390919063ffffffff16565b600f5461351790919063ffffffff16565b90506000613e806002613e7284613e648c8861378f90919063ffffffff16565b612b1390919063ffffffff16565b612b1390919063ffffffff16565b90506000613eab83613e9d600d548761378f90919063ffffffff16565b612b1390919063ffffffff16565b90506000613ed684613ec8600e548861378f90919063ffffffff16565b612b1390919063ffffffff16565b9050602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f4257600080fd5b505af193505050508015613f54575060015b50602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fbd573d6000803e3d6000fd5b5060008911156140d057601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161405096959493929190615068565b60606040518083038185885af115801561406e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061409391906150de565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516140c7929190614b92565b60405180910390a15b505050505050505050506000602d60006101000a81548160ff021916908315150217905550565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156141645750602d60009054906101000a900460ff16155b801561417c5750602260149054906101000a900460ff165b80156141975750436026546027546141949190614abc565b11155b80156141a557506025544710155b905090565b6141b860255461dead61352d565b436027819055506141d660255460245461377990919063ffffffff16565b6024819055506023546024541115614204576000602260146101000a81548160ff0219169083151502179055505b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008061428960105461427b600f548661378f90919063ffffffff16565b612b1390919063ffffffff16565b90506142dd81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461377990919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161437d91906143ba565b60405180910390a3614398818461351790919063ffffffff16565b91505092915050565b6000819050919050565b6143b4816143a1565b82525050565b60006020820190506143cf60008301846143ab565b92915050565b600080fd5b60008115159050919050565b6143ef816143da565b81146143fa57600080fd5b50565b60008135905061440c816143e6565b92915050565b61441b816143a1565b811461442657600080fd5b50565b60008135905061443881614412565b92915050565b60008060008060808587031215614458576144576143d5565b5b6000614466878288016143fd565b945050602061447787828801614429565b935050604061448887828801614429565b925050606061449987828801614429565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156144df5780820151818401526020810190506144c4565b60008484015250505050565b6000601f19601f8301169050919050565b6000614507826144a5565b61451181856144b0565b93506145218185602086016144c1565b61452a816144eb565b840191505092915050565b6000602082019050818103600083015261454f81846144fc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061458282614557565b9050919050565b61459281614577565b811461459d57600080fd5b50565b6000813590506145af81614589565b92915050565b600080604083850312156145cc576145cb6143d5565b5b60006145da858286016145a0565b92505060206145eb85828601614429565b9150509250929050565b6145fe816143da565b82525050565b600060208201905061461960008301846145f5565b92915050565b60008060408385031215614636576146356143d5565b5b600061464485828601614429565b925050602061465585828601614429565b9150509250929050565b60008060008060808587031215614679576146786143d5565b5b600061468787828801614429565b945050602061469887828801614429565b93505060406146a987828801614429565b92505060606146ba87828801614429565b91505092959194509250565b6000602082840312156146dc576146db6143d5565b5b60006146ea84828501614429565b91505092915050565b6146fc81614577565b82525050565b600060208201905061471760008301846146f3565b92915050565b60008060408385031215614734576147336143d5565b5b6000614742858286016145a0565b9250506020614753858286016143fd565b9150509250929050565b600080600060608486031215614776576147756143d5565b5b6000614784868287016145a0565b9350506020614795868287016145a0565b92505060406147a686828701614429565b9150509250925092565b6000602082840312156147c6576147c56143d5565b5b60006147d4848285016145a0565b91505092915050565b600060ff82169050919050565b6147f3816147dd565b82525050565b600060208201905061480e60008301846147ea565b92915050565b6000806040838503121561482b5761482a6143d5565b5b6000614839858286016145a0565b925050602061484a858286016145a0565b9150509250929050565b6000819050919050565b600061487961487461486f84614557565b614854565b614557565b9050919050565b600061488b8261485e565b9050919050565b600061489d82614880565b9050919050565b6148ad81614892565b82525050565b60006020820190506148c860008301846148a4565b92915050565b600080604083850312156148e5576148e46143d5565b5b60006148f3858286016143fd565b925050602061490485828601614429565b9150509250929050565b600061491982614557565b9050919050565b6149298161490e565b811461493457600080fd5b50565b60008135905061494681614920565b92915050565b600060208284031215614962576149616143d5565b5b600061497084828501614937565b91505092915050565b600061498482614880565b9050919050565b61499481614979565b82525050565b60006020820190506149af600083018461498b565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149eb6006836144b0565b91506149f6826149b5565b602082019050919050565b60006020820190508181036000830152614a1a816149de565b9050919050565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b6000614a576014836144b0565b9150614a6282614a21565b602082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ac7826143a1565b9150614ad2836143a1565b9250828201905080821115614aea57614ae9614a8d565b5b92915050565b6000614afb826143a1565b9150614b06836143a1565b9250828202614b14816143a1565b91508282048414831517614b2b57614b2a614a8d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b6c826143a1565b9150614b77836143a1565b925082614b8757614b86614b32565b5b828204905092915050565b6000604082019050614ba760008301856143ab565b614bb460208301846143ab565b9392505050565b6000604082019050614bd060008301856146f3565b614bdd60208301846143ab565b9392505050565b600081519050614bf3816143e6565b92915050565b600060208284031215614c0f57614c0e6143d5565b5b6000614c1d84828501614be4565b91505092915050565b6000614c3182614880565b9050919050565b614c4181614c26565b82525050565b6000602082019050614c5c6000830184614c38565b92915050565b6000819050919050565b6000614c87614c82614c7d84614c62565b614854565b6143a1565b9050919050565b614c9781614c6c565b82525050565b6000604082019050614cb260008301856146f3565b614cbf6020830184614c8e565b9392505050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614cfc6014836144b0565b9150614d0782614cc6565b602082019050919050565b60006020820190508181036000830152614d2b81614cef565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000614d8e603e836144b0565b9150614d9982614d32565b604082019050919050565b60006020820190508181036000830152614dbd81614d81565b9050919050565b6000614dcf826143a1565b9150614dda836143a1565b9250828203905081811115614df257614df1614a8d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614e3681614589565b92915050565b600060208284031215614e5257614e516143d5565b5b6000614e6084828501614e27565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecd81614577565b82525050565b6000614edf8383614ec4565b60208301905092915050565b6000602082019050919050565b6000614f0382614e98565b614f0d8185614ea3565b9350614f1883614eb4565b8060005b83811015614f49578151614f308882614ed3565b9750614f3b83614eeb565b925050600181019050614f1c565b5085935050505092915050565b6000608082019050614f6b6000830187614c8e565b8181036020830152614f7d8186614ef8565b9050614f8c60408301856146f3565b614f9960608301846143ab565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fd86011836144b0565b9150614fe382614fa2565b602082019050919050565b6000602082019050818103600083015261500781614fcb565b9050919050565b600060a08201905061502360008301886143ab565b6150306020830187614c8e565b81810360408301526150428186614ef8565b905061505160608301856146f3565b61505e60808301846143ab565b9695505050505050565b600060c08201905061507d60008301896146f3565b61508a60208301886143ab565b6150976040830187614c8e565b6150a46060830186614c8e565b6150b160808301856146f3565b6150be60a08301846143ab565b979650505050505050565b6000815190506150d881614412565b92915050565b6000806000606084860312156150f7576150f66143d5565b5b6000615105868287016150c9565b9350506020615116868287016150c9565b9250506040615127868287016150c9565b915050925092509256fea26469706673582212206234caddcdca1c1ec94aa6bff2c0d0c74dfad6b4f627eade7084e809f54ab1e864736f6c6343000811003360806040527338029c62dfa30d9fd3cadf4c64e9b2ab21dbda17600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600b55610e10600c55678ac7230489e80000600d553480156200008b57600080fd5b5060405162001cb438038062001cb48339818101604052810190620000b19190620001f4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200010157737a250d5630b4cf539739df2c5dacb4c659f2488d62000103565b805b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000226565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001bc826200018f565b9050919050565b620001ce81620001af565b8114620001da57600080fd5b50565b600081519050620001ee81620001c3565b92915050565b6000602082840312156200020d576200020c6200018a565b5b60006200021d84828501620001dd565b91505092915050565b611a7e80620002366000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b60405161010491906113f4565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f919061149e565b61032d565b005b34801561014257600080fd5b5061015d600480360381019061015891906114de565b6105ec565b60405161016a91906113f4565b60405180910390f35b34801561017f57600080fd5b5061019a6004803603810190610195919061150b565b610705565b005b3480156101a857600080fd5b506101b161076f565b6040516101be91906113f4565b60405180910390f35b3480156101d357600080fd5b506101dc610775565b6040516101e991906113f4565b60405180910390f35b3480156101fe57600080fd5b5061020761077b565b60405161021491906113f4565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f91906114de565b610781565b6040516102539392919061154b565b60405180910390f35b6102646107ab565b005b34801561027257600080fd5b5061027b610beb565b60405161028891906113f4565b60405180910390f35b34801561029d57600080fd5b506102a6610bf1565b6040516102b391906113f4565b60405180910390f35b3480156102c857600080fd5b506102d1610bf7565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190611582565b610c02565b005b34801561030857600080fd5b50610311610d95565b60405161031e91906113f4565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d9b565b5b60008111801561042c57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a8261102e565b6104a1565b60008114801561049157506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f826110dd565b5b5b61050a816104fc600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007546112e490919063ffffffff16565b6112fa90919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611310565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106405760009050610700565b600061068d600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611310565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e857600092505050610700565b6106fb81836112e490919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075d57600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086091906115be565b602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a191906115ee565b90506000600267ffffffffffffffff8111156108c0576108bf61161b565b5b6040519080825280602002602001820160405280156108ee5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610982919061165f565b816000815181106109965761099561168c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a0757610a0661168c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610aa494939291906117be565b6000604051808303818588803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b50505050506000610b8683600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b3791906115be565b602060405180830381865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7891906115ee565b6112e490919063ffffffff16565b9050610b9d816008546112fa90919063ffffffff16565b600881905550610be0610bcf600754610bc184600b5461134290919063ffffffff16565b61135890919063ffffffff16565b600a546112fa90919063ffffffff16565b600a81905550505050565b600a5481565b60095481565b610c0033610d9b565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5a57600080fd5b6000600380549050905060008103610c725750610d92565b6000805a905060005b8483108015610c8957508381105b15610d8d5783600e5410610ca0576000600e819055505b610ce96003600e5481548110610cb957610cb861168c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661136e565b15610d3857610d376003600e5481548110610d0757610d0661168c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d9b565b5b610d5d610d4e5a846112e490919063ffffffff16565b846112fa90919063ffffffff16565b92505a9150600e6000815480929190610d7590611839565b91905055508080610d8590611839565b915050610c7b565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154031561102b576000610df1826105ec565b9050600081111561102957610e11816009546112fa90919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e74929190611881565b6020604051808303816000875af1158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb791906118e2565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5181600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546112fa90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610fe2600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611310565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506110f1919061190f565b815481106111025761110161168c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111805761117f61168c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546004600060036001600380549050611220919061190f565b815481106112315761123061168c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060038054806112ac576112ab611943565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836112f2919061190f565b905092915050565b600081836113089190611972565b905092915050565b600061133b600b5461132d600a548561134290919063ffffffff16565b61135890919063ffffffff16565b9050919050565b6000818361135091906119a6565b905092915050565b600081836113669190611a17565b905092915050565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113be9190611972565b1080156113d45750600d546113d2836105ec565b115b9050919050565b6000819050919050565b6113ee816113db565b82525050565b600060208201905061140960008301846113e5565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061143f82611414565b9050919050565b61144f81611434565b811461145a57600080fd5b50565b60008135905061146c81611446565b92915050565b61147b816113db565b811461148657600080fd5b50565b60008135905061149881611472565b92915050565b600080604083850312156114b5576114b461140f565b5b60006114c38582860161145d565b92505060206114d485828601611489565b9150509250929050565b6000602082840312156114f4576114f361140f565b5b60006115028482850161145d565b91505092915050565b600080604083850312156115225761152161140f565b5b600061153085828601611489565b925050602061154185828601611489565b9150509250929050565b600060608201905061156060008301866113e5565b61156d60208301856113e5565b61157a60408301846113e5565b949350505050565b6000602082840312156115985761159761140f565b5b60006115a684828501611489565b91505092915050565b6115b881611434565b82525050565b60006020820190506115d360008301846115af565b92915050565b6000815190506115e881611472565b92915050565b6000602082840312156116045761160361140f565b5b6000611612848285016115d9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061165981611446565b92915050565b6000602082840312156116755761167461140f565b5b60006116838482850161164a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006116ea6116e56116e0846116bb565b6116c5565b6113db565b9050919050565b6116fa816116cf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61173581611434565b82525050565b6000611747838361172c565b60208301905092915050565b6000602082019050919050565b600061176b82611700565b611775818561170b565b93506117808361171c565b8060005b838110156117b1578151611798888261173b565b97506117a383611753565b925050600181019050611784565b5085935050505092915050565b60006080820190506117d360008301876116f1565b81810360208301526117e58186611760565b90506117f460408301856115af565b61180160608301846113e5565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611844826113db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118765761187561180a565b5b600182019050919050565b600060408201905061189660008301856115af565b6118a360208301846113e5565b9392505050565b60008115159050919050565b6118bf816118aa565b81146118ca57600080fd5b50565b6000815190506118dc816118b6565b92915050565b6000602082840312156118f8576118f761140f565b5b6000611906848285016118cd565b91505092915050565b600061191a826113db565b9150611925836113db565b925082820390508181111561193d5761193c61180a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061197d826113db565b9150611988836113db565b92508282019050808211156119a05761199f61180a565b5b92915050565b60006119b1826113db565b91506119bc836113db565b92508282026119ca816113db565b915082820484148315176119e1576119e061180a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a22826113db565b9150611a2d836113db565b925082611a3d57611a3c6119e8565b5b82820490509291505056fea264697066735822122043b4dc02c79813910e61bc01ee4ea51f52d07e4353bcabe36194ac4b540b588f64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106104405760003560e01c80636e78eb4911610234578063b6a5d7de1161012e578063d8306786116100b6578063f708a64f1161007a578063f708a64f1461109f578063f84ba65d146110c8578063f887ea40146110f1578063fb5f27fb1461111c578063fe9fbb801461114757610447565b8063d830678614610fbc578063dd62ed3e14610fe7578063df20fd4914611024578063f0b37c041461104d578063f2fde38b1461107657610447565b8063c33fb877116100fd578063c33fb87714610f08578063c6d2577d14610f1f578063ca33e64c14610f4a578063d0e30db014610f75578063d51ed1c814610f7f57610447565b8063b6a5d7de14610e5e578063b91854f414610e87578063bf56b37114610eb2578063bfe1092814610edd57610447565b80638b81f868116101bc578063a4b45c0011610180578063a4b45c0014610d77578063a51af4c514610da0578063a8aa1b3114610dcb578063a9059cbb14610df6578063ac45ed1c14610e3357610447565b80638b81f86814610ca2578063920eee6f14610ccd57806392258ec814610cf857806395d89b4114610d235780639d1944f514610d4e57610447565b806382247ec01161020357806382247ec014610bb957806382d2011614610be4578063893d20e814610c0f5780638ab6ffc714610c3a5780638b42507f14610c6557610447565b80636e78eb4914610ae957806370a0823114610b145780637d1db4a514610b515780638072250b14610b7c57610447565b80632f54bf6e1161034557806353148416116102cd5780635d0044ca116102915780635d0044ca14610a1a57806363a9549214610a43578063658d4b7f14610a6c5780636c5b285514610a955780636ddd171314610abe57610447565b80635314841614610933578063571ac8b01461095e578063591cf08d1461099b5780635a53c1fb146109c65780635c85974f146109f157610447565b80633bb8a8d4116103145780633bb8a8d4146108385780633f4218e014610863578063409d0566146108a05780634355855a146108cb5780634896a6321461090857610447565b80632f54bf6e14610768578063313ce567146107a557806333f3d628146107d057806337bc957e1461080d57610447565b806318160ddd116103c8578063215a62d411610397578063215a62d41461068357806323b872dd146106ac5780632b112e49146106e95780632d48e896146107145780632e4a9bd71461073d57610447565b806318160ddd146105db5780631da1db5e146106065780631f619a641461062f578063201e79911461065a57610447565b8063095ea7b31161040f578063095ea7b3146104e25780631107b3a51461051f5780631161ae391461054a578063178d9b8e14610587578063180b0d7e146105b057610447565b806301339c211461044c5780630445b66714610463578063048c7baf1461048e57806306fdde03146104b757610447565b3661044757005b600080fd5b34801561045857600080fd5b50610461611184565b005b34801561046f57600080fd5b50610478611221565b60405161048591906143ba565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b0919061443e565b611227565b005b3480156104c357600080fd5b506104cc6112b3565b6040516104d99190614535565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906145b5565b6112f0565b6040516105169190614604565b60405180910390f35b34801561052b57600080fd5b506105346113e2565b60405161054191906143ba565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c919061461f565b6113e8565b60405161057e9190614604565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a9919061465f565b6113fd565b005b3480156105bc57600080fd5b506105c561148f565b6040516105d291906143ba565b60405180910390f35b3480156105e757600080fd5b506105f0611495565b6040516105fd91906143ba565b60405180910390f35b34801561061257600080fd5b5061062d600480360381019061062891906146c6565b61149f565b005b34801561063b57600080fd5b50610644611570565b6040516106519190614702565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c919061461f565b611596565b005b34801561068f57600080fd5b506106aa60048036038101906106a5919061471d565b6115f0565b005b3480156106b857600080fd5b506106d360048036038101906106ce919061475d565b611741565b6040516106e09190614604565b60405180910390f35b3480156106f557600080fd5b506106fe611923565b60405161070b91906143ba565b60405180910390f35b34801561072057600080fd5b5061073b6004803603810190610736919061461f565b611964565b005b34801561074957600080fd5b50610752611a3f565b60405161075f91906143ba565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906147b0565b611a45565b60405161079c9190614604565b60405180910390f35b3480156107b157600080fd5b506107ba611a9e565b6040516107c791906147f9565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906145b5565b611aa7565b6040516108049190614604565b60405180910390f35b34801561081957600080fd5b50610822611b77565b60405161082f91906143ba565b60405180910390f35b34801561084457600080fd5b5061084d611b7d565b60405161085a9190614604565b60405180910390f35b34801561086f57600080fd5b5061088a600480360381019061088591906147b0565b611b90565b6040516108979190614604565b60405180910390f35b3480156108ac57600080fd5b506108b5611bb0565b6040516108c291906143ba565b60405180910390f35b3480156108d757600080fd5b506108f260048036038101906108ed91906147b0565b611bb6565b6040516108ff9190614604565b60405180910390f35b34801561091457600080fd5b5061091d611bd6565b60405161092a91906143ba565b60405180910390f35b34801561093f57600080fd5b50610948611bdc565b60405161095591906143ba565b60405180910390f35b34801561096a57600080fd5b50610985600480360381019061098091906147b0565b611be2565b6040516109929190614604565b60405180910390f35b3480156109a757600080fd5b506109b0611bf7565b6040516109bd91906143ba565b60405180910390f35b3480156109d257600080fd5b506109db611bfd565b6040516109e891906143ba565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a1391906146c6565b611c03565b005b348015610a2657600080fd5b50610a416004803603810190610a3c91906146c6565b611c71565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a6591906146c6565b611cdf565b005b348015610a7857600080fd5b50610a936004803603810190610a8e919061471d565b611d82565b005b348015610aa157600080fd5b50610abc6004803603810190610ab7919061465f565b611e25565b005b348015610aca57600080fd5b50610ad3611eb7565b604051610ae09190614604565b60405180910390f35b348015610af557600080fd5b50610afe611eca565b604051610b0b91906143ba565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b3691906147b0565b611ed0565b604051610b4891906143ba565b60405180910390f35b348015610b5d57600080fd5b50610b66611f19565b604051610b7391906143ba565b60405180910390f35b348015610b8857600080fd5b50610ba36004803603810190610b9e91906147b0565b611f1f565b604051610bb09190614604565b60405180910390f35b348015610bc557600080fd5b50610bce611f3f565b604051610bdb91906143ba565b60405180910390f35b348015610bf057600080fd5b50610bf9611f45565b604051610c0691906143ba565b60405180910390f35b348015610c1b57600080fd5b50610c24611f4b565b604051610c319190614702565b60405180910390f35b348015610c4657600080fd5b50610c4f611f74565b604051610c5c91906143ba565b60405180910390f35b348015610c7157600080fd5b50610c8c6004803603810190610c8791906147b0565b611f7a565b604051610c999190614604565b60405180910390f35b348015610cae57600080fd5b50610cb7611f9a565b604051610cc491906143ba565b60405180910390f35b348015610cd957600080fd5b50610ce2611fa0565b604051610cef91906143ba565b60405180910390f35b348015610d0457600080fd5b50610d0d611fa6565b604051610d1a91906143ba565b60405180910390f35b348015610d2f57600080fd5b50610d38611fac565b604051610d459190614535565b60405180910390f35b348015610d5a57600080fd5b50610d756004803603810190610d7091906146c6565b611fe9565b005b348015610d8357600080fd5b50610d9e6004803603810190610d999190614814565b61204a565b005b348015610dac57600080fd5b50610db5612118565b604051610dc29190614702565b60405180910390f35b348015610dd757600080fd5b50610de061213e565b604051610ded9190614702565b60405180910390f35b348015610e0257600080fd5b50610e1d6004803603810190610e1891906145b5565b612164565b604051610e2a9190614604565b60405180910390f35b348015610e3f57600080fd5b50610e48612179565b604051610e5591906143ba565b60405180910390f35b348015610e6a57600080fd5b50610e856004803603810190610e8091906147b0565b61217f565b005b348015610e9357600080fd5b50610e9c612221565b604051610ea991906143ba565b60405180910390f35b348015610ebe57600080fd5b50610ec7612227565b604051610ed491906143ba565b60405180910390f35b348015610ee957600080fd5b50610ef261222d565b604051610eff91906148b3565b60405180910390f35b348015610f1457600080fd5b50610f1d612253565b005b348015610f2b57600080fd5b50610f34612326565b604051610f4191906143ba565b60405180910390f35b348015610f5657600080fd5b50610f5f61232c565b604051610f6c9190614702565b60405180910390f35b610f7d612352565b005b348015610f8b57600080fd5b50610fa66004803603810190610fa191906146c6565b612419565b604051610fb391906143ba565b60405180910390f35b348015610fc857600080fd5b50610fd161248b565b604051610fde9190614604565b60405180910390f35b348015610ff357600080fd5b5061100e60048036038101906110099190614814565b61249e565b60405161101b91906143ba565b60405180910390f35b34801561103057600080fd5b5061104b600480360381019061104691906148ce565b612525565b005b34801561105957600080fd5b50611074600480360381019061106f91906147b0565b612592565b005b34801561108257600080fd5b5061109d6004803603810190611098919061494c565b612635565b005b3480156110ab57600080fd5b506110c660048036038101906110c1919061471d565b61274e565b005b3480156110d457600080fd5b506110ef60048036038101906110ea919061471d565b6129ee565b005b3480156110fd57600080fd5b50611106612a91565b604051611113919061499a565b60405180910390f35b34801561112857600080fd5b50611131612ab7565b60405161113e91906143ba565b60405180910390f35b34801561115357600080fd5b5061116e600480360381019061116991906147b0565b612abd565b60405161117b9190614604565b60405180910390f35b61118d33611a45565b6111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390614a01565b60405180910390fd5b6000601f5414611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890614a6d565b60405180910390fd5b43601f8190555042602081905550565b602c5481565b61123033611a45565b61126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690614a01565b60405180910390fd5b83602260146101000a81548160ff02191690831515021790555082602381905550600060248190555081602581905550806026819055504360278190555050505050565b60606040518060400160405280600a81526020017f4261627920447562627a00000000000000000000000000000000000000000000815250905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113d091906143ba565b60405180910390a36001905092915050565b60165481565b6000826113f483612419565b11905092915050565b61140633611a45565b611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614a01565b60405180910390fd5b836011819055508260128190555081601381905550806014819055508082848661146f9190614abc565b6114799190614abc565b6114839190614abc565b60158190555050505050565b60105481565b6000600254905090565b6114a833611a45565b6114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90614a01565b60405180910390fd5b6000479050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846115369190614af0565b6115409190614b61565b9081150290604051600060405180830381858888f1935050505015801561156b573d6000803e3d6000fd5b505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61159f33611a45565b6115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590614a01565b60405180910390fd5b81601b8190555080601c819055505050565b6115f933611a45565b611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614a01565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461190f5761188e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b299092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61191a848484612b7e565b90509392505050565b600061195f6119326000611ed0565b61195161194061dead611ed0565b60025461351790919063ffffffff16565b61351790919063ffffffff16565b905090565b61196d33611a45565b6119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390614a01565b60405180910390fd5b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611a09929190614b92565b600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b505050505050565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6000611ab233611a45565b611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890614a01565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611b2c929190614bbb565b6020604051808303816000875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f9190614bf9565b905092915050565b60175481565b602260149054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60135481565b60096020528060005260406000206000915054906101000a900460ff1681565b60255481565b601a5481565b6000611bf0826002546112f0565b9050919050565b60235481565b60265481565b611c0c33611a45565b611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290614a01565b60405180910390fd5b6103e8600254611c5b9190614b61565b811015611c6757600080fd5b8060038190555050565b611c7a33611a45565b611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090614a01565b60405180910390fd5b6103e8600254611cc99190614b61565b811015611cd557600080fd5b8060048190555050565b611ce833611a45565b611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90614a01565b60405180910390fd5b611d338161dead61352d565b43602781905550611d5160255460245461377990919063ffffffff16565b6024819055506023546024541115611d7f576000602260146101000a81548160ff0219169083151502179055505b50565b611d8b33611a45565b611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190614a01565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e2e33611a45565b611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490614a01565b60405180910390fd5b8360168190555082601781905550816018819055508060198190555080828486611e979190614abc565b611ea19190614abc565b611eab9190614abc565b601a8190555050505050565b602b60009054906101000a900460ff1681565b60245481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60045481565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601c5481565b60086020528060005260406000206000915054906101000a900460ff1681565b60145481565b60195481565b601b5481565b60606040518060400160405280600681526020017f62447562627a0000000000000000000000000000000000000000000000000000815250905090565b611ff233611a45565b612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202890614a01565b60405180910390fd5b620dbba0811061204057600080fd5b80602a8190555050565b61205333611a45565b612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990614a01565b60405180910390fd5b81602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612171338484612b7e565b905092915050565b60185481565b61218833611a45565b6121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90614a01565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60275481565b601f5481565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61225c33611a45565b61229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614a01565b60405180910390fd5b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602a546040518263ffffffff1660e01b81526004016122f891906143ba565b600060405180830381600087803b15801561231257600080fd5b505af1925050508015612323575060015b50565b60205481565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61235b33611a45565b61239a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239190614a01565b60405180910390fd5b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561240457600080fd5b505af193505050508015612416575060015b50565b6000612484612426611923565b6124766124676002612459601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ed0565b61378f90919063ffffffff16565b8561378f90919063ffffffff16565b612b1390919063ffffffff16565b9050919050565b602d60009054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61252e33611a45565b61256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256490614a01565b60405180910390fd5b81602b60006101000a81548160ff02191690831515021790555080602c819055505050565b61259b33611a45565b6125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d190614a01565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61263e33611a45565b61267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490614a01565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516127439190614c47565b60405180910390a150565b61275733611a45565b612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d90614a01565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128205750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61282957600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561291b57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016128e4929190614c9d565b600060405180830381600087803b1580156128fe57600080fd5b505af1158015612912573d6000803e3d6000fd5b505050506129ea565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016129b7929190614bbb565b600060405180830381600087803b1580156129d157600080fd5b505af11580156129e5573d6000803e3d6000fd5b505050505b5050565b6129f733611a45565b612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614a01565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008183612b219190614b61565b905092915050565b6000838311158290612b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b689190614535565b60405180910390fd5b5082840390509392505050565b6000602d60009054906101000a900460ff1615612ba757612ba08484846137a5565b9050613510565b612baf613978565b158015612c095750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612c625750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612cbe57600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cbd57600080fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d625750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612daf57612d6f613978565b612dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da590614d12565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e3557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612e6f575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec95750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612f235750602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612f7d5750602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612fe1576000612f8d84611ed0565b90506004548382612f9e9190614abc565b1115612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd690614da4565b60405180910390fd5b505b612feb8483613985565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361304957613048613a22565b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130a7576130a6613a51565b5b6130af613a80565b156130bd576130bc613b57565b5b6130c56140f7565b156130d3576130d26141aa565b5b61315c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b299092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006131aa85614206565b6131b457826131bf565b6131be848461425d565b5b905061321381600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461377990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661333957602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866132ef88611ed0565b6040518363ffffffff1660e01b815260040161330c929190614bbb565b600060405180830381600087803b15801561332657600080fd5b505af1925050508015613337575060015b505b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661341c57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856133d287611ed0565b6040518363ffffffff1660e01b81526004016133ef929190614bbb565b600060405180830381600087803b15801561340957600080fd5b505af192505050801561341a575060015b505b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602a546040518263ffffffff1660e01b815260040161347991906143ba565b600060405180830381600087803b15801561349357600080fd5b505af19250505080156134a4575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161350291906143ba565b60405180910390a360019150505b9392505050565b600081836135259190614dc4565b905092915050565b6001602d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561356557613564614df8565b5b6040519080825280602002602001820160405280156135935781602001602082028036833780820191505090505b509050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136279190614e3c565b8160008151811061363b5761363a614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061368a57613689614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b81526004016137279493929190614f56565b6000604051808303818588803b15801561374057600080fd5b505af1158015613754573d6000803e3d6000fd5b5050505050506000602d60006101000a81548160ff0219169083151502179055505050565b600081836137879190614abc565b905092915050565b6000818361379d9190614af0565b905092915050565b6000613830826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b299092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138c582600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461377990919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161396591906143ba565b60405180910390a3600190509392505050565b600080601f541415905090565b600354811115806139df5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1590614fee565b60405180910390fd5b5050565b601154600b81905550601254600c81905550601354600d81905550601454600e81905550601554600f81905550565b601654600b81905550601754600c81905550601854600d81905550601954600e81905550601a54600f81905550565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613aed5750602d60009054906101000a900460ff16155b8015613b055750602b60009054906101000a900460ff165b8015613b525750602c54600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602d60006101000a81548160ff0219169083151502179055506000613b82601b54601c546113e8565b613b8e57600b54613b91565b60005b90506000613bd16002613bc3600f54613bb586602c5461378f90919063ffffffff16565b612b1390919063ffffffff16565b612b1390919063ffffffff16565b90506000613bea82602c5461351790919063ffffffff16565b90506000600267ffffffffffffffff811115613c0957613c08614df8565b5b604051908082528060200260200182016040528015613c375781602001602082028036833780820191505090505b5090503081600081518110613c4f57613c4e614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1a9190614e3c565b81600181518110613d2e57613d2d614e69565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613dd195949392919061500e565b600060405180830381600087803b158015613deb57600080fd5b505af1158015613dff573d6000803e3d6000fd5b505050506000613e18824761351790919063ffffffff16565b90506000613e44613e33600289612b1390919063ffffffff16565b600f5461351790919063ffffffff16565b90506000613e806002613e7284613e648c8861378f90919063ffffffff16565b612b1390919063ffffffff16565b612b1390919063ffffffff16565b90506000613eab83613e9d600d548761378f90919063ffffffff16565b612b1390919063ffffffff16565b90506000613ed684613ec8600e548861378f90919063ffffffff16565b612b1390919063ffffffff16565b9050602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f4257600080fd5b505af193505050508015613f54575060015b50602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fbd573d6000803e3d6000fd5b5060008911156140d057601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161405096959493929190615068565b60606040518083038185885af115801561406e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061409391906150de565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516140c7929190614b92565b60405180910390a15b505050505050505050506000602d60006101000a81548160ff021916908315150217905550565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156141645750602d60009054906101000a900460ff16155b801561417c5750602260149054906101000a900460ff165b80156141975750436026546027546141949190614abc565b11155b80156141a557506025544710155b905090565b6141b860255461dead61352d565b436027819055506141d660255460245461377990919063ffffffff16565b6024819055506023546024541115614204576000602260146101000a81548160ff0219169083151502179055505b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008061428960105461427b600f548661378f90919063ffffffff16565b612b1390919063ffffffff16565b90506142dd81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461377990919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161437d91906143ba565b60405180910390a3614398818461351790919063ffffffff16565b91505092915050565b6000819050919050565b6143b4816143a1565b82525050565b60006020820190506143cf60008301846143ab565b92915050565b600080fd5b60008115159050919050565b6143ef816143da565b81146143fa57600080fd5b50565b60008135905061440c816143e6565b92915050565b61441b816143a1565b811461442657600080fd5b50565b60008135905061443881614412565b92915050565b60008060008060808587031215614458576144576143d5565b5b6000614466878288016143fd565b945050602061447787828801614429565b935050604061448887828801614429565b925050606061449987828801614429565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156144df5780820151818401526020810190506144c4565b60008484015250505050565b6000601f19601f8301169050919050565b6000614507826144a5565b61451181856144b0565b93506145218185602086016144c1565b61452a816144eb565b840191505092915050565b6000602082019050818103600083015261454f81846144fc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061458282614557565b9050919050565b61459281614577565b811461459d57600080fd5b50565b6000813590506145af81614589565b92915050565b600080604083850312156145cc576145cb6143d5565b5b60006145da858286016145a0565b92505060206145eb85828601614429565b9150509250929050565b6145fe816143da565b82525050565b600060208201905061461960008301846145f5565b92915050565b60008060408385031215614636576146356143d5565b5b600061464485828601614429565b925050602061465585828601614429565b9150509250929050565b60008060008060808587031215614679576146786143d5565b5b600061468787828801614429565b945050602061469887828801614429565b93505060406146a987828801614429565b92505060606146ba87828801614429565b91505092959194509250565b6000602082840312156146dc576146db6143d5565b5b60006146ea84828501614429565b91505092915050565b6146fc81614577565b82525050565b600060208201905061471760008301846146f3565b92915050565b60008060408385031215614734576147336143d5565b5b6000614742858286016145a0565b9250506020614753858286016143fd565b9150509250929050565b600080600060608486031215614776576147756143d5565b5b6000614784868287016145a0565b9350506020614795868287016145a0565b92505060406147a686828701614429565b9150509250925092565b6000602082840312156147c6576147c56143d5565b5b60006147d4848285016145a0565b91505092915050565b600060ff82169050919050565b6147f3816147dd565b82525050565b600060208201905061480e60008301846147ea565b92915050565b6000806040838503121561482b5761482a6143d5565b5b6000614839858286016145a0565b925050602061484a858286016145a0565b9150509250929050565b6000819050919050565b600061487961487461486f84614557565b614854565b614557565b9050919050565b600061488b8261485e565b9050919050565b600061489d82614880565b9050919050565b6148ad81614892565b82525050565b60006020820190506148c860008301846148a4565b92915050565b600080604083850312156148e5576148e46143d5565b5b60006148f3858286016143fd565b925050602061490485828601614429565b9150509250929050565b600061491982614557565b9050919050565b6149298161490e565b811461493457600080fd5b50565b60008135905061494681614920565b92915050565b600060208284031215614962576149616143d5565b5b600061497084828501614937565b91505092915050565b600061498482614880565b9050919050565b61499481614979565b82525050565b60006020820190506149af600083018461498b565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149eb6006836144b0565b91506149f6826149b5565b602082019050919050565b60006020820190508181036000830152614a1a816149de565b9050919050565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b6000614a576014836144b0565b9150614a6282614a21565b602082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ac7826143a1565b9150614ad2836143a1565b9250828201905080821115614aea57614ae9614a8d565b5b92915050565b6000614afb826143a1565b9150614b06836143a1565b9250828202614b14816143a1565b91508282048414831517614b2b57614b2a614a8d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b6c826143a1565b9150614b77836143a1565b925082614b8757614b86614b32565b5b828204905092915050565b6000604082019050614ba760008301856143ab565b614bb460208301846143ab565b9392505050565b6000604082019050614bd060008301856146f3565b614bdd60208301846143ab565b9392505050565b600081519050614bf3816143e6565b92915050565b600060208284031215614c0f57614c0e6143d5565b5b6000614c1d84828501614be4565b91505092915050565b6000614c3182614880565b9050919050565b614c4181614c26565b82525050565b6000602082019050614c5c6000830184614c38565b92915050565b6000819050919050565b6000614c87614c82614c7d84614c62565b614854565b6143a1565b9050919050565b614c9781614c6c565b82525050565b6000604082019050614cb260008301856146f3565b614cbf6020830184614c8e565b9392505050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614cfc6014836144b0565b9150614d0782614cc6565b602082019050919050565b60006020820190508181036000830152614d2b81614cef565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000614d8e603e836144b0565b9150614d9982614d32565b604082019050919050565b60006020820190508181036000830152614dbd81614d81565b9050919050565b6000614dcf826143a1565b9150614dda836143a1565b9250828203905081811115614df257614df1614a8d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614e3681614589565b92915050565b600060208284031215614e5257614e516143d5565b5b6000614e6084828501614e27565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecd81614577565b82525050565b6000614edf8383614ec4565b60208301905092915050565b6000602082019050919050565b6000614f0382614e98565b614f0d8185614ea3565b9350614f1883614eb4565b8060005b83811015614f49578151614f308882614ed3565b9750614f3b83614eeb565b925050600181019050614f1c565b5085935050505092915050565b6000608082019050614f6b6000830187614c8e565b8181036020830152614f7d8186614ef8565b9050614f8c60408301856146f3565b614f9960608301846143ab565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fd86011836144b0565b9150614fe382614fa2565b602082019050919050565b6000602082019050818103600083015261500781614fcb565b9050919050565b600060a08201905061502360008301886143ab565b6150306020830187614c8e565b81810360408301526150428186614ef8565b905061505160608301856146f3565b61505e60808301846143ab565b9695505050505050565b600060c08201905061507d60008301896146f3565b61508a60208301886143ab565b6150976040830187614c8e565b6150a46060830186614c8e565b6150b160808301856146f3565b6150be60a08301846143ab565b979650505050505050565b6000815190506150d881614412565b92915050565b6000806000606084860312156150f7576150f66143d5565b5b6000615105868287016150c9565b9350506020615116868287016150c9565b9250506040615127868287016150c9565b915050925092509256fea26469706673582212206234caddcdca1c1ec94aa6bff2c0d0c74dfad6b4f627eade7084e809f54ab1e864736f6c63430008110033

Deployed Bytecode Sourcemap

21297:15992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34837:172;;;;;;;;;;;;;:::i;:::-;;23779:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32619:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25098:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25574:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22742:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37079:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34111:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22468:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24786:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33479:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23287:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36279:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36016:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26069:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36770:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36457:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22568:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1027:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24894:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33305:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22784:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23377:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22086:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22605:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22186:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23496:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22908:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25792:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23420:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23533:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35155:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35015;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32006:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35617:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33695:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23744:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23454:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25296:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21817:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22239:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21890:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22527:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25198:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22988:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22647:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22865:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22948:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24994:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36639:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34521:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23660:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23079:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25913:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22822:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;728:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23575:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23105:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23617:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33163:101;;;;;;;;;;;;;:::i;:::-;;23135:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23201:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32994:113;;;:::i;:::-;;36912:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23849:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25421:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35863;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;884:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1399:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35295:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35736:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23042:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22689;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1187:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34837:172;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;34901:1:::1;34887:10;;:15;34879:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;34947:12;34934:10;:25;;;;34988:15;34966:19;:37;;;;34837:172::o:0;23779:50::-;;;;:::o;32619:332::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32761:8:::1;32740:18;;:29;;;;;;;;;;;;;;;;;;32793:4;32776:14;:21;;;;32829:1;32804:22;:26;;;;32857:7;32837:17;:27;;;;32896:7;32871:22;:32;;;;32933:12;32910:20;:35;;;;32619:332:::0;;;;:::o;25098:92::-;25146:13;25177:5;;;;;;;;;;;;;;;;;25170:12;;25098:92;:::o;25574:210::-;25649:4;25699:6;25664:11;:23;25676:10;25664:23;;;;;;;;;;;;;;;:32;25688:7;25664:32;;;;;;;;;;;;;;;:41;;;;25740:7;25719:37;;25728:10;25719:37;;;25749:6;25719:37;;;;;;:::i;:::-;;;;;;;;25772:4;25765:11;;25574:210;;;;:::o;22742:37::-;;;;:::o;37079:144::-;37159:4;37211:6;37179:29;37199:8;37179:19;:29::i;:::-;:38;37172:45;;37079:144;;;;:::o;34111:404::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;34294:13:::1;34276:15;:31;;;;34330:11;34314:13;:27;;;;34367:14;34348:16;:33;;;;34407:14;34388:16;:33;;;;34494:14;34475;34459:11;34442:13;:29;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;;;:::i;:::-;34428:11;:81;;;;34111:404:::0;;;;:::o;22468:37::-;;;;:::o;24786:100::-;24841:7;24866:12;;24859:19;;24786:100;:::o;33479:210::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33558:17:::1;33578:21;33558:41;;33614:21;;;;;;;;;;;33606:39;;:77;33679:3;33659:16;33647:9;:28;;;;:::i;:::-;33646:36;;;;:::i;:::-;33606:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33551:138;33479:210:::0;:::o;23287:81::-;;;;;;;;;;;;;:::o;36279:172::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36390:7:::1;36372:15;:25;;;;36433:12;36404:26;:41;;;;36279:172:::0;;:::o;36016:257::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36145:6:::1;36107:27;:35;36135:6;36107:35;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;36226:6;36200:15;:23;36216:6;36200:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;36261:6;36239:11;:19;36251:6;36239:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;36016:257:::0;;:::o;26069:347::-;26169:4;26221:12;;26186:11;:19;26198:6;26186:19;;;;;;;;;;;;;;;:31;26206:10;26186:31;;;;;;;;;;;;;;;;:47;26182:173;;26278:69;26314:6;26278:69;;;;;;;;;;;;;;;;;:11;:19;26290:6;26278:19;;;;;;;;;;;;;;;:31;26298:10;26278:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;26244:11;:19;26256:6;26244:19;;;;;;;;;;;;;;;:31;26264:10;26244:31;;;;;;;;;;;;;;;:103;;;;26182:173;26370:40;26384:6;26392:9;26403:6;26370:13;:40::i;:::-;26363:47;;26069:347;;;;;:::o;36770:136::-;36823:7;36846:54;36884:15;21563:42;36884:9;:15::i;:::-;36846:33;36863:15;21484:42;36863:9;:15::i;:::-;36846:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;36839:61;;36770:136;:::o;36457:176::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36562:11:::1;;;;;;;;;;;:35;;;36598:10;36610:16;36562:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36457:176:::0;;:::o;22568:32::-;;;;:::o;1027:97::-;1082:4;1113:5;;;;;;;;;;;1102:16;;:7;:16;;;1095:23;;1027:97;;;:::o;24894:92::-;24946:5;21743:2;24962:16;;24894:92;:::o;33305:168::-;33390:12;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33425:12:::1;33418:29;;;33448:10;33460:6;33418:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33411:56;;33305:168:::0;;;;:::o;22784:33::-;;;;:::o;23377:38::-;;;;;;;;;;;;;:::o;22086:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;22605:37::-;;;;:::o;22186:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;23496:32::-;;;;:::o;22908:33::-;;;;:::o;25792:115::-;25847:4;25869:30;25877:7;25886:12;;25869:7;:30::i;:::-;25862:37;;25792:115;;;:::o;23420:29::-;;;;:::o;23533:37::-;;;;:::o;35155:134::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35250:4:::1;35235:12;;:19;;;;:::i;:::-;35225:6;:29;;35217:38;;;::::0;::::1;;35277:6;35262:12;:21;;;;35155:134:::0;:::o;35015:::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35112:4:::1;35097:12;;:19;;;;:::i;:::-;35087:6;:29;;35079:38;;;::::0;::::1;;35137:6;35124:10;:19;;;;35015:134:::0;:::o;32006:312::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32076:23:::1;32086:6;21484:42;32076:9;:23::i;:::-;32129:12;32106:20;:35;;;;32173:45;32200:17;;32173:22;;:26;;:45;;;;:::i;:::-;32148:22;:70;;;;32254:14;;32229:22;;:39;32225:88;;;32300:5;32279:18;;:26;;;;;;;;;;;;;;;;;;32225:88;32006:312:::0;:::o;35617:113::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35718:6:::1;35696:11;:19;35708:6;35696:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35617:113:::0;;:::o;33695:410::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33880:13:::1;33861:16;:32;;;;33917:11;33900:14;:28;;;;33955:14;33935:17;:34;;;;33996:14;33976:17;:34;;;;34084:14;34065;34049:11;34032:13;:29;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;;;:::i;:::-;34017:12;:82;;;;33695:410:::0;;;;:::o;23744:30::-;;;;;;;;;;;;;:::o;23454:37::-;;;;:::o;25296:117::-;25362:7;25387:9;:18;25397:7;25387:18;;;;;;;;;;;;;;;;25380:25;;25296:117;;;:::o;21817:51::-;;;;:::o;22239:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;21890:48::-;;;;:::o;22527:36::-;;;;:::o;25198:90::-;25250:7;25275:5;;;;;;;;;;;25268:12;;25198:90;:::o;22988:47::-;;;;:::o;22134:::-;;;;;;;;;;;;;;;;;;;;;;:::o;22647:37::-;;;;:::o;22865:38::-;;;;:::o;22948:35::-;;;;:::o;24994:96::-;25044:13;25075:7;;;;;;;;;;;;;;;;;25068:14;;24994:96;:::o;36639:125::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36724:6:::1;36718:3;:12;36710:21;;;::::0;::::1;;36755:3;36738:14;:20;;;;36639:125:::0;:::o;34521:220::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;34660:22:::1;34636:21;;:46;;;;;;;;;;;;;;;;;;34713:22;34689:21;;:46;;;;;;;;;;;;;;;;;;34521:220:::0;;:::o;23660:33::-;;;;;;;;;;;;;:::o;23079:19::-;;;;;;;;;;;;;:::o;25913:150::-;25993:4;26013:44;26027:10;26039:9;26050:6;26013:13;:44::i;:::-;26006:51;;25913:150;;;;:::o;22822:38::-;;;;:::o;728:88::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;806:4:::1;784:14:::0;:19:::1;799:3;784:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;728:88:::0;:::o;23575:35::-;;;;:::o;23105:25::-;;;;:::o;23617:38::-;;;;;;;;;;;;;:::o;33163:101::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33212:11:::1;;;;;;;;;;;:19;;;33232:14;;33212:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;33208:51:::0;33163:101::o;23135:34::-;;;;:::o;23201:81::-;;;;;;;;;;;;;:::o;32994:113::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33051:11:::1;;;;;;;;;;;:19;;;33078:9;33051:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;33047:55:::0;32994:113::o;36912:161::-;36980:7;37003:64;37044:22;:20;:22::i;:::-;37003:36;37016:22;37036:1;37016:15;37026:4;;;;;;;;;;;37016:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;37003:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;36996:71;;36912:161;;;:::o;23849:18::-;;;;;;;;;;;;;:::o;25421:145::-;25505:7;25530:11;:19;25542:6;25530:19;;;;;;;;;;;;;;;:28;25550:7;25530:28;;;;;;;;;;;;;;;;25523:35;;25421:145;;;;:::o;35863:::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35964:8:::1;35950:11;;:22;;;;;;;;;;;;;;;;;;35995:7;35979:13;:23;;;;35863:145:::0;;:::o;884:91::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;964:5:::1;942:14;:19;957:3;942:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;884:91:::0;:::o;1399:159::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1479:3:::1;1471:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;1511:4;1489:14:::0;:19:::1;1504:3;1489:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;1527:25;1548:3;1527:25;;;;;;:::i;:::-;;;;;;;;1399:159:::0;:::o;35295:316::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35405:4:::1;35387:23;;:6;:23;;;;:41;;;;;35424:4;;;;;;;;;;;35414:14;;:6;:14;;;;35387:41;35379:50;;;::::0;::::1;;35463:6;35436:16;:24;35453:6;35436:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;35480:6;35476:130;;;35497:11;;;;;;;;;;;:20;;;35518:6;35526:1;35497:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35476:130;;;35551:11;;;;;;;;;;;:20;;;35572:6;35580:9;:17;35590:6;35580:17;;;;;;;;;;;;;;;;35551:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35476:130;35295:316:::0;;:::o;35736:121::-;458:19;466:10;458:7;:19::i;:::-;450:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35845:6:::1;35819:15;:23;35835:6;35819:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;35736:121:::0;;:::o;23042:32::-;;;;;;;;;;;;;:::o;22689:::-;;;;:::o;1187:101::-;1243:4;1263:14;:19;1278:3;1263:19;;;;;;;;;;;;;;;;;;;;;;;;;1256:26;;1187:101;;;:::o;7348:98::-;7406:7;7437:1;7433;:5;;;;:::i;:::-;7426:12;;7348:98;;;;:::o;8490:240::-;8610:7;8668:1;8663;:6;;8671:12;8655:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8710:1;8706;:5;8699:12;;8490:240;;;;;:::o;26422:1928::-;26514:4;26531:6;;;;;;;;;;;26527:77;;;26555:41;26570:6;26578:9;26589:6;26555:14;:41::i;:::-;26548:48;;;;26527:77;26672:10;:8;:10::i;:::-;26671:11;:32;;;;;26699:4;;;;;;;;;;;26686:17;;:9;:17;;;26671:32;:50;;;;;26717:4;;;;;;;;;;;26707:14;;:6;:14;;;26671:50;26667:117;;;26740:27;:35;26768:6;26740:35;;;;;;;;;;;;;;;;;;;;;;;;;26732:44;;;;;;26667:117;26797:14;:22;26812:6;26797:22;;;;;;;;;;;;;;;;;;;;;;;;;26796:23;:53;;;;;26824:14;:25;26839:9;26824:25;;;;;;;;;;;;;;;;;;;;;;;;;26823:26;26796:53;26792:119;;;26868:10;:8;:10::i;:::-;26860:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;26792:119;26955:14;:22;26970:6;26955:22;;;;;;;;;;;;;;;;;;;;;;;;;26954:23;:60;;;;;27009:4;26988:26;;:9;:26;;;;26954:60;:97;;;;;21484:42;27025:26;;:9;:26;;;;26954:97;:125;;;;;27075:4;;;;;;;;;;;27062:17;;:9;:17;;;;26954:125;:170;;;;;27103:21;;;;;;;;;;;27090:34;;:9;:34;;;;26954:170;:215;;;;;27148:21;;;;;;;;;;;27135:34;;:9;:34;;;;26954:215;26942:439;;;27186:18;27207:20;27217:9;27207;:20::i;:::-;27186:41;;27279:10;;27268:6;27255:10;:19;;;;:::i;:::-;27254:35;;27236:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;27177:204;26942:439;27389:28;27402:6;27410;27389:12;:28::i;:::-;27457:4;;;;;;;;;;;27447:14;;:6;:14;;;27443:46;;27472:9;:7;:9::i;:::-;27443:46;27512:4;;;;;;;;;;;27499:17;;:9;:17;;;27495:50;;27527:10;:8;:10::i;:::-;27495:50;27580:16;:14;:16::i;:::-;27576:49;;;27607:10;:8;:10::i;:::-;27576:49;27637:19;:17;:19::i;:::-;27633:62;;;27667:20;:18;:20::i;:::-;27633:62;27723:53;27745:6;27723:53;;;;;;;;;;;;;;;;;:9;:17;27733:6;27723:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;27703:9;:17;27713:6;27703:17;;;;;;;;;;;;;;;:73;;;;27785:22;27810:21;27824:6;27810:13;:21::i;:::-;:59;;27863:6;27810:59;;;27834:26;27842:9;27853:6;27834:7;:26::i;:::-;27810:59;27785:84;;27901:40;27926:14;27901:9;:20;27911:9;27901:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;27878:9;:20;27888:9;27878:20;;;;;;;;;;;;;;;:63;;;;27980:16;:24;27997:6;27980:24;;;;;;;;;;;;;;;;;;;;;;;;;27975:111;;28019:11;;;;;;;;;;;:20;;;28040:6;28049:17;28059:6;28049:9;:17::i;:::-;28019:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28015:64;27975:111;28097:16;:27;28114:9;28097:27;;;;;;;;;;;;;;;;;;;;;;;;;28092:119;;28139:11;;;;;;;;;;;:20;;;28160:9;28171:20;28181:9;28171;:20::i;:::-;28139:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28135:69;28092:119;28223:11;;;;;;;;;;;:19;;;28243:14;;28223:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28219:51;28300:9;28283:43;;28292:6;28283:43;;;28311:14;28283:43;;;;;;:::i;:::-;;;;;;;;28340:4;28333:11;;;26422:1928;;;;;;:::o;6592:98::-;6650:7;6681:1;6677;:5;;;;:::i;:::-;6670:12;;6592:98;;;;:::o;32324:289::-;23908:4;23899:6;;:13;;;;;;;;;;;;;;;;;;32396:21:::1;32434:1;32420:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32396:40;;32453:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32443:4;32448:1;32443:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;32491:4;32473;32478:1;32473:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;32505:6;;;;;;;;;;;:57;;;32570:6;32578:1;32581:4;32587:2;32591:15;32505:102;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32389:224;23936:5:::0;23927:6;;:14;;;;;;;;;;;;;;;;;;32324:289;;:::o;6211:98::-;6269:7;6300:1;6296;:5;;;;:::i;:::-;6289:12;;6211:98;;;;:::o;6949:::-;7007:7;7038:1;7034;:5;;;;:::i;:::-;7027:12;;6949:98;;;;:::o;28356:312::-;28449:4;28482:53;28504:6;28482:53;;;;;;;;;;;;;;;;;:9;:17;28492:6;28482:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;28462:9;:17;28472:6;28462:17;;;;;;;;;;;;;;;:73;;;;28565:32;28590:6;28565:9;:20;28575:9;28565:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;28542:9;:20;28552:9;28542:20;;;;;;;;;;;;;;;:55;;;;28626:9;28609:35;;28618:6;28609:35;;;28637:6;28609:35;;;;;;:::i;:::-;;;;;;;;28658:4;28651:11;;28356:312;;;;;:::o;34747:84::-;34790:4;34824:1;34810:10;;:15;;34803:22;;34747:84;:::o;28674:160::-;28767:12;;28757:6;:22;;:49;;;;28783:15;:23;28799:6;28783:23;;;;;;;;;;;;;;;;;;;;;;;;;28757:49;28749:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;28674:160;;:::o;28865:211::-;28915:15;;28900:12;:30;;;;28950:13;;28937:10;:26;;;;28986:16;;28970:13;:32;;;;29025:16;;29009:13;:32;;;;29059:11;;29048:8;:22;;;;28865:211::o;29082:217::-;29133:16;;29118:12;:31;;;;29169:14;;29156:10;:27;;;;29206:17;;29190:13;:33;;;;29246:17;;29230:13;:33;;;;29281:12;;29270:8;:23;;;;29082:217::o;29740:164::-;29789:4;29823;;;;;;;;;;;29809:18;;:10;:18;;;;:29;;;;;29832:6;;;;;;;;;;;29831:7;29809:29;:44;;;;;29842:11;;;;;;;;;;;29809:44;:89;;;;;29885:13;;29857:9;:24;29875:4;29857:24;;;;;;;;;;;;;;;;:41;;29809:89;29802:96;;29740:164;:::o;29910:1444::-;23908:4;23899:6;;:13;;;;;;;;;;;;;;;;;;29957:27:::1;29987:60;30003:15;;30020:26;;29987:15;:60::i;:::-;:79;;30054:12;;29987:79;;;30050:1;29987:79;29957:109;;30073:23;30099:59;30156:1;30099:52;30142:8;;30099:38;30117:19;30099:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;30073:85;;30165:20;30188:34;30206:15;30188:13;;:17;;:34;;;;:::i;:::-;30165:57;;30231:21;30269:1;30255:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30231:40;;30296:4;30278;30283:1;30278:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30318:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30308:4;30313:1;30308:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30340:21;30364;30340:45;;30394:6;;;;;;;;;;;:57;;;30452:12;30466:1;30469:4;30483;30490:15;30394:112;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30515:17;30535:40;30561:13;30535:21;:25;;:40;;;;:::i;:::-;30515:60;;30584:19;30606:40;30619:26;30643:1;30619:19;:23;;:26;;;;:::i;:::-;30606:8;;:12;;:40;;;;:::i;:::-;30584:62;;30655:26;30684:58;30740:1;30684:51;30723:11;30684:34;30698:19;30684:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;30655:87;;30749:27;30779:45;30812:11;30779:28;30793:13;;30779:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;30749:75;;30831:27;30861:45;30894:11;30861:28;30875:13;;30861:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;30831:75;;30919:11;;;;;;;;;;;:19;;;30946;30919:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;30915:65:::0;30994:21:::1;;;;;;;;;;;30986:39;;:60;31026:19;30986:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31077:1;31059:15;:19;31055:294;;;31089:6;;;;;;;;;;;:22;;;31119:18;31157:4;31173:15;31199:1;31211::::0;31223:21:::1;;;;;;;;;;;31255:15;31089:190;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31293:48;31305:18;31325:15;31293:48;;;;;;;:::i;:::-;;;;;;;;31055:294;29948:1406;;;;;;;;;;23936:5:::0;23927:6;;:14;;;;;;;;;;;;;;;;;;29910:1444::o;31384:311::-;31436:4;31477;;;;;;;;;;;31463:18;;:10;:18;;;;:36;;;;;31493:6;;;;;;;;;;;31492:7;31463:36;:65;;;;;31510:18;;;;;;;;;;;31463:65;:137;;;;;31588:12;31562:22;;31539:20;;:45;;;;:::i;:::-;:61;;31463:137;:226;;;;;31672:17;;31647:21;:42;;31463:226;31449:240;;31384:311;:::o;31701:299::-;31747:34;31757:17;;21484:42;31747:9;:34::i;:::-;31811:12;31788:20;:35;;;;31855:45;31882:17;;31855:22;;:26;;:45;;;;:::i;:::-;31830:22;:70;;;;31936:14;;31911:22;;:39;31907:88;;;31982:5;31961:18;;:26;;;;;;;;;;;;;;;;;;31907:88;31701:299::o;29305:108::-;29367:4;29388:11;:19;29400:6;29388:19;;;;;;;;;;;;;;;;;;;;;;;;;29387:20;29380:27;;29305:108;;;:::o;29419:315::-;29486:7;29502:17;29522:40;29547:14;;29522:20;29533:8;;29522:6;:10;;:20;;;;:::i;:::-;:24;;:40;;;;:::i;:::-;29502:60;;29598:39;29627:9;29598;:24;29616:4;29598:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29571:9;:24;29589:4;29571:24;;;;;;;;;;;;;;;:66;;;;29674:4;29649:42;;29658:6;29649:42;;;29681:9;29649:42;;;;;;:::i;:::-;;;;;;;;29707:21;29718:9;29707:6;:10;;:21;;;;:::i;:::-;29700:28;;;29419:315;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:90;803:7;846:5;839:13;832:21;821:32;;769:90;;;:::o;865:116::-;935:21;950:5;935:21;:::i;:::-;928:5;925:32;915:60;;971:1;968;961:12;915:60;865:116;:::o;987:133::-;1030:5;1068:6;1055:20;1046:29;;1084:30;1108:5;1084:30;:::i;:::-;987:133;;;;:::o;1126:122::-;1199:24;1217:5;1199:24;:::i;:::-;1192:5;1189:35;1179:63;;1238:1;1235;1228:12;1179:63;1126:122;:::o;1254:139::-;1300:5;1338:6;1325:20;1316:29;;1354:33;1381:5;1354:33;:::i;:::-;1254:139;;;;:::o;1399:759::-;1482:6;1490;1498;1506;1555:3;1543:9;1534:7;1530:23;1526:33;1523:120;;;1562:79;;:::i;:::-;1523:120;1682:1;1707:50;1749:7;1740:6;1729:9;1725:22;1707:50;:::i;:::-;1697:60;;1653:114;1806:2;1832:53;1877:7;1868:6;1857:9;1853:22;1832:53;:::i;:::-;1822:63;;1777:118;1934:2;1960:53;2005:7;1996:6;1985:9;1981:22;1960:53;:::i;:::-;1950:63;;1905:118;2062:2;2088:53;2133:7;2124:6;2113:9;2109:22;2088:53;:::i;:::-;2078:63;;2033:118;1399:759;;;;;;;:::o;2164:99::-;2216:6;2250:5;2244:12;2234:22;;2164:99;;;:::o;2269:169::-;2353:11;2387:6;2382:3;2375:19;2427:4;2422:3;2418:14;2403:29;;2269:169;;;;:::o;2444:246::-;2525:1;2535:113;2549:6;2546:1;2543:13;2535:113;;;2634:1;2629:3;2625:11;2619:18;2615:1;2610:3;2606:11;2599:39;2571:2;2568:1;2564:10;2559:15;;2535:113;;;2682:1;2673:6;2668:3;2664:16;2657:27;2506:184;2444:246;;;:::o;2696:102::-;2737:6;2788:2;2784:7;2779:2;2772:5;2768:14;2764:28;2754:38;;2696:102;;;:::o;2804:377::-;2892:3;2920:39;2953:5;2920:39;:::i;:::-;2975:71;3039:6;3034:3;2975:71;:::i;:::-;2968:78;;3055:65;3113:6;3108:3;3101:4;3094:5;3090:16;3055:65;:::i;:::-;3145:29;3167:6;3145:29;:::i;:::-;3140:3;3136:39;3129:46;;2896:285;2804:377;;;;:::o;3187:313::-;3300:4;3338:2;3327:9;3323:18;3315:26;;3387:9;3381:4;3377:20;3373:1;3362:9;3358:17;3351:47;3415:78;3488:4;3479:6;3415:78;:::i;:::-;3407:86;;3187:313;;;;:::o;3506:126::-;3543:7;3583:42;3576:5;3572:54;3561:65;;3506:126;;;:::o;3638:96::-;3675:7;3704:24;3722:5;3704:24;:::i;:::-;3693:35;;3638:96;;;:::o;3740:122::-;3813:24;3831:5;3813:24;:::i;:::-;3806:5;3803:35;3793:63;;3852:1;3849;3842:12;3793:63;3740:122;:::o;3868:139::-;3914:5;3952:6;3939:20;3930:29;;3968:33;3995:5;3968:33;:::i;:::-;3868:139;;;;:::o;4013:474::-;4081:6;4089;4138:2;4126:9;4117:7;4113:23;4109:32;4106:119;;;4144:79;;:::i;:::-;4106:119;4264:1;4289:53;4334:7;4325:6;4314:9;4310:22;4289:53;:::i;:::-;4279:63;;4235:117;4391:2;4417:53;4462:7;4453:6;4442:9;4438:22;4417:53;:::i;:::-;4407:63;;4362:118;4013:474;;;;;:::o;4493:109::-;4574:21;4589:5;4574:21;:::i;:::-;4569:3;4562:34;4493:109;;:::o;4608:210::-;4695:4;4733:2;4722:9;4718:18;4710:26;;4746:65;4808:1;4797:9;4793:17;4784:6;4746:65;:::i;:::-;4608:210;;;;:::o;4824:474::-;4892:6;4900;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:53;5145:7;5136:6;5125:9;5121:22;5100:53;:::i;:::-;5090:63;;5046:117;5202:2;5228:53;5273:7;5264:6;5253:9;5249:22;5228:53;:::i;:::-;5218:63;;5173:118;4824:474;;;;;:::o;5304:765::-;5390:6;5398;5406;5414;5463:3;5451:9;5442:7;5438:23;5434:33;5431:120;;;5470:79;;:::i;:::-;5431:120;5590:1;5615:53;5660:7;5651:6;5640:9;5636:22;5615:53;:::i;:::-;5605:63;;5561:117;5717:2;5743:53;5788:7;5779:6;5768:9;5764:22;5743:53;:::i;:::-;5733:63;;5688:118;5845:2;5871:53;5916:7;5907:6;5896:9;5892:22;5871:53;:::i;:::-;5861:63;;5816:118;5973:2;5999:53;6044:7;6035:6;6024:9;6020:22;5999:53;:::i;:::-;5989:63;;5944:118;5304:765;;;;;;;:::o;6075:329::-;6134:6;6183:2;6171:9;6162:7;6158:23;6154:32;6151:119;;;6189:79;;:::i;:::-;6151:119;6309:1;6334:53;6379:7;6370:6;6359:9;6355:22;6334:53;:::i;:::-;6324:63;;6280:117;6075:329;;;;:::o;6410:118::-;6497:24;6515:5;6497:24;:::i;:::-;6492:3;6485:37;6410:118;;:::o;6534:222::-;6627:4;6665:2;6654:9;6650:18;6642:26;;6678:71;6746:1;6735:9;6731:17;6722:6;6678:71;:::i;:::-;6534:222;;;;:::o;6762:468::-;6827:6;6835;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;7137:2;7163:50;7205:7;7196:6;7185:9;7181:22;7163:50;:::i;:::-;7153:60;;7108:115;6762:468;;;;;:::o;7236:619::-;7313:6;7321;7329;7378:2;7366:9;7357:7;7353:23;7349:32;7346:119;;;7384:79;;:::i;:::-;7346:119;7504:1;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7475:117;7631:2;7657:53;7702:7;7693:6;7682:9;7678:22;7657:53;:::i;:::-;7647:63;;7602:118;7759:2;7785:53;7830:7;7821:6;7810:9;7806:22;7785:53;:::i;:::-;7775:63;;7730:118;7236:619;;;;;:::o;7861:329::-;7920:6;7969:2;7957:9;7948:7;7944:23;7940:32;7937:119;;;7975:79;;:::i;:::-;7937:119;8095:1;8120:53;8165:7;8156:6;8145:9;8141:22;8120:53;:::i;:::-;8110:63;;8066:117;7861:329;;;;:::o;8196:86::-;8231:7;8271:4;8264:5;8260:16;8249:27;;8196:86;;;:::o;8288:112::-;8371:22;8387:5;8371:22;:::i;:::-;8366:3;8359:35;8288:112;;:::o;8406:214::-;8495:4;8533:2;8522:9;8518:18;8510:26;;8546:67;8610:1;8599:9;8595:17;8586:6;8546:67;:::i;:::-;8406:214;;;;:::o;8626:474::-;8694:6;8702;8751:2;8739:9;8730:7;8726:23;8722:32;8719:119;;;8757:79;;:::i;:::-;8719:119;8877:1;8902:53;8947:7;8938:6;8927:9;8923:22;8902:53;:::i;:::-;8892:63;;8848:117;9004:2;9030:53;9075:7;9066:6;9055:9;9051:22;9030:53;:::i;:::-;9020:63;;8975:118;8626:474;;;;;:::o;9106:60::-;9134:3;9155:5;9148:12;;9106:60;;;:::o;9172:142::-;9222:9;9255:53;9273:34;9282:24;9300:5;9282:24;:::i;:::-;9273:34;:::i;:::-;9255:53;:::i;:::-;9242:66;;9172:142;;;:::o;9320:126::-;9370:9;9403:37;9434:5;9403:37;:::i;:::-;9390:50;;9320:126;;;:::o;9452:154::-;9530:9;9563:37;9594:5;9563:37;:::i;:::-;9550:50;;9452:154;;;:::o;9612:187::-;9727:65;9786:5;9727:65;:::i;:::-;9722:3;9715:78;9612:187;;:::o;9805:278::-;9926:4;9964:2;9953:9;9949:18;9941:26;;9977:99;10073:1;10062:9;10058:17;10049:6;9977:99;:::i;:::-;9805:278;;;;:::o;10089:468::-;10154:6;10162;10211:2;10199:9;10190:7;10186:23;10182:32;10179:119;;;10217:79;;:::i;:::-;10179:119;10337:1;10362:50;10404:7;10395:6;10384:9;10380:22;10362:50;:::i;:::-;10352:60;;10308:114;10461:2;10487:53;10532:7;10523:6;10512:9;10508:22;10487:53;:::i;:::-;10477:63;;10432:118;10089:468;;;;;:::o;10563:104::-;10608:7;10637:24;10655:5;10637:24;:::i;:::-;10626:35;;10563:104;;;:::o;10673:138::-;10754:32;10780:5;10754:32;:::i;:::-;10747:5;10744:43;10734:71;;10801:1;10798;10791:12;10734:71;10673:138;:::o;10817:155::-;10871:5;10909:6;10896:20;10887:29;;10925:41;10960:5;10925:41;:::i;:::-;10817:155;;;;:::o;10978:345::-;11045:6;11094:2;11082:9;11073:7;11069:23;11065:32;11062:119;;;11100:79;;:::i;:::-;11062:119;11220:1;11245:61;11298:7;11289:6;11278:9;11274:22;11245:61;:::i;:::-;11235:71;;11191:125;10978:345;;;;:::o;11329:152::-;11405:9;11438:37;11469:5;11438:37;:::i;:::-;11425:50;;11329:152;;;:::o;11487:183::-;11600:63;11657:5;11600:63;:::i;:::-;11595:3;11588:76;11487:183;;:::o;11676:274::-;11795:4;11833:2;11822:9;11818:18;11810:26;;11846:97;11940:1;11929:9;11925:17;11916:6;11846:97;:::i;:::-;11676:274;;;;:::o;11956:156::-;12096:8;12092:1;12084:6;12080:14;12073:32;11956:156;:::o;12118:365::-;12260:3;12281:66;12345:1;12340:3;12281:66;:::i;:::-;12274:73;;12356:93;12445:3;12356:93;:::i;:::-;12474:2;12469:3;12465:12;12458:19;;12118:365;;;:::o;12489:419::-;12655:4;12693:2;12682:9;12678:18;12670:26;;12742:9;12736:4;12732:20;12728:1;12717:9;12713:17;12706:47;12770:131;12896:4;12770:131;:::i;:::-;12762:139;;12489:419;;;:::o;12914:170::-;13054:22;13050:1;13042:6;13038:14;13031:46;12914:170;:::o;13090:366::-;13232:3;13253:67;13317:2;13312:3;13253:67;:::i;:::-;13246:74;;13329:93;13418:3;13329:93;:::i;:::-;13447:2;13442:3;13438:12;13431:19;;13090:366;;;:::o;13462:419::-;13628:4;13666:2;13655:9;13651:18;13643:26;;13715:9;13709:4;13705:20;13701:1;13690:9;13686:17;13679:47;13743:131;13869:4;13743:131;:::i;:::-;13735:139;;13462:419;;;:::o;13887:180::-;13935:77;13932:1;13925:88;14032:4;14029:1;14022:15;14056:4;14053:1;14046:15;14073:191;14113:3;14132:20;14150:1;14132:20;:::i;:::-;14127:25;;14166:20;14184:1;14166:20;:::i;:::-;14161:25;;14209:1;14206;14202:9;14195:16;;14230:3;14227:1;14224:10;14221:36;;;14237:18;;:::i;:::-;14221:36;14073:191;;;;:::o;14270:410::-;14310:7;14333:20;14351:1;14333:20;:::i;:::-;14328:25;;14367:20;14385:1;14367:20;:::i;:::-;14362:25;;14422:1;14419;14415:9;14444:30;14462:11;14444:30;:::i;:::-;14433:41;;14623:1;14614:7;14610:15;14607:1;14604:22;14584:1;14577:9;14557:83;14534:139;;14653:18;;:::i;:::-;14534:139;14318:362;14270:410;;;;:::o;14686:180::-;14734:77;14731:1;14724:88;14831:4;14828:1;14821:15;14855:4;14852:1;14845:15;14872:185;14912:1;14929:20;14947:1;14929:20;:::i;:::-;14924:25;;14963:20;14981:1;14963:20;:::i;:::-;14958:25;;15002:1;14992:35;;15007:18;;:::i;:::-;14992:35;15049:1;15046;15042:9;15037:14;;14872:185;;;;:::o;15063:332::-;15184:4;15222:2;15211:9;15207:18;15199:26;;15235:71;15303:1;15292:9;15288:17;15279:6;15235:71;:::i;:::-;15316:72;15384:2;15373:9;15369:18;15360:6;15316:72;:::i;:::-;15063:332;;;;;:::o;15401:::-;15522:4;15560:2;15549:9;15545:18;15537:26;;15573:71;15641:1;15630:9;15626:17;15617:6;15573:71;:::i;:::-;15654:72;15722:2;15711:9;15707:18;15698:6;15654:72;:::i;:::-;15401:332;;;;;:::o;15739:137::-;15793:5;15824:6;15818:13;15809:22;;15840:30;15864:5;15840:30;:::i;:::-;15739:137;;;;:::o;15882:345::-;15949:6;15998:2;15986:9;15977:7;15973:23;15969:32;15966:119;;;16004:79;;:::i;:::-;15966:119;16124:1;16149:61;16202:7;16193:6;16182:9;16178:22;16149:61;:::i;:::-;16139:71;;16095:125;15882:345;;;;:::o;16233:134::-;16291:9;16324:37;16355:5;16324:37;:::i;:::-;16311:50;;16233:134;;;:::o;16373:147::-;16468:45;16507:5;16468:45;:::i;:::-;16463:3;16456:58;16373:147;;:::o;16526:238::-;16627:4;16665:2;16654:9;16650:18;16642:26;;16678:79;16754:1;16743:9;16739:17;16730:6;16678:79;:::i;:::-;16526:238;;;;:::o;16770:85::-;16815:7;16844:5;16833:16;;16770:85;;;:::o;16861:158::-;16919:9;16952:61;16970:42;16979:32;17005:5;16979:32;:::i;:::-;16970:42;:::i;:::-;16952:61;:::i;:::-;16939:74;;16861:158;;;:::o;17025:147::-;17120:45;17159:5;17120:45;:::i;:::-;17115:3;17108:58;17025:147;;:::o;17178:348::-;17307:4;17345:2;17334:9;17330:18;17322:26;;17358:71;17426:1;17415:9;17411:17;17402:6;17358:71;:::i;:::-;17439:80;17515:2;17504:9;17500:18;17491:6;17439:80;:::i;:::-;17178:348;;;;;:::o;17532:170::-;17672:22;17668:1;17660:6;17656:14;17649:46;17532:170;:::o;17708:366::-;17850:3;17871:67;17935:2;17930:3;17871:67;:::i;:::-;17864:74;;17947:93;18036:3;17947:93;:::i;:::-;18065:2;18060:3;18056:12;18049:19;;17708:366;;;:::o;18080:419::-;18246:4;18284:2;18273:9;18269:18;18261:26;;18333:9;18327:4;18323:20;18319:1;18308:9;18304:17;18297:47;18361:131;18487:4;18361:131;:::i;:::-;18353:139;;18080:419;;;:::o;18505:249::-;18645:34;18641:1;18633:6;18629:14;18622:58;18714:32;18709:2;18701:6;18697:15;18690:57;18505:249;:::o;18760:366::-;18902:3;18923:67;18987:2;18982:3;18923:67;:::i;:::-;18916:74;;18999:93;19088:3;18999:93;:::i;:::-;19117:2;19112:3;19108:12;19101:19;;18760:366;;;:::o;19132:419::-;19298:4;19336:2;19325:9;19321:18;19313:26;;19385:9;19379:4;19375:20;19371:1;19360:9;19356:17;19349:47;19413:131;19539:4;19413:131;:::i;:::-;19405:139;;19132:419;;;:::o;19557:194::-;19597:4;19617:20;19635:1;19617:20;:::i;:::-;19612:25;;19651:20;19669:1;19651:20;:::i;:::-;19646:25;;19695:1;19692;19688:9;19680:17;;19719:1;19713:4;19710:11;19707:37;;;19724:18;;:::i;:::-;19707:37;19557:194;;;;:::o;19757:180::-;19805:77;19802:1;19795:88;19902:4;19899:1;19892:15;19926:4;19923:1;19916:15;19943:143;20000:5;20031:6;20025:13;20016:22;;20047:33;20074:5;20047:33;:::i;:::-;19943:143;;;;:::o;20092:351::-;20162:6;20211:2;20199:9;20190:7;20186:23;20182:32;20179:119;;;20217:79;;:::i;:::-;20179:119;20337:1;20362:64;20418:7;20409:6;20398:9;20394:22;20362:64;:::i;:::-;20352:74;;20308:128;20092:351;;;;:::o;20449:180::-;20497:77;20494:1;20487:88;20594:4;20591:1;20584:15;20618:4;20615:1;20608:15;20635:114;20702:6;20736:5;20730:12;20720:22;;20635:114;;;:::o;20755:184::-;20854:11;20888:6;20883:3;20876:19;20928:4;20923:3;20919:14;20904:29;;20755:184;;;;:::o;20945:132::-;21012:4;21035:3;21027:11;;21065:4;21060:3;21056:14;21048:22;;20945:132;;;:::o;21083:108::-;21160:24;21178:5;21160:24;:::i;:::-;21155:3;21148:37;21083:108;;:::o;21197:179::-;21266:10;21287:46;21329:3;21321:6;21287:46;:::i;:::-;21365:4;21360:3;21356:14;21342:28;;21197:179;;;;:::o;21382:113::-;21452:4;21484;21479:3;21475:14;21467:22;;21382:113;;;:::o;21531:732::-;21650:3;21679:54;21727:5;21679:54;:::i;:::-;21749:86;21828:6;21823:3;21749:86;:::i;:::-;21742:93;;21859:56;21909:5;21859:56;:::i;:::-;21938:7;21969:1;21954:284;21979:6;21976:1;21973:13;21954:284;;;22055:6;22049:13;22082:63;22141:3;22126:13;22082:63;:::i;:::-;22075:70;;22168:60;22221:6;22168:60;:::i;:::-;22158:70;;22014:224;22001:1;21998;21994:9;21989:14;;21954:284;;;21958:14;22254:3;22247:10;;21655:608;;;21531:732;;;;:::o;22269:720::-;22504:4;22542:3;22531:9;22527:19;22519:27;;22556:79;22632:1;22621:9;22617:17;22608:6;22556:79;:::i;:::-;22682:9;22676:4;22672:20;22667:2;22656:9;22652:18;22645:48;22710:108;22813:4;22804:6;22710:108;:::i;:::-;22702:116;;22828:72;22896:2;22885:9;22881:18;22872:6;22828:72;:::i;:::-;22910;22978:2;22967:9;22963:18;22954:6;22910:72;:::i;:::-;22269:720;;;;;;;:::o;22995:167::-;23135:19;23131:1;23123:6;23119:14;23112:43;22995:167;:::o;23168:366::-;23310:3;23331:67;23395:2;23390:3;23331:67;:::i;:::-;23324:74;;23407:93;23496:3;23407:93;:::i;:::-;23525:2;23520:3;23516:12;23509:19;;23168:366;;;:::o;23540:419::-;23706:4;23744:2;23733:9;23729:18;23721:26;;23793:9;23787:4;23783:20;23779:1;23768:9;23764:17;23757:47;23821:131;23947:4;23821:131;:::i;:::-;23813:139;;23540:419;;;:::o;23965:831::-;24228:4;24266:3;24255:9;24251:19;24243:27;;24280:71;24348:1;24337:9;24333:17;24324:6;24280:71;:::i;:::-;24361:80;24437:2;24426:9;24422:18;24413:6;24361:80;:::i;:::-;24488:9;24482:4;24478:20;24473:2;24462:9;24458:18;24451:48;24516:108;24619:4;24610:6;24516:108;:::i;:::-;24508:116;;24634:72;24702:2;24691:9;24687:18;24678:6;24634:72;:::i;:::-;24716:73;24784:3;24773:9;24769:19;24760:6;24716:73;:::i;:::-;23965:831;;;;;;;;:::o;24802:807::-;25051:4;25089:3;25078:9;25074:19;25066:27;;25103:71;25171:1;25160:9;25156:17;25147:6;25103:71;:::i;:::-;25184:72;25252:2;25241:9;25237:18;25228:6;25184:72;:::i;:::-;25266:80;25342:2;25331:9;25327:18;25318:6;25266:80;:::i;:::-;25356;25432:2;25421:9;25417:18;25408:6;25356:80;:::i;:::-;25446:73;25514:3;25503:9;25499:19;25490:6;25446:73;:::i;:::-;25529;25597:3;25586:9;25582:19;25573:6;25529:73;:::i;:::-;24802:807;;;;;;;;;:::o;25615:143::-;25672:5;25703:6;25697:13;25688:22;;25719:33;25746:5;25719:33;:::i;:::-;25615:143;;;;:::o;25764:663::-;25852:6;25860;25868;25917:2;25905:9;25896:7;25892:23;25888:32;25885:119;;;25923:79;;:::i;:::-;25885:119;26043:1;26068:64;26124:7;26115:6;26104:9;26100:22;26068:64;:::i;:::-;26058:74;;26014:128;26181:2;26207:64;26263:7;26254:6;26243:9;26239:22;26207:64;:::i;:::-;26197:74;;26152:129;26320:2;26346:64;26402:7;26393:6;26382:9;26378:22;26346:64;:::i;:::-;26336:74;;26291:129;25764:663;;;;;:::o

Swarm Source

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