ETH Price: $2,366.32 (+1.64%)

Token

Apeeling Protocol (PEEL)
 

Overview

Max Total Supply

100,000,000 PEEL

Holders

208

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
304,398.546697157 PEEL

Value
$0.00
0xe259f661a7c5dfca52e0238d302ba6e03aa59e94
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:
BMJ

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/** 

https://apeeling.io/

https://t.me/ApeelingProtocol

WELCOME TO 🍌THE APEELING PROTOCOL $PEEL🍌

WE ARE THE DIAMOND HAND, FLOOR HOLDING, COMMUNITY BUILDING PROJECT FOR SOLID PROJECTS WITH GREAT TEAMS AND CHARITY ORGANIZATIONS.
THERE'S NO BETTER TIME FOR $PEEL TO JOIN THE SCENE AS WE HAVE PLENTY OF FLOORS TO SWEEP, GAINING A BEAUTIFUL ENTRY TO ALL THESE LEGENDARY PROJECTS.
$PEEL HAS UNLIMITED POTENTIAL THROUGH NETWORKING BY CONSISTENT REWARDS FOR HOLDERS AND OFFICIAL PARTNERS.


**/

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    
    function symbol() external view returns(string memory);
    
    function name() external view returns(string memory);

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

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

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

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

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

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

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

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

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

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

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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

    function getOwner() external 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;
    }

}

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

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

