ETH Price: $2,470.96 (+7.22%)

Token

Bonds Investment Token (BIT)
 

Overview

Max Total Supply

77,000,000,000 BIT

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,116,197,781.211302617115216714 BIT

Value
$0.00
0x541996b1c10ab6366125e813640f1f81ec73023b
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:
BondsInvestmentToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-12
*/

//dev @robdbeme telegram
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

interface ERC20 
{
    function totalSupply() external view returns (uint256);
    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);
}

interface ERC20Metadata is ERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }


    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }


    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }


    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }

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

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

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

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

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


contract erc20 is Context, ERC20, ERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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


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

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

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

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


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


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


    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "erc20: transfer from the zero address");
        require(recipient != address(0), "erc20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "erc20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }


    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "erc20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }


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

        _beforeTokenTransfer(account, address(0), amount);

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


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

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


    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface DividendPayingTokenInterface 
{
  function dividendOf(address _owner) external view returns(uint256);
  function withdrawDividend() external;
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
}

interface DividendPayingTokenOptionalInterface {
  function withdrawableDividendOf(address _owner) external view returns(uint256);
  function withdrawnDividendOf(address _owner) external view returns(uint256);
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}

contract DividendPayingToken is erc20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;
  address public immutable ETH = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); //ETH
  uint256 constant internal magnitude = 2**128;
  uint256 internal magnifiedDividendPerShare;
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;

  constructor(string memory _name, string memory _symbol) erc20(_name, _symbol) {

  }


  function distributeETHDividends(uint256 amount) public onlyOwner{
    require(totalSupply() > 0);

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

      totalDividendsDistributed = totalDividendsDistributed.add(amount);
    }
  }

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


 function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      emit DividendWithdrawn(user, _withdrawableDividend);
      bool success = ERC20(ETH).transfer(user, _withdrawableDividend);

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }


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


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

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

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

  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);

    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }

  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);

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

  function _setBalance(address account, uint256 newBalance) internal {
    uint256 currentBalance = balanceOf(account);

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




library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

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

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

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



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

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

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}


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);
}

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;
}


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;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function stopTrade() external onlyOwner {
        isOpen = false;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}

contract BondsInvestmentToken is erc20, LockToken {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    bool private swapping;

    BondsInvestmentTokenDividendTracker public dividendTracker;

    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    address public immutable ETH = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); //ETH

    uint256 public _totalSupply = 77_000_000_000 * (10**18);
    uint256 public swapTokensAtAmount = 100_000 * (10**18); //100 millions. 
    uint256 public _maxTxAmount = _totalSupply.mul(2).div(100);//2%

    uint256 public ETHRewardsFee = 3;
    uint256 public liquidityFee = 1;
    uint256 public marketingFee = 3;
    uint256 public DEVwallet = 3;

    uint256 public totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(DEVwallet);

    address payable public _marketingWalletAddress = payable(0xF936E4008a2ee226d2149425ad7403521479DaA0);
    address payable public _Devwalletaddress = payable(0xF66eDB5bc556143263babbd232F5A124d24Ec15b);

    uint256 public gasForProcessing = 300000;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ProcessedDividendTracker(uint256 iterations, uint256 claims,uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);

    constructor() erc20("Bonds Investment Token", "BIT") 
    {
        dividendTracker = new BondsInvestmentTokenDividendTracker();
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        // exclude from receiving dividends
        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(deadWallet);
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        /*
            _mint is an internal function in erc20.sol that is only called here,
            and CANNOT be called ever again
        */

        //  Exclude from whale. 
        excludeWalletsFromWhales();
        _mint(owner(), _totalSupply);
    }

    receive() external payable { }


    function updateDividendTracker(address newAddress) public onlyOwner 
    {
        require(newAddress != address(dividendTracker), "BondsInvestmentToken: The dividend tracker already has that address");
        BondsInvestmentTokenDividendTracker newDividendTracker = BondsInvestmentTokenDividendTracker(payable(newAddress));
        require(newDividendTracker.owner() == address(this), "BondsInvestmentToken: The new dividend tracker must be owned by the BondsInvestmentToken token contract");
        newDividendTracker.excludeFromDividends(address(newDividendTracker));
        newDividendTracker.excludeFromDividends(address(this));
        newDividendTracker.excludeFromDividends(owner());
        newDividendTracker.excludeFromDividends(address(uniswapV2Router));
        emit UpdateDividendTracker(newAddress, address(dividendTracker));
        dividendTracker = newDividendTracker;
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "BondsInvestmentToken: The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "BondsInvestmentToken: Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setMarketingWallet(address payable wallet) external onlyOwner{
        _marketingWalletAddress = wallet;
    }

    function setETHRewardsFee(uint256 value) external onlyOwner{
        ETHRewardsFee = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(DEVwallet);
        require(totalFees<=30, "To High Fee");
    }

    function setLiquidityFee(uint256 value) external onlyOwner{
        liquidityFee = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(DEVwallet);
        require(totalFees<=30, "To High Fee");
    }

    function setMarketingFee(uint256 value) external onlyOwner{
        marketingFee = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(DEVwallet);
        require(totalFees<=30, "To High Fee");
    }


    function setDEVwallet(uint256 value) external onlyOwner {
        DEVwallet = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(DEVwallet);
        require(totalFees<=30, "To High Fee");
    } 

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "BondsInvestmentToken: The PanETHSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "BondsInvestmentToken: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        if(value) {
            dividendTracker.excludeFromDividends(pair);
        }
        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200000 && newValue <= 500000, "BondsInvestmentToken: gasForProcessing must be between 200,000 and 500,000");
        require(newValue != gasForProcessing, "BondsInvestmentToken: Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }

    function getClaimWait() external view returns(uint256) {
        return dividendTracker.claimWait();
    }

    function setSwapTokensAtAmount(uint256 _value) external onlyOwner
    {
        swapTokensAtAmount = _value;
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function withdrawableDividendOf(address account) public view returns(uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account) public view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function excludeFromDividends(address account) external onlyOwner{
        dividendTracker.excludeFromDividends(account);
    }

    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccountAtIndex(index);
    }

    function processDividendTracker(uint256 gas) external {
        (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas);
        emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin);
    }

    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }

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

    function getNumberOfDividendTokenHolders() external view returns(uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }


    function recovererc20Tokens(address _token, uint256 _amount) external onlyOwner
    {
        uint256 balance = ERC20(_token).balanceOf(address(this));
        require(balance >= _amount, "Cannot recover more than available balance");
        ERC20(_token).transfer(owner(), _amount);
    }


    function recoverBNB(uint256 _amount) external onlyOwner
    {
        payable(owner()).transfer(_amount);
    }    


    function _transfer(address from, address to, uint256 amount) internal open(from, to) override 
    {
        require(from != address(0), "erc20: transfer from the zero address");
        require(to != address(0), "erc20: transfer to the zero address");
        
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( canSwap && !swapping && swapAndLiquifyEnabled &&
        !automatedMarketMakerPairs[from] && from != owner()) 
        {
            swapping = true;

            uint256 swapableFees = totalFees.sub(ETHRewardsFee); // marketingFee+DEVwallet+liquidityFee.
            uint256 swapTokens = contractTokenBalance.mul(swapableFees).div(totalFees);
            swapAndLiquify(swapTokens);

            uint256 sellTokens = balanceOf(address(this));
            swapAndSendDividends(sellTokens);
            swapping = false;

        }


        bool takeFee = !swapping;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) 
        {
            takeFee = false;
        }

        if(takeFee) 
        {
            uint256 fees = amount.mul(totalFees).div(100);
            amount = amount.sub(fees);
            super._transfer(from, address(this), fees);
        }

        checkForWhale(from, to, amount);
        super._transfer(from, to, amount);
        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

        if(!swapping) 
        {
            uint256 gas = gasForProcessing;
            try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
            }
            catch {

            }
        }
    }


    function swapAndLiquify(uint256 tokens) private 
    {
       uint256 swapableFee = totalFees.sub(ETHRewardsFee);
        uint256 halfLiquidityTokens = tokens.mul(liquidityFee).div(swapableFee).div(2);
        uint256 swapableTokens = tokens.sub(halfLiquidityTokens);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(swapableTokens); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 bnbForLiquidity = newBalance.mul(liquidityFee).div(swapableFee).div(2);
        // add liquidity to uniswap
        addLiquidity(halfLiquidityTokens, bnbForLiquidity);
        emit SwapAndLiquify(halfLiquidityTokens, bnbForLiquidity, halfLiquidityTokens);
        uint256 bnbForMarketing = newBalance.mul(marketingFee).div(swapableFee);
        uint256 bnbForBuyback = newBalance.sub(bnbForLiquidity).sub(bnbForMarketing);
        _marketingWalletAddress.transfer(bnbForMarketing);
        _Devwalletaddress.transfer(bnbForBuyback);
    }


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

    function swapTokensForETH(uint256 tokenAmount) private 
    {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = ETH;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0),
            block.timestamp
        );

    }

    function swapAndSendDividends(uint256 tokens) private{
        swapTokensForETH(tokens);
        uint256 dividends = ERC20(ETH).balanceOf(address(this));
        bool success = ERC20(ETH).transfer(address(dividendTracker), dividends);

        if (success) {
            dividendTracker.distributeETHDividends(dividends);
            emit SendDividends(tokens, dividends);
        }
    }

    function setMaxTxAmount(uint256 _amount) external onlyOwner
    {
        _maxTxAmount = _amount;
    }

    //----SWAP AND LIQUIFY---///
    bool public swapAndLiquifyEnabled = false;
    event SwapAndLiquifyEnabledUpdated(bool enabled);

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

    mapping (address => bool) private _isExcludedFromWhale;
    uint256 public _walletHoldingMaxLimit = _totalSupply.div(100).mul(2); //2%
    uint256 public _amountDueForSaleLimit = _totalSupply.div(1000000); //0.0000001%

    uint256 maxAllowedSalePercentage = 50;



    function excludeWalletsFromWhales() private 
    {
        _isExcludedFromWhale[owner()]=true;
        _isExcludedFromWhale[address(this)]=true;
        _isExcludedFromWhale[address(0)]=true;
        _isExcludedFromWhale[uniswapV2Pair]=true;
    }


    function checkForWhale(address from, address to, uint256 amount) 
    private view
    {
        uint256 newBalance = balanceOf(to).add(amount);
        if(!_isExcludedFromWhale[from] && !_isExcludedFromWhale[to]) 
        { 
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet"); 
        } 
        if(automatedMarketMakerPairs[from] && !_isExcludedFromWhale[to]) 
        { 
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet"); 
        } 

        if(automatedMarketMakerPairs[to] && !_isExcludedFromWhale[from]) 
        { 
            uint256 _balance = balanceOf(from);
            if(_balance>_amountDueForSaleLimit)
            {
                uint256 allowedToSell = _balance.mul(maxAllowedSalePercentage).div(100);
                require(amount <= allowedToSell, "Exceeding Allowed Sale Limit"); 
            }

        }
    }
 
    function updateMaxAllowedSalePercentage(uint256 _percent) external onlyOwner 
    {
        maxAllowedSalePercentage = _percent;
    }


    function setExcludedFromWhale(address account, bool _enabled) external onlyOwner 
    {
        _isExcludedFromWhale[account] = _enabled;
    } 

    function  setWalletMaxHoldingLimit(uint256 _amount) external onlyOwner 
    {
            _walletHoldingMaxLimit = _amount;
    } 


    function  setAmountDueForSaleLimit(uint256 _amount) external onlyOwner 
    {
            _amountDueForSaleLimit = _amount;
    } 


}

contract BondsInvestmentTokenDividendTracker is Ownable, DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    mapping (address => bool) public excludedFromDividends;

    mapping (address => uint256) public lastClaimTimes;

    uint256 public claimWait;
    uint256 public immutable minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() DividendPayingToken("BondsInvestmentToken_Dividend_Tracker", "BondsInvestmentToken_Dividend_Tracker") {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 2000_000 * (10**18); //must hold 2 Millions+ tokens
    }

    function _transfer(address, address, uint256) internal pure override {
        require(false, "BondsInvestmentToken_Dividend_Tracker: No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(false, "BondsInvestmentToken_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main BondsInvestmentToken contract.");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

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

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

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



    function getAccount(address _account)
        public view returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable) {
        account = _account;

        index = tokenHoldersMap.getIndexOfKey(account);

        iterationsUntilProcessed = -1;

        if(index >= 0) {
            if(uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ?
                                                        tokenHoldersMap.keys.length.sub(lastProcessedIndex) :
                                                        0;


                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }


        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        lastClaimTime = lastClaimTimes[account];

        nextClaimTime = lastClaimTime > 0 ?
                                    lastClaimTime.add(claimWait) :
                                    0;

        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ?
                                                    nextClaimTime.sub(block.timestamp) :
                                                    0;
    }

    function getAccountAtIndex(uint256 index)
        public view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        if(index >= tokenHoldersMap.size()) {
            return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

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

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if(excludedFromDividends[account]) {
            return;
        }

        if(newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        }
        else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        processAccount(account, true);
    }

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

        if(numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while(gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if(_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if(canAutoClaim(lastClaimTimes[account])) {
                if(processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if(gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }



    function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

        if(amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DEVwallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETHRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_Devwalletaddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_amountDueForSaleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletHoldingMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract BondsInvestmentTokenDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recovererc20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setAmountDueForSaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDEVwallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setETHRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWalletMaxHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"updateMaxAllowedSalePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526005805460ff60a01b19169055600a805461dead6001600160a01b03199091161790557fdac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006080526bf8cce83c11b69251c8000000600b81905569152d02c7e14af6800000600c55620000a0906064906200008c9060026200075d602090811b620026f417901c565b620007f160201b6200277a1790919060201c565b600d556003600e556001600f5560036010556003601155620000f7601154620000e3601054620000e3600f54600e546200083b60201b620027bc1790919060201c565b6200083b60201b620027bc1790919060201c565b6012556013805473f936e4008a2ee226d2149425ad7403521479daa06001600160a01b0319918216179091556014805473f66edb5bc556143263babbd232f5a124d24ec15b9216919091179055620493e06015556018805460ff19169055600b546200018d9060029062000179906064620007f1602090811b6200277a17901c565b6200075d60201b620026f41790919060201c565b601a55620001af620f4240600b54620007f160201b6200277a1790919060201c565b601b556032601c55348015620001c457600080fd5b506040518060400160405280601681526020017f426f6e647320496e766573746d656e7420546f6b656e000000000000000000008152506040518060400160405280600381526020016210925560ea1b81525081600390805190602001906200022f92919062000d52565b5080516200024590600490602084019062000d52565b50505060006200025a6200089e60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336000908152600660205260408082208054600160ff1991821681179092553084529282902080549093161790915551620002e39062000de1565b604051809103906000f08015801562000300573d6000803e3d6000fd5b50600960006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037c57600080fd5b505afa15801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b7919062000e06565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040057600080fd5b505afa15801562000415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043b919062000e06565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200048457600080fd5b505af115801562000499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bf919062000e06565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050620004fe816001620008a2565b60095460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b1580156200054557600080fd5b505af11580156200055a573d6000803e3d6000fd5b505060095460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620005a457600080fd5b505af1158015620005b9573d6000803e3d6000fd5b50506009546001600160a01b031691506331e79db09050620005e36005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200062557600080fd5b505af11580156200063a573d6000803e3d6000fd5b5050600954600a5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200068857600080fd5b505af11580156200069d573d6000803e3d6000fd5b505060095460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b158015620006e957600080fd5b505af1158015620006fe573d6000803e3d6000fd5b505050506200071e6200071662000a1c60201b60201c565b600162000a2b565b6200072b30600162000a2b565b6200073562000b7f565b620007556200074c6005546001600160a01b031690565b600b5462000c1a565b505062000f3c565b6000826200076e57506000620007eb565b60006200077c838562000ec7565b9050826200078b858362000ea4565b14620007e85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620007e883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d1660201b60201c565b6000806200084a838562000e89565b905083811015620007e85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620007df565b3390565b6001600160a01b03821660009081526017602052604090205460ff1615158115151415620009505760405162461bcd60e51b815260206004820152604e60248201527f426f6e6473496e766573746d656e74546f6b656e3a204175746f6d617465642060448201527f6d61726b6574206d616b6572207061697220697320616c72656164792073657460648201526d20746f20746861742076616c756560901b608482015260a401620007df565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155620009e05760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015620009c657600080fd5b505af1158015620009db573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031690565b6005546001600160a01b0316331462000a875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007df565b6001600160a01b03821660009081526016602052604090205460ff161515811515141562000b20576040805162461bcd60e51b81526020600482015260248101919091527f426f6e6473496e766573746d656e74546f6b656e3a204163636f756e7420697360448201527f20616c7265616479207468652076616c7565206f6620276578636c75646564276064820152608401620007df565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60016019600062000b986005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260199093528183208054851660019081179091557fd2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b28054861682179055600854909116835291208054909216179055565b6001600160a01b03821662000c725760405162461bcd60e51b815260206004820152601f60248201527f65726332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620007df565b62000c8e816002546200083b60201b620027bc1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000cc1918390620027bc6200083b821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000818362000d3a5760405162461bcd60e51b8152600401620007df919062000e31565b50600062000d49848662000ea4565b95945050505050565b82805462000d609062000ee9565b90600052602060002090601f01602090048101928262000d84576000855562000dcf565b82601f1062000d9f57805160ff191683800117855562000dcf565b8280016001018555821562000dcf579182015b8281111562000dcf57825182559160200191906001019062000db2565b5062000ddd92915062000def565b5090565b612259806200513483390190565b5b8082111562000ddd576000815560010162000df0565b60006020828403121562000e1957600080fd5b81516001600160a01b0381168114620007e857600080fd5b600060208083528351808285015260005b8181101562000e605785810183015185820160400152820162000e42565b8181111562000e73576000604083870101525b50601f01601f1916929092016040019392505050565b6000821982111562000e9f5762000e9f62000f26565b500190565b60008262000ec257634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000ee45762000ee462000f26565b500290565b600181811c9082168062000efe57607f821691505b6020821081141562000f2057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c6141c462000f70600039600081816109120152818161330e015281816133bf01526139a701526141c46000f3fe6080604052600436106104145760003560e01c8063712847301161021e578063a457c2d711610123578063dd62ed3e116100ab578063ec28438a1161007a578063ec28438a14610c6f578063f27fd25414610c8f578063f2fde38b14610caf578063f603939b14610ccf578063fb201b1d14610cef57600080fd5b8063dd62ed3e14610bde578063e2f4560514610c24578063e7841ec014610c3a578063e98030c714610c4f57600080fd5b8063afa4f3b2116100f2578063afa4f3b214610b2e578063b62496f514610b4e578063c024666814610b7e578063c492f04614610b9e578063c49b9a8014610bbe57600080fd5b8063a457c2d714610a69578063a8b9d24014610a89578063a9059cbb14610aa9578063ad56c13c14610ac957600080fd5b80638baeefce116101a657806398118cb41161017557806398118cb4146109f25780639a46135314610a085780639a7a23d614610a1e5780639c1b8af514610a3e578063a26579ad14610a5457600080fd5b80638baeefce146109945780638c0344db146109a95780638da5cb5b146109bf57806395d89b41146109dd57600080fd5b80637e298cf2116101ed5780637e298cf2146108e05780638322fff21461090057806385141a7714610934578063871c128d1461095457806388bdd9be1461097457600080fd5b8063712847301461087f578063715018a61461089f57806372b28e45146108b45780637d1db4a5146108ca57600080fd5b806344d4225f1161032457806359629196116102ac57806365b8dbc01161027b57806365b8dbc0146107e95780636843cd84146108095780636b67c4df14610829578063700bb1911461083f57806370a082311461085f57600080fd5b806359629196146107745780635d098b3814610794578063625e764c146107b457806364b0f653146107d457600080fd5b80634a74bb02116102f35780634a74bb02146106cc5780634e3c06b1146106e65780634e71d92d146107065780634fbee1931461071b578063573229771461075457600080fd5b806344d4225f1461064b57806345f579771461066b57806347535d7b1461068b57806349bd5a5e146106ac57600080fd5b80632c1f5216116103a757806331e79db01161037657806331e79db0146105b5578063357bf15c146105d557806339509351146105f55780633eaaf86b146106155780634144d9e41461062b57600080fd5b80632c1f52161461054e57806330bb4cff1461056e57806331201d2014610583578063313ce5671461059957600080fd5b806313ec8f75116103e357806313ec8f75146104c15780631694505e146104e157806318160ddd1461051957806323b872dd1461052e57600080fd5b806306fdde0314610420578063095ea7b31461044b5780630b6bb6f51461047b57806313114a9d1461049d57600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b50610435610d04565b6040516104429190613e05565b60405180910390f35b34801561045757600080fd5b5061046b610466366004613b94565b610d96565b6040519015158152602001610442565b34801561048757600080fd5b5061049b610496366004613c46565b610dad565b005b3480156104a957600080fd5b506104b360125481565b604051908152602001610442565b3480156104cd57600080fd5b5061049b6104dc366004613d4c565b610e52565b3480156104ed57600080fd5b50600754610501906001600160a01b031681565b6040516001600160a01b039091168152602001610442565b34801561052557600080fd5b506002546104b3565b34801561053a57600080fd5b5061046b610549366004613abb565b610ee7565b34801561055a57600080fd5b50600954610501906001600160a01b031681565b34801561057a57600080fd5b506104b3610f50565b34801561058f57600080fd5b506104b3601b5481565b3480156105a557600080fd5b5060405160128152602001610442565b3480156105c157600080fd5b5061049b6105d0366004613a48565b610fd2565b3480156105e157600080fd5b5061049b6105f0366004613d4c565b61105f565b34801561060157600080fd5b5061046b610610366004613b94565b6110a8565b34801561062157600080fd5b506104b3600b5481565b34801561063757600080fd5b50601354610501906001600160a01b031681565b34801561065757600080fd5b5061049b610666366004613d4c565b6110de565b34801561067757600080fd5b5061049b610686366004613d4c565b61110d565b34801561069757600080fd5b5060055461046b90600160a01b900460ff1681565b3480156106b857600080fd5b50600854610501906001600160a01b031681565b3480156106d857600080fd5b5060185461046b9060ff1681565b3480156106f257600080fd5b5061049b610701366004613afc565b611157565b34801561071257600080fd5b5061049b6111ac565b34801561072757600080fd5b5061046b610736366004613a48565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561076057600080fd5b50601454610501906001600160a01b031681565b34801561078057600080fd5b5061049b61078f366004613b94565b611230565b3480156107a057600080fd5b5061049b6107af366004613a48565b6113e0565b3480156107c057600080fd5b5061049b6107cf366004613d4c565b61142c565b3480156107e057600080fd5b506104b3611480565b3480156107f557600080fd5b5061049b610804366004613a48565b6114c5565b34801561081557600080fd5b506104b3610824366004613a48565b611776565b34801561083557600080fd5b506104b360105481565b34801561084b57600080fd5b5061049b61085a366004613d4c565b6117f5565b34801561086b57600080fd5b506104b361087a366004613a48565b6118d6565b34801561088b57600080fd5b5061049b61089a366004613d4c565b6118f1565b3480156108ab57600080fd5b5061049b611920565b3480156108c057600080fd5b506104b3601a5481565b3480156108d657600080fd5b506104b3600d5481565b3480156108ec57600080fd5b5061049b6108fb366004613d4c565b611994565b34801561090c57600080fd5b506105017f000000000000000000000000000000000000000000000000000000000000000081565b34801561094057600080fd5b50600a54610501906001600160a01b031681565b34801561096057600080fd5b5061049b61096f366004613d4c565b6119c3565b34801561098057600080fd5b5061049b61098f366004613a48565b611b3e565b3480156109a057600080fd5b5061049b611f15565b3480156109b557600080fd5b506104b3600e5481565b3480156109cb57600080fd5b506005546001600160a01b0316610501565b3480156109e957600080fd5b50610435611f4e565b3480156109fe57600080fd5b506104b3600f5481565b348015610a1457600080fd5b506104b360115481565b348015610a2a57600080fd5b5061049b610a39366004613afc565b611f5d565b348015610a4a57600080fd5b506104b360155481565b348015610a6057600080fd5b506104b361203b565b348015610a7557600080fd5b5061046b610a84366004613b94565b612080565b348015610a9557600080fd5b506104b3610aa4366004613a48565b6120cf565b348015610ab557600080fd5b5061046b610ac4366004613b94565b612102565b348015610ad557600080fd5b50610ae9610ae4366004613a48565b61210f565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610442565b348015610b3a57600080fd5b5061049b610b49366004613d4c565b6121b9565b348015610b5a57600080fd5b5061046b610b69366004613a48565b60176020526000908152604090205460ff1681565b348015610b8a57600080fd5b5061049b610b99366004613afc565b6121e8565b348015610baa57600080fd5b5061049b610bb9366004613bc0565b612308565b348015610bca57600080fd5b5061049b610bd9366004613d12565b6123e4565b348015610bea57600080fd5b506104b3610bf9366004613a82565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c3057600080fd5b506104b3600c5481565b348015610c4657600080fd5b506104b3612455565b348015610c5b57600080fd5b5061049b610c6a366004613d4c565b61249a565b348015610c7b57600080fd5b5061049b610c8a366004613d4c565b6124f5565b348015610c9b57600080fd5b50610ae9610caa366004613d4c565b612524565b348015610cbb57600080fd5b5061049b610cca366004613a48565b612566565b348015610cdb57600080fd5b5061049b610cea366004613d4c565b612651565b348015610cfb57600080fd5b5061049b6126b5565b606060038054610d1390614040565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3f90614040565b8015610d8c5780601f10610d6157610100808354040283529160200191610d8c565b820191906000526020600020905b815481529060010190602001808311610d6f57829003601f168201915b5050505050905090565b6000610da333848461281b565b5060015b92915050565b6005546001600160a01b03163314610de05760405162461bcd60e51b8152600401610dd790613e9d565b60405180910390fd5b60005b81518160ff161015610e4e57600160066000848460ff1681518110610e0a57610e0a6140cc565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e4681614096565b915050610de3565b5050565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610dd790613e9d565b6011819055601054600f54600e54610ea1928492610e9b9283916127bc565b906127bc565b6012819055601e1015610ee45760405162461bcd60e51b815260206004820152600b60248201526a546f20486967682046656560a81b6044820152606401610dd7565b50565b6000610ef4848484612940565b610f468433610f418560405180606001604052806028815260200161411c602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612e40565b61281b565b5060019392505050565b600954604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610f9557600080fd5b505afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190613d65565b905090565b6005546001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610dd790613e9d565b60095460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b5050505050565b6005546001600160a01b031633146110895760405162461bcd60e51b8152600401610dd790613e9d565b600f819055601154601054600e54610ea19291610e9b918290866127bc565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610da3918590610f4190866127bc565b6005546001600160a01b031633146111085760405162461bcd60e51b8152600401610dd790613e9d565b601a55565b6005546001600160a01b031633146111375760405162461bcd60e51b8152600401610dd790613e9d565b600e819055601154601054600f54610ea19291610e9b91829086906127bc565b6005546001600160a01b031633146111815760405162461bcd60e51b8152600401610dd790613e9d565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60095460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b3790604401602060405180830381600087803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee49190613d2f565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610dd790613e9d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561129c57600080fd5b505afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190613d65565b9050818110156113395760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f74207265636f766572206d6f7265207468616e20617661696c61626044820152696c652062616c616e636560b01b6064820152608401610dd7565b826001600160a01b031663a9059cbb61135a6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190613d2f565b50505050565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610dd790613e9d565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114565760405162461bcd60e51b8152600401610dd790613e9d565b80601081905550610ea1601154610e9b601054610e9b600f54600e546127bc90919063ffffffff16565b600954604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610f9557600080fd5b6005546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610dd790613e9d565b6007546001600160a01b03828116911614156115735760405162461bcd60e51b815260206004820152603960248201527f426f6e6473496e766573746d656e74546f6b656e3a2054686520726f7574657260448201527f20616c72656164792068617320746861742061646472657373000000000000006064820152608401610dd7565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561160557600080fd5b505afa158015611619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163d9190613a65565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190613a65565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117529190613a65565b600880546001600160a01b0319166001600160a01b03929092169190911790555050565b6009546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b60206040518083038186803b1580156117bd57600080fd5b505afa1580156117d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190613d65565b6009546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c47990602401606060405180830381600087803b15801561184357600080fd5b505af1158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b9190613d7e565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461191b5760405162461bcd60e51b8152600401610dd790613e9d565b601b55565b6005546001600160a01b0316331461194a5760405162461bcd60e51b8152600401610dd790613e9d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610dd790613e9d565b601c55565b6005546001600160a01b031633146119ed5760405162461bcd60e51b8152600401610dd790613e9d565b62030d408110158015611a0357506207a1208111155b611a885760405162461bcd60e51b815260206004820152604a60248201527f426f6e6473496e766573746d656e74546f6b656e3a20676173466f7250726f6360448201527f657373696e67206d757374206265206265747765656e203230302c303030206160648201526906e64203530302c3030360b41b608482015260a401610dd7565b601554811415611b0b5760405162461bcd60e51b815260206004820152604260248201527f426f6e6473496e766573746d656e74546f6b656e3a2043616e6e6f742075706460448201527f61746520676173466f7250726f63657373696e6720746f2073616d652076616c606482015261756560f01b608482015260a401610dd7565b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601555565b6005546001600160a01b03163314611b685760405162461bcd60e51b8152600401610dd790613e9d565b6009546001600160a01b0382811691161415611bf85760405162461bcd60e51b815260206004820152604360248201527f426f6e6473496e766573746d656e74546f6b656e3a205468652064697669646560448201527f6e6420747261636b657220616c7265616479206861732074686174206164647260648201526265737360e81b608482015260a401610dd7565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4057600080fd5b505afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c789190613a65565b6001600160a01b031614611d2a5760405162461bcd60e51b815260206004820152606760248201527f426f6e6473496e766573746d656e74546f6b656e3a20546865206e657720646960448201527f766964656e6420747261636b6572206d757374206265206f776e65642062792060648201527f74686520426f6e6473496e766573746d656e74546f6b656e20746f6b656e20636084820152661bdb9d1c9858dd60ca1b60a482015260c401610dd7565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b158015611d6c57600080fd5b505af1158015611d80573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db0611dfe6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611e3f57600080fd5b505af1158015611e53573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50506009546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600980546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b03163314611f3f5760405162461bcd60e51b8152600401610dd790613e9d565b6005805460ff60a01b19169055565b606060048054610d1390614040565b6005546001600160a01b03163314611f875760405162461bcd60e51b8152600401610dd790613e9d565b6008546001600160a01b03838116911614156120315760405162461bcd60e51b815260206004820152605a60248201527f426f6e6473496e766573746d656e74546f6b656e3a205468652050616e45544860448201527f5377617020706169722063616e6e6f742062652072656d6f7665642066726f6d60648201527f206175746f6d617465644d61726b65744d616b65725061697273000000000000608482015260a401610dd7565b610e4e8282612e7a565b60095460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015610f9557600080fd5b6000610da33384610f4185604051806060016040528060258152602001614144602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612e40565b6009546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016117a5565b6000610da3338484612940565b60095460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b6101006040518083038186803b15801561216657600080fd5b505afa15801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e9190613b2a565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b031633146121e35760405162461bcd60e51b8152600401610dd790613e9d565b600c55565b6005546001600160a01b031633146122125760405162461bcd60e51b8152600401610dd790613e9d565b6001600160a01b03821660009081526016602052604090205460ff16151581151514156122a9576040805162461bcd60e51b81526020600482015260248101919091527f426f6e6473496e766573746d656e74546f6b656e3a204163636f756e7420697360448201527f20616c7265616479207468652076616c7565206f6620276578636c75646564276064820152608401610dd7565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123325760405162461bcd60e51b8152600401610dd790613e9d565b60005b828110156123a3578160166000868685818110612354576123546140cc565b90506020020160208101906123699190613a48565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061239b8161407b565b915050612335565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516123d793929190613dac565b60405180910390a1505050565b6005546001600160a01b0316331461240e5760405162461bcd60e51b8152600401610dd790613e9d565b6018805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6009546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015610f9557600080fd5b6005546001600160a01b031633146124c45760405162461bcd60e51b8152600401610dd790613e9d565b60095460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c79060240161102a565b6005546001600160a01b0316331461251f5760405162461bcd60e51b8152600401610dd790613e9d565b600d55565b600954604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd9060240161214d565b6005546001600160a01b031633146125905760405162461bcd60e51b8152600401610dd790613e9d565b6001600160a01b0381166125f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461267b5760405162461bcd60e51b8152600401610dd790613e9d565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610e4e573d6000803e3d6000fd5b6005546001600160a01b031633146126df5760405162461bcd60e51b8152600401610dd790613e9d565b6005805460ff60a01b1916600160a01b179055565b60008261270357506000610da7565b600061270f838561400a565b90508261271c8583613fe8565b146127735760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dd7565b9392505050565b600061277383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fef565b6000806127c98385613fd0565b9050838110156127735760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dd7565b6001600160a01b03831661287d5760405162461bcd60e51b8152602060048201526024808201527f65726332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd7565b6001600160a01b0382166128de5760405162461bcd60e51b815260206004820152602260248201527f65726332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60055483908390600160a01b900460ff168061297457506001600160a01b03821660009081526006602052604090205460ff165b8061299757506001600160a01b03811660009081526006602052604090205460ff165b6129ce5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610dd7565b6001600160a01b0385166129f45760405162461bcd60e51b8152600401610dd790613ed2565b6001600160a01b038416612a1a5760405162461bcd60e51b8152600401610dd790613e5a565b6005546001600160a01b03868116911614801590612a4657506005546001600160a01b03858116911614155b15612aae57600d54831115612aae5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610dd7565b82612ac457612abf8585600061301d565b611058565b6000612acf306118d6565b600c5490915081108015908190612af05750600854600160a01b900460ff16155b8015612afe575060185460ff165b8015612b2357506001600160a01b03871660009081526017602052604090205460ff16155b8015612b3d57506005546001600160a01b03888116911614155b15612bbd576008805460ff60a01b1916600160a01b179055600e54601254600091612b689190613126565b90506000612b8b601254612b8584876126f490919063ffffffff16565b9061277a565b9050612b9681613168565b6000612ba1306118d6565b9050612bac816132ed565b50506008805460ff60a01b19169055505b6008546001600160a01b03881660009081526016602052604090205460ff600160a01b909204821615911680612c0b57506001600160a01b03871660009081526016602052604090205460ff165b15612c14575060005b8015612c51576000612c366064612b856012548a6126f490919063ffffffff16565b9050612c428782613126565b9650612c4f89308361301d565b505b612c5c8888886134df565b612c6788888861301d565b6009546001600160a01b031663e30443bc89612c82816118d6565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612cc857600080fd5b505af1925050508015612cd9575060015b506009546001600160a01b031663e30443bc88612cf5816118d6565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612d3b57600080fd5b505af1925050508015612d4c575060015b50600854600160a01b900460ff16612e36576015546009546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401606060405180830381600087803b158015612daa57600080fd5b505af1925050508015612dda575060408051601f3d908101601f19168201909252612dd791810190613d7e565b60015b612de357612e34565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b5050505050505050565b60008184841115612e645760405162461bcd60e51b8152600401610dd79190613e05565b506000612e718486614029565b95945050505050565b6001600160a01b03821660009081526017602052604090205460ff1615158115151415612f265760405162461bcd60e51b815260206004820152604e60248201527f426f6e6473496e766573746d656e74546f6b656e3a204175746f6d617465642060448201527f6d61726b6574206d616b6572207061697220697320616c72656164792073657460648201526d20746f20746861742076616c756560901b608482015260a401610dd7565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155612fb35760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015612f9a57600080fd5b505af1158015612fae573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600081836130105760405162461bcd60e51b8152600401610dd79190613e05565b506000612e718486613fe8565b6001600160a01b0383166130435760405162461bcd60e51b8152600401610dd790613ed2565b6001600160a01b0382166130695760405162461bcd60e51b8152600401610dd790613e5a565b6130a681604051806060016040528060268152602001614169602691396001600160a01b0386166000908152602081905260409020549190612e40565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546130d590826127bc565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612933565b600061277383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e40565b6000613181600e5460125461312690919063ffffffff16565b905060006131a36002612b8584612b85600f54886126f490919063ffffffff16565b905060006131b18483613126565b9050476131bd82613695565b60006131c94783613126565b905060006131eb6002612b8588612b85600f54876126f490919063ffffffff16565b90506131f785826137f6565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1600061325387612b85601054866126f490919063ffffffff16565b9050600061326b826132658686613126565b90613126565b6013546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156132a6573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156132e1573d6000803e3d6000fd5b50505050505050505050565b6132f6816138af565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561335857600080fd5b505afa15801561336c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133909190613d65565b60095460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561340557600080fd5b505af1158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190613d2f565b905080156134da576009546040516351c2a0e360e01b8152600481018490526001600160a01b03909116906351c2a0e390602401600060405180830381600087803b15801561348b57600080fd5b505af115801561349f573d6000803e3d6000fd5b505060408051868152602081018690527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc393500190506123d7565b505050565b60006134ee82610e9b856118d6565b6001600160a01b03851660009081526019602052604090205490915060ff1615801561353357506001600160a01b03831660009081526019602052604090205460ff16155b1561355a57601a5481111561355a5760405162461bcd60e51b8152600401610dd790613f17565b6001600160a01b03841660009081526017602052604090205460ff16801561359b57506001600160a01b03831660009081526019602052604090205460ff16155b156135c257601a548111156135c25760405162461bcd60e51b8152600401610dd790613f17565b6001600160a01b03831660009081526017602052604090205460ff16801561360357506001600160a01b03841660009081526019602052604090205460ff16155b156113da576000613613856118d6565b9050601b5481111561105857600061363b6064612b85601c54856126f490919063ffffffff16565b90508084111561368d5760405162461bcd60e51b815260206004820152601c60248201527f457863656564696e6720416c6c6f7765642053616c65204c696d6974000000006044820152606401610dd7565b505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136ca576136ca6140cc565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561371e57600080fd5b505afa158015613732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137569190613a65565b81600181518110613769576137696140cc565b6001600160a01b03928316602091820292909201015260075461378f913091168461281b565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906137c8908590600090869030904290600401613f5f565b600060405180830381600087803b1580156137e257600080fd5b505af115801561368d573d6000803e3d6000fd5b60075461380e9030906001600160a01b03168461281b565b60075460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b15801561387657600080fd5b505af115801561388a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110589190613d7e565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106138e6576138e66140cc565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561393a57600080fd5b505afa15801561394e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139729190613a65565b81600181518110613985576139856140cc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106139d9576139d96140cc565b6001600160a01b0392831660209182029290920101526007546139ff913091168461281b565b600754604051635c11d79560e01b81526001600160a01b0390911690635c11d795906137c8908590600090869030904290600401613f5f565b8035613a43816140f8565b919050565b600060208284031215613a5a57600080fd5b8135612773816140f8565b600060208284031215613a7757600080fd5b8151612773816140f8565b60008060408385031215613a9557600080fd5b8235613aa0816140f8565b91506020830135613ab0816140f8565b809150509250929050565b600080600060608486031215613ad057600080fd5b8335613adb816140f8565b92506020840135613aeb816140f8565b929592945050506040919091013590565b60008060408385031215613b0f57600080fd5b8235613b1a816140f8565b91506020830135613ab08161410d565b600080600080600080600080610100898b031215613b4757600080fd5b8851613b52816140f8565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008060408385031215613ba757600080fd5b8235613bb2816140f8565b946020939093013593505050565b600080600060408486031215613bd557600080fd5b833567ffffffffffffffff80821115613bed57600080fd5b818601915086601f830112613c0157600080fd5b813581811115613c1057600080fd5b8760208260051b8501011115613c2557600080fd5b60209283019550935050840135613c3b8161410d565b809150509250925092565b60006020808385031215613c5957600080fd5b823567ffffffffffffffff80821115613c7157600080fd5b818501915085601f830112613c8557600080fd5b813581811115613c9757613c976140e2565b8060051b604051601f19603f83011681018181108582111715613cbc57613cbc6140e2565b604052828152858101935084860182860187018a1015613cdb57600080fd5b600095505b83861015613d0557613cf181613a38565b855260019590950194938601938601613ce0565b5098975050505050505050565b600060208284031215613d2457600080fd5b81356127738161410d565b600060208284031215613d4157600080fd5b81516127738161410d565b600060208284031215613d5e57600080fd5b5035919050565b600060208284031215613d7757600080fd5b5051919050565b600080600060608486031215613d9357600080fd5b8351925060208401519150604084015190509250925092565b6040808252810183905260008460608301825b86811015613def578235613dd2816140f8565b6001600160a01b0316825260209283019290910190600101613dbf565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015613e3257858101830151858201604001528201613e16565b81811115613e44576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f65726332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f65726332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613faf5784516001600160a01b031683529383019391830191600101613f8a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613fe357613fe36140b6565b500190565b60008261400557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614024576140246140b6565b500290565b60008282101561403b5761403b6140b6565b500390565b600181811c9082168061405457607f821691505b6020821081141561407557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561408f5761408f6140b6565b5060010190565b600060ff821660ff8114156140ad576140ad6140b6565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ee457600080fd5b8015158114610ee457600080fdfe65726332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636565726332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f65726332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212209280c60017c7e6ed6eaca7f889f8523f458d29a1f6222c7b821af5c180b678c064736f6c6343000807003360c06040527fdac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006080523480156200003557600080fd5b5060405180606001604052806025815260200162002234602591396040518060600160405280602581526020016200223460259139815182908290620000839060039060208501906200011d565b508051620000999060049060208401906200011d565b5050506000620000ae6200011960201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10601155506a01a784379d99db4200000060a05262000200565b3390565b8280546200012b90620001c3565b90600052602060002090601f0160209004810192826200014f57600085556200019a565b82601f106200016a57805160ff19168380011785556200019a565b828001600101855582156200019a579182015b828111156200019a5782518255916020019190600101906200017d565b50620001a8929150620001ac565b5090565b5b80821115620001a85760008155600101620001ad565b600181811c90821680620001d857607f821691505b60208210811415620001fa57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a051611ffd62000237600039600081816104c00152610d6c0152600081816103d701526117f00152611ffd6000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80638322fff211610125578063bc4c4b37116100ad578063e7841ec01161007c578063e7841ec01461052e578063e98030c714610536578063f2fde38b14610549578063fbcbc0f11461055c578063ffb2c4791461056f57600080fd5b8063bc4c4b37146104a8578063be10b614146104bb578063dd62ed3e146104e2578063e30443bc1461051b57600080fd5b806395d89b41116100f457806395d89b411461043e578063a457c2d714610446578063a8b9d24014610459578063a9059cbb1461046c578063aafd847a1461047f57600080fd5b80638322fff2146103d257806385a6b3ae146104115780638da5cb5b1461041a57806391b89fba1461042b57600080fd5b806331e79db0116101a857806351c2a0e31161017757806351c2a0e31461037d5780636a474002146103905780636f2789ec1461039857806370a08231146103a1578063715018a6146103ca57600080fd5b806331e79db0146102da57806339509351146102ef5780634e7b827f146103025780635183d6fd1461032557600080fd5b8063226cfa3d116101ef578063226cfa3d1461027c57806323b872dd1461029c57806327ce0147146102af5780633009a609146102c2578063313ce567146102cb57600080fd5b806306fdde0314610221578063095ea7b31461023f57806309bbedde1461026257806318160ddd14610274575b600080fd5b61022961059d565b6040516102369190611d19565b60405180910390f35b61025261024d366004611c2f565b61062f565b6040519015158152602001610236565b600a545b604051908152602001610236565b600254610266565b61026661028a366004611bbc565b60106020526000908152604090205481565b6102526102aa366004611c89565b610646565b6102666102bd366004611bbc565b6106af565b610266600e5481565b60405160128152602001610236565b6102ed6102e8366004611bbc565b61070b565b005b6102526102fd366004611c2f565b61083b565b610252610310366004611bbc565b600f6020526000908152604090205460ff1681565b610338610333366004611d00565b610871565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610236565b6102ed61038b366004611d00565b6109e3565b6102ed610aa1565b61026660115481565b6102666103af366004611bbc565b6001600160a01b031660009081526020819052604090205490565b6102ed610b57565b6103f97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610236565b61026660095481565b6005546001600160a01b03166103f9565b610266610439366004611bbc565b610bcb565b610229610bd6565b610252610454366004611c2f565b610be5565b610266610467366004611bbc565b610c34565b61025261047a366004611c2f565b610c60565b61026661048d366004611bbc565b6001600160a01b031660009081526008602052604090205490565b6102526104b6366004611bf6565b610c6d565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102666104f0366004611c5b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102ed610529366004611c2f565b610d1b565b600e54610266565b6102ed610544366004611d00565b610ea7565b6102ed610557366004611bbc565b61101a565b61033861056a366004611bbc565b611105565b61058261057d366004611d00565b61127d565b60408051938452602084019290925290820152606001610236565b6060600380546105ac90611e93565b80601f01602080910402602001604051908101604052809291908181526020018280546105d890611e93565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b5050505050905090565b600061063c338484611398565b5060015b92915050565b60006106538484846114bc565b6106a584336106a085604051806060016040528060288152602001611f39602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611518565b611398565b5060019392505050565b6001600160a01b03811660009081526007602090815260408083205491839052822054600654600160801b92610701926106fc926106f6916106f19190611552565b6115d8565b906115e8565b611626565b6106409190611dfc565b6005546001600160a01b0316331461073e5760405162461bcd60e51b815260040161073590611d6e565b60405180910390fd5b6001600160a01b0381166000908152600f602052604090205460ff161561076457600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610792908290611639565b60405163131836e760e21b8152600a60048201526001600160a01b0382166024820152733512278ca16a21c3af902ea33491719537e9779f90634c60db9c9060440160006040518083038186803b1580156107ec57600080fd5b505af4158015610800573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161063c9185906106a09086611698565b600080600080600080600080600a733512278ca16a21c3af902ea33491719537e9779f63deb3d89690916040518263ffffffff1660e01b81526004016108b991815260200190565b60206040518083038186803b1580156108d157600080fd5b505af41580156108e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109099190611ce7565b891061092e5750600096506000199550859450869350839250829150819050806109d8565b6040516368d54f3f60e11b8152600a6004820152602481018a9052600090733512278ca16a21c3af902ea33491719537e9779f9063d1aa9e7e9060440160206040518083038186803b15801561098357600080fd5b505af4158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb9190611bd9565b90506109c681611105565b98509850985098509850985098509850505b919395975091939597565b6005546001600160a01b03163314610a0d5760405162461bcd60e51b815260040161073590611d6e565b6000610a1860025490565b11610a2257600080fd5b8015610a9e57610a55610a3460025490565b610a4283600160801b611552565b610a4c9190611dfc565b60065490611698565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600954610a9a9082611698565b6009555b50565b60405162461bcd60e51b81526020600482015260856024820152600080516020611fa883398151915260448201527f61636b65723a2077697468647261774469766964656e642064697361626c656460648201527f2e20557365207468652027636c61696d272066756e6374696f6e206f6e20746860848201527f65206d61696e20426f6e6473496e766573746d656e74546f6b656e20636f6e7460a4820152643930b1ba1760d91b60c482015260e401610735565b6005546001600160a01b03163314610b815760405162461bcd60e51b815260040161073590611d6e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061064082610c34565b6060600480546105ac90611e93565b600061063c33846106a085604051806060016040528060258152602001611f61602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611518565b6001600160a01b03811660009081526008602052604081205461064090610c5a846106af565b906116f7565b600061063c3384846114bc565b6005546000906001600160a01b03163314610c9a5760405162461bcd60e51b815260040161073590611d6e565b6000610ca584611739565b90508015610d11576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610cff9085815260200190565b60405180910390a36001915050610640565b5060009392505050565b6005546001600160a01b03163314610d455760405162461bcd60e51b815260040161073590611d6e565b6001600160a01b0382166000908152600f602052604090205460ff1615610d6a575050565b7f00000000000000000000000000000000000000000000000000000000000000008110610e1957610d9b8282611639565b604051632f0ad01760e21b8152600a60048201526001600160a01b038316602482015260448101829052733512278ca16a21c3af902ea33491719537e9779f9063bc2b405c9060640160006040518083038186803b158015610dfc57600080fd5b505af4158015610e10573d6000803e3d6000fd5b50505050610e97565b610e24826000611639565b60405163131836e760e21b8152600a60048201526001600160a01b0383166024820152733512278ca16a21c3af902ea33491719537e9779f90634c60db9c9060440160006040518083038186803b158015610e7e57600080fd5b505af4158015610e92573d6000803e3d6000fd5b505050505b610ea2826001610c6d565b505050565b6005546001600160a01b03163314610ed15760405162461bcd60e51b815260040161073590611d6e565b610e108110158015610ee65750620151808111155b610f6c5760405162461bcd60e51b815260206004820152605a6024820152600080516020611fa883398151915260448201527f61636b65723a20636c61696d57616974206d757374206265207570646174656460648201527f20746f206265747765656e203120616e6420323420686f757273000000000000608482015260a401610735565b601154811415610fe75760405162461bcd60e51b815260206004820152604c6024820152600080516020611fa883398151915260448201527f61636b65723a2043616e6e6f742075706461746520636c61696d57616974207460648201526b6f2073616d652076616c756560a01b608482015260a401610735565b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601155565b6005546001600160a01b031633146110445760405162461bcd60e51b815260040161073590611d6e565b6001600160a01b0381166110a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610735565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b8152600a60048201526001600160a01b03821660248201528190600090819081908190819081908190733512278ca16a21c3af902ea33491719537e9779f906317e142d19060440160206040518083038186803b15801561117057600080fd5b505af4158015611184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a89190611ce7565b965060001995506000871261120a57600e548711156111d657600e546111cf9088906118cd565b955061120a565b600e54600a54600091106111eb5760006111fa565b600e54600a546111fa916116f7565b905061120688826115e8565b9650505b61121388610c34565b945061121e886106af565b6001600160a01b038916600090815260106020526040902054909450925082611248576000611256565b601154611256908490611698565b9150428211611266576000611270565b61127082426116f7565b9050919395975091939597565b600a54600090819081908061129d575050600e5460009250829150611391565b600e546000805a90506000805b89841080156112b857508582105b1561138057846112c781611ece565b600a54909650861090506112da57600094505b6000600a60000186815481106112f2576112f2611eff565b60009182526020808320909101546001600160a01b031680835260109091526040909120549091506113239061190a565b1561134657611333816001610c6d565b15611346578161134281611ece565b9250505b8261135081611ece565b93505060005a9050808511156113775761137461136d86836116f7565b8790611698565b95505b93506112aa9050565b600e85905590975095509193505050505b9193909250565b6001600160a01b0383166113fa5760405162461bcd60e51b8152602060048201526024808201527f65726332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610735565b6001600160a01b03821661145b5760405162461bcd60e51b815260206004820152602260248201527f65726332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610735565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152603b6024820152600080516020611fa883398151915260448201527f61636b65723a204e6f207472616e736665727320616c6c6f77656400000000006064820152608401610735565b6000818484111561153c5760405162461bcd60e51b81526004016107359190611d19565b5060006115498486611e7c565b95945050505050565b60008261156157506000610640565b600061156d8385611e1e565b90508261157a8583611dfc565b146115d15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610735565b9392505050565b6000818181121561064057600080fd5b6000806115f58385611da3565b9050600083121580156116085750838112155b8061161d575060008312801561161d57508381125b6115d157600080fd5b60008082121561163557600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561167857600061166683836116f7565b90506116728482611931565b50505050565b80821015610ea257600061168c82846116f7565b90506116728482611995565b6000806116a58385611de4565b9050838110156115d15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610735565b60006115d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611518565b60008061174583610c34565b905080156118c4576001600160a01b0383166000908152600860205260409020546117709082611698565b6001600160a01b038416600081815260086020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906117bf9084815260200190565b60405180910390a260405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561183657600080fd5b505af115801561184a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186e9190611cca565b9050806118bd576001600160a01b03841660009081526008602052604090205461189890836116f7565b6001600160a01b03909416600090815260086020526040812094909455509192915050565b5092915050565b50600092915050565b6000806118da8385611e3d565b9050600083121580156118ed5750838113155b8061161d575060008312801561161d57508381136115d157600080fd5b60004282111561191c57506000919050565b60115461192942846116f7565b101592915050565b61193b82826119d9565b6119756119566106f18360065461155290919063ffffffff16565b6001600160a01b038416600090815260076020526040902054906118cd565b6001600160a01b0390921660009081526007602052604090209190915550565b61199f8282611ab8565b6119756119ba6106f18360065461155290919063ffffffff16565b6001600160a01b038416600090815260076020526040902054906115e8565b6001600160a01b038216611a2f5760405162461bcd60e51b815260206004820152601f60248201527f65726332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610735565b600254611a3c9082611698565b6002556001600160a01b038216600090815260208190526040902054611a629082611698565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038216611b185760405162461bcd60e51b815260206004820152602160248201527f65726332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610735565b611b5581604051806060016040528060228152602001611f86602291396001600160a01b0385166000908152602081905260409020549190611518565b6001600160a01b038316600090815260208190526040902055600254611b7b90826116f7565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611aac565b600060208284031215611bce57600080fd5b81356115d181611f15565b600060208284031215611beb57600080fd5b81516115d181611f15565b60008060408385031215611c0957600080fd5b8235611c1481611f15565b91506020830135611c2481611f2a565b809150509250929050565b60008060408385031215611c4257600080fd5b8235611c4d81611f15565b946020939093013593505050565b60008060408385031215611c6e57600080fd5b8235611c7981611f15565b91506020830135611c2481611f15565b600080600060608486031215611c9e57600080fd5b8335611ca981611f15565b92506020840135611cb981611f15565b929592945050506040919091013590565b600060208284031215611cdc57600080fd5b81516115d181611f2a565b600060208284031215611cf957600080fd5b5051919050565b600060208284031215611d1257600080fd5b5035919050565b600060208083528351808285015260005b81811015611d4657858101830151858201604001528201611d2a565b81811115611d58576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600080821280156001600160ff1b0384900385131615611dc557611dc5611ee9565b600160ff1b8390038412811615611dde57611dde611ee9565b50500190565b60008219821115611df757611df7611ee9565b500190565b600082611e1957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611e3857611e38611ee9565b500290565b60008083128015600160ff1b850184121615611e5b57611e5b611ee9565b6001600160ff1b0384018313811615611e7657611e76611ee9565b50500390565b600082821015611e8e57611e8e611ee9565b500390565b600181811c90821680611ea757607f821691505b60208210811415611ec857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611ee257611ee2611ee9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610a9e57600080fd5b8015158114610a9e57600080fdfe65726332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636565726332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f65726332303a206275726e20616d6f756e7420657863656564732062616c616e6365426f6e6473496e766573746d656e74546f6b656e5f4469766964656e645f5472a2646970667358221220f074aa510f0c558ce479605d11329a8978e5d64c7b244bb5fa177f226873d80864736f6c63430008070033426f6e6473496e766573746d656e74546f6b656e5f4469766964656e645f547261636b6572

Deployed Bytecode

0x6080604052600436106104145760003560e01c8063712847301161021e578063a457c2d711610123578063dd62ed3e116100ab578063ec28438a1161007a578063ec28438a14610c6f578063f27fd25414610c8f578063f2fde38b14610caf578063f603939b14610ccf578063fb201b1d14610cef57600080fd5b8063dd62ed3e14610bde578063e2f4560514610c24578063e7841ec014610c3a578063e98030c714610c4f57600080fd5b8063afa4f3b2116100f2578063afa4f3b214610b2e578063b62496f514610b4e578063c024666814610b7e578063c492f04614610b9e578063c49b9a8014610bbe57600080fd5b8063a457c2d714610a69578063a8b9d24014610a89578063a9059cbb14610aa9578063ad56c13c14610ac957600080fd5b80638baeefce116101a657806398118cb41161017557806398118cb4146109f25780639a46135314610a085780639a7a23d614610a1e5780639c1b8af514610a3e578063a26579ad14610a5457600080fd5b80638baeefce146109945780638c0344db146109a95780638da5cb5b146109bf57806395d89b41146109dd57600080fd5b80637e298cf2116101ed5780637e298cf2146108e05780638322fff21461090057806385141a7714610934578063871c128d1461095457806388bdd9be1461097457600080fd5b8063712847301461087f578063715018a61461089f57806372b28e45146108b45780637d1db4a5146108ca57600080fd5b806344d4225f1161032457806359629196116102ac57806365b8dbc01161027b57806365b8dbc0146107e95780636843cd84146108095780636b67c4df14610829578063700bb1911461083f57806370a082311461085f57600080fd5b806359629196146107745780635d098b3814610794578063625e764c146107b457806364b0f653146107d457600080fd5b80634a74bb02116102f35780634a74bb02146106cc5780634e3c06b1146106e65780634e71d92d146107065780634fbee1931461071b578063573229771461075457600080fd5b806344d4225f1461064b57806345f579771461066b57806347535d7b1461068b57806349bd5a5e146106ac57600080fd5b80632c1f5216116103a757806331e79db01161037657806331e79db0146105b5578063357bf15c146105d557806339509351146105f55780633eaaf86b146106155780634144d9e41461062b57600080fd5b80632c1f52161461054e57806330bb4cff1461056e57806331201d2014610583578063313ce5671461059957600080fd5b806313ec8f75116103e357806313ec8f75146104c15780631694505e146104e157806318160ddd1461051957806323b872dd1461052e57600080fd5b806306fdde0314610420578063095ea7b31461044b5780630b6bb6f51461047b57806313114a9d1461049d57600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b50610435610d04565b6040516104429190613e05565b60405180910390f35b34801561045757600080fd5b5061046b610466366004613b94565b610d96565b6040519015158152602001610442565b34801561048757600080fd5b5061049b610496366004613c46565b610dad565b005b3480156104a957600080fd5b506104b360125481565b604051908152602001610442565b3480156104cd57600080fd5b5061049b6104dc366004613d4c565b610e52565b3480156104ed57600080fd5b50600754610501906001600160a01b031681565b6040516001600160a01b039091168152602001610442565b34801561052557600080fd5b506002546104b3565b34801561053a57600080fd5b5061046b610549366004613abb565b610ee7565b34801561055a57600080fd5b50600954610501906001600160a01b031681565b34801561057a57600080fd5b506104b3610f50565b34801561058f57600080fd5b506104b3601b5481565b3480156105a557600080fd5b5060405160128152602001610442565b3480156105c157600080fd5b5061049b6105d0366004613a48565b610fd2565b3480156105e157600080fd5b5061049b6105f0366004613d4c565b61105f565b34801561060157600080fd5b5061046b610610366004613b94565b6110a8565b34801561062157600080fd5b506104b3600b5481565b34801561063757600080fd5b50601354610501906001600160a01b031681565b34801561065757600080fd5b5061049b610666366004613d4c565b6110de565b34801561067757600080fd5b5061049b610686366004613d4c565b61110d565b34801561069757600080fd5b5060055461046b90600160a01b900460ff1681565b3480156106b857600080fd5b50600854610501906001600160a01b031681565b3480156106d857600080fd5b5060185461046b9060ff1681565b3480156106f257600080fd5b5061049b610701366004613afc565b611157565b34801561071257600080fd5b5061049b6111ac565b34801561072757600080fd5b5061046b610736366004613a48565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561076057600080fd5b50601454610501906001600160a01b031681565b34801561078057600080fd5b5061049b61078f366004613b94565b611230565b3480156107a057600080fd5b5061049b6107af366004613a48565b6113e0565b3480156107c057600080fd5b5061049b6107cf366004613d4c565b61142c565b3480156107e057600080fd5b506104b3611480565b3480156107f557600080fd5b5061049b610804366004613a48565b6114c5565b34801561081557600080fd5b506104b3610824366004613a48565b611776565b34801561083557600080fd5b506104b360105481565b34801561084b57600080fd5b5061049b61085a366004613d4c565b6117f5565b34801561086b57600080fd5b506104b361087a366004613a48565b6118d6565b34801561088b57600080fd5b5061049b61089a366004613d4c565b6118f1565b3480156108ab57600080fd5b5061049b611920565b3480156108c057600080fd5b506104b3601a5481565b3480156108d657600080fd5b506104b3600d5481565b3480156108ec57600080fd5b5061049b6108fb366004613d4c565b611994565b34801561090c57600080fd5b506105017f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b34801561094057600080fd5b50600a54610501906001600160a01b031681565b34801561096057600080fd5b5061049b61096f366004613d4c565b6119c3565b34801561098057600080fd5b5061049b61098f366004613a48565b611b3e565b3480156109a057600080fd5b5061049b611f15565b3480156109b557600080fd5b506104b3600e5481565b3480156109cb57600080fd5b506005546001600160a01b0316610501565b3480156109e957600080fd5b50610435611f4e565b3480156109fe57600080fd5b506104b3600f5481565b348015610a1457600080fd5b506104b360115481565b348015610a2a57600080fd5b5061049b610a39366004613afc565b611f5d565b348015610a4a57600080fd5b506104b360155481565b348015610a6057600080fd5b506104b361203b565b348015610a7557600080fd5b5061046b610a84366004613b94565b612080565b348015610a9557600080fd5b506104b3610aa4366004613a48565b6120cf565b348015610ab557600080fd5b5061046b610ac4366004613b94565b612102565b348015610ad557600080fd5b50610ae9610ae4366004613a48565b61210f565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610442565b348015610b3a57600080fd5b5061049b610b49366004613d4c565b6121b9565b348015610b5a57600080fd5b5061046b610b69366004613a48565b60176020526000908152604090205460ff1681565b348015610b8a57600080fd5b5061049b610b99366004613afc565b6121e8565b348015610baa57600080fd5b5061049b610bb9366004613bc0565b612308565b348015610bca57600080fd5b5061049b610bd9366004613d12565b6123e4565b348015610bea57600080fd5b506104b3610bf9366004613a82565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c3057600080fd5b506104b3600c5481565b348015610c4657600080fd5b506104b3612455565b348015610c5b57600080fd5b5061049b610c6a366004613d4c565b61249a565b348015610c7b57600080fd5b5061049b610c8a366004613d4c565b6124f5565b348015610c9b57600080fd5b50610ae9610caa366004613d4c565b612524565b348015610cbb57600080fd5b5061049b610cca366004613a48565b612566565b348015610cdb57600080fd5b5061049b610cea366004613d4c565b612651565b348015610cfb57600080fd5b5061049b6126b5565b606060038054610d1390614040565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3f90614040565b8015610d8c5780601f10610d6157610100808354040283529160200191610d8c565b820191906000526020600020905b815481529060010190602001808311610d6f57829003601f168201915b5050505050905090565b6000610da333848461281b565b5060015b92915050565b6005546001600160a01b03163314610de05760405162461bcd60e51b8152600401610dd790613e9d565b60405180910390fd5b60005b81518160ff161015610e4e57600160066000848460ff1681518110610e0a57610e0a6140cc565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e4681614096565b915050610de3565b5050565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610dd790613e9d565b6011819055601054600f54600e54610ea1928492610e9b9283916127bc565b906127bc565b6012819055601e1015610ee45760405162461bcd60e51b815260206004820152600b60248201526a546f20486967682046656560a81b6044820152606401610dd7565b50565b6000610ef4848484612940565b610f468433610f418560405180606001604052806028815260200161411c602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612e40565b61281b565b5060019392505050565b600954604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610f9557600080fd5b505afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd9190613d65565b905090565b6005546001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610dd790613e9d565b60095460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b5050505050565b6005546001600160a01b031633146110895760405162461bcd60e51b8152600401610dd790613e9d565b600f819055601154601054600e54610ea19291610e9b918290866127bc565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610da3918590610f4190866127bc565b6005546001600160a01b031633146111085760405162461bcd60e51b8152600401610dd790613e9d565b601a55565b6005546001600160a01b031633146111375760405162461bcd60e51b8152600401610dd790613e9d565b600e819055601154601054600f54610ea19291610e9b91829086906127bc565b6005546001600160a01b031633146111815760405162461bcd60e51b8152600401610dd790613e9d565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60095460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b3790604401602060405180830381600087803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee49190613d2f565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610dd790613e9d565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561129c57600080fd5b505afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190613d65565b9050818110156113395760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f74207265636f766572206d6f7265207468616e20617661696c61626044820152696c652062616c616e636560b01b6064820152608401610dd7565b826001600160a01b031663a9059cbb61135a6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190613d2f565b50505050565b6005546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610dd790613e9d565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114565760405162461bcd60e51b8152600401610dd790613e9d565b80601081905550610ea1601154610e9b601054610e9b600f54600e546127bc90919063ffffffff16565b600954604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610f9557600080fd5b6005546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610dd790613e9d565b6007546001600160a01b03828116911614156115735760405162461bcd60e51b815260206004820152603960248201527f426f6e6473496e766573746d656e74546f6b656e3a2054686520726f7574657260448201527f20616c72656164792068617320746861742061646472657373000000000000006064820152608401610dd7565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561160557600080fd5b505afa158015611619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163d9190613a65565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561169a57600080fd5b505afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190613a65565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561171a57600080fd5b505af115801561172e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117529190613a65565b600880546001600160a01b0319166001600160a01b03929092169190911790555050565b6009546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b60206040518083038186803b1580156117bd57600080fd5b505afa1580156117d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190613d65565b6009546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c47990602401606060405180830381600087803b15801561184357600080fd5b505af1158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b9190613d7e565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461191b5760405162461bcd60e51b8152600401610dd790613e9d565b601b55565b6005546001600160a01b0316331461194a5760405162461bcd60e51b8152600401610dd790613e9d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610dd790613e9d565b601c55565b6005546001600160a01b031633146119ed5760405162461bcd60e51b8152600401610dd790613e9d565b62030d408110158015611a0357506207a1208111155b611a885760405162461bcd60e51b815260206004820152604a60248201527f426f6e6473496e766573746d656e74546f6b656e3a20676173466f7250726f6360448201527f657373696e67206d757374206265206265747765656e203230302c303030206160648201526906e64203530302c3030360b41b608482015260a401610dd7565b601554811415611b0b5760405162461bcd60e51b815260206004820152604260248201527f426f6e6473496e766573746d656e74546f6b656e3a2043616e6e6f742075706460448201527f61746520676173466f7250726f63657373696e6720746f2073616d652076616c606482015261756560f01b608482015260a401610dd7565b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601555565b6005546001600160a01b03163314611b685760405162461bcd60e51b8152600401610dd790613e9d565b6009546001600160a01b0382811691161415611bf85760405162461bcd60e51b815260206004820152604360248201527f426f6e6473496e766573746d656e74546f6b656e3a205468652064697669646560448201527f6e6420747261636b657220616c7265616479206861732074686174206164647260648201526265737360e81b608482015260a401610dd7565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4057600080fd5b505afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c789190613a65565b6001600160a01b031614611d2a5760405162461bcd60e51b815260206004820152606760248201527f426f6e6473496e766573746d656e74546f6b656e3a20546865206e657720646960448201527f766964656e6420747261636b6572206d757374206265206f776e65642062792060648201527f74686520426f6e6473496e766573746d656e74546f6b656e20746f6b656e20636084820152661bdb9d1c9858dd60ca1b60a482015260c401610dd7565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b158015611d6c57600080fd5b505af1158015611d80573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db0611dfe6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611e3f57600080fd5b505af1158015611e53573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50506009546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600980546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b03163314611f3f5760405162461bcd60e51b8152600401610dd790613e9d565b6005805460ff60a01b19169055565b606060048054610d1390614040565b6005546001600160a01b03163314611f875760405162461bcd60e51b8152600401610dd790613e9d565b6008546001600160a01b03838116911614156120315760405162461bcd60e51b815260206004820152605a60248201527f426f6e6473496e766573746d656e74546f6b656e3a205468652050616e45544860448201527f5377617020706169722063616e6e6f742062652072656d6f7665642066726f6d60648201527f206175746f6d617465644d61726b65744d616b65725061697273000000000000608482015260a401610dd7565b610e4e8282612e7a565b60095460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015610f9557600080fd5b6000610da33384610f4185604051806060016040528060258152602001614144602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612e40565b6009546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016117a5565b6000610da3338484612940565b60095460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b6101006040518083038186803b15801561216657600080fd5b505afa15801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e9190613b2a565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b031633146121e35760405162461bcd60e51b8152600401610dd790613e9d565b600c55565b6005546001600160a01b031633146122125760405162461bcd60e51b8152600401610dd790613e9d565b6001600160a01b03821660009081526016602052604090205460ff16151581151514156122a9576040805162461bcd60e51b81526020600482015260248101919091527f426f6e6473496e766573746d656e74546f6b656e3a204163636f756e7420697360448201527f20616c7265616479207468652076616c7565206f6620276578636c75646564276064820152608401610dd7565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146123325760405162461bcd60e51b8152600401610dd790613e9d565b60005b828110156123a3578160166000868685818110612354576123546140cc565b90506020020160208101906123699190613a48565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061239b8161407b565b915050612335565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516123d793929190613dac565b60405180910390a1505050565b6005546001600160a01b0316331461240e5760405162461bcd60e51b8152600401610dd790613e9d565b6018805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6009546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015610f9557600080fd5b6005546001600160a01b031633146124c45760405162461bcd60e51b8152600401610dd790613e9d565b60095460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c79060240161102a565b6005546001600160a01b0316331461251f5760405162461bcd60e51b8152600401610dd790613e9d565b600d55565b600954604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd9060240161214d565b6005546001600160a01b031633146125905760405162461bcd60e51b8152600401610dd790613e9d565b6001600160a01b0381166125f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461267b5760405162461bcd60e51b8152600401610dd790613e9d565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610e4e573d6000803e3d6000fd5b6005546001600160a01b031633146126df5760405162461bcd60e51b8152600401610dd790613e9d565b6005805460ff60a01b1916600160a01b179055565b60008261270357506000610da7565b600061270f838561400a565b90508261271c8583613fe8565b146127735760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dd7565b9392505050565b600061277383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fef565b6000806127c98385613fd0565b9050838110156127735760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dd7565b6001600160a01b03831661287d5760405162461bcd60e51b8152602060048201526024808201527f65726332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd7565b6001600160a01b0382166128de5760405162461bcd60e51b815260206004820152602260248201527f65726332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60055483908390600160a01b900460ff168061297457506001600160a01b03821660009081526006602052604090205460ff165b8061299757506001600160a01b03811660009081526006602052604090205460ff165b6129ce5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610dd7565b6001600160a01b0385166129f45760405162461bcd60e51b8152600401610dd790613ed2565b6001600160a01b038416612a1a5760405162461bcd60e51b8152600401610dd790613e5a565b6005546001600160a01b03868116911614801590612a4657506005546001600160a01b03858116911614155b15612aae57600d54831115612aae5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610dd7565b82612ac457612abf8585600061301d565b611058565b6000612acf306118d6565b600c5490915081108015908190612af05750600854600160a01b900460ff16155b8015612afe575060185460ff165b8015612b2357506001600160a01b03871660009081526017602052604090205460ff16155b8015612b3d57506005546001600160a01b03888116911614155b15612bbd576008805460ff60a01b1916600160a01b179055600e54601254600091612b689190613126565b90506000612b8b601254612b8584876126f490919063ffffffff16565b9061277a565b9050612b9681613168565b6000612ba1306118d6565b9050612bac816132ed565b50506008805460ff60a01b19169055505b6008546001600160a01b03881660009081526016602052604090205460ff600160a01b909204821615911680612c0b57506001600160a01b03871660009081526016602052604090205460ff165b15612c14575060005b8015612c51576000612c366064612b856012548a6126f490919063ffffffff16565b9050612c428782613126565b9650612c4f89308361301d565b505b612c5c8888886134df565b612c6788888861301d565b6009546001600160a01b031663e30443bc89612c82816118d6565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612cc857600080fd5b505af1925050508015612cd9575060015b506009546001600160a01b031663e30443bc88612cf5816118d6565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612d3b57600080fd5b505af1925050508015612d4c575060015b50600854600160a01b900460ff16612e36576015546009546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401606060405180830381600087803b158015612daa57600080fd5b505af1925050508015612dda575060408051601f3d908101601f19168201909252612dd791810190613d7e565b60015b612de357612e34565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b5050505050505050565b60008184841115612e645760405162461bcd60e51b8152600401610dd79190613e05565b506000612e718486614029565b95945050505050565b6001600160a01b03821660009081526017602052604090205460ff1615158115151415612f265760405162461bcd60e51b815260206004820152604e60248201527f426f6e6473496e766573746d656e74546f6b656e3a204175746f6d617465642060448201527f6d61726b6574206d616b6572207061697220697320616c72656164792073657460648201526d20746f20746861742076616c756560901b608482015260a401610dd7565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155612fb35760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015612f9a57600080fd5b505af1158015612fae573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600081836130105760405162461bcd60e51b8152600401610dd79190613e05565b506000612e718486613fe8565b6001600160a01b0383166130435760405162461bcd60e51b8152600401610dd790613ed2565b6001600160a01b0382166130695760405162461bcd60e51b8152600401610dd790613e5a565b6130a681604051806060016040528060268152602001614169602691396001600160a01b0386166000908152602081905260409020549190612e40565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546130d590826127bc565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612933565b600061277383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e40565b6000613181600e5460125461312690919063ffffffff16565b905060006131a36002612b8584612b85600f54886126f490919063ffffffff16565b905060006131b18483613126565b9050476131bd82613695565b60006131c94783613126565b905060006131eb6002612b8588612b85600f54876126f490919063ffffffff16565b90506131f785826137f6565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1600061325387612b85601054866126f490919063ffffffff16565b9050600061326b826132658686613126565b90613126565b6013546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156132a6573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156132e1573d6000803e3d6000fd5b50505050505050505050565b6132f6816138af565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b0316906370a082319060240160206040518083038186803b15801561335857600080fd5b505afa15801561336c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133909190613d65565b60095460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192506000917f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec79091169063a9059cbb90604401602060405180830381600087803b15801561340557600080fd5b505af1158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190613d2f565b905080156134da576009546040516351c2a0e360e01b8152600481018490526001600160a01b03909116906351c2a0e390602401600060405180830381600087803b15801561348b57600080fd5b505af115801561349f573d6000803e3d6000fd5b505060408051868152602081018690527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc393500190506123d7565b505050565b60006134ee82610e9b856118d6565b6001600160a01b03851660009081526019602052604090205490915060ff1615801561353357506001600160a01b03831660009081526019602052604090205460ff16155b1561355a57601a5481111561355a5760405162461bcd60e51b8152600401610dd790613f17565b6001600160a01b03841660009081526017602052604090205460ff16801561359b57506001600160a01b03831660009081526019602052604090205460ff16155b156135c257601a548111156135c25760405162461bcd60e51b8152600401610dd790613f17565b6001600160a01b03831660009081526017602052604090205460ff16801561360357506001600160a01b03841660009081526019602052604090205460ff16155b156113da576000613613856118d6565b9050601b5481111561105857600061363b6064612b85601c54856126f490919063ffffffff16565b90508084111561368d5760405162461bcd60e51b815260206004820152601c60248201527f457863656564696e6720416c6c6f7765642053616c65204c696d6974000000006044820152606401610dd7565b505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136ca576136ca6140cc565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561371e57600080fd5b505afa158015613732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137569190613a65565b81600181518110613769576137696140cc565b6001600160a01b03928316602091820292909201015260075461378f913091168461281b565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906137c8908590600090869030904290600401613f5f565b600060405180830381600087803b1580156137e257600080fd5b505af115801561368d573d6000803e3d6000fd5b60075461380e9030906001600160a01b03168461281b565b60075460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b15801561387657600080fd5b505af115801561388a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110589190613d7e565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106138e6576138e66140cc565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561393a57600080fd5b505afa15801561394e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139729190613a65565b81600181518110613985576139856140cc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7816002815181106139d9576139d96140cc565b6001600160a01b0392831660209182029290920101526007546139ff913091168461281b565b600754604051635c11d79560e01b81526001600160a01b0390911690635c11d795906137c8908590600090869030904290600401613f5f565b8035613a43816140f8565b919050565b600060208284031215613a5a57600080fd5b8135612773816140f8565b600060208284031215613a7757600080fd5b8151612773816140f8565b60008060408385031215613a9557600080fd5b8235613aa0816140f8565b91506020830135613ab0816140f8565b809150509250929050565b600080600060608486031215613ad057600080fd5b8335613adb816140f8565b92506020840135613aeb816140f8565b929592945050506040919091013590565b60008060408385031215613b0f57600080fd5b8235613b1a816140f8565b91506020830135613ab08161410d565b600080600080600080600080610100898b031215613b4757600080fd5b8851613b52816140f8565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008060408385031215613ba757600080fd5b8235613bb2816140f8565b946020939093013593505050565b600080600060408486031215613bd557600080fd5b833567ffffffffffffffff80821115613bed57600080fd5b818601915086601f830112613c0157600080fd5b813581811115613c1057600080fd5b8760208260051b8501011115613c2557600080fd5b60209283019550935050840135613c3b8161410d565b809150509250925092565b60006020808385031215613c5957600080fd5b823567ffffffffffffffff80821115613c7157600080fd5b818501915085601f830112613c8557600080fd5b813581811115613c9757613c976140e2565b8060051b604051601f19603f83011681018181108582111715613cbc57613cbc6140e2565b604052828152858101935084860182860187018a1015613cdb57600080fd5b600095505b83861015613d0557613cf181613a38565b855260019590950194938601938601613ce0565b5098975050505050505050565b600060208284031215613d2457600080fd5b81356127738161410d565b600060208284031215613d4157600080fd5b81516127738161410d565b600060208284031215613d5e57600080fd5b5035919050565b600060208284031215613d7757600080fd5b5051919050565b600080600060608486031215613d9357600080fd5b8351925060208401519150604084015190509250925092565b6040808252810183905260008460608301825b86811015613def578235613dd2816140f8565b6001600160a01b0316825260209283019290910190600101613dbf565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015613e3257858101830151858201604001528201613e16565b81811115613e44576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f65726332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f65726332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613faf5784516001600160a01b031683529383019391830191600101613f8a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613fe357613fe36140b6565b500190565b60008261400557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614024576140246140b6565b500290565b60008282101561403b5761403b6140b6565b500390565b600181811c9082168061405457607f821691505b6020821081141561407557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561408f5761408f6140b6565b5060010190565b600060ff821660ff8114156140ad576140ad6140b6565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ee457600080fd5b8015158114610ee457600080fdfe65726332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636565726332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f65726332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212209280c60017c7e6ed6eaca7f889f8523f458d29a1f6222c7b821af5c180b678c064736f6c63430008070033

Libraries Used


Deployed Bytecode Sourcemap

24501:18899:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5705:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6842:169;;;;;;;;;;-1:-1:-1;6842:169:0;;;;;:::i;:::-;;:::i;:::-;;;10143:14:1;;10136:22;10118:41;;10106:2;10091:18;6842:169:0;9978:187:1;24308:186:0;;;;;;;;;;-1:-1:-1;24308:186:0;;;;;:::i;:::-;;:::i;:::-;;25315:91;;;;;;;;;;;;;;;;;;;20643:25:1;;;20631:2;20616:18;25315:91:0;20497:177:1;31087:227:0;;;;;;;;;;-1:-1:-1;31087:227:0;;;;;:::i;:::-;;:::i;24593:41::-;;;;;;;;;;-1:-1:-1;24593:41:0;;;;-1:-1:-1;;;;;24593:41:0;;;;;;-1:-1:-1;;;;;6405:32:1;;;6387:51;;6375:2;6360:18;24593:41:0;6241:203:1;6193:108:0;;;;;;;;;;-1:-1:-1;6281:12:0;;6193:108;;7019:355;;;;;;;;;;-1:-1:-1;7019:355:0;;;;;:::i;:::-;;:::i;24709:58::-;;;;;;;;;;-1:-1:-1;24709:58:0;;;;-1:-1:-1;;;;;24709:58:0;;;32858:141;;;;;;;;;;;;;:::i;41444:65::-;;;;;;;;;;;;;;;;6036:93;;;;;;;;;;-1:-1:-1;6036:93:0;;6119:2;22779:36:1;;22767:2;22752:18;6036:93:0;22637:184:1;33446:129:0;;;;;;;;;;-1:-1:-1;33446:129:0;;;;;:::i;:::-;;:::i;30605:232::-;;;;;;;;;;-1:-1:-1;30605:232:0;;;;;:::i;:::-;;:::i;7384:218::-;;;;;;;;;;-1:-1:-1;7384:218:0;;;;;:::i;:::-;;:::i;24952:55::-;;;;;;;;;;;;;;;;25415:100;;;;;;;;;;-1:-1:-1;25415:100:0;;;;-1:-1:-1;;;;;25415:100:0;;;43117:132;;;;;;;;;;-1:-1:-1;43117:132:0;;;;;:::i;:::-;;:::i;30363:234::-;;;;;;;;;;-1:-1:-1;30363:234:0;;;;;:::i;:::-;;:::i;23807:26::-;;;;;;;;;;-1:-1:-1;23807:26:0;;;;-1:-1:-1;;;23807:26:0;;;;;;24641:29;;;;;;;;;;-1:-1:-1;24641:29:0;;;;-1:-1:-1;;;;;24641:29:0;;;41017:41;;;;;;;;;;-1:-1:-1;41017:41:0;;;;;;;;42962:146;;;;;;;;;;-1:-1:-1;42962:146:0;;;;;:::i;:::-;;:::i;34524:103::-;;;;;;;;;;;;;:::i;33007:125::-;;;;;;;;;;-1:-1:-1;33007:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;33096:28:0;33072:4;33096:28;;;:19;:28;;;;;;;;;33007:125;25522:94;;;;;;;;;;-1:-1:-1;25522:94:0;;;;-1:-1:-1;;;;;25522:94:0;;;34923:295;;;;;;;;;;-1:-1:-1;34923:295:0;;;;;:::i;:::-;;:::i;30234:121::-;;;;;;;;;;-1:-1:-1;30234:121:0;;;;;:::i;:::-;;:::i;30845:232::-;;;;;;;;;;-1:-1:-1;30845:232:0;;;;;:::i;:::-;;:::i;34772:141::-;;;;;;;;;;;;;:::i;29084:514::-;;;;;;;;;;-1:-1:-1;29084:514:0;;;;;:::i;:::-;;:::i;33299:139::-;;;;;;;;;;-1:-1:-1;33299:139:0;;;;;:::i;:::-;;:::i;25240:31::-;;;;;;;;;;;;;;;;34245:271;;;;;;;;;;-1:-1:-1;34245:271:0;;;;;:::i;:::-;;:::i;6363:127::-;;;;;;;;;;-1:-1:-1;6363:127:0;;;;;:::i;:::-;;:::i;43260:132::-;;;;;;;;;;-1:-1:-1;43260:132:0;;;;;:::i;:::-;;:::i;1893:148::-;;;;;;;;;;;;;:::i;41364:68::-;;;;;;;;;;;;;;;;25092:58;;;;;;;;;;;;;;;;42815:137;;;;;;;;;;-1:-1:-1;42815:137:0;;;;;:::i;:::-;;:::i;24855:82::-;;;;;;;;;;;;;;;24776:70;;;;;;;;;;-1:-1:-1;24776:70:0;;;;-1:-1:-1;;;;;24776:70:0;;;32041:436;;;;;;;;;;-1:-1:-1;32041:436:0;;;;;:::i;:::-;;:::i;28170:906::-;;;;;;;;;;-1:-1:-1;28170:906:0;;;;;:::i;:::-;;:::i;24227:73::-;;;;;;;;;;;;;:::i;25163:32::-;;;;;;;;;;;;;;;;1679:79;;;;;;;;;;-1:-1:-1;1744:6:0;;-1:-1:-1;;;;;1744:6:0;1679:79;;5924:104;;;;;;;;;;;;;:::i;25202:31::-;;;;;;;;;;;;;;;;25278:28;;;;;;;;;;;;;;;;31323:275;;;;;;;;;;-1:-1:-1;31323:275:0;;;;;:::i;:::-;;:::i;25625:40::-;;;;;;;;;;;;;;;;32617:108;;;;;;;;;;;;;:::i;7612:269::-;;;;;;;;;;-1:-1:-1;7612:269:0;;;;;:::i;:::-;;:::i;33140:151::-;;;;;;;;;;-1:-1:-1;33140:151:0;;;;;:::i;:::-;;:::i;6500:175::-;;;;;;;;;;-1:-1:-1;6500:175:0;;;;;:::i;:::-;;:::i;33583:318::-;;;;;;;;;;-1:-1:-1;33583:318:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7939:32:1;;;7921:51;;8003:2;7988:18;;7981:34;;;;8031:18;;;8024:34;;;;8089:2;8074:18;;8067:34;;;;8132:3;8117:19;;8110:35;7959:3;8161:19;;8154:35;8220:3;8205:19;;8198:35;8264:3;8249:19;;8242:35;7908:3;7893:19;33583:318:0;7582:701:1;32733:117:0;;;;;;;;;;-1:-1:-1;32733:117:0;;;;;:::i;:::-;;:::i;25732:58::-;;;;;;;;;;-1:-1:-1;25732:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29606:310;;;;;;;;;;-1:-1:-1;29606:310:0;;;;;:::i;:::-;;:::i;29924:302::-;;;;;;;;;;-1:-1:-1;29924:302:0;;;;;:::i;:::-;;:::i;41122:173::-;;;;;;;;;;-1:-1:-1;41122:173:0;;;;;:::i;:::-;;:::i;6683:151::-;;;;;;;;;;-1:-1:-1;6683:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6799:18:0;;;6772:7;6799:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6683:151;25014:54;;;;;;;;;;;;;;;;34635:129;;;;;;;;;;;;;:::i;32485:124::-;;;;;;;;;;-1:-1:-1;32485:124:0;;;;;:::i;:::-;;:::i;40869:106::-;;;;;;;;;;-1:-1:-1;40869:106:0;;;;;:::i;:::-;;:::i;33909:328::-;;;;;;;;;;-1:-1:-1;33909:328:0;;;;;:::i;:::-;;:::i;2049:244::-;;;;;;;;;;-1:-1:-1;2049:244:0;;;;;:::i;:::-;;:::i;35228:114::-;;;;;;;;;;-1:-1:-1;35228:114:0;;;;;:::i;:::-;;:::i;24147:72::-;;;;;;;;;;;;;:::i;5705:100::-;5759:13;5792:5;5785:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5705:100;:::o;6842:169::-;6925:4;6942:39;1095:10;6965:7;6974:6;6942:8;:39::i;:::-;-1:-1:-1;6999:4:0;6842:169;;;;;:::o;24308:186::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;;;;;;;;;24395:7:::1;24391:96;24412:6;:13;24408:1;:17;;;24391:96;;;24471:4;24447:10;:21;24458:6;24465:1;24458:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24447:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24447:21:0;:28;;-1:-1:-1;;24447:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24427:3;::::1;::::0;::::1;:::i;:::-;;;;24391:96;;;;24308:186:::0;:::o;31087:227::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;31154:9:::1;:17:::0;;;31230:12:::1;::::0;31212::::1;::::0;31194:13:::1;::::0;:64:::1;::::0;31166:5;;31194:49:::1;::::0;;;:17:::1;:31::i;:::-;:35:::0;::::1;:49::i;:64::-;31182:9;:76:::0;;;31288:2:::1;-1:-1:-1::0;31277:13:0::1;31269:37;;;::::0;-1:-1:-1;;;31269:37:0;;15095:2:1;31269:37:0::1;::::0;::::1;15077:21:1::0;15134:2;15114:18;;;15107:30;-1:-1:-1;;;15153:18:1;;;15146:41;15204:18;;31269:37:0::1;14893:335:1::0;31269:37:0::1;31087:227:::0;:::o;7019:355::-;7159:4;7176:36;7186:6;7194:9;7205:6;7176:9;:36::i;:::-;7223:121;7232:6;1095:10;7254:89;7292:6;7254:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7254:19:0;;;;;;:11;:19;;;;;;;;1095:10;7254:33;;;;;;;;;;:37;:89::i;:::-;7223:8;:121::i;:::-;-1:-1:-1;7362:4:0;7019:355;;;;;:::o;32858:141::-;32948:15;;:43;;;-1:-1:-1;;;32948:43:0;;;;32921:7;;-1:-1:-1;;;;;32948:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32941:50;;32858:141;:::o;33446:129::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;33522:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;33522:45:0;;-1:-1:-1;;;;;6405:32:1;;;33522:45:0::1;::::0;::::1;6387:51:1::0;33522:15:0;;::::1;::::0;:36:::1;::::0;6360:18:1;;33522:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33446:129:::0;:::o;30605:232::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;30674:12:::1;:20:::0;;;30771:9:::1;::::0;30753:12:::1;::::0;30717:13:::1;::::0;:64:::1;::::0;30771:9;30717:49:::1;::::0;;;30689:5;30717:17:::1;:31::i;7384:218::-:0;1095:10;7472:4;7521:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7521:34:0;;;;;;;;;;7472:4;;7489:83;;7512:7;;7521:50;;7560:10;7521:38;:50::i;43117:132::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;43209:22:::1;:32:::0;43117:132::o;30363:234::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;30433:13:::1;:21:::0;;;30531:9:::1;::::0;30513:12:::1;::::0;30495::::1;::::0;30477:64:::1;::::0;30531:9;30477:49:::1;::::0;;;30449:5;;30477:17:::1;:31::i;42962:146::-:0;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43060:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;43060:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42962:146::o;34524:103::-;34561:15;;:58;;-1:-1:-1;;;34561:58:0;;34600:10;34561:58;;;6857:51:1;34561:15:0;6924:18:1;;;6917:50;-1:-1:-1;;;;;34561:15:0;;;;:30;;6830:18:1;;34561:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34923:295::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;35037:38:::1;::::0;-1:-1:-1;;;35037:38:0;;35069:4:::1;35037:38;::::0;::::1;6387:51:1::0;35019:15:0::1;::::0;-1:-1:-1;;;;;35037:23:0;::::1;::::0;::::1;::::0;6360:18:1;;35037:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35019:56;;35105:7;35094;:18;;35086:73;;;::::0;-1:-1:-1;;;35086:73:0;;19805:2:1;35086:73:0::1;::::0;::::1;19787:21:1::0;19844:2;19824:18;;;19817:30;19883:34;19863:18;;;19856:62;-1:-1:-1;;;19934:18:1;;;19927:40;19984:19;;35086:73:0::1;19603:406:1::0;35086:73:0::1;35176:6;-1:-1:-1::0;;;;;35170:22:0::1;;35193:7;1744:6:::0;;-1:-1:-1;;;;;1744:6:0;;1679:79;35193:7:::1;35170:40;::::0;-1:-1:-1;;;;;;35170:40:0::1;::::0;;;;;;-1:-1:-1;;;;;7186:32:1;;;35170:40:0::1;::::0;::::1;7168:51:1::0;7235:18;;;7228:34;;;7141:18;;35170:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35008:210;34923:295:::0;;:::o;30234:121::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;30315:23:::1;:32:::0;;-1:-1:-1;;;;;;30315:32:0::1;-1:-1:-1::0;;;;;30315:32:0;;;::::1;::::0;;;::::1;::::0;;30234:121::o;30845:232::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;30929:5:::1;30914:12;:20;;;;30957:64;31011:9;;30957:49;30993:12;;30957:31;30975:12;;30957:13;;:17;;:31;;;;:::i;34772:141::-:0;34864:15;;:41;;;-1:-1:-1;;;34864:41:0;;;;34837:7;;-1:-1:-1;;;;;34864:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;29084:514;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;29193:15:::1;::::0;-1:-1:-1;;;;;29171:38:0;;::::1;29193:15:::0;::::1;29171:38;;29163:108;;;::::0;-1:-1:-1;;;29163:108:0;;16631:2:1;29163:108:0::1;::::0;::::1;16613:21:1::0;16670:2;16650:18;;;16643:30;16709:34;16689:18;;;16682:62;16780:27;16760:18;;;16753:55;16825:19;;29163:108:0::1;16429:421:1::0;29163:108:0::1;29329:15;::::0;29287:59:::1;::::0;-1:-1:-1;;;;;29329:15:0;;::::1;::::0;29287:59;::::1;::::0;::::1;::::0;29329:15:::1;::::0;29287:59:::1;29357:15;:48:::0;;-1:-1:-1;;;;;;29357:48:0::1;-1:-1:-1::0;;;;;29357:48:0;::::1;::::0;;::::1;::::0;;;29459:25:::1;::::0;;-1:-1:-1;;;29459:25:0;;;;-1:-1:-1;;29357:48:0;29459:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;29357:48;29459:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29441:69:0::1;;29519:4;29526:15;;;;;;;;;-1:-1:-1::0;;;;;29526:15:0::1;-1:-1:-1::0;;;;;29526:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29441:108;::::0;-1:-1:-1;;;;;;29441:108:0::1;::::0;;;;;;-1:-1:-1;;;;;7503:15:1;;;29441:108:0::1;::::0;::::1;7485:34:1::0;7555:15;;7535:18;;;7528:43;7420:18;;29441:108:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29560:13;:30:::0;;-1:-1:-1;;;;;;29560:30:0::1;-1:-1:-1::0;;;;;29560:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29084:514:0:o;33299:139::-;33396:15;;:34;;-1:-1:-1;;;33396:34:0;;-1:-1:-1;;;;;6405:32:1;;;33396:34:0;;;6387:51:1;33369:7:0;;33396:15;;:25;;6360:18:1;;33396:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34245:271::-;34377:15;;:28;;-1:-1:-1;;;;;;34377:28:0;;;;;20643:25:1;;;34311:18:0;;;;;;-1:-1:-1;;;;;34377:15:0;;:23;;20616:18:1;;34377:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34421:87;;;22472:25:1;;;22528:2;22513:18;;22506:34;;;22556:18;;;22549:34;;;22614:2;22599:18;;22592:34;;;34310:95:0;;-1:-1:-1;34310:95:0;;-1:-1:-1;34310:95:0;-1:-1:-1;34498:9:0;;34486:5;;34421:87;;22459:3:1;22444:19;34421:87:0;;;;;;;34299:217;;;34245:271;:::o;6363:127::-;-1:-1:-1;;;;;6464:18:0;6437:7;6464:18;;;;;;;;;;;;6363:127::o;43260:132::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;43352:22:::1;:32:::0;43260:132::o;1893:148::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;1984:6:::1;::::0;1963:40:::1;::::0;2000:1:::1;::::0;-1:-1:-1;;;;;1984:6:0::1;::::0;1963:40:::1;::::0;2000:1;;1963:40:::1;2014:6;:19:::0;;-1:-1:-1;;;;;;2014:19:0::1;::::0;;1893:148::o;42815:137::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;42909:24:::1;:35:::0;42815:137::o;32041:436::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;32139:6:::1;32127:8;:18;;:40;;;;;32161:6;32149:8;:18;;32127:40;32119:127;;;::::0;-1:-1:-1;;;32119:127:0;;20216:2:1;32119:127:0::1;::::0;::::1;20198:21:1::0;20255:2;20235:18;;;20228:30;20294:34;20274:18;;;20267:62;20365:34;20345:18;;;20338:62;-1:-1:-1;;;20416:19:1;;;20409:41;20467:19;;32119:127:0::1;20014:478:1::0;32119:127:0::1;32277:16;;32265:8;:28;;32257:107;;;::::0;-1:-1:-1;;;32257:107:0;;13115:2:1;32257:107:0::1;::::0;::::1;13097:21:1::0;13154:2;13134:18;;;13127:30;13193:34;13173:18;;;13166:62;13264:34;13244:18;;;13237:62;-1:-1:-1;;;13315:19:1;;;13308:33;13358:19;;32257:107:0::1;12913:470:1::0;32257:107:0::1;32414:16;::::0;32380:51:::1;::::0;32404:8;;32380:51:::1;::::0;;;::::1;32442:16;:27:::0;32041:436::o;28170:906::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;28285:15:::1;::::0;-1:-1:-1;;;;;28263:38:0;;::::1;28285:15:::0;::::1;28263:38;;28255:118;;;::::0;-1:-1:-1;;;28255:118:0;;19329:2:1;28255:118:0::1;::::0;::::1;19311:21:1::0;19368:2;19348:18;;;19341:30;19407:34;19387:18;;;19380:62;19478:34;19458:18;;;19451:62;-1:-1:-1;;;19529:19:1;;;19522:34;19573:19;;28255:118:0::1;19127:471:1::0;28255:118:0::1;28384:54;28485:10;28384:113;;28554:4;-1:-1:-1::0;;;;;28516:43:0::1;:18;-1:-1:-1::0;;;;;28516:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28516:43:0::1;;28508:159;;;::::0;-1:-1:-1;;;28508:159:0;;18367:2:1;28508:159:0::1;::::0;::::1;18349:21:1::0;18406:3;18386:18;;;18379:31;18446:34;18426:18;;;18419:62;18517:34;18497:18;;;18490:62;18589:34;18568:19;;;18561:63;-1:-1:-1;;;18640:19:1;;;18633:38;18688:19;;28508:159:0::1;18165:548:1::0;28508:159:0::1;28678:68;::::0;-1:-1:-1;;;28678:68:0;;-1:-1:-1;;;;;28678:39:0;::::1;:68;::::0;::::1;6387:51:1::0;;;28678:39:0;::::1;::::0;6360:18:1;;28678:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28757:54:0::1;::::0;-1:-1:-1;;;28757:54:0;;28805:4:::1;28757:54;::::0;::::1;6387:51:1::0;-1:-1:-1;;;;;28757:39:0;::::1;::::0;-1:-1:-1;28757:39:0::1;::::0;-1:-1:-1;6360:18:1;;28757:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28822:18;-1:-1:-1::0;;;;;28822:39:0::1;;28862:7;1744:6:::0;;-1:-1:-1;;;;;1744:6:0;;1679:79;28862:7:::1;28822:48;::::0;-1:-1:-1;;;;;;28822:48:0::1;::::0;;;;;;-1:-1:-1;;;;;6405:32:1;;;28822:48:0::1;::::0;::::1;6387:51:1::0;6360:18;;28822:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28929:15:0::1;::::0;28881:65:::1;::::0;-1:-1:-1;;;28881:65:0;;-1:-1:-1;;;;;28929:15:0;;::::1;28881:65;::::0;::::1;6387:51:1::0;28881:39:0;;::::1;::::0;-1:-1:-1;28881:39:0::1;::::0;-1:-1:-1;6360:18:1;;28881:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29004:15:0::1;::::0;28962:59:::1;::::0;-1:-1:-1;;;;;29004:15:0;;::::1;::::0;-1:-1:-1;28962:59:0;;::::1;::::0;-1:-1:-1;28962:59:0::1;::::0;29004:15:::1;::::0;28962:59:::1;29032:15;:36:::0;;-1:-1:-1;;;;;;29032:36:0::1;-1:-1:-1::0;;;;;29032:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;28170:906:0:o;24227:73::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;24278:6:::1;:14:::0;;-1:-1:-1;;;;24278:14:0::1;::::0;;24227:73::o;5924:104::-;5980:13;6013:7;6006:14;;;;;:::i;31323:275::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;31430:13:::1;::::0;-1:-1:-1;;;;;31422:21:0;;::::1;31430:13:::0;::::1;31422:21;;31414:124;;;::::0;-1:-1:-1;;;31414:124:0;;17057:2:1;31414:124:0::1;::::0;::::1;17039:21:1::0;17096:2;17076:18;;;17069:30;17135:34;17115:18;;;17108:62;17206:34;17186:18;;;17179:62;17278:28;17257:19;;;17250:57;17324:19;;31414:124:0::1;16855:494:1::0;31414:124:0::1;31549:41;31578:4;31584:5;31549:28;:41::i;32617:108::-:0;32690:15;;:27;;;-1:-1:-1;;;32690:27:0;;;;32663:7;;-1:-1:-1;;;;;32690:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;7612:269;7705:4;7722:129;1095:10;7745:7;7754:96;7793:15;7754:96;;;;;;;;;;;;;;;;;1095:10;7754:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7754:34:0;;;;;;;;;;;;:38;:96::i;33140:151::-;33236:15;;:47;;-1:-1:-1;;;33236:47:0;;-1:-1:-1;;;;;6405:32:1;;;33236:47:0;;;6387:51:1;33209:7:0;;33236:15;;:38;;6360:18:1;;33236:47:0;6241:203:1;6500:175:0;6586:4;6603:42;1095:10;6627:9;6638:6;6603:9;:42::i;33583:318::-;33858:15;;:35;;-1:-1:-1;;;33858:35:0;;-1:-1:-1;;;;;6405:32:1;;;33858:35:0;;;6387:51:1;33679:7:0;;;;;;;;;;;;;;;;33858:15;;;:26;;6360:18:1;;33858:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33851:42;;;;;;;;;;;;;;;;33583:318;;;;;;;;;:::o;32733:117::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;32815:18:::1;:27:::0;32733:117::o;29606:310::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29699:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;29691:117;;;::::0;;-1:-1:-1;;;29691:117:0;;15435:2:1;29691:117:0::1;::::0;::::1;15417:21:1::0;15454:18;;;15447:30;;;;15513:34;15493:18;;;15486:62;15584:34;15564:18;;;15557:62;15636:19;;29691:117:0::1;15233:428:1::0;29691:117:0::1;-1:-1:-1::0;;;;;29819:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;29819:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29874:34;;10118:41:1;;;29874:34:0::1;::::0;10091:18:1;29874:34:0::1;;;;;;;29606:310:::0;;:::o;29924:302::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;30041:9:::1;30037:115;30056:19:::0;;::::1;30037:115;;;30132:8;30097:19;:32;30117:8;;30126:1;30117:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30097:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30097:32:0;:43;;-1:-1:-1;;30097:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30077:3;::::1;::::0;::::1;:::i;:::-;;;;30037:115;;;;30167:51;30199:8;;30209;30167:51;;;;;;;;:::i;:::-;;;;;;;;29924:302:::0;;;:::o;41122:173::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;41203:21:::1;:32:::0;;-1:-1:-1;;41203:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41249:38:::1;::::0;10118:41:1;;;41249:38:0::1;::::0;10106:2:1;10091:18;41249:38:0::1;;;;;;;41122:173:::0;:::o;34635:129::-;34717:15;;:39;;;-1:-1:-1;;;34717:39:0;;;;34690:7;;-1:-1:-1;;;;;34717:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;32485:124;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;32559:15:::1;::::0;:42:::1;::::0;-1:-1:-1;;;32559:42:0;;::::1;::::0;::::1;20643:25:1::0;;;-1:-1:-1;;;;;32559:15:0;;::::1;::::0;:31:::1;::::0;20616:18:1;;32559:42:0::1;20497:177:1::0;40869:106:0;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;40945:12:::1;:22:::0;40869:106::o;33909:328::-;34189:15;;:40;;-1:-1:-1;;;34189:40:0;;;;;20643:25:1;;;34010:7:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34189:15:0;;;;:33;;20616:18:1;;34189:40:0;20497:177:1;2049:244:0;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2138:22:0;::::1;2130:73;;;::::0;-1:-1:-1;;;2130:73:0;;12352:2:1;2130:73:0::1;::::0;::::1;12334:21:1::0;12391:2;12371:18;;;12364:30;12430:34;12410:18;;;12403:62;-1:-1:-1;;;12481:18:1;;;12474:36;12527:19;;2130:73:0::1;12150:402:1::0;2130:73:0::1;2240:6;::::0;2219:38:::1;::::0;-1:-1:-1;;;;;2219:38:0;;::::1;::::0;2240:6:::1;::::0;2219:38:::1;::::0;2240:6:::1;::::0;2219:38:::1;2268:6;:17:::0;;-1:-1:-1;;;;;;2268:17:0::1;-1:-1:-1::0;;;;;2268:17:0;;;::::1;::::0;;;::::1;::::0;;2049:244::o;35228:114::-;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;1744:6;;35300:34:::1;::::0;-1:-1:-1;;;;;1744:6:0;;;;35300:34;::::1;;;::::0;35326:7;;35300:34:::1;::::0;;;35326:7;1744:6;35300:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;24147:72:::0;1806:6;;-1:-1:-1;;;;;1806:6:0;1095:10;1806:22;1798:67;;;;-1:-1:-1;;;1798:67:0;;;;;;;:::i;:::-;24198:6:::1;:13:::0;;-1:-1:-1;;;;24198:13:0::1;-1:-1:-1::0;;;24198:13:0::1;::::0;;24147:72::o;2861:246::-;2919:7;2943:6;2939:47;;-1:-1:-1;2973:1:0;2966:8;;2939:47;2996:9;3008:5;3012:1;3008;:5;:::i;:::-;2996:17;-1:-1:-1;3041:1:0;3032:5;3036:1;2996:17;3032:5;:::i;:::-;:10;3024:56;;;;-1:-1:-1;;;3024:56:0;;15868:2:1;3024:56:0;;;15850:21:1;15907:2;15887:18;;;15880:30;15946:34;15926:18;;;15919:62;-1:-1:-1;;;15997:18:1;;;15990:31;16038:19;;3024:56:0;15666:397:1;3024:56:0;3098:1;2861:246;-1:-1:-1;;;2861:246:0:o;3117:132::-;3175:7;3202:39;3206:1;3209;3202:39;;;;;;;;;;;;;;;;;:3;:39::i;2326:179::-;2384:7;;2416:5;2420:1;2416;:5;:::i;:::-;2404:17;;2445:1;2440;:6;;2432:46;;;;-1:-1:-1;;;2432:46:0;;12759:2:1;2432:46:0;;;12741:21:1;12798:2;12778:18;;;12771:30;12837:29;12817:18;;;12810:57;12884:18;;2432:46:0;12557:351:1;9290:380:0;-1:-1:-1;;;;;9426:19:0;;9418:68;;;;-1:-1:-1;;;9418:68:0;;17962:2:1;9418:68:0;;;17944:21:1;18001:2;17981:18;;;17974:30;18040:34;18020:18;;;18013:62;-1:-1:-1;;;18091:18:1;;;18084:34;18135:19;;9418:68:0;17760:400:1;9418:68:0;-1:-1:-1;;;;;9505:21:0;;9497:68;;;;-1:-1:-1;;;9497:68:0;;13926:2:1;9497:68:0;;;13908:21:1;13965:2;13945:18;;;13938:30;14004:34;13984:18;;;13977:62;-1:-1:-1;;;14055:18:1;;;14048:32;14097:19;;9497:68:0;13724:398:1;9497:68:0;-1:-1:-1;;;;;9578:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9630:32;;20643:25:1;;;9630:32:0;;20616:18:1;9630:32:0;;;;;;;;9290:380;;;:::o;35356:2297::-;23949:6;;35431:4;;35437:2;;-1:-1:-1;;;23949:6:0;;;;;:26;;-1:-1:-1;;;;;;23959:16:0;;;;;;:10;:16;;;;;;;;23949:26;:44;;;-1:-1:-1;;;;;;23979:14:0;;;;;;:10;:14;;;;;;;;23949:44;23941:65;;;;-1:-1:-1;;;23941:65:0;;13590:2:1;23941:65:0;;;13572:21:1;13629:1;13609:18;;;13602:29;-1:-1:-1;;;13647:18:1;;;13640:38;13695:18;;23941:65:0;13388:331:1;23941:65:0;-1:-1:-1;;;;;35475:18:0;::::1;35467:68;;;;-1:-1:-1::0;;;35467:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35554:16:0;::::1;35546:64;;;;-1:-1:-1::0;;;35546:64:0::1;;;;;;;:::i;:::-;1744:6:::0;;-1:-1:-1;;;;;35634:15:0;;::::1;1744:6:::0;;35634:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;1744:6:0;;-1:-1:-1;;;;;35653:13:0;;::::1;1744:6:::0;;35653:13:::1;;35634:32;35631:139;;;35701:12;;35691:6;:22;;35683:75;;;::::0;-1:-1:-1;;;35683:75:0;;14686:2:1;35683:75:0::1;::::0;::::1;14668:21:1::0;14725:2;14705:18;;;14698:30;14764:34;14744:18;;;14737:62;-1:-1:-1;;;14815:18:1;;;14808:38;14863:19;;35683:75:0::1;14484:404:1::0;35683:75:0::1;35785:11:::0;35782:92:::1;;35813:28;35829:4;35835:2;35839:1;35813:15;:28::i;:::-;35856:7;;35782:92;35886:28;35917:24;35935:4;35917:9;:24::i;:::-;35993:18;::::0;35886:55;;-1:-1:-1;35969:42:0;::::1;::::0;::::1;::::0;;;36028:20:::1;;-1:-1:-1::0;36040:8:0::1;::::0;-1:-1:-1;;;36040:8:0;::::1;;;36039:9;36028:20;:45;;;;-1:-1:-1::0;36052:21:0::1;::::0;::::1;;36028:45;:90;;;;-1:-1:-1::0;;;;;;36087:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;36086:32;36028:90;:109;;;;-1:-1:-1::0;1744:6:0;;-1:-1:-1;;;;;36122:15:0;;::::1;1744:6:::0;;36122:15:::1;;36028:109;36024:547;;;36164:8;:15:::0;;-1:-1:-1;;;;36164:15:0::1;-1:-1:-1::0;;;36164:15:0::1;::::0;;36233:13:::1;::::0;36219:9:::1;::::0;36164:15;;36219:28:::1;::::0;:9;:13:::1;:28::i;:::-;36196:51;;36302:18;36323:53;36366:9;;36323:38;36348:12;36323:20;:24;;:38;;;;:::i;:::-;:42:::0;::::1;:53::i;:::-;36302:74;;36391:26;36406:10;36391:14;:26::i;:::-;36434:18;36455:24;36473:4;36455:9;:24::i;:::-;36434:45;;36494:32;36515:10;36494:20;:32::i;:::-;-1:-1:-1::0;;36541:8:0::1;:16:::0;;-1:-1:-1;;;;36541:16:0::1;::::0;;-1:-1:-1;36024:547:0::1;36601:8;::::0;-1:-1:-1;;;;;36708:25:0;::::1;36585:12;36708:25:::0;;;:19:::1;:25;::::0;;;;;36601:8:::1;-1:-1:-1::0;;;36601:8:0;;::::1;::::0;::::1;36600:9;::::0;36708:25:::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;36737:23:0;::::1;;::::0;;;:19:::1;:23;::::0;;;;;::::1;;36708:52;36705:109;;;-1:-1:-1::0;36797:5:0::1;36705:109;36829:7;36826:191;;;36863:12;36878:30;36904:3;36878:21;36889:9;;36878:6;:10;;:21;;;;:::i;:30::-;36863:45:::0;-1:-1:-1;36932:16:0::1;:6:::0;36863:45;36932:10:::1;:16::i;:::-;36923:25;;36963:42;36979:4;36993;37000;36963:15;:42::i;:::-;36848:169;36826:191;37029:31;37043:4;37049:2;37053:6;37029:13;:31::i;:::-;37071:33;37087:4;37093:2;37097:6;37071:15;:33::i;:::-;37119:15;::::0;-1:-1:-1;;;;;37119:15:0::1;:26;37154:4:::0;37161:15:::1;37154:4:::0;37161:9:::1;:15::i;:::-;37119:58;::::0;-1:-1:-1;;;;;;37119:58:0::1;::::0;;;;;;-1:-1:-1;;;;;7186:32:1;;;37119:58:0::1;::::0;::::1;7168:51:1::0;7235:18;;;7228:34;7141:18;;37119:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;37115:74:::0;37203:15:::1;::::0;-1:-1:-1;;;;;37203:15:0::1;:26;37238:2:::0;37243:13:::1;37238:2:::0;37243:9:::1;:13::i;:::-;37203:54;::::0;-1:-1:-1;;;;;;37203:54:0::1;::::0;;;;;;-1:-1:-1;;;;;7186:32:1;;;37203:54:0::1;::::0;::::1;7168:51:1::0;7235:18;;;7228:34;7141:18;;37203:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;37199:70:::0;37285:8:::1;::::0;-1:-1:-1;;;37285:8:0;::::1;;;37281:365;;37334:16;::::0;37369:15:::1;::::0;:28:::1;::::0;-1:-1:-1;;;;;;37369:28:0;;::::1;::::0;::::1;20643:25:1::0;;;-1:-1:-1;;;;;37369:15:0;;::::1;::::0;:23:::1;::::0;20616:18:1;;37369:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;37369:28:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;37369:28:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;37365:270;;;;;37495:86;::::0;;22472:25:1;;;22528:2;22513:18;;22506:34;;;22556:18;;;22549:34;;;22614:2;22599:18;;22592:34;;;37571:9:0::1;::::0;37560:4:::1;::::0;37495:86:::1;::::0;22459:3:1;22444:19;37495:86:0::1;;;;;;;37398:199;;;37365:270;37305:341;37281:365;35456:2197;;;35356:2297:::0;;;;;:::o;2659:192::-;2745:7;2781:12;2773:6;;;;2765:29;;;;-1:-1:-1;;;2765:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2805:9:0;2817:5;2821:1;2817;:5;:::i;:::-;2805:17;2659:192;-1:-1:-1;;;;;2659:192:0:o;31612:419::-;-1:-1:-1;;;;;31703:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;31695:131;;;;-1:-1:-1;;;31695:131:0;;11461:2:1;31695:131:0;;;11443:21:1;11500:2;11480:18;;;11473:30;11539:34;11519:18;;;11512:62;11610:34;11590:18;;;11583:62;-1:-1:-1;;;11661:19:1;;;11654:45;11716:19;;31695:131:0;11259:482:1;31695:131:0;-1:-1:-1;;;;;31837:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;31837:39:0;;;;;;;;;;;;31889:79;;31914:15;;:42;;-1:-1:-1;;;31914:42:0;;-1:-1:-1;;;;;6405:32:1;;;31914:42:0;;;6387:51:1;31914:15:0;;;;:36;;6360:18:1;;31914:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31889:79;31983:40;;;;;;-1:-1:-1;;;;;31983:40:0;;;;;;;;31612:419;;:::o;3259:278::-;3345:7;3380:12;3373:5;3365:28;;;;-1:-1:-1;;;3365:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3404:9:0;3416:5;3420:1;3416;:5;:::i;7891:573::-;-1:-1:-1;;;;;8031:20:0;;8023:70;;;;-1:-1:-1;;;8023:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8112:23:0;;8104:71;;;;-1:-1:-1;;;8104:71:0;;;;;;;:::i;:::-;8268;8290:6;8268:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8268:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;8248:17:0;;;:9;:17;;;;;;;;;;;:91;;;;8373:20;;;;;;;:32;;8398:6;8373:24;:32::i;:::-;-1:-1:-1;;;;;8350:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;8421:35;20643:25:1;;;8350:20:0;;8421:35;;;;;;20616:18:1;8421:35:0;20497:177:1;2513:136:0;2571:7;2598:43;2602:1;2605;2598:43;;;;;;;;;;;;;;;;;:3;:43::i;37663:1126::-;37727:19;37749:28;37763:13;;37749:9;;:13;;:28;;;;:::i;:::-;37727:50;;37788:27;37818:48;37864:1;37818:41;37847:11;37818:24;37829:12;;37818:6;:10;;:24;;;;:::i;:48::-;37788:78;-1:-1:-1;37877:22:0;37902:31;:6;37788:78;37902:10;:31::i;:::-;37877:56;-1:-1:-1;37969:21:0;38001:32;37877:56;38001:16;:32::i;:::-;38162:18;38183:41;:21;38209:14;38183:25;:41::i;:::-;38162:62;;38235:23;38261:52;38311:1;38261:45;38294:11;38261:28;38276:12;;38261:10;:14;;:28;;;;:::i;:52::-;38235:78;;38361:50;38374:19;38395:15;38361:12;:50::i;:::-;38427:73;;;22119:25:1;;;22175:2;22160:18;;22153:34;;;22203:18;;;22196:34;;;38427:73:0;;22107:2:1;22092:18;38427:73:0;;;;;;;38511:23;38537:45;38570:11;38537:28;38552:12;;38537:10;:14;;:28;;;;:::i;:45::-;38511:71;-1:-1:-1;38593:21:0;38617:52;38511:71;38617:31;:10;38632:15;38617:14;:31::i;:::-;:35;;:52::i;:::-;38680:23;;:49;;38593:76;;-1:-1:-1;;;;;;38680:23:0;;:49;;;;;38713:15;;38680:23;:49;:23;:49;38713:15;38680:23;:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38740:17:0;;:41;;-1:-1:-1;;;;;38740:17:0;;;;:41;;;;;38767:13;;38740:17;:41;:17;:41;38767:13;38740:17;:41;;;;;;;;;;;;;;;;;;;;;37717:1072;;;;;;;;37663:1126;:::o;40464:397::-;40528:24;40545:6;40528:16;:24::i;:::-;40583:35;;-1:-1:-1;;;40583:35:0;;40612:4;40583:35;;;6387:51:1;40563:17:0;;40589:3;-1:-1:-1;;;;;40583:20:0;;;;6360:18:1;;40583:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40672:15;;40644:56;;-1:-1:-1;;;40644:56:0;;-1:-1:-1;;;;;40672:15:0;;;40644:56;;;7168:51:1;7235:18;;;7228:34;;;40563:55:0;;-1:-1:-1;40629:12:0;;40650:3;40644:19;;;;;;7141:18:1;;40644:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40629:71;;40717:7;40713:141;;;40741:15;;:49;;-1:-1:-1;;;40741:49:0;;;;;20643:25:1;;;-1:-1:-1;;;;;40741:15:0;;;;:38;;20616:18:1;;40741:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40810:32:0;;;21838:25:1;;;21894:2;21879:18;;21872:34;;;40810:32:0;;-1:-1:-1;21811:18:1;;-1:-1:-1;40810:32:0;21664:248:1;40713:141:0;40517:344;;40464:397;:::o;41844:962::-;41944:18;41965:25;41983:6;41965:13;41975:2;41965:9;:13::i;:25::-;-1:-1:-1;;;;;42005:26:0;;;;;;:20;:26;;;;;;41944:46;;-1:-1:-1;42005:26:0;;42004:27;:56;;;;-1:-1:-1;;;;;;42036:24:0;;;;;;:20;:24;;;;;;;;42035:25;42004:56;42001:189;;;42110:22;;42096:10;:36;;42088:89;;;;-1:-1:-1;;;42088:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42204:31:0;;;;;;:25;:31;;;;;;;;:60;;;;-1:-1:-1;;;;;;42240:24:0;;;;;;:20;:24;;;;;;;;42239:25;42204:60;42201:193;;;42314:22;;42300:10;:36;;42292:89;;;;-1:-1:-1;;;42292:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42410:29:0;;;;;;:25;:29;;;;;;;;:60;;;;-1:-1:-1;;;;;;42444:26:0;;;;;;:20;:26;;;;;;;;42443:27;42410:60;42407:392;;;42498:16;42517:15;42527:4;42517:9;:15::i;:::-;42498:34;;42559:22;;42550:8;:31;42547:239;;;42615:21;42639:47;42682:3;42639:38;42652:24;;42639:8;:12;;:38;;;;:::i;:47::-;42615:71;;42723:13;42713:6;:23;;42705:64;;;;-1:-1:-1;;;42705:64:0;;14329:2:1;42705:64:0;;;14311:21:1;14368:2;14348:18;;;14341:30;14407;14387:18;;;14380:58;14455:18;;42705:64:0;14127:352:1;42705:64:0;42596:190;42482:317;41933:873;41844:962;;;:::o;38799:591::-;38955:16;;;38969:1;38955:16;;;;;;;;38931:21;;38955:16;;;;;;;;;;-1:-1:-1;38955:16:0;38931:40;;39000:4;38982;38987:1;38982:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38982:23:0;;;:7;;;;;;;;;;:23;;;;39026:15;;:22;;;-1:-1:-1;;;39026:22:0;;;;:15;;;;;:20;;:22;;;;;38982:7;;39026:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39016:4;39021:1;39016:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39016:32:0;;;:7;;;;;;;;;:32;39091:15;;39059:62;;39076:4;;39091:15;39109:11;39059:8;:62::i;:::-;39158:15;;:224;;-1:-1:-1;;;39158:224:0;;-1:-1:-1;;;;;39158:15:0;;;;:66;;:224;;39239:11;;39158:15;;39309:4;;39336;;39356:15;;39158:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39936:520;40118:15;;40086:62;;40103:4;;-1:-1:-1;;;;;40118:15:0;40136:11;40086:8;:62::i;:::-;40191:15;;:255;;-1:-1:-1;;;40191:255:0;;40263:4;40191:255;;;8908:34:1;8958:18;;;8951:34;;;40191:15:0;9001:18:1;;;8994:34;;;9044:18;;;9037:34;;;9087:19;;;9080:44;40420:15:0;9140:19:1;;;9133:35;-1:-1:-1;;;;;40191:15:0;;;;:31;;40230:9;;8842:19:1;;40191:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39398:530::-;39494:16;;;39508:1;39494:16;;;;;;;;;39470:21;;39494:16;;;;;;;;;;-1:-1:-1;39494:16:0;39470:40;;39539:4;39521;39526:1;39521:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39521:23:0;;;:7;;;;;;;;;;:23;;;;39565:15;;:22;;;-1:-1:-1;;;39565:22:0;;;;:15;;;;;:20;;:22;;;;;39521:7;;39565:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39555:4;39560:1;39555:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;39555:32:0;;;-1:-1:-1;;;;;39555:32:0;;;;;39608:3;39598:4;39603:1;39598:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39598:13:0;;;:7;;;;;;;;;:13;39654:15;;39622:62;;39639:4;;39654:15;39672:11;39622:8;:62::i;:::-;39721:15;;:199;;-1:-1:-1;;;39721:199:0;;-1:-1:-1;;;;;39721:15:0;;;;:69;;:199;;39805:11;;39721:15;;39847:4;;39874;;39894:15;;39721:199;;;:::i;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:247::-;212:6;265:2;253:9;244:7;240:23;236:32;233:52;;;281:1;278;271:12;233:52;320:9;307:23;339:31;364:5;339:31;:::i;405:251::-;475:6;528:2;516:9;507:7;503:23;499:32;496:52;;;544:1;541;534:12;496:52;576:9;570:16;595:31;620:5;595:31;:::i;921:388::-;989:6;997;1050:2;1038:9;1029:7;1025:23;1021:32;1018:52;;;1066:1;1063;1056:12;1018:52;1105:9;1092:23;1124:31;1149:5;1124:31;:::i;:::-;1174:5;-1:-1:-1;1231:2:1;1216:18;;1203:32;1244:33;1203:32;1244:33;:::i;:::-;1296:7;1286:17;;;921:388;;;;;:::o;1314:456::-;1391:6;1399;1407;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;1515:9;1502:23;1534:31;1559:5;1534:31;:::i;:::-;1584:5;-1:-1:-1;1641:2:1;1626:18;;1613:32;1654:33;1613:32;1654:33;:::i;:::-;1314:456;;1706:7;;-1:-1:-1;;;1760:2:1;1745:18;;;;1732:32;;1314:456::o;1775:382::-;1840:6;1848;1901:2;1889:9;1880:7;1876:23;1872:32;1869:52;;;1917:1;1914;1907:12;1869:52;1956:9;1943:23;1975:31;2000:5;1975:31;:::i;:::-;2025:5;-1:-1:-1;2082:2:1;2067:18;;2054:32;2095:30;2054:32;2095:30;:::i;2162:681::-;2293:6;2301;2309;2317;2325;2333;2341;2349;2402:3;2390:9;2381:7;2377:23;2373:33;2370:53;;;2419:1;2416;2409:12;2370:53;2451:9;2445:16;2470:31;2495:5;2470:31;:::i;:::-;2520:5;2510:15;;;2565:2;2554:9;2550:18;2544:25;2534:35;;2609:2;2598:9;2594:18;2588:25;2578:35;;2653:2;2642:9;2638:18;2632:25;2622:35;;2697:3;2686:9;2682:19;2676:26;2666:36;;2742:3;2731:9;2727:19;2721:26;2711:36;;2787:3;2776:9;2772:19;2766:26;2756:36;;2832:3;2821:9;2817:19;2811:26;2801:36;;2162:681;;;;;;;;;;;:::o;2848:315::-;2916:6;2924;2977:2;2965:9;2956:7;2952:23;2948:32;2945:52;;;2993:1;2990;2983:12;2945:52;3032:9;3019:23;3051:31;3076:5;3051:31;:::i;:::-;3101:5;3153:2;3138:18;;;;3125:32;;-1:-1:-1;;;2848:315:1:o;3168:750::-;3260:6;3268;3276;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;3385:9;3372:23;3414:18;3455:2;3447:6;3444:14;3441:34;;;3471:1;3468;3461:12;3441:34;3509:6;3498:9;3494:22;3484:32;;3554:7;3547:4;3543:2;3539:13;3535:27;3525:55;;3576:1;3573;3566:12;3525:55;3616:2;3603:16;3642:2;3634:6;3631:14;3628:34;;;3658:1;3655;3648:12;3628:34;3713:7;3706:4;3696:6;3693:1;3689:14;3685:2;3681:23;3677:34;3674:47;3671:67;;;3734:1;3731;3724:12;3671:67;3765:4;3757:13;;;;-1:-1:-1;3789:6:1;-1:-1:-1;;3830:20:1;;3817:34;3860:28;3817:34;3860:28;:::i;:::-;3907:5;3897:15;;;3168:750;;;;;:::o;3923:1132::-;4007:6;4038:2;4081;4069:9;4060:7;4056:23;4052:32;4049:52;;;4097:1;4094;4087:12;4049:52;4137:9;4124:23;4166:18;4207:2;4199:6;4196:14;4193:34;;;4223:1;4220;4213:12;4193:34;4261:6;4250:9;4246:22;4236:32;;4306:7;4299:4;4295:2;4291:13;4287:27;4277:55;;4328:1;4325;4318:12;4277:55;4364:2;4351:16;4386:2;4382;4379:10;4376:36;;;4392:18;;:::i;:::-;4438:2;4435:1;4431:10;4470:2;4464:9;4533:2;4529:7;4524:2;4520;4516:11;4512:25;4504:6;4500:38;4588:6;4576:10;4573:22;4568:2;4556:10;4553:18;4550:46;4547:72;;;4599:18;;:::i;:::-;4635:2;4628:22;4685:18;;;4719:15;;;;-1:-1:-1;4754:11:1;;;4784;;;4780:20;;4777:33;-1:-1:-1;4774:53:1;;;4823:1;4820;4813:12;4774:53;4845:1;4836:10;;4855:169;4869:2;4866:1;4863:9;4855:169;;;4926:23;4945:3;4926:23;:::i;:::-;4914:36;;4887:1;4880:9;;;;;4970:12;;;;5002;;4855:169;;;-1:-1:-1;5043:6:1;3923:1132;-1:-1:-1;;;;;;;;3923:1132:1:o;5060:241::-;5116:6;5169:2;5157:9;5148:7;5144:23;5140:32;5137:52;;;5185:1;5182;5175:12;5137:52;5224:9;5211:23;5243:28;5265:5;5243:28;:::i;5306:245::-;5373:6;5426:2;5414:9;5405:7;5401:23;5397:32;5394:52;;;5442:1;5439;5432:12;5394:52;5474:9;5468:16;5493:28;5515:5;5493:28;:::i;5556:180::-;5615:6;5668:2;5656:9;5647:7;5643:23;5639:32;5636:52;;;5684:1;5681;5674:12;5636:52;-1:-1:-1;5707:23:1;;5556:180;-1:-1:-1;5556:180:1:o;5741:184::-;5811:6;5864:2;5852:9;5843:7;5839:23;5835:32;5832:52;;;5880:1;5877;5870:12;5832:52;-1:-1:-1;5903:16:1;;5741:184;-1:-1:-1;5741:184:1:o;5930:306::-;6018:6;6026;6034;6087:2;6075:9;6066:7;6062:23;6058:32;6055:52;;;6103:1;6100;6093:12;6055:52;6132:9;6126:16;6116:26;;6182:2;6171:9;6167:18;6161:25;6151:35;;6226:2;6215:9;6211:18;6205:25;6195:35;;5930:306;;;;;:::o;9179:794::-;9401:2;9413:21;;;9386:18;;9469:22;;;9353:4;9548:6;9522:2;9507:18;;9353:4;9582:304;9596:6;9593:1;9590:13;9582:304;;;9671:6;9658:20;9691:31;9716:5;9691:31;:::i;:::-;-1:-1:-1;;;;;9747:31:1;9735:44;;9802:4;9861:15;;;;9826:12;;;;9775:1;9611:9;9582:304;;;9586:3;9903;9895:11;;;;9958:6;9951:14;9944:22;9937:4;9926:9;9922:20;9915:52;9179:794;;;;;;:::o;10657:597::-;10769:4;10798:2;10827;10816:9;10809:21;10859:6;10853:13;10902:6;10897:2;10886:9;10882:18;10875:34;10927:1;10937:140;10951:6;10948:1;10945:13;10937:140;;;11046:14;;;11042:23;;11036:30;11012:17;;;11031:2;11008:26;11001:66;10966:10;;10937:140;;;11095:6;11092:1;11089:13;11086:91;;;11165:1;11160:2;11151:6;11140:9;11136:22;11132:31;11125:42;11086:91;-1:-1:-1;11238:2:1;11217:15;-1:-1:-1;;11213:29:1;11198:45;;;;11245:2;11194:54;;10657:597;-1:-1:-1;;;10657:597:1:o;11746:399::-;11948:2;11930:21;;;11987:2;11967:18;;;11960:30;12026:34;12021:2;12006:18;;11999:62;-1:-1:-1;;;12092:2:1;12077:18;;12070:33;12135:3;12120:19;;11746:399::o;16068:356::-;16270:2;16252:21;;;16289:18;;;16282:30;16348:34;16343:2;16328:18;;16321:62;16415:2;16400:18;;16068:356::o;17354:401::-;17556:2;17538:21;;;17595:2;17575:18;;;17568:30;17634:34;17629:2;17614:18;;17607:62;-1:-1:-1;;;17700:2:1;17685:18;;17678:35;17745:3;17730:19;;17354:401::o;18718:404::-;18920:2;18902:21;;;18959:2;18939:18;;;18932:30;18998:34;18993:2;18978:18;;18971:62;-1:-1:-1;;;19064:2:1;19049:18;;19042:38;19112:3;19097:19;;18718:404::o;20679:980::-;20941:4;20989:3;20978:9;20974:19;21020:6;21009:9;21002:25;21046:2;21084:6;21079:2;21068:9;21064:18;21057:34;21127:3;21122:2;21111:9;21107:18;21100:31;21151:6;21186;21180:13;21217:6;21209;21202:22;21255:3;21244:9;21240:19;21233:26;;21294:2;21286:6;21282:15;21268:29;;21315:1;21325:195;21339:6;21336:1;21333:13;21325:195;;;21404:13;;-1:-1:-1;;;;;21400:39:1;21388:52;;21495:15;;;;21460:12;;;;21436:1;21354:9;21325:195;;;-1:-1:-1;;;;;;;21576:32:1;;;;21571:2;21556:18;;21549:60;-1:-1:-1;;;21640:3:1;21625:19;21618:35;21537:3;20679:980;-1:-1:-1;;;20679:980:1:o;22826:128::-;22866:3;22897:1;22893:6;22890:1;22887:13;22884:39;;;22903:18;;:::i;:::-;-1:-1:-1;22939:9:1;;22826:128::o;22959:217::-;22999:1;23025;23015:132;;23069:10;23064:3;23060:20;23057:1;23050:31;23104:4;23101:1;23094:15;23132:4;23129:1;23122:15;23015:132;-1:-1:-1;23161:9:1;;22959:217::o;23181:168::-;23221:7;23287:1;23283;23279:6;23275:14;23272:1;23269:21;23264:1;23257:9;23250:17;23246:45;23243:71;;;23294:18;;:::i;:::-;-1:-1:-1;23334:9:1;;23181:168::o;23354:125::-;23394:4;23422:1;23419;23416:8;23413:34;;;23427:18;;:::i;:::-;-1:-1:-1;23464:9:1;;23354:125::o;23484:380::-;23563:1;23559:12;;;;23606;;;23627:61;;23681:4;23673:6;23669:17;23659:27;;23627:61;23734:2;23726:6;23723:14;23703:18;23700:38;23697:161;;;23780:10;23775:3;23771:20;23768:1;23761:31;23815:4;23812:1;23805:15;23843:4;23840:1;23833:15;23697:161;;23484:380;;;:::o;23869:135::-;23908:3;-1:-1:-1;;23929:17:1;;23926:43;;;23949:18;;:::i;:::-;-1:-1:-1;23996:1:1;23985:13;;23869:135::o;24009:175::-;24046:3;24090:4;24083:5;24079:16;24119:4;24110:7;24107:17;24104:43;;;24127:18;;:::i;:::-;24176:1;24163:15;;24009:175;-1:-1:-1;;24009:175:1:o;24189:127::-;24250:10;24245:3;24241:20;24238:1;24231:31;24281:4;24278:1;24271:15;24305:4;24302:1;24295:15;24321:127;24382:10;24377:3;24373:20;24370:1;24363:31;24413:4;24410:1;24403:15;24437:4;24434:1;24427:15;24453:127;24514:10;24509:3;24505:20;24502:1;24495:31;24545:4;24542:1;24535:15;24569:4;24566:1;24559:15;24585:131;-1:-1:-1;;;;;24660:31:1;;24650:42;;24640:70;;24706:1;24703;24696:12;24721:118;24807:5;24800:13;24793:21;24786:5;24783:32;24773:60;;24829:1;24826;24819:12

Swarm Source

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