contract BMJ is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

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

    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    address public reserves;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper; 
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromRewards;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public whitelistedAddresses;
    string private _name = "Apeeling Protocol";
    string private _symbol = "PEEL";
    uint8 private _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000 * 10** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    bool public sniperProtection = false; 
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    bool public earlySellFeeEnabled = true;
    bool whitelistActive = false;
    bool maxWalletActive = false;
    bool public tradingActive = false;
    bool public gasLimitActive;
    uint256 public maxTxAmount = 2000000 * 10** _decimals;
    uint256 public maxWalletAmount = 2000000 * 10** _decimals;
    uint256 public swapTokensAtAmount = 500000 * 10**_decimals;
    uint256 private gasPriceLimit;
    uint256 private snipeBlockAmt;
    uint256 public snipersCaught = 0; 
    uint256 public tradingActiveBlock = 0;
    uint public ercSellAmount = 1000000 * 10** _decimals;
    address public marketingAddress = 0xc709f76F0D6231Ac88e345bCB633CA9D7AAF66Ca;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);
    event ExcludedMaxTransactionAmount(address indexed account, bool isExcluded);
    event ExcludedMaxWalletAmount(address indexed account, bool isExcluded);
    event WLRemoved(address indexed WL);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event FeesChanged();
    event SniperCaught(address indexed sniperAddress);
    event RemovedSniper(address indexed notsnipersupposedly);

    struct Distribution {
        uint256 marketing;
        uint256 dividend;
    }

    struct TaxFees {
        uint256 reflectionBuyFee;
        uint256 buyFee;
        uint256 sellReflectionFee;
        uint256 sellFee;
        uint256 largeSellFee;
        uint256 penaltyFee;
    }

    bool private doTakeFees;
    bool private isSellTxn;
    bool private isRest = true;
    TaxFees public taxFees;
    Distribution public distribution;
    DividendTracker private dividendTracker;

    constructor (address reserves_) {

        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[reserves] = true;
        _isExcludedFromRewards[deadWallet] = true;
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketingAddress), true);
        excludeFromMaxTransaction(address(reserves), true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(address(marketingAddress), true);
        excludeFromMaxWallet(address(reserves), true);

        taxFees = TaxFees(1,4,1,4,3,3);
        distribution = Distribution(80, 20);
        reserves = reserves_;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

    function airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false);
            iterator += 1;
        }
    }

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

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

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

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

    function setErcLargeSellAmount(uint ercSellAmount_) external onlyOwner {
        ercSellAmount = ercSellAmount_ * 10** _decimals;
    }

    function setEarlySellFeeEnabled(bool onOff) external onlyOwner {
        earlySellFeeEnabled = onOff;
    }

    function createV2Pair() external onlyOwner {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        excludeFromMaxWallet(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
    }

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

    function setTaxFees(uint256 reflectionBuyFee, uint256 buyFee, uint256 sellReflectionFee, 
    uint256 sellFee, uint256 largeSellFee, uint256 penaltyFee) external onlyOwner {
        taxFees.reflectionBuyFee = reflectionBuyFee;
        taxFees.buyFee = buyFee;
        taxFees.sellReflectionFee = sellReflectionFee;
        taxFees.sellFee = sellFee;
        taxFees.largeSellFee = largeSellFee;
        taxFees.penaltyFee = penaltyFee;
        require((reflectionBuyFee + buyFee + sellReflectionFee 
        + sellFee + largeSellFee + penaltyFee) <= 30);
    }

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

    function excludeFromMaxTransaction(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[account] = excluded;
        emit ExcludedMaxTransactionAmount(account, excluded);
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedMaxWalletAmount[account] = excluded;
        emit ExcludedMaxWalletAmount(account, excluded);
    }

    function enableMaxWallet(bool onoff) external onlyOwner {
        maxWalletActive = onoff;
    }

    function disableGas() external onlyOwner {
        gasLimitActive = false;
    }

    function updateMaxWalletAmt(uint256 amount) external onlyOwner{
        require(amount >= 1000000);
        maxWalletAmount = amount * 10 **_decimals;
    }

    function updateMaxTxAmt(uint256 amount) external onlyOwner{
        require(amount >= 1000000);
        maxTxAmount = amount * 10 **_decimals;
    }

    function setReservesAddress(address reservesAddr) external onlyOwner {
        require(reserves != reservesAddr ,'Wallet already set');
        reserves = reservesAddr;
    }

    function setMarketingAddress(address marketingAddr) external onlyOwner {
        require(marketingAddress != marketingAddr ,'Wallet already set');
        marketingAddress = marketingAddr;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(address(pair), value);
        excludeFromMaxWallet(address(pair), value);
        _isExcludedFromRewards[pair];

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function isAutomatedMarketMakerPair(address account) public view returns (bool) {	
        return automatedMarketMakerPairs[account];	
    }

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

    function isSniper(address account) public view returns (bool) {	
        return _isSniper[account];	
    }	

    function burnSniper(address account) external onlyOwner {
        require(_isSniper[account]);
        require(!automatedMarketMakerPairs[account], 'Cannot be a Pair');
        uint256 amount = balanceOf(account);
        _tokenTransfer(account, reserves, amount, false, false, false);
            
    }

    function removeSniper(address account) external onlyOwner() {	
        require(_isSniper[account], "Account is not a recorded sniper.");	
        _isSniper[account] = false;	
        emit RemovedSniper(account);
    }

    function setWhitelistedAddresses(address[] memory WL) public onlyOwner {
       for (uint256 i = 0; i < WL.length; i++) {
            whitelistedAddresses[WL[i]] = true;
       }
    }

    function yellowCarpet(bool _state) external onlyOwner {
        require(!tradingActive);
        whitelistActive = _state; 
    }

    function removeWhitelistedAddress(address account) public onlyOwner {
        require(whitelistedAddresses[account]);
        whitelistedAddresses[account] = false;
        emit WLRemoved(account);
    }

    function rescueETH() external onlyOwner {
        (bool s,) = payable(marketingAddress).call{value: address(this).balance}("");
        require(s);
    }
    
    // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake)
    // Owner cannot transfer out foreign coin from this smart contract
    function rescueAnyERC20Tokens(address _tokenAddr) public onlyOwner {
        bool s = IERC20(_tokenAddr).transfer(msg.sender, IERC20(_tokenAddr).balanceOf(address(this)));
        require(s, 'Failure On Token Withdraw');
    }

    function setTradingState(uint256 _snipeBlockAmt, uint256 _gasPriceLimit) external onlyOwner{
        require(!tradingActive);
        tradingActiveBlock = block.number;
        snipeBlockAmt = _snipeBlockAmt;
        gasPriceLimit = _gasPriceLimit * 1 gwei;
        gasLimitActive = true;
        tradingActive = true;
        whitelistActive = false;
        maxWalletActive = true;
    }

    function manualSwapTokensAndDistribute() external onlyOwner {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            //send eth to marketing & distributor 
            distributeShares(contractTokenBalance);
        }
    }

    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcludedFromRewards[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        uint256 reflectionFee = 0;
        if(doTakeFees) {
            reflectionFee = taxFees.reflectionBuyFee;
            if(isSellTxn) {
                reflectionFee = taxFees.sellReflectionFee;
            }
        }
        return _amount.mul(reflectionFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 totalLiquidityFee = 0;
        if(doTakeFees) {
            totalLiquidityFee = taxFees.buyFee;
            if(isSellTxn && !earlySellFeeEnabled) {
                totalLiquidityFee = taxFees.sellFee;
                uint sellAmount = _amount;
                if(sellAmount >= ercSellAmount) {
                    totalLiquidityFee = taxFees.sellFee.add(taxFees.largeSellFee);
                }              
            }
            if(isSellTxn && earlySellFeeEnabled) {
                totalLiquidityFee = taxFees.sellFee.add(taxFees.penaltyFee);
                uint sellAmount = _amount;
                if(sellAmount >= ercSellAmount) {
                    totalLiquidityFee = taxFees.sellFee.add(taxFees.largeSellFee + taxFees.penaltyFee);
                }              
            }
        }
        return _amount.mul(totalLiquidityFee).div(10**2);
    }

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

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

    function disableWhitelistRestriction() external onlyOwner {
        isRest = false;
    }

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();

        if(!tradingActive) {
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading Not Live.");
        }

        if (whitelistActive) {
            require(whitelistedAddresses[from] || whitelistedAddresses[to] || 
            _isExcludedFromFee[from] || _isExcludedFromFee[to],"Yellow Carpet Only.");
            if(!_isExcludedMaxWalletAmount[to]) {
            require(balanceOf(to) + amount <= maxWalletAmount, "Max Wallet Exceeded");
            } 
                if (whitelistedAddresses[from]) { revert ("Yellow Carpet Mode."); 
                }                   
        }
        if(!whitelistActive && isRest && whitelistedAddresses[from]) { revert ("Diamond Hold Mode."); 
        }

        if (gasLimitActive && automatedMarketMakerPairs[from]){
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }  

        if(block.number > tradingActiveBlock + 5){
            sniperProtection = true;
        }      
        
        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if(!automatedMarketMakerPairs[from] && automatedMarketMakerPairs[to]) { 
            isSell = true;
            if(!inSwapAndLiquify && canSwap && !automatedMarketMakerPairs[from] && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            swapTokensAndDistribute();
            }
        }

        if(!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
            takeFees = isTaxFreeTransfer ? false : true;
        }

        if (maxWalletActive && !_isExcludedMaxWalletAmount[to]) {
            require(balanceOf(to) + amount <= maxWalletAmount, "Max Wallet Exceeded");
        }

        if(automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
            require(amount <= maxTxAmount);   
        }    
        
        _tokenTransfer(from, to, amount, takeFees, isSell,  true);
    }

    function swapTokensAndDistribute() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            //send eth to marketing
            distributeShares(contractTokenBalance);
        }
    }

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

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 distributionEth = address(this).balance;
        uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        if(marketingShare > 0){
            payable(marketingAddress).transfer(marketingShare);
        }
        if(dividendShare > 0){
            sendEthDividends(dividendShare);
        }
    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        require(dividendContractAddress != address(this),"Cannot be self");
        dividendTracker = DividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFees, bool isSell,  bool doUpdateDividends) private {

        if (sniperProtection){	
            // If sender is a sniper address, reject the sell.	
            if (isSniper(sender) && recipient != reserves) {	
                revert("Sniper rejected.");	
            }

            if (block.number - tradingActiveBlock < snipeBlockAmt) {
                        _isSniper[recipient] = true;
                        _isExcludedFromRewards[recipient] = true;
                        
                        snipersCaught ++;
                        emit SniperCaught(recipient);    
            }   
        }        
        
        doTakeFees = takeFees;
        isSellTxn = isSell;

        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
        
        if(tLiquidity > 0) {
        emit Transfer(sender, address(this), tLiquidity);
        }

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

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

    Map private map;

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

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

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

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

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

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

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        require(contractAddr != address(this),"Cannot be self");
        bmj = BMJ(payable(contractAddr));
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        (bool s,) = payable(owner()).call{value: address(this).balance}("");
        require(s);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"reserves_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","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":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","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":true,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"WL","type":"address"}],"name":"WLRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"account","type":"address"}],"name":"burnSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWhitelistRestriction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"enableMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ercSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasLimitActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapTokensAndDistribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserves","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"dividend","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onOff","type":"bool"}],"name":"setEarlySellFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ercSellAmount_","type":"uint256"}],"name":"setErcLargeSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddr","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reservesAddr","type":"address"}],"name":"setReservesAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionBuyFee","type":"uint256"},{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"},{"internalType":"uint256","name":"penaltyFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_snipeBlockAmt","type":"uint256"},{"internalType":"uint256","name":"_gasPriceLimit","type":"uint256"}],"name":"setTradingState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"WL","type":"address[]"}],"name":"setWhitelistedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"taxFees","outputs":[{"internalType":"uint256","name":"reflectionBuyFee","type":"uint256"},{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"},{"internalType":"uint256","name":"penaltyFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"yellowCarpet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560028054909116905560c06040526011608090815270105c19595b1a5b99c8141c9bdd1bd8dbdb607a1b60a052600f90620000649082620006a5565b506040805180820190915260048152631411515360e21b60208201526010906200008f9082620006a5565b506011805460ff19166009908117909155620000ad90600a62000886565b620000bd906305f5e1006200089e565b6012819055620000d090600019620008b8565b620000de90600019620008db565b6013556015805467ffffffffffff00ff19166401000100001790556011546200010c9060ff16600a62000886565b6200011b90621e84806200089e565b601655601154620001319060ff16600a62000886565b6200014090621e84806200089e565b601755601154620001569060ff16600a62000886565b62000165906207a1206200089e565b6018556000601b819055601c55601154620001859060ff16600a62000886565b6200019490620f42406200089e565b601d55601e80546001600160a01b031990811673c709f76f0d6231ac88e345bcb633ca9d7aaf66ca17909155601f805490911661dead17905561c3506020556021805462ff0000191662010000179055348015620001f157600080fd5b5060405162004a5238038062004a528339810160408190526200021491620008f1565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013543360008181526004602090815260408083209490945581546001600160a01b039081168352600982528483208054600160ff1991821681179092559484528584208054861682179055601e54821684528584208054861682179055600354821684528584208054861682179055601f5482168452600a90925293822080549093161790915554620002ec91166001620004ad565b620002f9306001620004ad565b6200030861dead6001620004ad565b601e5462000321906001600160a01b03166001620004ad565b6003546200033a906001600160a01b03166001620004ad565b6001805462000355916001600160a01b0390911690620004ad565b620003746200036c6000546001600160a01b031690565b60016200055c565b620003813060016200055c565b6200039061dead60016200055c565b601e54620003a9906001600160a01b031660016200055c565b600354620003c2906001600160a01b031660016200055c565b6040805160c0810182526001808252600460208084018290528385018390526060840182905260036080850181905260a090940184905260228390556023829055602492909255602555602682905560278290558251808401909352605080845260149390910183905260285560299190915580546001600160a01b0319166001600160a01b038316179055620004563390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040516200049e91815260200190565b60405180910390a3506200091c565b6000546001600160a01b03163314620004fc5760405162461bcd60e51b8152602060048201819052602482015260008051602062004a3283398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9591015b60405180910390a25050565b6000546001600160a01b03163314620005a75760405162461bcd60e51b8152602060048201819052602482015260008051602062004a328339815191526044820152606401620004f3565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527f5956094251965a24e12663de1458c0d93ae46d0299678c87fb094b82fe3f2687910162000550565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200062b57607f821691505b6020821081036200064c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006a057600081815260208120601f850160051c810160208610156200067b5750805b601f850160051c820191505b818110156200069c5782815560010162000687565b5050505b505050565b81516001600160401b03811115620006c157620006c162000600565b620006d981620006d2845462000616565b8462000652565b602080601f831160018114620007115760008415620006f85750858301515b600019600386901b1c1916600185901b1785556200069c565b600085815260208120601f198616915b82811015620007425788860151825594840194600190910190840162000721565b5085821015620007615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007c8578160001904821115620007ac57620007ac62000771565b80851615620007ba57918102915b93841c93908002906200078c565b509250929050565b600082620007e15750600162000880565b81620007f05750600062000880565b8160018114620008095760028114620008145762000834565b600191505062000880565b60ff84111562000828576200082862000771565b50506001821b62000880565b5060208310610133831016604e8410600b841016171562000859575081810a62000880565b62000865838362000787565b80600019048211156200087c576200087c62000771565b0290505b92915050565b60006200089760ff841683620007d0565b9392505050565b808202811582820484141762000880576200088062000771565b600082620008d657634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111562000880576200088062000771565b6000602082840312156200090457600080fd5b81516001600160a01b03811681146200089757600080fd5b614106806200092c6000396000f3fe6080604052600436106104355760003560e01c80638c0b5e2211610229578063bbc0c7421161012e578063de582ecf116100b6578063f18dba261161007a578063f18dba2614610d73578063f2fde38b14610d93578063f3289d4e14610db3578063f901796614610dd3578063fc739af014610df457600080fd5b8063de582ecf14610cf1578063e2f4560514610d11578063e79d416014610d27578063ee40166e14610d3d578063f1528ae114610d5357600080fd5b8063d1c5933e116100fd578063d1c5933e14610c2b578063d2fcc00114610c4b578063d821d97914610c6b578063dcda6af314610c8b578063dd62ed3e14610cab57600080fd5b8063bbc0c74214610bb3578063c49b9a8014610bd4578063c61811cc14610bf4578063cbf1e5bd14610c1657600080fd5b8063a457c2d7116101b1578063ab8a934f11610180578063ab8a934f14610b19578063ae19139e14610b39578063b16b9c9914610b59578063b62496f514610b6e578063b6a9987214610b9e57600080fd5b8063a457c2d714610aa3578063a5ece94114610ac3578063a9059cbb14610ae3578063aa4bde2814610b0357600080fd5b806395d89b41116101f857806395d89b4114610a0857806396880b1714610a1d57806398acb5d814610a4d5780639a7a23d614610a6d5780639c1b8af514610a8d57600080fd5b80638c0b5e22146109bd5780638da5cb5b1461099f578063906e9dd0146109d35780639429d707146109f357600080fd5b80634a74bb021161033a57806370a08231116102c25780637949a403116102865780637949a403146109065780638318f24a1461093f57806385141a771461095f578063871c128d1461097f578063893d20e81461099f57600080fd5b806370a0823114610871578063715018a61461089157806371cd56af146108a657806375172a8b146108c65780637571336a146108e657600080fd5b80635342acb4116103095780635342acb4146107b25780635ee58efc146107eb578063657f644b1461081b578063668f78c81461083b5780636dec1ed91461085157600080fd5b80634a74bb02146107325780634e781233146107525780635047b06714610772578063530cd5ab1461079257600080fd5b806320800a00116103bd578063313ce5671161038c578063313ce5671461069057806333251a0b146106b257806339509351146106d2578063441d801f146106f257806349bd5a5e1461071257600080fd5b806320800a001461061957806323b872dd146106305780632d838119146106505780632e092fe81461067057600080fd5b80630e832273116104045780630e832273146105205780630f3a325f1461055957806310d5de53146105925780631694505e146105c257806318160ddd146105fa57600080fd5b806306c933d81461044157806306fdde0314610486578063095ea7b3146104a85780630ddc0976146104c857600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061047161045c3660046139b9565b600e6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561049257600080fd5b5061049b610e0e565b60405161047d91906139d6565b3480156104b457600080fd5b506104716104c3366004613a24565b610ea0565b3480156104d457600080fd5b506022546023546024546025546026546027546104f395949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161047d565b34801561052c57600080fd5b5061047161053b3660046139b9565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561056557600080fd5b506104716105743660046139b9565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561059e57600080fd5b506104716105ad3660046139b9565b600b6020526000908152604090205460ff1681565b3480156105ce57600080fd5b506001546105e2906001600160a01b031681565b6040516001600160a01b03909116815260200161047d565b34801561060657600080fd5b506012545b60405190815260200161047d565b34801561062557600080fd5b5061062e610f08565b005b34801561063c57600080fd5b5061047161064b366004613a50565b610f9e565b34801561065c57600080fd5b5061060b61066b366004613a91565b611025565b34801561067c57600080fd5b5061062e61068b366004613a91565b6110a9565b34801561069c57600080fd5b5060115460405160ff909116815260200161047d565b3480156106be57600080fd5b5061062e6106cd3660046139b9565b611104565b3480156106de57600080fd5b506104716106ed366004613a24565b6111e9565b3480156106fe57600080fd5b5061062e61070d366004613b04565b61122d565b34801561071e57600080fd5b506002546105e2906001600160a01b031681565b34801561073e57600080fd5b506015546104719062010000900460ff1681565b34801561075e57600080fd5b5061062e61076d366004613b5b565b611267565b34801561077e57600080fd5b5061062e61078d366004613a91565b6112af565b34801561079e57600080fd5b5061062e6107ad3660046139b9565b6112fa565b3480156107be57600080fd5b506104716107cd3660046139b9565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156107f757600080fd5b50602854602954610806919082565b6040805192835260208301919091520161047d565b34801561082757600080fd5b5061062e610836366004613a91565b611392565b34801561084757600080fd5b5061060b601d5481565b34801561085d57600080fd5b5061062e61086c3660046139b9565b6113ed565b34801561087d57600080fd5b5061060b61088c3660046139b9565b61154e565b34801561089d57600080fd5b5061062e611570565b3480156108b257600080fd5b5061062e6108c1366004613b04565b6115e4565b3480156108d257600080fd5b506003546105e2906001600160a01b031681565b3480156108f257600080fd5b5061062e610901366004613b78565b611619565b34801561091257600080fd5b506104716109213660046139b9565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561094b57600080fd5b5061062e61095a3660046139b9565b6116a3565b34801561096b57600080fd5b50601f546105e2906001600160a01b031681565b34801561098b57600080fd5b5061062e61099a366004613a91565b611741565b3480156109ab57600080fd5b506000546001600160a01b03166105e2565b3480156109c957600080fd5b5061060b60165481565b3480156109df57600080fd5b5061062e6109ee3660046139b9565b6117d6565b3480156109ff57600080fd5b5061062e611874565b348015610a1457600080fd5b5061049b6118ba565b348015610a2957600080fd5b50610471610a383660046139b9565b600c6020526000908152604090205460ff1681565b348015610a5957600080fd5b5061062e610a683660046139b9565b6118c9565b348015610a7957600080fd5b5061062e610a88366004613b78565b61195e565b348015610a9957600080fd5b5061060b60205481565b348015610aaf57600080fd5b50610471610abe366004613a24565b611a16565b348015610acf57600080fd5b50601e546105e2906001600160a01b031681565b348015610aef57600080fd5b50610471610afe366004613a24565b611a65565b348015610b0f57600080fd5b5061060b60175481565b348015610b2557600080fd5b5061062e610b34366004613bb1565b611a72565b348015610b4557600080fd5b5061062e610b54366004613b5b565b611aee565b348015610b6557600080fd5b5061062e611b3c565b348015610b7a57600080fd5b50610471610b893660046139b9565b600d6020526000908152604090205460ff1681565b348015610baa57600080fd5b5061062e611b74565b348015610bbf57600080fd5b5060155461047190600160381b900460ff1681565b348015610be057600080fd5b5061062e610bef366004613b5b565b611de7565b348015610c0057600080fd5b5060155461047190640100000000900460ff1681565b348015610c2257600080fd5b5061062e611e67565b348015610c3757600080fd5b5061062e610c46366004613b5b565b611ea5565b348015610c5757600080fd5b5061062e610c66366004613b78565b611f08565b348015610c7757600080fd5b5061062e610c86366004613bd3565b611f8a565b348015610c9757600080fd5b5061062e610ca6366004613c16565b61201d565b348015610cb757600080fd5b5061060b610cc6366004613c82565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610cfd57600080fd5b5061062e610d0c3660046139b9565b612172565b348015610d1d57600080fd5b5061060b60185481565b348015610d3357600080fd5b5061060b601b5481565b348015610d4957600080fd5b5061060b601c5481565b348015610d5f57600080fd5b5061062e610d6e366004613cc6565b612247565b348015610d7f57600080fd5b5061062e610d8e366004613bb1565b6122d9565b348015610d9f57600080fd5b5061062e610dae3660046139b9565b61230e565b348015610dbf57600080fd5b5061062e610dce366004613b5b565b6123f8565b348015610ddf57600080fd5b5060155461047190600160401b900460ff1681565b348015610e0057600080fd5b506015546104719060ff1681565b6060600f8054610e1d90613d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4990613d8b565b8015610e965780601f10610e6b57610100808354040283529160200191610e96565b820191906000526020600020905b815481529060010190602001808311610e7957829003601f168201915b5050505050905090565b3360008181526007602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b8152600401610f3290613dc5565b60405180910390fd5b601e546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610f88576040519150601f19603f3d011682016040523d82523d6000602084013e610f8d565b606091505b5050905080610f9b57600080fd5b50565b6000610fab848484612442565b610ff382604051806060016040528060288152602001614084602891396001600160a01b03871660009081526007602090815260408083203384529091529020549190612bab565b6001600160a01b0394909416600090815260076020908152604080832033845290915290209390935550600192915050565b600060135482111561108c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f32565b6000611096612be5565b90506110a28382612c08565b9392505050565b6000546001600160a01b031633146110d35760405162461bcd60e51b8152600401610f3290613dc5565b620f42408110156110e357600080fd5b6011546110f49060ff16600a613ef4565b6110fe9082613f03565b60165550565b6000546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b03811660009081526008602052604090205460ff166111a05760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610f32565b6001600160a01b038116600081815260086020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161122491859061121f9086612c4a565b612ca9565b50600192915050565b6000546001600160a01b031633146112575760405162461bcd60e51b8152600401610f3290613dc5565b611262838383612dcd565b505050565b6000546001600160a01b031633146112915760405162461bcd60e51b8152600401610f3290613dc5565b6015805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146112d95760405162461bcd60e51b8152600401610f3290613dc5565b6011546112ea9060ff16600a613ef4565b6112f49082613f03565b601d5550565b6000546001600160a01b031633146113245760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b0381166000908152600e602052604090205460ff1661134957600080fd5b6001600160a01b0381166000818152600e6020526040808220805460ff19169055517f75593e2814cc70e09eb697336270fa85a55117fd6e39b66b64ab09dd815db03f9190a250565b6000546001600160a01b031633146113bc5760405162461bcd60e51b8152600401610f3290613dc5565b620f42408110156113cc57600080fd5b6011546113dd9060ff16600a613ef4565b6113e79082613f03565b60175550565b6000546001600160a01b031633146114175760405162461bcd60e51b8152600401610f3290613dc5565b6040516370a0823160e01b81523060048201526000906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190613f1a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190613f33565b90508061154a5760405162461bcd60e51b815260206004820152601960248201527f4661696c757265204f6e20546f6b656e205769746864726177000000000000006044820152606401610f32565b5050565b6001600160a01b038116600090815260046020526040812054610f0290611025565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610f3290613dc5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610f3290613dc5565b611262838383612e3d565b6000546001600160a01b031633146116435760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9591015b60405180910390a25050565b6000546001600160a01b031633146116cd5760405162461bcd60e51b8152600401610f3290613dc5565b6003546001600160a01b0380831691160361171f5760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d08185b1c9958591e481cd95d60721b6044820152606401610f32565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610f3290613dc5565b60205481036117d15760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610f32565b602055565b6000546001600160a01b031633146118005760405162461bcd60e51b8152600401610f3290613dc5565b601e546001600160a01b038083169116036118525760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d08185b1c9958591e481cd95d60721b6044820152606401610f32565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461189e5760405162461bcd60e51b8152600401610f3290613dc5565b60006118a93061154e565b90508015610f9b57610f9b81612ea7565b606060108054610e1d90613d8b565b6000546001600160a01b031633146118f35760405162461bcd60e51b8152600401610f3290613dc5565b306001600160a01b0382160361193c5760405162461bcd60e51b815260206004820152600e60248201526d21b0b73737ba1031329039b2b63360911b6044820152606401610f32565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119885760405162461bcd60e51b8152600401610f3290613dc5565b6002546001600160a01b0390811690831603611a0c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f32565b61154a8282612f64565b6000611224338461121f856040518060600160405280602581526020016140ac602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612bab565b6000611224338484612442565b6000546001600160a01b03163314611a9c5760405162461bcd60e51b8152600401610f3290613dc5565b601554600160381b900460ff1615611ab357600080fd5b43601c55601a829055611aca81633b9aca00613f03565b60195550506015805468ffffffff0000000000191668010101000000000000179055565b6000546001600160a01b03163314611b185760405162461bcd60e51b8152600401610f3290613dc5565b6015805491151566010000000000000266ff00000000000019909216919091179055565b6000546001600160a01b03163314611b665760405162461bcd60e51b8152600401610f3290613dc5565b6021805462ff000019169055565b6000546001600160a01b03163314611b9e5760405162461bcd60e51b8152600401610f3290613dc5565b6002546001600160a01b031615611c025760405162461bcd60e51b815260206004820152602260248201527f556e69737761705632506169722068617320616c7265616479206265656e2073604482015261195d60f21b6064820152608401610f32565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c799190613f50565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cff9190613f50565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d709190613f50565b600280546001600160a01b0319166001600160a01b0392831690811782556000908152600a60205260409020805460ff191660019081179091559054611db7921690611619565b600254611dce906001600160a01b03166001611f08565b600254611de5906001600160a01b03166001612f64565b565b6000546001600160a01b03163314611e115760405162461bcd60e51b8152600401610f3290613dc5565b60158054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611e5c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e915760405162461bcd60e51b8152600401610f3290613dc5565b6015805468ff000000000000000019169055565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610f3290613dc5565b601554600160381b900460ff1615611ee657600080fd5b60158054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b03163314611f325760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527f5956094251965a24e12663de1458c0d93ae46d0299678c87fb094b82fe3f26879101611697565b6000546001600160a01b03163314611fb45760405162461bcd60e51b8152600401610f3290613dc5565b602286905560238590556024849055602583905560268290556027819055601e81838587611fe28a8c613f6d565b611fec9190613f6d565b611ff69190613f6d565b6120009190613f6d565b61200a9190613f6d565b111561201557600080fd5b505050505050565b3360009081526009602052604081205460ff166120925760405162461bcd60e51b815260206004820152602d60248201527f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60448201526c756465642066726f6d2066656560981b6064820152608401610f32565b8382146120f45760405162461bcd60e51b815260206004820152602a60248201527f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260448201526965207468652073616d6560b01b6064820152608401610f32565b8381101561216b576121593386868481811061211257612112613f80565b905060200201602081019061212791906139b9565b85858581811061213957612139613f80565b90506020020135633b9aca0061214f9190613f03565b6000806000612fdf565b612164600182613f6d565b90506120f4565b5050505050565b6000546001600160a01b0316331461219c5760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b03811660009081526008602052604090205460ff166121c157600080fd5b6001600160a01b0381166000908152600d602052604090205460ff161561221d5760405162461bcd60e51b815260206004820152601060248201526f21b0b73737ba1031329030902830b4b960811b6044820152606401610f32565b60006122288261154e565b60035490915061154a9083906001600160a01b03168360008080612fdf565b6000546001600160a01b031633146122715760405162461bcd60e51b8152600401610f3290613dc5565b60005b815181101561154a576001600e600084848151811061229557612295613f80565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122d181613f96565b915050612274565b6000546001600160a01b031633146123035760405162461bcd60e51b8152600401610f3290613dc5565b602991909155602855565b6000546001600160a01b031633146123385760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b03811661239d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f32565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124225760405162461bcd60e51b8152600401610f3290613dc5565b601580549115156401000000000264ff0000000019909216919091179055565b6001600160a01b0383166124a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f32565b6001600160a01b0382166125085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f32565b6000811161256a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f32565b6001600160a01b038316600090815260096020526040812054819060ff161580156125ae57506001600160a01b03841660009081526009602052604090205460ff16155b80156125c857506000546001600160a01b03868116911614155b80156125e257506000546001600160a01b03858116911614155b601554909150600160381b900460ff16612675576001600160a01b03851660009081526009602052604090205460ff168061263557506001600160a01b03841660009081526009602052604090205460ff165b6126755760405162461bcd60e51b81526020600482015260116024820152702a3930b234b733902737ba102634bb329760791b6044820152606401610f32565b60155465010000000000900460ff161561282a576001600160a01b0385166000908152600e602052604090205460ff16806126c857506001600160a01b0384166000908152600e602052604090205460ff165b806126eb57506001600160a01b03851660009081526009602052604090205460ff165b8061270e57506001600160a01b03841660009081526009602052604090205460ff165b6127505760405162461bcd60e51b81526020600482015260136024820152722cb2b63637bb9021b0b93832ba1027b7363c9760691b6044820152606401610f32565b6001600160a01b0384166000908152600c602052604090205460ff166127cb576017548361277d8661154e565b6127879190613f6d565b11156127cb5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f32565b6001600160a01b0385166000908152600e602052604090205460ff161561282a5760405162461bcd60e51b81526020600482015260136024820152722cb2b63637bb9021b0b93832ba1026b7b2329760691b6044820152606401610f32565b60155465010000000000900460ff1615801561284e575060215462010000900460ff165b801561287257506001600160a01b0385166000908152600e602052604090205460ff165b156128b45760405162461bcd60e51b81526020600482015260126024820152712234b0b6b7b732102437b6321026b7b2329760711b6044820152606401610f32565b601554600160401b900460ff1680156128e557506001600160a01b0385166000908152600d602052604090205460ff165b1561293c576019543a111561293c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f32565b601c5461294a906005613f6d565b43111561295f576015805460ff191660011790555b600060185461296d3061154e565b6001600160a01b0388166000908152600d6020526040902054911115915060ff161580156129b357506001600160a01b0385166000908152600d602052604090205460ff165b15612a4d5760155460019350610100900460ff161580156129d15750805b80156129f657506001600160a01b0386166000908152600d602052604090205460ff16155b8015612a1b57506001600160a01b03861660009081526009602052604090205460ff16155b8015612a4057506001600160a01b03851660009081526009602052604090205460ff16155b15612a4d57612a4d61189e565b6001600160a01b0386166000908152600d602052604090205460ff16158015612a8f57506001600160a01b0385166000908152600d602052604090205460ff16155b15612ab2576015546301000000900460ff16612aac576001612aaf565b60005b91505b6015546601000000000000900460ff168015612ae757506001600160a01b0385166000908152600c602052604090205460ff16155b15612b475760175484612af98761154e565b612b039190613f6d565b1115612b475760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f32565b6001600160a01b0386166000908152600d602052604090205460ff168015612b8857506001600160a01b0385166000908152600b602052604090205460ff16155b15612b9c57601654841115612b9c57600080fd5b61201586868685876001612fdf565b60008184841115612bcf5760405162461bcd60e51b8152600401610f3291906139d6565b506000612bdc8486613faf565b95945050505050565b6000806000612bf26133f3565b9092509050612c018282612c08565b9250505090565b60006110a283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613428565b600080612c578385613f6d565b9050838110156110a25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f32565b6001600160a01b038316612d0b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f32565b6001600160a01b038216612d6c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f32565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60005b82811015612e37576000848483818110612dec57612dec613f80565b9050602002016020810190612e0191906139b9565b6001600160a01b03166000908152600960205260409020805460ff19168415151790555080612e2f81613f96565b915050612dd0565b50505050565b60005b82811015612e37576000848483818110612e5c57612e5c613f80565b9050602002016020810190612e7191906139b9565b6001600160a01b03166000908152600a60205260409020805460ff19168415151790555080612e9f81613f96565b915050612e40565b6015805461ff001916610100179055612ebf81613456565b6028544790600090612edf90606490612ed99085906135a8565b90612c08565b90506000612f006064612ed9602860010154866135a890919063ffffffff16565b90508115612f4457601e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612f42573d6000803e3d6000fd5b505b8015612f5357612f538161362a565b50506015805461ff00191690555050565b6001600160a01b0382166000908152600d60205260409020805460ff1916821515179055612f928282611619565b612f9c8282611f08565b6001600160a01b0382166000818152600a60205260405183151592917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60155460ff16156130f8576001600160a01b03861660009081526008602052604090205460ff16801561302057506003546001600160a01b03868116911614155b156130605760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610f32565b601a54601c546130709043613faf565b10156130f8576001600160a01b03851660009081526008602090815260408083208054600160ff199182168117909255600a9093529083208054909216179055601b8054916130be83613f96565b90915550506040516001600160a01b038616907f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e590600090a25b6021805461ffff191684151561ff0019161761010084151502179055600080808080806131248a6136bd565b95509550955095509550955061316886600460008f6001600160a01b03166001600160a01b031681526020019081526020016000205461370c90919063ffffffff16565b6001600160a01b03808e1660009081526004602052604080822093909355908d16815220546131979086612c4a565b6001600160a01b038c166000908152600460205260409020556131b98161374e565b6131c384836137d6565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161320891815260200190565b60405180910390a380156132575760405181815230906001600160a01b038e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b868015613265575060295415155b156133e557602a54604051633974d3b160e01b81526001600160a01b038e8116600483015290911690633974d3b190602401600060405180830381600087803b1580156132b157600080fd5b505af19250505080156132c2575060015b50602a54604051633974d3b160e01b81526001600160a01b038d8116600483015290911690633974d3b190602401600060405180830381600087803b15801561330a57600080fd5b505af192505050801561331b575060015b50602a546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916133549160040190815260200190565b6060604051808303816000875af192505050801561338f575060408051601f3d908101601f1916820190925261338c91810190613fc2565b60015b156133e55760208054604080518681529283018590528201839052606082015232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505050505050505050505050565b60135460125460009182916134088282612c08565b82101561341f576013546012549350935050509091565b90939092509050565b600081836134495760405162461bcd60e51b8152600401610f3291906139d6565b506000612bdc8486613ff0565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061348b5761348b613f80565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156134e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135089190613f50565b8160018151811061351b5761351b613f80565b6001600160a01b0392831660209182029290920101526001546135419130911684612ca9565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac9479061357a908590600090869030904290600401614012565b600060405180830381600087803b15801561359457600080fd5b505af1158015612015573d6000803e3d6000fd5b6000826000036135ba57506000610f02565b60006135c68385613f03565b9050826135d38583613ff0565b146110a25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f32565b602a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613677576040519150601f19603f3d011682016040523d82523d6000602084013e61367c565b606091505b50509050801561154a576040518281527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a15050565b60008060008060008060008060006136d48a6137fa565b92509250925060008060006136f28d86866136ed612be5565b61383c565b919f909e50909c50959a5093985091965092945050505050565b60006110a283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bab565b6000613758612be5565b9050600061376683836135a8565b306000908152600460205260409020549091506137839082612c4a565b30600090815260046020908152604080832093909355600a9052205460ff161561126257306000908152600560205260409020546137c19084612c4a565b30600090815260056020526040902055505050565b6013546137e3908361370c565b6013556014546137f39082612c4a565b6014555050565b6000806000806138098561388c565b90506000613816866138c4565b9050600061382e82613828898661370c565b9061370c565b979296509094509092505050565b600080808061384b88866135a8565b9050600061385988876135a8565b9050600061386788886135a8565b9050600061387982613828868661370c565b939b939a50919850919650505050505050565b602154600090819060ff16156138b55750602254602154610100900460ff16156138b557506024545b6110a26064612ed985846135a8565b602154600090819060ff16156138b55750602354602154610100900460ff1680156138fa5750601554640100000000900460ff16155b156139225750602554601d54839081106139205760265460255461391d91612c4a565b91505b505b602154610100900460ff1680156139435750601554640100000000900460ff165b156138b55760275460255461395791612c4a565b601d5490915083908110613984576027546026546139819161397891613f6d565b60255490612c4a565b91505b506110a26064612ed985846135a8565b6001600160a01b0381168114610f9b57600080fd5b80356139b481613994565b919050565b6000602082840312156139cb57600080fd5b81356110a281613994565b600060208083528351808285015260005b81811015613a03578581018301518582016040015282016139e7565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613a3757600080fd5b8235613a4281613994565b946020939093013593505050565b600080600060608486031215613a6557600080fd5b8335613a7081613994565b92506020840135613a8081613994565b929592945050506040919091013590565b600060208284031215613aa357600080fd5b5035919050565b60008083601f840112613abc57600080fd5b50813567ffffffffffffffff811115613ad457600080fd5b6020830191508360208260051b8501011115613aef57600080fd5b9250929050565b8015158114610f9b57600080fd5b600080600060408486031215613b1957600080fd5b833567ffffffffffffffff811115613b3057600080fd5b613b3c86828701613aaa565b9094509250506020840135613b5081613af6565b809150509250925092565b600060208284031215613b6d57600080fd5b81356110a281613af6565b60008060408385031215613b8b57600080fd5b8235613b9681613994565b91506020830135613ba681613af6565b809150509250929050565b60008060408385031215613bc457600080fd5b50508035926020909101359150565b60008060008060008060c08789031215613bec57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060008060408587031215613c2c57600080fd5b843567ffffffffffffffff80821115613c4457600080fd5b613c5088838901613aaa565b90965094506020870135915080821115613c6957600080fd5b50613c7687828801613aaa565b95989497509550505050565b60008060408385031215613c9557600080fd5b8235613ca081613994565b91506020830135613ba681613994565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215613cd957600080fd5b823567ffffffffffffffff80821115613cf157600080fd5b818501915085601f830112613d0557600080fd5b813581811115613d1757613d17613cb0565b8060051b604051601f19603f83011681018181108582111715613d3c57613d3c613cb0565b604052918252848201925083810185019188831115613d5a57600080fd5b938501935b82851015613d7f57613d70856139a9565b84529385019392850192613d5f565b98975050505050505050565b600181811c90821680613d9f57607f821691505b602082108103613dbf57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613e4b578160001904821115613e3157613e31613dfa565b80851615613e3e57918102915b93841c9390800290613e15565b509250929050565b600082613e6257506001610f02565b81613e6f57506000610f02565b8160018114613e855760028114613e8f57613eab565b6001915050610f02565b60ff841115613ea057613ea0613dfa565b50506001821b610f02565b5060208310610133831016604e8410600b8410161715613ece575081810a610f02565b613ed88383613e10565b8060001904821115613eec57613eec613dfa565b029392505050565b60006110a260ff841683613e53565b8082028115828204841417610f0257610f02613dfa565b600060208284031215613f2c57600080fd5b5051919050565b600060208284031215613f4557600080fd5b81516110a281613af6565b600060208284031215613f6257600080fd5b81516110a281613994565b80820180821115610f0257610f02613dfa565b634e487b7160e01b600052603260045260246000fd5b600060018201613fa857613fa8613dfa565b5060010190565b81810381811115610f0257610f02613dfa565b600080600060608486031215613fd757600080fd5b8351925060208401519150604084015190509250925092565b60008261400d57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140625784516001600160a01b03168352938301939183019160010161403d565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d148733ab6b7df6aac45d741887e16adf987ebf34858d370790c3d203423526664736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000a2b5d1327302889a8d821e81cf849305f0dd6105

Deployed Bytecode

0x6080604052600436106104355760003560e01c80638c0b5e2211610229578063bbc0c7421161012e578063de582ecf116100b6578063f18dba261161007a578063f18dba2614610d73578063f2fde38b14610d93578063f3289d4e14610db3578063f901796614610dd3578063fc739af014610df457600080fd5b8063de582ecf14610cf1578063e2f4560514610d11578063e79d416014610d27578063ee40166e14610d3d578063f1528ae114610d5357600080fd5b8063d1c5933e116100fd578063d1c5933e14610c2b578063d2fcc00114610c4b578063d821d97914610c6b578063dcda6af314610c8b578063dd62ed3e14610cab57600080fd5b8063bbc0c74214610bb3578063c49b9a8014610bd4578063c61811cc14610bf4578063cbf1e5bd14610c1657600080fd5b8063a457c2d7116101b1578063ab8a934f11610180578063ab8a934f14610b19578063ae19139e14610b39578063b16b9c9914610b59578063b62496f514610b6e578063b6a9987214610b9e57600080fd5b8063a457c2d714610aa3578063a5ece94114610ac3578063a9059cbb14610ae3578063aa4bde2814610b0357600080fd5b806395d89b41116101f857806395d89b4114610a0857806396880b1714610a1d57806398acb5d814610a4d5780639a7a23d614610a6d5780639c1b8af514610a8d57600080fd5b80638c0b5e22146109bd5780638da5cb5b1461099f578063906e9dd0146109d35780639429d707146109f357600080fd5b80634a74bb021161033a57806370a08231116102c25780637949a403116102865780637949a403146109065780638318f24a1461093f57806385141a771461095f578063871c128d1461097f578063893d20e81461099f57600080fd5b806370a0823114610871578063715018a61461089157806371cd56af146108a657806375172a8b146108c65780637571336a146108e657600080fd5b80635342acb4116103095780635342acb4146107b25780635ee58efc146107eb578063657f644b1461081b578063668f78c81461083b5780636dec1ed91461085157600080fd5b80634a74bb02146107325780634e781233146107525780635047b06714610772578063530cd5ab1461079257600080fd5b806320800a00116103bd578063313ce5671161038c578063313ce5671461069057806333251a0b146106b257806339509351146106d2578063441d801f146106f257806349bd5a5e1461071257600080fd5b806320800a001461061957806323b872dd146106305780632d838119146106505780632e092fe81461067057600080fd5b80630e832273116104045780630e832273146105205780630f3a325f1461055957806310d5de53146105925780631694505e146105c257806318160ddd146105fa57600080fd5b806306c933d81461044157806306fdde0314610486578063095ea7b3146104a85780630ddc0976146104c857600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061047161045c3660046139b9565b600e6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561049257600080fd5b5061049b610e0e565b60405161047d91906139d6565b3480156104b457600080fd5b506104716104c3366004613a24565b610ea0565b3480156104d457600080fd5b506022546023546024546025546026546027546104f395949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161047d565b34801561052c57600080fd5b5061047161053b3660046139b9565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561056557600080fd5b506104716105743660046139b9565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561059e57600080fd5b506104716105ad3660046139b9565b600b6020526000908152604090205460ff1681565b3480156105ce57600080fd5b506001546105e2906001600160a01b031681565b6040516001600160a01b03909116815260200161047d565b34801561060657600080fd5b506012545b60405190815260200161047d565b34801561062557600080fd5b5061062e610f08565b005b34801561063c57600080fd5b5061047161064b366004613a50565b610f9e565b34801561065c57600080fd5b5061060b61066b366004613a91565b611025565b34801561067c57600080fd5b5061062e61068b366004613a91565b6110a9565b34801561069c57600080fd5b5060115460405160ff909116815260200161047d565b3480156106be57600080fd5b5061062e6106cd3660046139b9565b611104565b3480156106de57600080fd5b506104716106ed366004613a24565b6111e9565b3480156106fe57600080fd5b5061062e61070d366004613b04565b61122d565b34801561071e57600080fd5b506002546105e2906001600160a01b031681565b34801561073e57600080fd5b506015546104719062010000900460ff1681565b34801561075e57600080fd5b5061062e61076d366004613b5b565b611267565b34801561077e57600080fd5b5061062e61078d366004613a91565b6112af565b34801561079e57600080fd5b5061062e6107ad3660046139b9565b6112fa565b3480156107be57600080fd5b506104716107cd3660046139b9565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156107f757600080fd5b50602854602954610806919082565b6040805192835260208301919091520161047d565b34801561082757600080fd5b5061062e610836366004613a91565b611392565b34801561084757600080fd5b5061060b601d5481565b34801561085d57600080fd5b5061062e61086c3660046139b9565b6113ed565b34801561087d57600080fd5b5061060b61088c3660046139b9565b61154e565b34801561089d57600080fd5b5061062e611570565b3480156108b257600080fd5b5061062e6108c1366004613b04565b6115e4565b3480156108d257600080fd5b506003546105e2906001600160a01b031681565b3480156108f257600080fd5b5061062e610901366004613b78565b611619565b34801561091257600080fd5b506104716109213660046139b9565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561094b57600080fd5b5061062e61095a3660046139b9565b6116a3565b34801561096b57600080fd5b50601f546105e2906001600160a01b031681565b34801561098b57600080fd5b5061062e61099a366004613a91565b611741565b3480156109ab57600080fd5b506000546001600160a01b03166105e2565b3480156109c957600080fd5b5061060b60165481565b3480156109df57600080fd5b5061062e6109ee3660046139b9565b6117d6565b3480156109ff57600080fd5b5061062e611874565b348015610a1457600080fd5b5061049b6118ba565b348015610a2957600080fd5b50610471610a383660046139b9565b600c6020526000908152604090205460ff1681565b348015610a5957600080fd5b5061062e610a683660046139b9565b6118c9565b348015610a7957600080fd5b5061062e610a88366004613b78565b61195e565b348015610a9957600080fd5b5061060b60205481565b348015610aaf57600080fd5b50610471610abe366004613a24565b611a16565b348015610acf57600080fd5b50601e546105e2906001600160a01b031681565b348015610aef57600080fd5b50610471610afe366004613a24565b611a65565b348015610b0f57600080fd5b5061060b60175481565b348015610b2557600080fd5b5061062e610b34366004613bb1565b611a72565b348015610b4557600080fd5b5061062e610b54366004613b5b565b611aee565b348015610b6557600080fd5b5061062e611b3c565b348015610b7a57600080fd5b50610471610b893660046139b9565b600d6020526000908152604090205460ff1681565b348015610baa57600080fd5b5061062e611b74565b348015610bbf57600080fd5b5060155461047190600160381b900460ff1681565b348015610be057600080fd5b5061062e610bef366004613b5b565b611de7565b348015610c0057600080fd5b5060155461047190640100000000900460ff1681565b348015610c2257600080fd5b5061062e611e67565b348015610c3757600080fd5b5061062e610c46366004613b5b565b611ea5565b348015610c5757600080fd5b5061062e610c66366004613b78565b611f08565b348015610c7757600080fd5b5061062e610c86366004613bd3565b611f8a565b348015610c9757600080fd5b5061062e610ca6366004613c16565b61201d565b348015610cb757600080fd5b5061060b610cc6366004613c82565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610cfd57600080fd5b5061062e610d0c3660046139b9565b612172565b348015610d1d57600080fd5b5061060b60185481565b348015610d3357600080fd5b5061060b601b5481565b348015610d4957600080fd5b5061060b601c5481565b348015610d5f57600080fd5b5061062e610d6e366004613cc6565b612247565b348015610d7f57600080fd5b5061062e610d8e366004613bb1565b6122d9565b348015610d9f57600080fd5b5061062e610dae3660046139b9565b61230e565b348015610dbf57600080fd5b5061062e610dce366004613b5b565b6123f8565b348015610ddf57600080fd5b5060155461047190600160401b900460ff1681565b348015610e0057600080fd5b506015546104719060ff1681565b6060600f8054610e1d90613d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4990613d8b565b8015610e965780601f10610e6b57610100808354040283529160200191610e96565b820191906000526020600020905b815481529060010190602001808311610e7957829003601f168201915b5050505050905090565b3360008181526007602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b8152600401610f3290613dc5565b60405180910390fd5b601e546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610f88576040519150601f19603f3d011682016040523d82523d6000602084013e610f8d565b606091505b5050905080610f9b57600080fd5b50565b6000610fab848484612442565b610ff382604051806060016040528060288152602001614084602891396001600160a01b03871660009081526007602090815260408083203384529091529020549190612bab565b6001600160a01b0394909416600090815260076020908152604080832033845290915290209390935550600192915050565b600060135482111561108c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f32565b6000611096612be5565b90506110a28382612c08565b9392505050565b6000546001600160a01b031633146110d35760405162461bcd60e51b8152600401610f3290613dc5565b620f42408110156110e357600080fd5b6011546110f49060ff16600a613ef4565b6110fe9082613f03565b60165550565b6000546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b03811660009081526008602052604090205460ff166111a05760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b6064820152608401610f32565b6001600160a01b038116600081815260086020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161122491859061121f9086612c4a565b612ca9565b50600192915050565b6000546001600160a01b031633146112575760405162461bcd60e51b8152600401610f3290613dc5565b611262838383612dcd565b505050565b6000546001600160a01b031633146112915760405162461bcd60e51b8152600401610f3290613dc5565b6015805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146112d95760405162461bcd60e51b8152600401610f3290613dc5565b6011546112ea9060ff16600a613ef4565b6112f49082613f03565b601d5550565b6000546001600160a01b031633146113245760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b0381166000908152600e602052604090205460ff1661134957600080fd5b6001600160a01b0381166000818152600e6020526040808220805460ff19169055517f75593e2814cc70e09eb697336270fa85a55117fd6e39b66b64ab09dd815db03f9190a250565b6000546001600160a01b031633146113bc5760405162461bcd60e51b8152600401610f3290613dc5565b620f42408110156113cc57600080fd5b6011546113dd9060ff16600a613ef4565b6113e79082613f03565b60175550565b6000546001600160a01b031633146114175760405162461bcd60e51b8152600401610f3290613dc5565b6040516370a0823160e01b81523060048201526000906001600160a01b0383169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190613f1a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190613f33565b90508061154a5760405162461bcd60e51b815260206004820152601960248201527f4661696c757265204f6e20546f6b656e205769746864726177000000000000006044820152606401610f32565b5050565b6001600160a01b038116600090815260046020526040812054610f0290611025565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610f3290613dc5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610f3290613dc5565b611262838383612e3d565b6000546001600160a01b031633146116435760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b0382166000818152600b6020908152604091829020805460ff191685151590811790915591519182527f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9591015b60405180910390a25050565b6000546001600160a01b031633146116cd5760405162461bcd60e51b8152600401610f3290613dc5565b6003546001600160a01b0380831691160361171f5760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d08185b1c9958591e481cd95d60721b6044820152606401610f32565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461176b5760405162461bcd60e51b8152600401610f3290613dc5565b60205481036117d15760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610f32565b602055565b6000546001600160a01b031633146118005760405162461bcd60e51b8152600401610f3290613dc5565b601e546001600160a01b038083169116036118525760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d08185b1c9958591e481cd95d60721b6044820152606401610f32565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461189e5760405162461bcd60e51b8152600401610f3290613dc5565b60006118a93061154e565b90508015610f9b57610f9b81612ea7565b606060108054610e1d90613d8b565b6000546001600160a01b031633146118f35760405162461bcd60e51b8152600401610f3290613dc5565b306001600160a01b0382160361193c5760405162461bcd60e51b815260206004820152600e60248201526d21b0b73737ba1031329039b2b63360911b6044820152606401610f32565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119885760405162461bcd60e51b8152600401610f3290613dc5565b6002546001600160a01b0390811690831603611a0c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f32565b61154a8282612f64565b6000611224338461121f856040518060600160405280602581526020016140ac602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612bab565b6000611224338484612442565b6000546001600160a01b03163314611a9c5760405162461bcd60e51b8152600401610f3290613dc5565b601554600160381b900460ff1615611ab357600080fd5b43601c55601a829055611aca81633b9aca00613f03565b60195550506015805468ffffffff0000000000191668010101000000000000179055565b6000546001600160a01b03163314611b185760405162461bcd60e51b8152600401610f3290613dc5565b6015805491151566010000000000000266ff00000000000019909216919091179055565b6000546001600160a01b03163314611b665760405162461bcd60e51b8152600401610f3290613dc5565b6021805462ff000019169055565b6000546001600160a01b03163314611b9e5760405162461bcd60e51b8152600401610f3290613dc5565b6002546001600160a01b031615611c025760405162461bcd60e51b815260206004820152602260248201527f556e69737761705632506169722068617320616c7265616479206265656e2073604482015261195d60f21b6064820152608401610f32565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c799190613f50565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cff9190613f50565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d709190613f50565b600280546001600160a01b0319166001600160a01b0392831690811782556000908152600a60205260409020805460ff191660019081179091559054611db7921690611619565b600254611dce906001600160a01b03166001611f08565b600254611de5906001600160a01b03166001612f64565b565b6000546001600160a01b03163314611e115760405162461bcd60e51b8152600401610f3290613dc5565b60158054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611e5c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e915760405162461bcd60e51b8152600401610f3290613dc5565b6015805468ff000000000000000019169055565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610f3290613dc5565b601554600160381b900460ff1615611ee657600080fd5b60158054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b03163314611f325760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527f5956094251965a24e12663de1458c0d93ae46d0299678c87fb094b82fe3f26879101611697565b6000546001600160a01b03163314611fb45760405162461bcd60e51b8152600401610f3290613dc5565b602286905560238590556024849055602583905560268290556027819055601e81838587611fe28a8c613f6d565b611fec9190613f6d565b611ff69190613f6d565b6120009190613f6d565b61200a9190613f6d565b111561201557600080fd5b505050505050565b3360009081526009602052604081205460ff166120925760405162461bcd60e51b815260206004820152602d60248201527f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60448201526c756465642066726f6d2066656560981b6064820152608401610f32565b8382146120f45760405162461bcd60e51b815260206004820152602a60248201527f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260448201526965207468652073616d6560b01b6064820152608401610f32565b8381101561216b576121593386868481811061211257612112613f80565b905060200201602081019061212791906139b9565b85858581811061213957612139613f80565b90506020020135633b9aca0061214f9190613f03565b6000806000612fdf565b612164600182613f6d565b90506120f4565b5050505050565b6000546001600160a01b0316331461219c5760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b03811660009081526008602052604090205460ff166121c157600080fd5b6001600160a01b0381166000908152600d602052604090205460ff161561221d5760405162461bcd60e51b815260206004820152601060248201526f21b0b73737ba1031329030902830b4b960811b6044820152606401610f32565b60006122288261154e565b60035490915061154a9083906001600160a01b03168360008080612fdf565b6000546001600160a01b031633146122715760405162461bcd60e51b8152600401610f3290613dc5565b60005b815181101561154a576001600e600084848151811061229557612295613f80565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122d181613f96565b915050612274565b6000546001600160a01b031633146123035760405162461bcd60e51b8152600401610f3290613dc5565b602991909155602855565b6000546001600160a01b031633146123385760405162461bcd60e51b8152600401610f3290613dc5565b6001600160a01b03811661239d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f32565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146124225760405162461bcd60e51b8152600401610f3290613dc5565b601580549115156401000000000264ff0000000019909216919091179055565b6001600160a01b0383166124a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f32565b6001600160a01b0382166125085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f32565b6000811161256a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f32565b6001600160a01b038316600090815260096020526040812054819060ff161580156125ae57506001600160a01b03841660009081526009602052604090205460ff16155b80156125c857506000546001600160a01b03868116911614155b80156125e257506000546001600160a01b03858116911614155b601554909150600160381b900460ff16612675576001600160a01b03851660009081526009602052604090205460ff168061263557506001600160a01b03841660009081526009602052604090205460ff165b6126755760405162461bcd60e51b81526020600482015260116024820152702a3930b234b733902737ba102634bb329760791b6044820152606401610f32565b60155465010000000000900460ff161561282a576001600160a01b0385166000908152600e602052604090205460ff16806126c857506001600160a01b0384166000908152600e602052604090205460ff165b806126eb57506001600160a01b03851660009081526009602052604090205460ff165b8061270e57506001600160a01b03841660009081526009602052604090205460ff165b6127505760405162461bcd60e51b81526020600482015260136024820152722cb2b63637bb9021b0b93832ba1027b7363c9760691b6044820152606401610f32565b6001600160a01b0384166000908152600c602052604090205460ff166127cb576017548361277d8661154e565b6127879190613f6d565b11156127cb5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f32565b6001600160a01b0385166000908152600e602052604090205460ff161561282a5760405162461bcd60e51b81526020600482015260136024820152722cb2b63637bb9021b0b93832ba1026b7b2329760691b6044820152606401610f32565b60155465010000000000900460ff1615801561284e575060215462010000900460ff165b801561287257506001600160a01b0385166000908152600e602052604090205460ff165b156128b45760405162461bcd60e51b81526020600482015260126024820152712234b0b6b7b732102437b6321026b7b2329760711b6044820152606401610f32565b601554600160401b900460ff1680156128e557506001600160a01b0385166000908152600d602052604090205460ff165b1561293c576019543a111561293c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610f32565b601c5461294a906005613f6d565b43111561295f576015805460ff191660011790555b600060185461296d3061154e565b6001600160a01b0388166000908152600d6020526040902054911115915060ff161580156129b357506001600160a01b0385166000908152600d602052604090205460ff165b15612a4d5760155460019350610100900460ff161580156129d15750805b80156129f657506001600160a01b0386166000908152600d602052604090205460ff16155b8015612a1b57506001600160a01b03861660009081526009602052604090205460ff16155b8015612a4057506001600160a01b03851660009081526009602052604090205460ff16155b15612a4d57612a4d61189e565b6001600160a01b0386166000908152600d602052604090205460ff16158015612a8f57506001600160a01b0385166000908152600d602052604090205460ff16155b15612ab2576015546301000000900460ff16612aac576001612aaf565b60005b91505b6015546601000000000000900460ff168015612ae757506001600160a01b0385166000908152600c602052604090205460ff16155b15612b475760175484612af98761154e565b612b039190613f6d565b1115612b475760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f32565b6001600160a01b0386166000908152600d602052604090205460ff168015612b8857506001600160a01b0385166000908152600b602052604090205460ff16155b15612b9c57601654841115612b9c57600080fd5b61201586868685876001612fdf565b60008184841115612bcf5760405162461bcd60e51b8152600401610f3291906139d6565b506000612bdc8486613faf565b95945050505050565b6000806000612bf26133f3565b9092509050612c018282612c08565b9250505090565b60006110a283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613428565b600080612c578385613f6d565b9050838110156110a25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f32565b6001600160a01b038316612d0b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f32565b6001600160a01b038216612d6c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f32565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60005b82811015612e37576000848483818110612dec57612dec613f80565b9050602002016020810190612e0191906139b9565b6001600160a01b03166000908152600960205260409020805460ff19168415151790555080612e2f81613f96565b915050612dd0565b50505050565b60005b82811015612e37576000848483818110612e5c57612e5c613f80565b9050602002016020810190612e7191906139b9565b6001600160a01b03166000908152600a60205260409020805460ff19168415151790555080612e9f81613f96565b915050612e40565b6015805461ff001916610100179055612ebf81613456565b6028544790600090612edf90606490612ed99085906135a8565b90612c08565b90506000612f006064612ed9602860010154866135a890919063ffffffff16565b90508115612f4457601e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612f42573d6000803e3d6000fd5b505b8015612f5357612f538161362a565b50506015805461ff00191690555050565b6001600160a01b0382166000908152600d60205260409020805460ff1916821515179055612f928282611619565b612f9c8282611f08565b6001600160a01b0382166000818152600a60205260405183151592917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60155460ff16156130f8576001600160a01b03861660009081526008602052604090205460ff16801561302057506003546001600160a01b03868116911614155b156130605760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b6044820152606401610f32565b601a54601c546130709043613faf565b10156130f8576001600160a01b03851660009081526008602090815260408083208054600160ff199182168117909255600a9093529083208054909216179055601b8054916130be83613f96565b90915550506040516001600160a01b038616907f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e590600090a25b6021805461ffff191684151561ff0019161761010084151502179055600080808080806131248a6136bd565b95509550955095509550955061316886600460008f6001600160a01b03166001600160a01b031681526020019081526020016000205461370c90919063ffffffff16565b6001600160a01b03808e1660009081526004602052604080822093909355908d16815220546131979086612c4a565b6001600160a01b038c166000908152600460205260409020556131b98161374e565b6131c384836137d6565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161320891815260200190565b60405180910390a380156132575760405181815230906001600160a01b038e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b868015613265575060295415155b156133e557602a54604051633974d3b160e01b81526001600160a01b038e8116600483015290911690633974d3b190602401600060405180830381600087803b1580156132b157600080fd5b505af19250505080156132c2575060015b50602a54604051633974d3b160e01b81526001600160a01b038d8116600483015290911690633974d3b190602401600060405180830381600087803b15801561330a57600080fd5b505af192505050801561331b575060015b50602a546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916133549160040190815260200190565b6060604051808303816000875af192505050801561338f575060408051601f3d908101601f1916820190925261338c91810190613fc2565b60015b156133e55760208054604080518681529283018590528201839052606082015232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505050505050505050505050565b60135460125460009182916134088282612c08565b82101561341f576013546012549350935050509091565b90939092509050565b600081836134495760405162461bcd60e51b8152600401610f3291906139d6565b506000612bdc8486613ff0565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061348b5761348b613f80565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156134e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135089190613f50565b8160018151811061351b5761351b613f80565b6001600160a01b0392831660209182029290920101526001546135419130911684612ca9565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac9479061357a908590600090869030904290600401614012565b600060405180830381600087803b15801561359457600080fd5b505af1158015612015573d6000803e3d6000fd5b6000826000036135ba57506000610f02565b60006135c68385613f03565b9050826135d38583613ff0565b146110a25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f32565b602a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613677576040519150601f19603f3d011682016040523d82523d6000602084013e61367c565b606091505b50509050801561154a576040518281527fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19060200160405180910390a15050565b60008060008060008060008060006136d48a6137fa565b92509250925060008060006136f28d86866136ed612be5565b61383c565b919f909e50909c50959a5093985091965092945050505050565b60006110a283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bab565b6000613758612be5565b9050600061376683836135a8565b306000908152600460205260409020549091506137839082612c4a565b30600090815260046020908152604080832093909355600a9052205460ff161561126257306000908152600560205260409020546137c19084612c4a565b30600090815260056020526040902055505050565b6013546137e3908361370c565b6013556014546137f39082612c4a565b6014555050565b6000806000806138098561388c565b90506000613816866138c4565b9050600061382e82613828898661370c565b9061370c565b979296509094509092505050565b600080808061384b88866135a8565b9050600061385988876135a8565b9050600061386788886135a8565b9050600061387982613828868661370c565b939b939a50919850919650505050505050565b602154600090819060ff16156138b55750602254602154610100900460ff16156138b557506024545b6110a26064612ed985846135a8565b602154600090819060ff16156138b55750602354602154610100900460ff1680156138fa5750601554640100000000900460ff16155b156139225750602554601d54839081106139205760265460255461391d91612c4a565b91505b505b602154610100900460ff1680156139435750601554640100000000900460ff165b156138b55760275460255461395791612c4a565b601d5490915083908110613984576027546026546139819161397891613f6d565b60255490612c4a565b91505b506110a26064612ed985846135a8565b6001600160a01b0381168114610f9b57600080fd5b80356139b481613994565b919050565b6000602082840312156139cb57600080fd5b81356110a281613994565b600060208083528351808285015260005b81811015613a03578581018301518582016040015282016139e7565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613a3757600080fd5b8235613a4281613994565b946020939093013593505050565b600080600060608486031215613a6557600080fd5b8335613a7081613994565b92506020840135613a8081613994565b929592945050506040919091013590565b600060208284031215613aa357600080fd5b5035919050565b60008083601f840112613abc57600080fd5b50813567ffffffffffffffff811115613ad457600080fd5b6020830191508360208260051b8501011115613aef57600080fd5b9250929050565b8015158114610f9b57600080fd5b600080600060408486031215613b1957600080fd5b833567ffffffffffffffff811115613b3057600080fd5b613b3c86828701613aaa565b9094509250506020840135613b5081613af6565b809150509250925092565b600060208284031215613b6d57600080fd5b81356110a281613af6565b60008060408385031215613b8b57600080fd5b8235613b9681613994565b91506020830135613ba681613af6565b809150509250929050565b60008060408385031215613bc457600080fd5b50508035926020909101359150565b60008060008060008060c08789031215613bec57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060008060408587031215613c2c57600080fd5b843567ffffffffffffffff80821115613c4457600080fd5b613c5088838901613aaa565b90965094506020870135915080821115613c6957600080fd5b50613c7687828801613aaa565b95989497509550505050565b60008060408385031215613c9557600080fd5b8235613ca081613994565b91506020830135613ba681613994565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215613cd957600080fd5b823567ffffffffffffffff80821115613cf157600080fd5b818501915085601f830112613d0557600080fd5b813581811115613d1757613d17613cb0565b8060051b604051601f19603f83011681018181108582111715613d3c57613d3c613cb0565b604052918252848201925083810185019188831115613d5a57600080fd5b938501935b82851015613d7f57613d70856139a9565b84529385019392850192613d5f565b98975050505050505050565b600181811c90821680613d9f57607f821691505b602082108103613dbf57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613e4b578160001904821115613e3157613e31613dfa565b80851615613e3e57918102915b93841c9390800290613e15565b509250929050565b600082613e6257506001610f02565b81613e6f57506000610f02565b8160018114613e855760028114613e8f57613eab565b6001915050610f02565b60ff841115613ea057613ea0613dfa565b50506001821b610f02565b5060208310610133831016604e8410600b8410161715613ece575081810a610f02565b613ed88383613e10565b8060001904821115613eec57613eec613dfa565b029392505050565b60006110a260ff841683613e53565b8082028115828204841417610f0257610f02613dfa565b600060208284031215613f2c57600080fd5b5051919050565b600060208284031215613f4557600080fd5b81516110a281613af6565b600060208284031215613f6257600080fd5b81516110a281613994565b80820180821115610f0257610f02613dfa565b634e487b7160e01b600052603260045260246000fd5b600060018201613fa857613fa8613dfa565b5060010190565b81810381811115610f0257610f02613dfa565b600080600060608486031215613fd757600080fd5b8351925060208401519150604084015190509250925092565b60008261400d57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140625784516001600160a01b03168352938301939183019160010161403d565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d148733ab6b7df6aac45d741887e16adf987ebf34858d370790c3d203423526664736f6c63430008110033

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

000000000000000000000000a2b5d1327302889a8d821e81cf849305f0dd6105

-----Decoded View---------------
Arg [0] : reserves_ (address): 0xa2B5d1327302889A8D821e81Cf849305F0dD6105

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a2b5d1327302889a8d821e81cf849305f0dd6105


Deployed Bytecode Sourcemap

9977:25610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11193:52;;;;;;;;;;-1:-1:-1;11193:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;706:14:1;;699:22;681:41;;669:2;654:18;11193:52:0;;;;;;;;14832:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15684:220::-;;;;;;;;;;-1:-1:-1;15684:220:0;;;;;:::i;:::-;;:::i;13561:22::-;;;;;;;;;;-1:-1:-1;13561:22:0;;;;;;;;;;;;;;;;;;;;;;;;;1893:25:1;;;1949:2;1934:18;;1927:34;;;;1977:18;;;1970:34;;;;2035:2;2020:18;;2013:34;2078:3;2063:19;;2056:35;2122:3;2107:19;;2100:35;1880:3;1865:19;13561:22:0;1606:535:1;17868:125:0;;;;;;;;;;-1:-1:-1;17868:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17957:28:0;17933:4;17957:28;;;:22;:28;;;;;;;;;17868:125;22365:108;;;;;;;;;;-1:-1:-1;22365:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;22446:18:0;22421:4;22446:18;;;:9;:18;;;;;;;;;22365:108;10994:63;;;;;;;;;;-1:-1:-1;10994:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10400:106;;;;;;;;;;-1:-1:-1;10400:106:0;;;;-1:-1:-1;;;;;10400:106:0;;;;;;-1:-1:-1;;;;;2336:32:1;;;2318:51;;2306:2;2291:18;10400:106:0;2146:229:1;15109:95:0;;;;;;;;;;-1:-1:-1;15189:7:0;;15109:95;;;2526:25:1;;;2514:2;2499:18;15109:95:0;2380:177:1;23580:156:0;;;;;;;;;;;;;:::i;:::-;;15912:317;;;;;;;;;;-1:-1:-1;15912:317:0;;;;;:::i;:::-;;:::i;17442:253::-;;;;;;;;;;-1:-1:-1;17442:253:0;;;;;:::i;:::-;;:::i;20881:151::-;;;;;;;;;;-1:-1:-1;20881:151:0;;;;;:::i;:::-;;:::i;15018:83::-;;;;;;;;;;-1:-1:-1;15084:9:0;;15018:83;;15084:9;;;;3350:36:1;;3338:2;3323:18;15018:83:0;3208:184:1;22800:221:0;;;;;;;;;;-1:-1:-1;22800:221:0;;;;;:::i;:::-;;:::i;16237:218::-;;;;;;;;;;-1:-1:-1;16237:218:0;;;;;:::i;:::-;;:::i;17273:161::-;;;;;;;;;;-1:-1:-1;17273:161:0;;;;;:::i;:::-;;:::i;10513:41::-;;;;;;;;;;-1:-1:-1;10513:41:0;;;;-1:-1:-1;;;;;10513:41:0;;;11642:40;;;;;;;;;;-1:-1:-1;11642:40:0;;;;;;;;;;;28560:130;;;;;;;;;;-1:-1:-1;28560:130:0;;;;;:::i;:::-;;:::i;18253:137::-;;;;;;;;;;-1:-1:-1;18253:137:0;;;;;:::i;:::-;;:::i;23365:207::-;;;;;;;;;;-1:-1:-1;23365:207:0;;;;;:::i;:::-;;:::i;28429:123::-;;;;;;;;;;-1:-1:-1;28429:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;28517:27:0;28493:4;28517:27;;;:18;:27;;;;;;;;;28429:123;13590:32;;;;;;;;;;-1:-1:-1;13590:32:0;;;;;;;;;;;;;5091:25:1;;;5147:2;5132:18;;5125:34;;;;5064:18;13590:32:0;4917:248:1;20714:159:0;;;;;;;;;;-1:-1:-1;20714:159:0;;;;;:::i;:::-;;:::i;12259:52::-;;;;;;;;;;;;;;;;23917:229;;;;;;;;;;-1:-1:-1;23917:229:0;;;;;:::i;:::-;;:::i;15212:138::-;;;;;;;;;;-1:-1:-1;15212:138:0;;;;;:::i;:::-;;:::i;8966:148::-;;;;;;;;;;;;;:::i;17703:157::-;;;;;;;;;;-1:-1:-1;17703:157:0;;;;;:::i;:::-;;:::i;10561:23::-;;;;;;;;;;-1:-1:-1;10561:23:0;;;;-1:-1:-1;;;;;10561:23:0;;;20037:240;;;;;;;;;;-1:-1:-1;20037:240:0;;;;;:::i;:::-;;:::i;22036:142::-;;;;;;;;;;-1:-1:-1;22036:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;22135:34:0;22110:4;22135:34;;;:25;:34;;;;;;;;;22036:142;21040:177;;;;;;;;;;-1:-1:-1;21040:177:0;;;;;:::i;:::-;;:::i;12401:70::-;;;;;;;;;;-1:-1:-1;12401:70:0;;;;-1:-1:-1;;;;;12401:70:0;;;31828:209;;;;;;;;;;-1:-1:-1;31828:209:0;;;;;:::i;:::-;;:::i;8747:84::-;;;;;;;;;;-1:-1:-1;8790:7:0;8817:6;-1:-1:-1;;;;;8817:6:0;8747:84;;11914:53;;;;;;;;;;;;;;;;21225:197;;;;;;;;;;-1:-1:-1;21225:197:0;;;;;:::i;:::-;;:::i;24560:290::-;;;;;;;;;;;;;:::i;14923:87::-;;;;;;;;;;;;;:::i;11064:58::-;;;;;;;;;;-1:-1:-1;11064:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32616:243;;;;;;;;;;-1:-1:-1;32616:243:0;;;;;:::i;:::-;;:::i;21776:252::-;;;;;;;;;;-1:-1:-1;21776:252:0;;;;;:::i;:::-;;:::i;12478:39::-;;;;;;;;;;;;;;;;16463:269;;;;;;;;;;-1:-1:-1;16463:269:0;;;;;:::i;:::-;;:::i;12318:76::-;;;;;;;;;;-1:-1:-1;12318:76:0;;;;-1:-1:-1;;;;;12318:76:0;;;15358:167;;;;;;;;;;-1:-1:-1;15358:167:0;;;;;:::i;:::-;;:::i;11974:57::-;;;;;;;;;;;;;;;;24154:398;;;;;;;;;;-1:-1:-1;24154:398:0;;;;;:::i;:::-;;:::i;20518:98::-;;;;;;;;;;-1:-1:-1;20518:98:0;;;;;:::i;:::-;;:::i;28698:91::-;;;;;;;;;;;;;:::i;11129:57::-;;;;;;;;;;-1:-1:-1;11129:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18515:507;;;;;;;;;;;;;:::i;11841:33::-;;;;;;;;;;-1:-1:-1;11841:33:0;;;;-1:-1:-1;;;11841:33:0;;;;;;22186:171;;;;;;;;;;-1:-1:-1;22186:171:0;;;;;:::i;:::-;;:::i;11726:38::-;;;;;;;;;;-1:-1:-1;11726:38:0;;;;;;;;;;;20624:82;;;;;;;;;;;;;:::i;23225:132::-;;;;;;;;;;-1:-1:-1;23225:132:0;;;;;:::i;:::-;;:::i;20285:225::-;;;;;;;;;;-1:-1:-1;20285:225:0;;;;;:::i;:::-;;:::i;19274:570::-;;;;;;;;;;-1:-1:-1;19274:570:0;;;;;:::i;:::-;;:::i;16740:525::-;;;;;;;;;;-1:-1:-1;16740:525:0;;;;;:::i;:::-;;:::i;15533:143::-;;;;;;;;;;-1:-1:-1;15533:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;15641:18:0;;;15614:7;15641:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15533:143;22482:310;;;;;;;;;;-1:-1:-1;22482:310:0;;;;;:::i;:::-;;:::i;12038:58::-;;;;;;;;;;;;;;;;12175:32;;;;;;;;;;;;;;;;12215:37;;;;;;;;;;;;;;;;23029:188;;;;;;;;;;-1:-1:-1;23029:188:0;;;;;:::i;:::-;;:::i;19852:177::-;;;;;;;;;;-1:-1:-1;19852:177:0;;;;;:::i;:::-;;:::i;9122:244::-;;;;;;;;;;-1:-1:-1;9122:244:0;;;;;:::i;:::-;;:::i;18398:109::-;;;;;;;;;;-1:-1:-1;18398:109:0;;;;;:::i;:::-;;:::i;11881:26::-;;;;;;;;;;-1:-1:-1;11881:26:0;;;;-1:-1:-1;;;11881:26:0;;;;;;11570:36;;;;;;;;;;-1:-1:-1;11570:36:0;;;;;;;;14832:83;14869:13;14902:5;14895:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14832:83;:::o;15684:220::-;4987:10;15759:4;15776:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15776:34:0;;;;;;;;;;;:43;;;15835:39;;2526:25:1;;;15759:4:0;;15776:34;;4987:10;;15835:39;;2499:18:1;15835:39:0;;;;;;;-1:-1:-1;15892:4:0;15684:220;;;;;:::o;23580:156::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;;;;;;;;;23651:16:::1;::::0;23643:64:::1;::::0;23632:6:::1;::::0;-1:-1:-1;;;;;23651:16:0::1;::::0;23681:21:::1;::::0;23632:6;23643:64;23632:6;23643:64;23681:21;23651:16;23643:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23631:76;;;23726:1;23718:10;;;::::0;::::1;;23620:116;23580:156::o:0;15912:317::-;16010:4;16027:36;16037:6;16045:9;16056:6;16027:9;:36::i;:::-;16110:89;16148:6;16110:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16110:19:0;;;;;;:11;:19;;;;;;;;4987:10;16110:33;;;;;;;;;;:37;:89::i;:::-;-1:-1:-1;;;;;16074:19:0;;;;;;;;:11;:19;;;;;;;;4987:10;16074:33;;;;;;;:125;;;;-1:-1:-1;16217:4:0;;15912:317;-1:-1:-1;;15912:317:0:o;17442:253::-;17508:7;17547;;17536;:18;;17528:73;;;;-1:-1:-1;;;17528:73:0;;9925:2:1;17528:73:0;;;9907:21:1;9964:2;9944:18;;;9937:30;10003:34;9983:18;;;9976:62;-1:-1:-1;;;10054:18:1;;;10047:40;10104:19;;17528:73:0;9723:406:1;17528:73:0;17612:19;17635:10;:8;:10::i;:::-;17612:33;-1:-1:-1;17663:24:0;:7;17612:33;17663:11;:24::i;:::-;17656:31;17442:253;-1:-1:-1;;;17442:253:0:o;20881:151::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;20968:7:::1;20958:6;:17;;20950:26;;;::::0;::::1;;21015:9;::::0;21010:14:::1;::::0;21015:9:::1;;21010:2;:14;:::i;:::-;21001:23;::::0;:6;:23:::1;:::i;:::-;20987:11;:37:::0;-1:-1:-1;20881:151:0:o;22800:221::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22880:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;22872:64;;;::::0;-1:-1:-1;;;22872:64:0;;12024:2:1;22872:64:0::1;::::0;::::1;12006:21:1::0;12063:2;12043:18;;;12036:30;12102:34;12082:18;;;12075:62;-1:-1:-1;;;12153:18:1;;;12146:31;12194:19;;22872:64:0::1;11822:397:1::0;22872:64:0::1;-1:-1:-1::0;;;;;22948:18:0;::::1;22969:5;22948:18:::0;;;:9:::1;:18;::::0;;;;;:26;;-1:-1:-1;;22948:26:0::1;::::0;;22991:22;::::1;::::0;22969:5;22991:22:::1;22800:221:::0;:::o;16237:218::-;4987:10;16325:4;16374:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16374:34:0;;;;;;;;;;16325:4;;16342:83;;16365:7;;16374:50;;16413:10;16374:38;:50::i;:::-;16342:8;:83::i;:::-;-1:-1:-1;16443:4:0;16237:218;;;;:::o;17273:161::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;17385:41:::1;17398:9;;17409:16;17385:12;:41::i;:::-;17273:161:::0;;;:::o;28560:130::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;28649:17:::1;:33:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;28649:33:0;;::::1;::::0;;;::::1;::::0;;28560:130::o;18253:137::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;18373:9:::1;::::0;18368:14:::1;::::0;18373:9:::1;;18368:2;:14;:::i;:::-;18351:31;::::0;:14;:31:::1;:::i;:::-;18335:13;:47:::0;-1:-1:-1;18253:137:0:o;23365:207::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23452:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;::::1;;23444:38;;;::::0;::::1;;-1:-1:-1::0;;;;;23493:29:0;::::1;23525:5;23493:29:::0;;;:20:::1;:29;::::0;;;;;:37;;-1:-1:-1;;23493:37:0::1;::::0;;23546:18;::::1;::::0;23525:5;23546:18:::1;23365:207:::0;:::o;20714:159::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;20805:7:::1;20795:6;:17;;20787:26;;;::::0;::::1;;20856:9;::::0;20851:14:::1;::::0;20856:9:::1;;20851:2;:14;:::i;:::-;20842:23;::::0;:6;:23:::1;:::i;:::-;20824:15;:41:::0;-1:-1:-1;20714:159:0:o;23917:229::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;24044:43:::1;::::0;-1:-1:-1;;;24044:43:0;;24081:4:::1;24044:43;::::0;::::1;2318:51:1::0;23995:6:0::1;::::0;-1:-1:-1;;;;;24004:27:0;::::1;::::0;::::1;::::0;24032:10:::1;::::0;24004:27;;24044:28:::1;::::0;2291:18:1;;24044:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24004:84;::::0;-1:-1:-1;;;;;;24004:84:0::1;::::0;;;;;;-1:-1:-1;;;;;12605:32:1;;;24004:84:0::1;::::0;::::1;12587:51:1::0;12654:18;;;12647:34;12560:18;;24004:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23995:93;;24107:1;24099:39;;;::::0;-1:-1:-1;;;24099:39:0;;13144:2:1;24099:39:0::1;::::0;::::1;13126:21:1::0;13183:2;13163:18;;;13156:30;13222:27;13202:18;;;13195:55;13267:18;;24099:39:0::1;12942:349:1::0;24099:39:0::1;23984:162;23917:229:::0;:::o;15212:138::-;-1:-1:-1;;;;;15325:16:0;;15278:7;15325:16;;;:7;:16;;;;;;15305:37;;:19;:37::i;8966:148::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;9073:1:::1;9057:6:::0;;9036:40:::1;::::0;-1:-1:-1;;;;;9057:6:0;;::::1;::::0;9036:40:::1;::::0;9073:1;;9036:40:::1;9104:1;9087:19:::0;;-1:-1:-1;;;;;;9087:19:0::1;::::0;;8966:148::o;17703:157::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;17813:39:::1;17830:9;;17841:10;17813:16;:39::i;20037:240::-:0;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20155:40:0;::::1;;::::0;;;:31:::1;:40;::::0;;;;;;;;:51;;-1:-1:-1;;20155:51:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20222:47;;681:41:1;;;20222:47:0::1;::::0;654:18:1;20222:47:0::1;;;;;;;;20037:240:::0;;:::o;21040:177::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;21128:8:::1;::::0;-1:-1:-1;;;;;21128:24:0;;::::1;:8:::0;::::1;:24:::0;21120:55:::1;;;::::0;-1:-1:-1;;;21120:55:0;;13498:2:1;21120:55:0::1;::::0;::::1;13480:21:1::0;13537:2;13517:18;;;13510:30;-1:-1:-1;;;13556:18:1;;;13549:48;13614:18;;21120:55:0::1;13296:342:1::0;21120:55:0::1;21186:8;:23:::0;;-1:-1:-1;;;;;;21186:23:0::1;-1:-1:-1::0;;;;;21186:23:0;;;::::1;::::0;;;::::1;::::0;;21040:177::o;31828:209::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;31926:16:::1;;31914:8;:28:::0;31906:85:::1;;;::::0;-1:-1:-1;;;31906:85:0;;13845:2:1;31906:85:0::1;::::0;::::1;13827:21:1::0;13884:2;13864:18;;;13857:30;13923:34;13903:18;;;13896:62;-1:-1:-1;;;13974:18:1;;;13967:42;14026:19;;31906:85:0::1;13643:408:1::0;31906:85:0::1;32002:16;:27:::0;31828:209::o;21225:197::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;21315:16:::1;::::0;-1:-1:-1;;;;;21315:33:0;;::::1;:16:::0;::::1;:33:::0;21307:64:::1;;;::::0;-1:-1:-1;;;21307:64:0;;13498:2:1;21307:64:0::1;::::0;::::1;13480:21:1::0;13537:2;13517:18;;;13510:30;-1:-1:-1;;;13556:18:1;;;13549:48;13614:18;;21307:64:0::1;13296:342:1::0;21307:64:0::1;21382:16;:32:::0;;-1:-1:-1;;;;;;21382:32:0::1;-1:-1:-1::0;;;;;21382:32:0;;;::::1;::::0;;;::::1;::::0;;21225:197::o;24560:290::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;24631:28:::1;24662:24;24680:4;24662:9;:24::i;:::-;24631:55:::0;-1:-1:-1;24700:24:0;;24697:146:::1;;24793:38;24810:20;24793:16;:38::i;14923:87::-:0;14962:13;14995:7;14988:14;;;;;:::i;32616:243::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;32750:4:::1;-1:-1:-1::0;;;;;32715:40:0;::::1;::::0;32707:66:::1;;;::::0;-1:-1:-1;;;32707:66:0;;14258:2:1;32707:66:0::1;::::0;::::1;14240:21:1::0;14297:2;14277:18;;;14270:30;-1:-1:-1;;;14316:18:1;;;14309:44;14370:18;;32707:66:0::1;14056:338:1::0;32707:66:0::1;32784:15;:67:::0;;-1:-1:-1;;;;;;32784:67:0::1;-1:-1:-1::0;;;;;32784:67:0;;;::::1;::::0;;;::::1;::::0;;32616:243::o;21776:252::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;21882:13:::1;::::0;-1:-1:-1;;;;;21882:13:0;;::::1;21874:21:::0;;::::1;::::0;21866:100:::1;;;::::0;-1:-1:-1;;;21866:100:0;;14601:2:1;21866:100:0::1;::::0;::::1;14583:21:1::0;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;14750:27;14730:18;;;14723:55;14795:19;;21866:100:0::1;14399:421:1::0;21866:100:0::1;21979:41;22008:4;22014:5;21979:28;:41::i;16463:269::-:0;16556:4;16573:129;4987:10;16596:7;16605:96;16644:15;16605:96;;;;;;;;;;;;;;;;;4987:10;16605:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16605:34:0;;;;;;;;;;;;:38;:96::i;15358:167::-;15436:4;15453:42;4987:10;15477:9;15488:6;15453:9;:42::i;24154:398::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;24265:13:::1;::::0;-1:-1:-1;;;24265:13:0;::::1;;;24264:14;24256:23;;;::::0;::::1;;24311:12;24290:18;:33:::0;24334:13:::1;:30:::0;;;24391:23:::1;:14:::0;24408:6:::1;24391:23;:::i;:::-;24375:13;:39:::0;-1:-1:-1;;24425:14:0::1;:21:::0;;-1:-1:-1;;24522:22:0;;;;;24154:398::o;20518:98::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;20585:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20585:23:0;;::::1;::::0;;;::::1;::::0;;20518:98::o;28698:91::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;28767:6:::1;:14:::0;;-1:-1:-1;;28767:14:0::1;::::0;;28698:91::o;18515:507::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;18577:13:::1;::::0;-1:-1:-1;;;;;18577:13:0::1;:27:::0;18569:73:::1;;;::::0;-1:-1:-1;;;18569:73:0;;15027:2:1;18569:73:0::1;::::0;::::1;15009:21:1::0;15066:2;15046:18;;;15039:30;15105:34;15085:18;;;15078:62;-1:-1:-1;;;15156:18:1;;;15149:32;15198:19;;18569:73:0::1;14825:398:1::0;18569:73:0::1;18687:15;;;;;;;;;-1:-1:-1::0;;;;;18687:15:0::1;-1:-1:-1::0;;;;;18687:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18669:55:0::1;;18733:4;18740:15;;;;;;;;;-1:-1:-1::0;;;;;18740:15:0::1;-1:-1:-1::0;;;;;18740:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18669:94;::::0;-1:-1:-1;;;;;;18669:94:0::1;::::0;;;;;;-1:-1:-1;;;;;15714:15:1;;;18669:94:0::1;::::0;::::1;15696:34:1::0;15766:15;;15746:18;;;15739:43;15631:18;;18669:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18653:13;:110:::0;;-1:-1:-1;;;;;;18653:110:0::1;-1:-1:-1::0;;;;;18653:110:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;18774:37:0;;;:22:::1;:37;::::0;;;;:44;;-1:-1:-1;;18774:44:0::1;-1:-1:-1::0;18774:44:0;;::::1;::::0;;;18863:13;;18829:55:::1;::::0;18863:13:::1;::::0;18829:25:::1;:55::i;:::-;18924:13;::::0;18895:50:::1;::::0;-1:-1:-1;;;;;18924:13:0::1;::::0;18895:20:::1;:50::i;:::-;18993:13;::::0;18956:58:::1;::::0;-1:-1:-1;;;;;18993:13:0::1;::::0;18956:28:::1;:58::i;:::-;18515:507::o:0;22186:171::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;22263:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22263:32:0;;::::1;;::::0;;22311:38:::1;::::0;::::1;::::0;::::1;::::0;22287:8;706:14:1;699:22;681:41;;669:2;654:18;;541:187;22311:38:0::1;;;;;;;;22186:171:::0;:::o;20624:82::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;20676:14:::1;:22:::0;;-1:-1:-1;;20676:22:0::1;::::0;;20624:82::o;23225:132::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;23299:13:::1;::::0;-1:-1:-1;;;23299:13:0;::::1;;;23298:14;23290:23;;;::::0;::::1;;23324:15;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23324:24:0;;::::1;::::0;;;::::1;::::0;;23225:132::o;20285:225::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20398:35:0;::::1;;::::0;;;:26:::1;:35;::::0;;;;;;;;:46;;-1:-1:-1;;20398:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20460:42;;681:41:1;;;20460:42:0::1;::::0;654:18:1;20460:42:0::1;541:187:1::0;19274:570:0;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;19458:7:::1;:43:::0;;;19512:14;:23;;;19546:25;:45;;;19602:15;:25;;;19638:20;:35;;;19684:18;:31;;;19833:2:::1;19705:10:::0;19661:12;19620:7;19574:17;19735:25:::1;19529:6:::0;19485:16;19735:25:::1;:::i;:::-;:45;;;;:::i;:::-;:65;;;;:::i;:::-;:80;;;;:::i;:::-;:93;;;;:::i;:::-;19734:101;;19726:110;;;::::0;::::1;;19274:570:::0;;;;;;:::o;16740:525::-;4987:10;16837:16;16876:32;;;:18;:32;;;;;;;;16868:90;;;;-1:-1:-1;;;16868:90:0;;16125:2:1;16868:90:0;;;16107:21:1;16164:2;16144:18;;;16137:30;16203:34;16183:18;;;16176:62;-1:-1:-1;;;16254:18:1;;;16247:43;16307:19;;16868:90:0;15923:409:1;16868:90:0;16977:35;;;16969:90;;;;-1:-1:-1;;;16969:90:0;;16539:2:1;16969:90:0;;;16521:21:1;16578:2;16558:18;;;16551:30;16617:34;16597:18;;;16590:62;-1:-1:-1;;;16668:18:1;;;16661:40;16718:19;;16969:90:0;16337:406:1;16969:90:0;17076:28;;;17070:188;;;17120:98;4987:10;17149;;17160:8;17149:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17171:7;;17179:8;17171:17;;;;;;;:::i;:::-;;;;;;;17191:5;17171:25;;;;:::i;:::-;17198:5;17205;17212;17120:14;:98::i;:::-;17233:13;17245:1;17233:13;;:::i;:::-;;;17070:188;;;16826:439;16740:525;;;;:::o;22482:310::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22557:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;22549:27;;;::::0;::::1;;-1:-1:-1::0;;;;;22596:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;::::1;;22595:35;22587:64;;;::::0;-1:-1:-1;;;22587:64:0;;17082:2:1;22587:64:0::1;::::0;::::1;17064:21:1::0;17121:2;17101:18;;;17094:30;-1:-1:-1;;;17140:18:1;;;17133:46;17196:18;;22587:64:0::1;16880:340:1::0;22587:64:0::1;22662:14;22679:18;22689:7;22679:9;:18::i;:::-;22732:8;::::0;22662:35;;-1:-1:-1;22708:62:0::1;::::0;22723:7;;-1:-1:-1;;;;;22732:8:0::1;22662:35:::0;22732:8:::1;::::0;;22708:14:::1;:62::i;23029:188::-:0;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;23115:9:::1;23110:100;23134:2;:9;23130:1;:13;23110:100;;;23195:4;23165:20;:27;23186:2;23189:1;23186:5;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;23165:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;23165:27:0;:34;;-1:-1:-1;;23165:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23145:3;::::1;::::0;::::1;:::i;:::-;;;;23110:100;;19852:177:::0;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;19944:21;:32;;;;:12:::1;19987:34:::0;19852:177::o;9122:244::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9211:22:0;::::1;9203:73;;;::::0;-1:-1:-1;;;9203:73:0;;17567:2:1;9203:73:0::1;::::0;::::1;17549:21:1::0;17606:2;17586:18;;;17579:30;17645:34;17625:18;;;17618:62;-1:-1:-1;;;17696:18:1;;;17689:36;17742:19;;9203:73:0::1;17365:402:1::0;9203:73:0::1;9313:6;::::0;;9292:38:::1;::::0;-1:-1:-1;;;;;9292:38:0;;::::1;::::0;9313:6;::::1;::::0;9292:38:::1;::::0;::::1;9341:6;:17:::0;;-1:-1:-1;;;;;;9341:17:0::1;-1:-1:-1::0;;;;;9341:17:0;;;::::1;::::0;;;::::1;::::0;;9122:244::o;18398:109::-;8879:6;;-1:-1:-1;;;;;8879:6:0;4987:10;8879:22;8871:67;;;;-1:-1:-1;;;8871:67:0;;;;;;;:::i;:::-;18472:19:::1;:27:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;18472:27:0;;::::1;::::0;;;::::1;::::0;;18398:109::o;29142:2412::-;-1:-1:-1;;;;;29230:18:0;;29222:68;;;;-1:-1:-1;;;29222:68:0;;17974:2:1;29222:68:0;;;17956:21:1;18013:2;17993:18;;;17986:30;18052:34;18032:18;;;18025:62;-1:-1:-1;;;18103:18:1;;;18096:35;18148:19;;29222:68:0;17772:401:1;29222:68:0;-1:-1:-1;;;;;29309:16:0;;29301:64;;;;-1:-1:-1;;;29301:64:0;;18380:2:1;29301:64:0;;;18362:21:1;18419:2;18399:18;;;18392:30;18458:34;18438:18;;;18431:62;-1:-1:-1;;;18509:18:1;;;18502:33;18552:19;;29301:64:0;18178:399:1;29301:64:0;29393:1;29384:6;:10;29376:64;;;;-1:-1:-1;;;29376:64:0;;18784:2:1;29376:64:0;;;18766:21:1;18823:2;18803:18;;;18796:30;18862:34;18842:18;;;18835:62;-1:-1:-1;;;18913:18:1;;;18906:39;18962:19;;29376:64:0;18582:405:1;29376:64:0;-1:-1:-1;;;;;29498:24:0;;29451:11;29498:24;;;:18;:24;;;;;;29451:11;;29498:24;;29497:25;:52;;;;-1:-1:-1;;;;;;29527:22:0;;;;;;:18;:22;;;;;;;;29526:23;29497:52;:71;;;;-1:-1:-1;8790:7:0;8817:6;-1:-1:-1;;;;;29553:15:0;;;8817:6;;29553:15;;29497:71;:88;;;;-1:-1:-1;8790:7:0;8817:6;-1:-1:-1;;;;;29572:13:0;;;8817:6;;29572:13;;29497:88;29602:13;;29481:104;;-1:-1:-1;;;;29602:13:0;;;;29598:126;;-1:-1:-1;;;;;29640:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;29668:22:0;;;;;;:18;:22;;;;;;;;29640:50;29632:80;;;;-1:-1:-1;;;29632:80:0;;19194:2:1;29632:80:0;;;19176:21:1;19233:2;19213:18;;;19206:30;-1:-1:-1;;;19252:18:1;;;19245:47;19309:18;;29632:80:0;18992:341:1;29632:80:0;29740:15;;;;;;;29736:478;;;-1:-1:-1;;;;;29780:26:0;;;;;;:20;:26;;;;;;;;;:54;;-1:-1:-1;;;;;;29810:24:0;;;;;;:20;:24;;;;;;;;29780:54;:96;;;-1:-1:-1;;;;;;29852:24:0;;;;;;:18;:24;;;;;;;;29780:96;:122;;;-1:-1:-1;;;;;;29880:22:0;;;;;;:18;:22;;;;;;;;29780:122;29772:153;;;;-1:-1:-1;;;29772:153:0;;19540:2:1;29772:153:0;;;19522:21:1;19579:2;19559:18;;;19552:30;-1:-1:-1;;;19598:18:1;;;19591:49;19657:18;;29772:153:0;19338:343:1;29772:153:0;-1:-1:-1;;;;;29944:30:0;;;;;;:26;:30;;;;;;;;29940:140;;30025:15;;30015:6;29999:13;30009:2;29999:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;29991:73;;;;-1:-1:-1;;;29991:73:0;;19888:2:1;29991:73:0;;;19870:21:1;19927:2;19907:18;;;19900:30;-1:-1:-1;;;19946:18:1;;;19939:49;20005:18;;29991:73:0;19686:343:1;29991:73:0;-1:-1:-1;;;;;30103:26:0;;;;;;:20;:26;;;;;;;;30099:85;;;30133:30;;-1:-1:-1;;;30133:30:0;;20236:2:1;30133:30:0;;;20218:21:1;20275:2;20255:18;;;20248:30;-1:-1:-1;;;20294:18:1;;;20287:49;20353:18;;30133:30:0;20034:343:1;30099:85:0;30228:15;;;;;;;30227:16;:26;;;;-1:-1:-1;30247:6:0;;;;;;;30227:26;:56;;;;-1:-1:-1;;;;;;30257:26:0;;;;;;:20;:26;;;;;;;;30227:56;30224:105;;;30287:29;;-1:-1:-1;;;30287:29:0;;20584:2:1;30287:29:0;;;20566:21:1;20623:2;20603:18;;;20596:30;-1:-1:-1;;;20642:18:1;;;20635:48;20700:18;;30287:29:0;20382:342:1;30224:105:0;30345:14;;-1:-1:-1;;;30345:14:0;;;;:49;;;;-1:-1:-1;;;;;;30363:31:0;;;;;;:25;:31;;;;;;;;30345:49;30341:146;;;30433:13;;30418:11;:28;;30410:65;;;;-1:-1:-1;;;30410:65:0;;20931:2:1;30410:65:0;;;20913:21:1;20970:2;20950:18;;;20943:30;21009:26;20989:18;;;20982:54;21053:18;;30410:65:0;20729:348:1;30410:65:0;30519:18;;:22;;30540:1;30519:22;:::i;:::-;30504:12;:37;30501:91;;;30557:16;:23;;-1:-1:-1;;30557:23:0;30576:4;30557:23;;;30501:91;30618:12;30661:18;;30633:24;30651:4;30633:9;:24::i;:::-;-1:-1:-1;;;;;30694:31:0;;;;;;:25;:31;;;;;;30633:46;-1:-1:-1;30633:46:0;;-1:-1:-1;30694:31:0;;30693:32;:65;;;;-1:-1:-1;;;;;;30729:29:0;;;;;;:25;:29;;;;;;;;30693:65;30690:306;;;30808:16;;30785:4;;-1:-1:-1;30808:16:0;;;;;30807:17;:28;;;;;30828:7;30807:28;:64;;;;-1:-1:-1;;;;;;30840:31:0;;;;;;:25;:31;;;;;;;;30839:32;30807:64;:93;;;;-1:-1:-1;;;;;;30876:24:0;;;;;;:18;:24;;;;;;;;30875:25;30807:93;:120;;;;-1:-1:-1;;;;;;30905:22:0;;;;;;:18;:22;;;;;;;;30904:23;30807:120;30804:181;;;30944:25;:23;:25::i;:::-;-1:-1:-1;;;;;31012:31:0;;;;;;:25;:31;;;;;;;;31011:32;:66;;;;-1:-1:-1;;;;;;31048:29:0;;;;;;:25;:29;;;;;;;;31047:30;31011:66;31008:141;;;31105:17;;;;;;;:32;;31133:4;31105:32;;;31125:5;31105:32;31094:43;;31008:141;31165:15;;;;;;;:50;;;;-1:-1:-1;;;;;;31185:30:0;;;;;;:26;:30;;;;;;;;31184:31;31165:50;31161:156;;;31266:15;;31256:6;31240:13;31250:2;31240:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;31232:73;;;;-1:-1:-1;;;31232:73:0;;19888:2:1;31232:73:0;;;19870:21:1;19927:2;19907:18;;;19900:30;-1:-1:-1;;;19946:18:1;;;19939:49;20005:18;;31232:73:0;19686:343:1;31232:73:0;-1:-1:-1;;;;;31332:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;31368:35:0;;;;;;:31;:35;;;;;;;;31367:36;31332:71;31329:136;;;31438:11;;31428:6;:21;;31420:30;;;;;;31489:57;31504:4;31510:2;31514:6;31522:8;31532:6;31541:4;31489:14;:57::i;3377:192::-;3463:7;3499:12;3491:6;;;;3483:29;;;;-1:-1:-1;;;3483:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3523:9:0;3535:5;3539:1;3535;:5;:::i;:::-;3523:17;3377:192;-1:-1:-1;;;;;3377:192:0:o;26252:163::-;26293:7;26314:15;26331;26350:19;:17;:19::i;:::-;26313:56;;-1:-1:-1;26313:56:0;-1:-1:-1;26387:20:0;26313:56;;26387:11;:20::i;:::-;26380:27;;;;26252:163;:::o;4056:132::-;4114:7;4141:39;4145:1;4148;4141:39;;;;;;;;;;;;;;;;;:3;:39::i;3044:181::-;3102:7;;3134:5;3138:1;3134;:5;:::i;:::-;3122:17;;3163:1;3158;:6;;3150:46;;;;-1:-1:-1;;;3150:46:0;;21417:2:1;3150:46:0;;;21399:21:1;21456:2;21436:18;;;21429:30;21495:29;21475:18;;;21468:57;21542:18;;3150:46:0;21215:351:1;28797:337:0;-1:-1:-1;;;;;28890:19:0;;28882:68;;;;-1:-1:-1;;;28882:68:0;;21773:2:1;28882:68:0;;;21755:21:1;21812:2;21792:18;;;21785:30;21851:34;21831:18;;;21824:62;-1:-1:-1;;;21902:18:1;;;21895:34;21946:19;;28882:68:0;21571:400:1;28882:68:0;-1:-1:-1;;;;;28969:21:0;;28961:68;;;;-1:-1:-1;;;28961:68:0;;22178:2:1;28961:68:0;;;22160:21:1;22217:2;22197:18;;;22190:30;22256:34;22236:18;;;22229:62;-1:-1:-1;;;22307:18:1;;;22300:32;22349:19;;28961:68:0;21976:398:1;28961:68:0;-1:-1:-1;;;;;29042:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29094:32;;2526:25:1;;;29094:32:0;;2499:18:1;29094:32:0;;;;;;;28797:337;;;:::o;19030:236::-;19117:9;19112:147;19132:20;;;19112:147;;;19174:12;19189:9;;19199:1;19189:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19216:24:0;;;;;:18;:24;;;;;:31;;-1:-1:-1;;19216:31:0;;;;;;;-1:-1:-1;19154:3:0;;;;:::i;:::-;;;;19112:147;;;;19030:236;;;:::o;18001:244::-;18092:9;18087:151;18107:20;;;18087:151;;;18149:12;18164:9;;18174:1;18164:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18191:28:0;;;;;:22;:28;;;;;:35;;-1:-1:-1;;18191:35:0;;;;;;;-1:-1:-1;18129:3:0;;;;:::i;:::-;;;;18087:151;;32045:563;10314:16;:23;;-1:-1:-1;;10314:23:0;;;;;32132:38:::1;32149:20:::0;32132:16:::1;:38::i;:::-;32284:12;:22:::0;32207:21:::1;::::0;32181:23:::1;::::0;32264:52:::1;::::0;32312:3:::1;::::0;32264:43:::1;::::0;32207:21;;32264:19:::1;:43::i;:::-;:47:::0;::::1;:52::i;:::-;32239:77;;32327:21;32351:51;32398:3;32351:42;32371:12;:21;;;32351:15;:19;;:42;;;;:::i;:51::-;32327:75:::0;-1:-1:-1;32416:18:0;;32413:99:::1;;32458:16;::::0;32450:50:::1;::::0;-1:-1:-1;;;;;32458:16:0;;::::1;::::0;32450:50;::::1;;;::::0;32485:14;;32458:16:::1;32450:50:::0;32458:16;32450:50;32485:14;32458:16;32450:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32413:99;32525:17:::0;;32522:79:::1;;32558:31;32575:13;32558:16;:31::i;:::-;-1:-1:-1::0;;10360:16:0;:24;;-1:-1:-1;;10360:24:0;;;-1:-1:-1;;32045:563:0:o;21430:338::-;-1:-1:-1;;;;;21513:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21513:39:0;;;;;;;21563:47;21513:31;:39;21563:25;:47::i;:::-;21621:42;21650:4;21657:5;21621:20;:42::i;:::-;-1:-1:-1;;;;;21674:28:0;;;;;;:22;:28;;;21720:40;;;;;21674:28;21720:40;;;21430:338;;:::o;33762:1822::-;33916:16;;;;33912:562;;;-1:-1:-1;;;;;22446:18:0;;22421:4;22446:18;;;:9;:18;;;;;;;;34018:41;;;;-1:-1:-1;34051:8:0;;-1:-1:-1;;;;;34038:21:0;;;34051:8;;34038:21;;34018:41;34014:110;;;34081:26;;-1:-1:-1;;;34081:26:0;;22581:2:1;34081:26:0;;;22563:21:1;22620:2;22600:18;;;22593:30;-1:-1:-1;;;22639:18:1;;;22632:46;22695:18;;34081:26:0;22379:340:1;34014:110:0;34180:13;;34159:18;;34144:33;;:12;:33;:::i;:::-;:49;34140:320;;;-1:-1:-1;;;;;34222:20:0;;;;;;:9;:20;;;;;;;;:27;;34245:4;-1:-1:-1;;34222:27:0;;;;;;;;34276:22;:33;;;;;;:40;;;;;;;;34369:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;34417:23:0;;-1:-1:-1;;;;;34417:23:0;;;;;;;;34140:320;34502:10;:21;;-1:-1:-1;;34534:18:0;34502:21;;;-1:-1:-1;;34534:18:0;;34502:21;34534:18;;;;;;;-1:-1:-1;;;;;;34683:19:0;34694:7;34683:10;:19::i;:::-;34565:137;;;;;;;;;;;;34731:28;34751:7;34731;:15;34739:6;-1:-1:-1;;;;;34731:15:0;-1:-1:-1;;;;;34731:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;34713:15:0;;;;;;;:7;:15;;;;;;:46;;;;34791:18;;;;;;;:39;;34814:15;34791:22;:39::i;:::-;-1:-1:-1;;;;;34770:18:0;;;;;;:7;:18;;;;;:60;34841:26;34856:10;34841:14;:26::i;:::-;34878:23;34890:4;34896;34878:11;:23::i;:::-;34936:9;-1:-1:-1;;;;;34919:44:0;34928:6;-1:-1:-1;;;;;34919:44:0;;34947:15;34919:44;;;;2526:25:1;;2514:2;2499:18;;2380:177;34919:44:0;;;;;;;;34987:14;;34984:90;;35019:43;;2526:25:1;;;35044:4:0;;-1:-1:-1;;;;;35019:43:0;;;;;2514:2:1;2499:18;35019:43:0;;;;;;;34984:90;35089:17;:46;;;;-1:-1:-1;35110:21:0;;:25;;35089:46;35086:482;;;35156:15;;:39;;-1:-1:-1;;;35156:39:0;;-1:-1:-1;;;;;2336:32:1;;;35156:39:0;;;2318:51:1;35156:15:0;;;;:31;;2291:18:1;;35156:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35152:54;35224:15;;:42;;-1:-1:-1;;;35224:42:0;;-1:-1:-1;;;;;2336:32:1;;;35224:42:0;;;2318:51:1;35224:15:0;;;;:31;;2291:18:1;;35224:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35220:57;35295:15;;35319:16;;35295:41;;-1:-1:-1;;;;;;35295:41:0;;-1:-1:-1;;;;;35295:15:0;;;;:23;;:41;;;;2526:25:1;;;2514:2;2499:18;;2380:177;35295:41:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35295:41:0;;;;;;;;-1:-1:-1;;35295:41:0;;;;;;;;;;;;:::i;:::-;;;35291:266;;;35505:16;;;35434:99;;;23266:25:1;;;23307:18;;;23300:34;;;23350:18;;23343:34;;;23408:2;23393:18;;23386:34;35523:9:0;;35499:4;;35434:99;;23253:3:1;23238:19;35434:99:0;;;;;;;35337:212;;;35291:266;33899:1685;;;;;;33762:1822;;;;;;:::o;26423:256::-;26520:7;;26556;;26473;;;;26588:20;26520:7;26556;26588:11;:20::i;:::-;26578:7;:30;26574:61;;;26618:7;;26627;;26610:25;;;;;;26423:256;;:::o;26574:61::-;26654:7;;26663;;-1:-1:-1;26423:256:0;-1:-1:-1;26423:256:0:o;4196:278::-;4282:7;4317:12;4310:5;4302:28;;;;-1:-1:-1;;;4302:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4341:9:0;4353:5;4357:1;4353;:5;:::i;33096:585::-;33246:16;;;33260:1;33246:16;;;;;;;;33222:21;;33246:16;;;;;;;;;;-1:-1:-1;33246:16:0;33222:40;;33291:4;33273;33278:1;33273:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33273:23:0;;;:7;;;;;;;;;;:23;;;;33317:15;;:22;;;-1:-1:-1;;;33317:22:0;;;;:15;;;;;:20;;:22;;;;;33273:7;;33317:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33307:4;33312:1;33307:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33307:32:0;;;:7;;;;;;;;;:32;33382:15;;33350:62;;33367:4;;33382:15;33400:11;33350:8;:62::i;:::-;33449:15;;:224;;-1:-1:-1;;;33449:224:0;;-1:-1:-1;;;;;33449:15:0;;;;:66;;:224;;33530:11;;33449:15;;33600:4;;33627;;33647:15;;33449:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3577:471;3635:7;3880:1;3885;3880:6;3876:47;;-1:-1:-1;3910:1:0;3903:8;;3876:47;3935:9;3947:5;3951:1;3947;:5;:::i;:::-;3935:17;-1:-1:-1;3980:1:0;3971:5;3975:1;3935:17;3971:5;:::i;:::-;:10;3963:56;;;;-1:-1:-1;;;3963:56:0;;24840:2:1;3963:56:0;;;24822:21:1;24879:2;24859:18;;;24852:30;24918:34;24898:18;;;24891:62;-1:-1:-1;;;24969:18:1;;;24962:31;25010:19;;3963:56:0;24638:397:1;32867:221:0;32957:15;;32949:52;;32932:12;;-1:-1:-1;;;;;32957:15:0;;32987:9;;32932:12;32949:52;32932:12;32949:52;32987:9;32957:15;32949:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32931:70;;;33016:7;33012:69;;;33045:24;;2526:25:1;;;33045:24:0;;2514:2:1;2499:18;33045:24:0;;;;;;;32920:168;32867:221;:::o;25050:419::-;25109:7;25118;25127;25136;25145;25154;25175:23;25200:12;25214:18;25236:20;25248:7;25236:11;:20::i;:::-;25174:82;;;;;;25268:15;25285:23;25310:12;25326:50;25338:7;25347:4;25353:10;25365;:8;:10::i;:::-;25326:11;:50::i;:::-;25267:109;;;;-1:-1:-1;25267:109:0;;-1:-1:-1;25427:15:0;;-1:-1:-1;25444:4:0;;-1:-1:-1;25450:10:0;;-1:-1:-1;25050:419:0;;-1:-1:-1;;;;;25050:419:0:o;3233:136::-;3291:7;3318:43;3322:1;3325;3318:43;;;;;;;;;;;;;;;;;:3;:43::i;26687:366::-;26750:19;26773:10;:8;:10::i;:::-;26750:33;-1:-1:-1;26794:18:0;26815:27;:10;26750:33;26815:14;:27::i;:::-;26894:4;26878:22;;;;:7;:22;;;;;;26794:48;;-1:-1:-1;26878:38:0;;26794:48;26878:26;:38::i;:::-;26869:4;26853:22;;;;:7;:22;;;;;;;;:63;;;;26930:22;:37;;;;;;26927:118;;;27023:4;27007:22;;;;:7;:22;;;;;;:38;;27034:10;27007:26;:38::i;:::-;26998:4;26982:22;;;;:7;:22;;;;;:63;26739:314;;26687:366;:::o;24895:147::-;24973:7;;:17;;24985:4;24973:11;:17::i;:::-;24963:7;:27;25014:10;;:20;;25029:4;25014:14;:20::i;:::-;25001:10;:33;-1:-1:-1;;24895:147:0:o;25477:330::-;25537:7;25546;25555;25575:12;25590:24;25606:7;25590:15;:24::i;:::-;25575:39;;25625:18;25646:30;25668:7;25646:21;:30::i;:::-;25625:51;-1:-1:-1;25687:23:0;25713:33;25625:51;25713:17;:7;25725:4;25713:11;:17::i;:::-;:21;;:33::i;:::-;25687:59;25782:4;;-1:-1:-1;25788:10:0;;-1:-1:-1;25477:330:0;;-1:-1:-1;;;25477:330:0:o;25815:429::-;25930:7;;;;25986:24;:7;25998:11;25986;:24::i;:::-;25968:42;-1:-1:-1;26021:12:0;26036:21;:4;26045:11;26036:8;:21::i;:::-;26021:36;-1:-1:-1;26068:18:0;26089:27;:10;26104:11;26089:14;:27::i;:::-;26068:48;-1:-1:-1;26127:23:0;26153:33;26068:48;26153:17;:7;26165:4;26153:11;:17::i;:33::-;26205:7;;;;-1:-1:-1;26231:4:0;;-1:-1:-1;25815:429:0;;-1:-1:-1;;;;;;;25815:429:0:o;27061:368::-;27184:10;;27125:7;;;;27184:10;;27181:186;;;-1:-1:-1;27227:7:0;:24;27269:9;;;;;;;27266:90;;;-1:-1:-1;27315:25:0;;27266:90;27384:37;27415:5;27384:26;:7;27396:13;27384:11;:26::i;27437:984::-;27570:10;;27507:7;;;;27570:10;;27567:788;;;-1:-1:-1;27617:14:0;;27649:9;;;;;;;:33;;;;-1:-1:-1;27663:19:0;;;;;;;27662:20;27649:33;27646:320;;;-1:-1:-1;27723:15:0;;27818:13;;27775:7;;27804:27;;27801:136;;27896:20;;27876:15;;:41;;:19;:41::i;:::-;27856:61;;27801:136;27684:282;27646:320;27983:9;;;;;;;:32;;;;-1:-1:-1;27996:19:0;;;;;;;27983:32;27980:364;;;28076:18;;28056:15;;:39;;:19;:39::i;:::-;28175:13;;28036:59;;-1:-1:-1;28132:7:0;;28161:27;;28158:157;;28276:18;;28253:20;;28233:62;;28253:41;;;:::i;:::-;28233:15;;;:19;:62::i;:::-;28213:82;;28158:157;28017:327;28372:41;28407:5;28372:30;:7;28384:17;28372:11;:30::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;733:548::-;845:4;874:2;903;892:9;885:21;935:6;929:13;978:6;973:2;962:9;958:18;951:34;1003:1;1013:140;1027:6;1024:1;1021:13;1013:140;;;1122:14;;;1118:23;;1112:30;1088:17;;;1107:2;1084:26;1077:66;1042:10;;1013:140;;;1017:3;1202:1;1197:2;1188:6;1177:9;1173:22;1169:31;1162:42;1272:2;1265;1261:7;1256:2;1248:6;1244:15;1240:29;1229:9;1225:45;1221:54;1213:62;;;;733:548;;;;:::o;1286:315::-;1354:6;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:52;;;1431:1;1428;1421:12;1383:52;1470:9;1457:23;1489:31;1514:5;1489:31;:::i;:::-;1539:5;1591:2;1576:18;;;;1563:32;;-1:-1:-1;;;1286:315:1:o;2562:456::-;2639:6;2647;2655;2708:2;2696:9;2687:7;2683:23;2679:32;2676:52;;;2724:1;2721;2714:12;2676:52;2763:9;2750:23;2782:31;2807:5;2782:31;:::i;:::-;2832:5;-1:-1:-1;2889:2:1;2874:18;;2861:32;2902:33;2861:32;2902:33;:::i;:::-;2562:456;;2954:7;;-1:-1:-1;;;3008:2:1;2993:18;;;;2980:32;;2562:456::o;3023:180::-;3082:6;3135:2;3123:9;3114:7;3110:23;3106:32;3103:52;;;3151:1;3148;3141:12;3103:52;-1:-1:-1;3174:23:1;;3023:180;-1:-1:-1;3023:180:1:o;3397:367::-;3460:8;3470:6;3524:3;3517:4;3509:6;3505:17;3501:27;3491:55;;3542:1;3539;3532:12;3491:55;-1:-1:-1;3565:20:1;;3608:18;3597:30;;3594:50;;;3640:1;3637;3630:12;3594:50;3677:4;3669:6;3665:17;3653:29;;3737:3;3730:4;3720:6;3717:1;3713:14;3705:6;3701:27;3697:38;3694:47;3691:67;;;3754:1;3751;3744:12;3691:67;3397:367;;;;;:::o;3769:118::-;3855:5;3848:13;3841:21;3834:5;3831:32;3821:60;;3877:1;3874;3867:12;3892:566;3984:6;3992;4000;4053:2;4041:9;4032:7;4028:23;4024:32;4021:52;;;4069:1;4066;4059:12;4021:52;4109:9;4096:23;4142:18;4134:6;4131:30;4128:50;;;4174:1;4171;4164:12;4128:50;4213:70;4275:7;4266:6;4255:9;4251:22;4213:70;:::i;:::-;4302:8;;-1:-1:-1;4187:96:1;-1:-1:-1;;4387:2:1;4372:18;;4359:32;4400:28;4359:32;4400:28;:::i;:::-;4447:5;4437:15;;;3892:566;;;;;:::o;4671:241::-;4727:6;4780:2;4768:9;4759:7;4755:23;4751:32;4748:52;;;4796:1;4793;4786:12;4748:52;4835:9;4822:23;4854:28;4876:5;4854:28;:::i;5170:382::-;5235:6;5243;5296:2;5284:9;5275:7;5271:23;5267:32;5264:52;;;5312:1;5309;5302:12;5264:52;5351:9;5338:23;5370:31;5395:5;5370:31;:::i;:::-;5420:5;-1:-1:-1;5477:2:1;5462:18;;5449:32;5490:30;5449:32;5490:30;:::i;:::-;5539:7;5529:17;;;5170:382;;;;;:::o;5557:248::-;5625:6;5633;5686:2;5674:9;5665:7;5661:23;5657:32;5654:52;;;5702:1;5699;5692:12;5654:52;-1:-1:-1;;5725:23:1;;;5795:2;5780:18;;;5767:32;;-1:-1:-1;5557:248:1:o;5810:523::-;5914:6;5922;5930;5938;5946;5954;6007:3;5995:9;5986:7;5982:23;5978:33;5975:53;;;6024:1;6021;6014:12;5975:53;-1:-1:-1;;6047:23:1;;;6117:2;6102:18;;6089:32;;-1:-1:-1;6168:2:1;6153:18;;6140:32;;6219:2;6204:18;;6191:32;;-1:-1:-1;6270:3:1;6255:19;;6242:33;;-1:-1:-1;6322:3:1;6307:19;6294:33;;-1:-1:-1;5810:523:1;-1:-1:-1;5810:523:1:o;6338:773::-;6460:6;6468;6476;6484;6537:2;6525:9;6516:7;6512:23;6508:32;6505:52;;;6553:1;6550;6543:12;6505:52;6593:9;6580:23;6622:18;6663:2;6655:6;6652:14;6649:34;;;6679:1;6676;6669:12;6649:34;6718:70;6780:7;6771:6;6760:9;6756:22;6718:70;:::i;:::-;6807:8;;-1:-1:-1;6692:96:1;-1:-1:-1;6895:2:1;6880:18;;6867:32;;-1:-1:-1;6911:16:1;;;6908:36;;;6940:1;6937;6930:12;6908:36;;6979:72;7043:7;7032:8;7021:9;7017:24;6979:72;:::i;:::-;6338:773;;;;-1:-1:-1;7070:8:1;-1:-1:-1;;;;6338:773:1:o;7116:388::-;7184:6;7192;7245:2;7233:9;7224:7;7220:23;7216:32;7213:52;;;7261:1;7258;7251:12;7213:52;7300:9;7287:23;7319:31;7344:5;7319:31;:::i;:::-;7369:5;-1:-1:-1;7426:2:1;7411:18;;7398:32;7439:33;7398:32;7439:33;:::i;7509:127::-;7570:10;7565:3;7561:20;7558:1;7551:31;7601:4;7598:1;7591:15;7625:4;7622:1;7615:15;7641:1121;7725:6;7756:2;7799;7787:9;7778:7;7774:23;7770:32;7767:52;;;7815:1;7812;7805:12;7767:52;7855:9;7842:23;7884:18;7925:2;7917:6;7914:14;7911:34;;;7941:1;7938;7931:12;7911:34;7979:6;7968:9;7964:22;7954:32;;8024:7;8017:4;8013:2;8009:13;8005:27;7995:55;;8046:1;8043;8036:12;7995:55;8082:2;8069:16;8104:2;8100;8097:10;8094:36;;;8110:18;;:::i;:::-;8156:2;8153:1;8149:10;8188:2;8182:9;8251:2;8247:7;8242:2;8238;8234:11;8230:25;8222:6;8218:38;8306:6;8294:10;8291:22;8286:2;8274:10;8271:18;8268:46;8265:72;;;8317:18;;:::i;:::-;8353:2;8346:22;8403:18;;;8437:15;;;;-1:-1:-1;8479:11:1;;;8475:20;;;8507:19;;;8504:39;;;8539:1;8536;8529:12;8504:39;8563:11;;;;8583:148;8599:6;8594:3;8591:15;8583:148;;;8665:23;8684:3;8665:23;:::i;:::-;8653:36;;8616:12;;;;8709;;;;8583:148;;;8750:6;7641:1121;-1:-1:-1;;;;;;;;7641:1121:1:o;8767:380::-;8846:1;8842:12;;;;8889;;;8910:61;;8964:4;8956:6;8952:17;8942:27;;8910:61;9017:2;9009:6;9006:14;8986:18;8983:38;8980:161;;9063:10;9058:3;9054:20;9051:1;9044:31;9098:4;9095:1;9088:15;9126:4;9123:1;9116:15;8980:161;;8767:380;;;:::o;9152:356::-;9354:2;9336:21;;;9373:18;;;9366:30;9432:34;9427:2;9412:18;;9405:62;9499:2;9484:18;;9152:356::o;10134:127::-;10195:10;10190:3;10186:20;10183:1;10176:31;10226:4;10223:1;10216:15;10250:4;10247:1;10240:15;10266:422;10355:1;10398:5;10355:1;10412:270;10433:7;10423:8;10420:21;10412:270;;;10492:4;10488:1;10484:6;10480:17;10474:4;10471:27;10468:53;;;10501:18;;:::i;:::-;10551:7;10541:8;10537:22;10534:55;;;10571:16;;;;10534:55;10650:22;;;;10610:15;;;;10412:270;;;10416:3;10266:422;;;;;:::o;10693:806::-;10742:5;10772:8;10762:80;;-1:-1:-1;10813:1:1;10827:5;;10762:80;10861:4;10851:76;;-1:-1:-1;10898:1:1;10912:5;;10851:76;10943:4;10961:1;10956:59;;;;11029:1;11024:130;;;;10936:218;;10956:59;10986:1;10977:10;;11000:5;;;11024:130;11061:3;11051:8;11048:17;11045:43;;;11068:18;;:::i;:::-;-1:-1:-1;;11124:1:1;11110:16;;11139:5;;10936:218;;11238:2;11228:8;11225:16;11219:3;11213:4;11210:13;11206:36;11200:2;11190:8;11187:16;11182:2;11176:4;11173:12;11169:35;11166:77;11163:159;;;-1:-1:-1;11275:19:1;;;11307:5;;11163:159;11354:34;11379:8;11373:4;11354:34;:::i;:::-;11424:6;11420:1;11416:6;11412:19;11403:7;11400:32;11397:58;;;11435:18;;:::i;:::-;11473:20;;10693:806;-1:-1:-1;;;10693:806:1:o;11504:140::-;11562:5;11591:47;11632:4;11622:8;11618:19;11612:4;11591:47;:::i;11649:168::-;11722:9;;;11753;;11770:15;;;11764:22;;11750:37;11740:71;;11791:18;;:::i;12224:184::-;12294:6;12347:2;12335:9;12326:7;12322:23;12318:32;12315:52;;;12363:1;12360;12353:12;12315:52;-1:-1:-1;12386:16:1;;12224:184;-1:-1:-1;12224:184:1:o;12692:245::-;12759:6;12812:2;12800:9;12791:7;12787:23;12783:32;12780:52;;;12828:1;12825;12818:12;12780:52;12860:9;12854:16;12879:28;12901:5;12879:28;:::i;15228:251::-;15298:6;15351:2;15339:9;15330:7;15326:23;15322:32;15319:52;;;15367:1;15364;15357:12;15319:52;15399:9;15393:16;15418:31;15443:5;15418:31;:::i;15793:125::-;15858:9;;;15879:10;;;15876:36;;;15892:18;;:::i;16748:127::-;16809:10;16804:3;16800:20;16797:1;16790:31;16840:4;16837:1;16830:15;16864:4;16861:1;16854:15;17225:135;17264:3;17285:17;;;17282:43;;17305:18;;:::i;:::-;-1:-1:-1;17352:1:1;17341:13;;17225:135::o;21082:128::-;21149:9;;;21170:11;;;21167:37;;;21184:18;;:::i;22724:306::-;22812:6;22820;22828;22881:2;22869:9;22860:7;22856:23;22852:32;22849:52;;;22897:1;22894;22887:12;22849:52;22926:9;22920:16;22910:26;;22976:2;22965:9;22961:18;22955:25;22945:35;;23020:2;23009:9;23005:18;22999:25;22989:35;;22724:306;;;;;:::o;23431:217::-;23471:1;23497;23487:132;;23541:10;23536:3;23532:20;23529:1;23522:31;23576:4;23573:1;23566:15;23604:4;23601:1;23594:15;23487:132;-1:-1:-1;23633:9:1;;23431:217::o;23653:980::-;23915:4;23963:3;23952:9;23948:19;23994:6;23983:9;23976:25;24020:2;24058:6;24053:2;24042:9;24038:18;24031:34;24101:3;24096:2;24085:9;24081:18;24074:31;24125:6;24160;24154:13;24191:6;24183;24176:22;24229:3;24218:9;24214:19;24207:26;;24268:2;24260:6;24256:15;24242:29;;24289:1;24299:195;24313:6;24310:1;24307:13;24299:195;;;24378:13;;-1:-1:-1;;;;;24374:39:1;24362:52;;24469:15;;;;24434:12;;;;24410:1;24328:9;24299:195;;;-1:-1:-1;;;;;;;24550:32:1;;;;24545:2;24530:18;;24523:60;-1:-1:-1;;;24614:3:1;24599:19;24592:35;24511:3;23653:980;-1:-1:-1;;;23653:980:1:o

Swarm Source

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