ETH Price: $3,595.95 (+5.05%)

Token

AERIE (AER)
 

Overview

Max Total Supply

1,000,000,000 AER

Holders

505 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
truetf.eth
Balance
0.000000000213694722 AER

Value
$0.00
0xc94782f82a18175f3402c0bed1aaf59cf1d15bb7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Aerie is a cutting-edge Platform-as-a-Service (PaaS) initiative & EVM Compatible Blockchain Project dedicated to providing premier utilities for developers and users of crypto projects.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AERIE

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-06
*/

/**
(w) : https://aerielab.io/ | (tg) : https://t.me/aerieofficial
 */
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;


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

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

/**
 * Main Contract Starts Here 
 */

contract AERIE is IERC20, Ownable {
    using SafeMath for uint256;
    
    // About Amnesty
    struct AmnestyTier {
        string name;
        bool active;
        uint256 cost;
        uint256 discount;
        uint256 blocks;
        uint index;
    }
    // these two variables will later store about all package available
    uint public lastTierIndex = 0;
    AmnestyTier[] public tiers;
    
    // these variables will later store about user active tier
    struct UserTier {
        bool usingTier;
        uint256 lastBlock;
        uint256 discount;
        uint activeIndex;
    }
    mapping (address => UserTier) _userTier;
    mapping (address => uint256) _amnestyGivenToUser;
    uint256 public _totalBurnFromTier;
    uint256 public _totalAmnesty;
    uint public _totalSubscriber;

    // Name, Symbol, and Decimals Initialization
    string constant _name = "AERIE";
    string constant _symbol = "AER";
    uint8 constant _decimals = 18;
    
    // Important Addresses
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter public router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    // Supply
    uint256 _totalSupply = 1000000000 * (10 ** _decimals); // 1,000,000,000 AER
    
    // Max Buy & Sell on each transaction
    uint256 public _maxBuyTxAmount = (_totalSupply * 10) / 1000; // 1% are default
    uint256 public _maxSellTxAmount = (_totalSupply * 10) / 1000; // 1% are default
    uint256 public _maxWalletSize = (_totalSupply * 10) / 1000; // 1% are default

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    
    // Fees Variables
    uint256 liqFee; 
    uint256 buybackFee; 
    uint256 mktFee; 
    uint256[3] devFee;

    // Total Fee
    uint256 totalFee;
    uint256 feeDenominator = 10000;
    

    address autoLiquidityReceiver;
    address secDevFeeReceiver;
    address primDevFeeReceiver;
    address thirdDevFeeReceiver;
    address mktFeeReceiver;
    address buybackFeeReceiver; 
    
    uint256 targetLiquidity = 25;
    uint256 targetLiquidityDenominator = 100;

    // Router & Pair
    address public pair;

    // Treshold & etc
    bool public swapEnabled = true;

    uint256 public swapThreshold = _totalSupply / 1000; // 0.1%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (
        address[] memory _receivers,
        uint256[] memory _fees
    ) {
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        // Set Fee Receivers
        primDevFeeReceiver = address(_receivers[0]);
        secDevFeeReceiver = address(_receivers[1]);
        thirdDevFeeReceiver = address(_receivers[2]);
        mktFeeReceiver = address(_receivers[3]);
        buybackFeeReceiver = address(_receivers[4]);
        
        // Set Default Taxes
        liqFee = _fees[0]; 
        buybackFee = _fees[1]; 
        mktFee = _fees[2]; 
        devFee = [_fees[3],_fees[4],_fees[5]];
        totalFee = liqFee.add(buybackFee).add(mktFee).add(devFee[0]).add(devFee[1]).add(devFee[2]);
        
        // Another Initialization
        _allowances[address(this)][address(router)] = type(uint256).max;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[primDevFeeReceiver] = true;
        isFeeExempt[secDevFeeReceiver] = true;
        isFeeExempt[thirdDevFeeReceiver] = true;
        isFeeExempt[mktFeeReceiver] = true;
        
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[primDevFeeReceiver] = true;
        isTxLimitExempt[secDevFeeReceiver] = true;
        isTxLimitExempt[thirdDevFeeReceiver] = true;
        isTxLimitExempt[mktFeeReceiver] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true;
        isTxLimitExempt[address(this)] = true;
        
        autoLiquidityReceiver = owner();
        
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        // coniditional Boolean
        bool isTxExempted = (isTxLimitExempt[sender] || isTxLimitExempt[recipient]);
        bool isContractTransfer = (sender==address(this) || recipient==address(this));
        bool isLiquidityTransfer = ((sender == pair && recipient == address(router)) || (recipient == pair && sender == address(router) ));
        
        if(!isTxExempted && !isContractTransfer && !isLiquidityTransfer ){
            txLimitter(sender,recipient, amount);
        }
        if (recipient != pair && recipient != DEAD) {
            require(isTxLimitExempt[recipient] || _balances[recipient] + amount <= _maxWalletSize, "Transfer amount exceeds the wallet size.");
        }
        if(shouldSwapBack()){ swapBack(); }
    
        uint256 amountReceived = shouldTakeFee(sender,recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amountReceived);
        

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

    

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

    function txLimitter(address sender, address recipient, uint256 amount) internal view {
        
        bool isBuy = sender == pair || sender == address(router);
        bool isSell = recipient== pair || recipient == address(router);
        
        if(isBuy){
            require(amount <= _maxBuyTxAmount, "TX Limit Exceeded");
        }else if(isSell){
            require(amount <= _maxSellTxAmount, "TX Limit Exceeded");
        }
        
    }
    
    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee() public view returns (uint256) {
        return totalFee;
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee()).div(feeDenominator);
        uint256 amnestyAmount;
        uint256 finalFeeAmount;
        UserTier memory _userFee;
        bool isBuy = sender == pair || sender == address(router);
        bool isSell = receiver== pair || receiver == address(router);
        bool isNormalTransfer = sender != pair && sender != address(router) && receiver != pair && receiver != address(router);

        // check wether the sender are subscribe for amnesty or not
        if(isBuy){
            // when buy, then the user are receiver
            _userFee = _userTier[receiver];        
        }else if(isSell){
            // when sell, then the user are sender
            _userFee = _userTier[sender];
        }else if(isNormalTransfer){
            // if its normal transfer, we take consideration from sender perspective
            _userFee = _userTier[sender];
        }

        if(_userFee.usingTier && block.number <= _userFee.lastBlock){
            amnestyAmount = feeAmount.mul(_userFee.discount).div(feeDenominator);
        }

        if(amnestyAmount >= 0){
             _totalAmnesty = _totalAmnesty.add(amnestyAmount); // record total token saved from amnesty
             // set to specific user
             if(isBuy){
                 _amnestyGivenToUser[receiver] = _amnestyGivenToUser[receiver].add(amnestyAmount);
             }else if(isSell || isNormalTransfer){
                 _amnestyGivenToUser[sender] = _amnestyGivenToUser[sender].add(amnestyAmount);
             }
        }
        finalFeeAmount = feeAmount.sub(amnestyAmount); // apply the amnesty into the fee
        
        _balances[address(this)] = _balances[address(this)].add(finalFeeAmount);
        emit Transfer(sender, address(this), finalFeeAmount);

        return amount.sub(finalFeeAmount);
    }
    
    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }
    
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liqFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

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

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

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

        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHDev = amountETH.mul(devFee[0]).div(totalETHFee);
        uint256 amountETHTeam = amountETH.mul(devFee[1]).div(totalETHFee);
        uint256 amountETHTeamOther = amountETH.mul(devFee[2]).div(totalETHFee);
        uint256 amountETHMkt = amountETH.mul(mktFee).div(totalETHFee);
        uint256 amountETHBuyBack = amountETH.mul(buybackFee).div(totalETHFee);
        
        sendPayable(amountETHDev, amountETHMkt, amountETHTeam, amountETHTeamOther, amountETHBuyBack);

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

    function sendPayable(uint256 amtDev, uint256 amtMkt, uint256 amtTeam, uint256 amtTeamOther, uint256 amtBuyback) internal {
        (bool successone,) = payable(primDevFeeReceiver).call{value: amtDev, gas: 30000}("");
        (bool successtwo,) = payable(mktFeeReceiver).call{value: amtMkt, gas: 30000}("");
        (bool successthree,) = payable(secDevFeeReceiver).call{value: amtTeam, gas: 30000}("");
        (bool successfour,) = payable(buybackFeeReceiver).call{value: amtBuyback, gas: 30000}("");
        (bool successfive,) = payable(buybackFeeReceiver).call{value: amtTeamOther, gas: 30000}("");
        require(successone && successtwo && successthree && successfour && successfive, "receiver rejected ETH transfer");
    }

    // used for flushing stuck Native token on Contract
    function flushStuckBalance() external onlyOwner {
        uint256 bal = address(this).balance; // return the native token ( ETH )
        (bool success,) = payable(primDevFeeReceiver).call{value: bal, gas: 30000}("");
        require(success, "receiver rejected ETH transfer");
    }
    
    /**
     * 
     * CONFIGURATIONS
     * 
     */

    function addNewTier(
        string memory _tierName,
        uint256 cost,
        uint256 discount,
        uint256 blocks
    ) external onlyOwner {
        AmnestyTier memory _newTier = AmnestyTier(
            _tierName,
            true,
            (cost * (10 ** _decimals)),
            discount,
            blocks,
            lastTierIndex
        );
        tiers.push(_newTier);
        lastTierIndex = lastTierIndex.add(1);
    }

    function modifyTier(
        uint index,
        bool _active,
        string memory _tierName,
        uint256 cost,
        uint256 discount,
        uint256 blocks
    ) external onlyOwner {
        tiers[index].active = _active;
        tiers[index].name = _tierName;
        tiers[index].cost = (cost * (10 ** _decimals));
        tiers[index].discount = discount;
        tiers[index].blocks = blocks;
    }

    function getAllTiers() public view returns (AmnestyTier[] memory){
        return tiers;
    }

    function getTierDetail(uint index) public view returns (AmnestyTier memory){
        return tiers[index];
    }
    function getTierDetailByUser(address user) public view returns (AmnestyTier memory){
        return tiers[_userTier[user].activeIndex];
    }

    function getUserTier(address user) public view returns (UserTier memory){
        return _userTier[user];
    }
    function getAmnestyGivenToUser(address user) public view returns (uint256){
        return _amnestyGivenToUser[user];
    }
    function subscribeForAmnesty(uint index) public{
        // obtain the tier package
        AmnestyTier memory _selectedTier = tiers[index];
        // now we get the cost
        uint256 _costToSubscribe = _selectedTier.cost;
        uint256 balance = balanceOf(_msgSender());
        require(balance >= _costToSubscribe, "INS: Insufficient Balance");
        require(_selectedTier.active,"INACTIVE: The Tier is not active");
        
        _transferFrom(_msgSender(), DEAD, _costToSubscribe); // the cost are burn to dead wallet
        
        // then, we increment
        _totalBurnFromTier = _totalBurnFromTier.add(_costToSubscribe);
        // now check wether the user has been subscribed before or not
        if(!_userTier[_msgSender()].usingTier){
            // means that the user never pay for subscription before
            _totalSubscriber = _totalSubscriber.add(1);
        }
        _userTier[_msgSender()] = UserTier(
            true,
            (block.number).add(_selectedTier.blocks),
            _selectedTier.discount,
            index
        );
    }
    
    function setDevFee(uint256[] memory fee) external onlyOwner {
        // total fee should not be more than 10%;
        uint256 simulatedFee = fee[0].add(fee[1]).add(fee[2]).add(liqFee).add(buybackFee).add(mktFee);
        require(simulatedFee <= 1000, "Fees too high !!");
        devFee[0] = fee[0];
        devFee[1] = fee[1];
        devFee[2] = fee[2];
        totalFee = simulatedFee;
    }
    function setBuybackFee(uint256 fee) external onlyOwner {
        // total fee should not be more than 10%;
        uint256 simulatedFee = fee.add(liqFee).add(devFee[0]).add(devFee[1]).add(devFee[2]).add(mktFee);
        require(simulatedFee <= 1000, "Fees too high !!");
        buybackFee = fee;
        totalFee = simulatedFee;
    }
    function setLpFee(uint256 fee) external onlyOwner {
        // total fee should not be more than 10%;
        uint256 simulatedFee = fee.add(devFee[0]).add(buybackFee).add(devFee[1]).add(devFee[2]).add(mktFee);
        require(simulatedFee <= 1000, "Fees too high !!");
        liqFee = fee;
        totalFee = simulatedFee;
    }
    
    function setMarketingFee(uint256 fee) external onlyOwner {
        // total fee should not be more than 10%;
        uint256 simulatedFee = fee.add(devFee[0]).add(buybackFee).add(liqFee).add(devFee[1]).add(devFee[2]);
        require(simulatedFee < 1000, "Fees too high !!");
        mktFee = fee;
        totalFee = simulatedFee;
    }
    
    function setBuyTxMaximum(uint256 max) external onlyOwner{
        uint256 minimumTreshold = (_totalSupply * 7) / 1000; // 0.7% is the minimum tx limit, we cant set below this
        uint256 simulatedMaxTx = (_totalSupply * max) / 1000;
        require(simulatedMaxTx >= minimumTreshold, "Tx Limit is too low");
        _maxBuyTxAmount = simulatedMaxTx;
    }
    
    function setSellTxMaximum(uint256 max) external onlyOwner {
        uint256 minimumTreshold = (_totalSupply * 7) / 1000; // 0.7% is the minimum tx limit, we cant set below this
        uint256 simulatedMaxTx = (_totalSupply * max) / 1000;
        require(simulatedMaxTx >= minimumTreshold, "Tx Limit is too low");
        _maxSellTxAmount = simulatedMaxTx;
    }

    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner{
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = _totalSupply.mul(numerator).div(divisor);
    }
    
    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setFeeReceivers(address _autoLiquidityReceiver, address _primDevFeeReceiver, address _mktFeeReceiver, address _secDevFeeReceiver,address _thirdDevFeeReceiver, address _buybackFeeReceiver) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        primDevFeeReceiver = _primDevFeeReceiver;
        mktFeeReceiver = _mktFeeReceiver;
        secDevFeeReceiver = _secDevFeeReceiver;
        buybackFeeReceiver = _buybackFeeReceiver;
        thirdDevFeeReceiver = _thirdDevFeeReceiver;
    }

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

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

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

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

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

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
    
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_receivers","type":"address[]"},{"internalType":"uint256[]","name":"_fees","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalAmnesty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBurnFromTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSubscriber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tierName","type":"string"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"addNewTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"flushStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllTiers","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"blocks","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct AERIE.AmnestyTier[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAmnestyGivenToUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getTierDetail","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"blocks","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct AERIE.AmnestyTier","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTierDetailByUser","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"blocks","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct AERIE.AmnestyTier","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserTier","outputs":[{"components":[{"internalType":"bool","name":"usingTier","type":"bool"},{"internalType":"uint256","name":"lastBlock","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"activeIndex","type":"uint256"}],"internalType":"struct AERIE.UserTier","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTierIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"_active","type":"bool"},{"internalType":"string","name":"_tierName","type":"string"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"modifyTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setBuyTxMaximum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setBuybackFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"fee","type":"uint256[]"}],"name":"setDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_primDevFeeReceiver","type":"address"},{"internalType":"address","name":"_mktFeeReceiver","type":"address"},{"internalType":"address","name":"_secDevFeeReceiver","type":"address"},{"internalType":"address","name":"_thirdDevFeeReceiver","type":"address"},{"internalType":"address","name":"_buybackFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setLpFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setSellTxMaximum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"subscribeForAmnesty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tiers","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"blocks","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600155600880546001600160a01b031990811690915560098054821661dead179055600a8054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2178155600b8054909216737a250d5630b4cf539739df2c5dacb4c659f2488d179091556200007490601290620008cb565b6200008490633b9aca00620008e3565b600c556103e8600c54600a6200009b9190620008e3565b620000a7919062000905565b600d556103e8600c54600a620000be9190620008e3565b620000ca919062000905565b600e556103e8600c54600a620000e19190620008e3565b620000ed919062000905565b600f55612710601b55601960225560646023556024805460ff60a01b1916600160a01b179055600c5462000125906103e89062000905565b6025553480156200013557600080fd5b506040516200427d3803806200427d833981016040819052620001589162000a27565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000213919062000af7565b600a546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028b919062000af7565b602460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600081518110620002c757620002c762000b15565b6020026020010151601e60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001815181106200030b576200030b62000b15565b6020026020010151601d60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816002815181106200034f576200034f62000b15565b6020026020010151601f60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160038151811062000393576200039362000b15565b6020026020010151602060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600481518110620003d757620003d762000b15565b6020026020010151602160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806000815181106200041b576200041b62000b15565b6020026020010151601481905550806001815181106200043f576200043f62000b15565b60200260200101516015819055508060028151811062000463576200046362000b15565b602002602001015160168190555060405180606001604052808260038151811062000492576200049262000b15565b6020026020010151815260200182600481518110620004b557620004b562000b15565b6020026020010151815260200182600581518110620004d857620004d862000b15565b60200260200101518152506017906003620004f59291906200075e565b506200054d60176002015462000539601760010154620005396017600001546200053960165462000539601554601454620006ef60201b62001dd21790919060201c565b620006ef60201b62001dd21790919060201c565b601a55306000818152601160209081526040808320600b546001600160a01b039081168552908352818420600019905533808552601284528285208054600160ff199182168117909255601e8054851688528588208054831684179055601d8054861689528689208054841685179055601f805487168a52878a208054851686179055885487168a52878a208054851686179055948952601388528689208054841685179055905485168852858820805483168417905554841687528487208054821683179055915483168652838620805483168217905593548216855282852080548216851790556009548216855282852080548216851790556008549091168452818420805482168417905593835290912080549092161790556200067c6000546001600160a01b031690565b601c80546001600160a01b0319166001600160a01b0392909216919091179055600c5433600081815260106020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000b46565b600080620006fe838562000b2b565b905083811015620007555760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b82600381019282156200078f579160200282015b828111156200078f57825182559160200191906001019062000772565b506200079d929150620007a1565b5090565b5b808211156200079d5760008155600101620007a2565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200080f578160001904821115620007f357620007f3620007b8565b808516156200080157918102915b93841c9390800290620007d3565b509250929050565b600082620008285750600162000758565b81620008375750600062000758565b81600181146200085057600281146200085b576200087b565b600191505062000758565b60ff8411156200086f576200086f620007b8565b50506001821b62000758565b5060208310610133831016604e8410600b8410161715620008a0575081810a62000758565b620008ac8383620007ce565b8060001904821115620008c357620008c3620007b8565b029392505050565b6000620008dc60ff84168362000817565b9392505050565b6000816000190483118215151615620009005762000900620007b8565b500290565b6000826200092357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000969576200096962000928565b604052919050565b60006001600160401b038211156200098d576200098d62000928565b5060051b60200190565b80516001600160a01b0381168114620009af57600080fd5b919050565b600082601f830112620009c657600080fd5b81516020620009df620009d98362000971565b6200093e565b82815260059290921b84018101918181019086841115620009ff57600080fd5b8286015b8481101562000a1c578051835291830191830162000a03565b509695505050505050565b6000806040838503121562000a3b57600080fd5b82516001600160401b038082111562000a5357600080fd5b818501915085601f83011262000a6857600080fd5b8151602062000a7b620009d98362000971565b82815260059290921b8401810191818101908984111562000a9b57600080fd5b948201945b8386101562000ac45762000ab48662000997565b8252948201949082019062000aa0565b9188015191965090935050508082111562000ade57600080fd5b5062000aed85828601620009b4565b9150509250929050565b60006020828403121562000b0a57600080fd5b620008dc8262000997565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000b415762000b41620007b8565b500190565b6137278062000b566000396000f3fe6080604052600436106102e85760003560e01c8063715018a611610190578063cf4be394116100dc578063df8069cd11610095578063f2fde38b1161006f578063f2fde38b14610958578063f84ba65d14610978578063f887ea4014610998578063f9b4a4c8146109b857600080fd5b8063df8069cd146108ad578063e4d2620e146108cd578063ed4da47a1461092257600080fd5b8063cf4be394146107dc578063d51ed1c8146107f2578063da0240c614610812578063dae3493814610832578063dd62ed3e14610847578063df20fd491461088d57600080fd5b806395d89b4111610149578063a9059cbb11610123578063a9059cbb14610766578063abe57e7014610786578063b2c6e1e6146107a6578063c20979dd146107c657600080fd5b806395d89b41146106fa578063a7d38c8914610726578063a8aa1b311461074657600080fd5b8063715018a61461064a5780637ae316d01461065f57806384dfbfe214610674578063893d20e8146106945780638da5cb5b146106c65780638f9a55c0146106e457600080fd5b8063313ce5671161024f578063625e764c116102085780636c770fc5116101e25780636c770fc5146105b35780636ddd1713146105d357806370a08231146105f4578063711370c51461062a57600080fd5b8063625e764c146105515780636471af8314610571578063658d4b7f1461059357600080fd5b8063313ce5671461049c57806333477327146104b85780633ae261ae146104ce5780634567bfba146104e457806348d02b8b14610504578063571ac8b01461053157600080fd5b80631161ae39116102a15780631161ae39146103fc57806318160ddd1461041c578063201e79911461043157806323b872dd1461045157806325635d24146104715780632b112e491461048757600080fd5b8063039af9eb146102f457806304457c1c1461032f5780630445b6671461035157806306fdde031461037557806307ac61dd146103ac578063095ea7b3146103cc57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612ecb565b6109ce565b60405161032696959493929190612f31565b60405180910390f35b34801561033b57600080fd5b5061034f61034a366004613039565b610aa7565b005b34801561035d57600080fd5b5061036760255481565b604051908152602001610326565b34801561038157600080fd5b50604080518082019091526005815264414552494560d81b60208201525b60405161032691906130ac565b3480156103b857600080fd5b5061034f6103c73660046130bf565b610be7565b3480156103d857600080fd5b506103ec6103e736600461312a565b610d02565b6040519015158152602001610326565b34801561040857600080fd5b506103ec610417366004613154565b610d6f565b34801561042857600080fd5b50600c54610367565b34801561043d57600080fd5b5061034f61044c366004613154565b610d83565b34801561045d57600080fd5b506103ec61046c366004613176565b610db8565b34801561047d57600080fd5b5061036760065481565b34801561049357600080fd5b50610367610e7a565b3480156104a857600080fd5b5060405160128152602001610326565b3480156104c457600080fd5b50610367600d5481565b3480156104da57600080fd5b5061036760015481565b3480156104f057600080fd5b5061034f6104ff366004612ecb565b610ecc565b34801561051057600080fd5b5061052461051f366004612ecb565b610f5e565b6040516103269190613207565b34801561053d57600080fd5b506103ec61054c36600461321a565b611095565b34801561055d57600080fd5b5061034f61056c366004612ecb565b6110a3565b34801561057d57600080fd5b5061058661113b565b6040516103269190613235565b34801561059f57600080fd5b5061034f6105ae366004613297565b611269565b3480156105bf57600080fd5b5061034f6105ce366004612ecb565b6112be565b3480156105df57600080fd5b506024546103ec90600160a01b900460ff1681565b34801561060057600080fd5b5061036761060f36600461321a565b6001600160a01b031660009081526010602052604090205490565b34801561063657600080fd5b5061034f610645366004612ecb565b61154d565b34801561065657600080fd5b5061034f611603565b34801561066b57600080fd5b50601a54610367565b34801561068057600080fd5b5061034f61068f366004612ecb565b611677565b3480156106a057600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610326565b3480156106d257600080fd5b506000546001600160a01b03166106ae565b3480156106f057600080fd5b50610367600f5481565b34801561070657600080fd5b5060408051808201909152600381526220a2a960e91b602082015261039f565b34801561073257600080fd5b5061034f6107413660046132ca565b6116fd565b34801561075257600080fd5b506024546106ae906001600160a01b031681565b34801561077257600080fd5b506103ec61078136600461312a565b611861565b34801561079257600080fd5b5061034f6107a1366004613154565b61186e565b3480156107b257600080fd5b5061034f6107c1366004612ecb565b6118e5565b3480156107d257600080fd5b5061036760075481565b3480156107e857600080fd5b50610367600e5481565b3480156107fe57600080fd5b5061036761080d366004612ecb565b61199b565b34801561081e57600080fd5b5061052461082d36600461321a565b6119d9565b34801561083e57600080fd5b5061034f611a4f565b34801561085357600080fd5b50610367610862366004613370565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561089957600080fd5b5061034f6108a836600461339a565b611b29565b3480156108b957600080fd5b5061034f6108c83660046133b6565b611b7c565b3480156108d957600080fd5b506108ed6108e836600461321a565b611c16565b604051610326919081511515815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561092e57600080fd5b5061036761093d36600461321a565b6001600160a01b031660009081526004602052604090205490565b34801561096457600080fd5b5061034f61097336600461321a565b611c93565b34801561098457600080fd5b5061034f610993366004613297565b611d7d565b3480156109a457600080fd5b50600b546106ae906001600160a01b031681565b3480156109c457600080fd5b5061036760055481565b600281815481106109de57600080fd5b9060005260206000209060060201600091509050806000018054610a019061342a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d9061342a565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050506001840154600285015460038601546004870154600590970154959660ff90931695919450925086565b6000546001600160a01b03163314610ada5760405162461bcd60e51b8152600401610ad190613464565b60405180910390fd5b8460028781548110610aee57610aee613499565b906000526020600020906006020160010160006101000a81548160ff0219169083151502179055508360028781548110610b2a57610b2a613499565b90600052602060002090600602016000019080519060200190610b4e929190612e32565b50610b5b6012600a6135a9565b610b6590846135b8565b60028781548110610b7857610b78613499565b9060005260206000209060060201600201819055508160028781548110610ba157610ba1613499565b9060005260206000209060060201600301819055508060028781548110610bca57610bca613499565b906000526020600020906006020160040181905550505050505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b8152600401610ad190613464565b6040805160c081018252858152600160208201526000918101610c366012600a6135a9565b610c4090876135b8565b81526020808201869052604082018590526001805460609093019290925260028054928301815560005282518051939450849360069093027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0192610ca89284920190612e32565b5060208201516001828101805460ff19169215159290921790915560408301516002830155606083015160038301556080830151600483015560a0909201516005909101558054610cf891611dd2565b6001555050505050565b3360008181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d5d9086815260200190565b60405180910390a35060015b92915050565b600082610d7b8361199b565b119392505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b8152600401610ad190613464565b602291909155602355565b6001600160a01b038316600090815260116020908152604080832033845290915281205460001914610e65576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601182528381203382529091529190912054610e40918490611e31565b6001600160a01b03851660009081526011602090815260408083203384529091529020555b610e70848484611e6b565b90505b9392505050565b6008546001600160a01b0316600090815260106020526040812054610ec7906009546001600160a01b0316600090815260106020526040902054610ec190600c5490612186565b90612186565b905090565b6000546001600160a01b03163314610ef65760405162461bcd60e51b8152600401610ad190613464565b601654600090610f2f90610f29601760020154610f29601760010154610f29601760000154601454610f29908b90611dd2565b90611dd2565b90506103e8811115610f535760405162461bcd60e51b8152600401610ad1906135d7565b601591909155601a55565b610f996040518060c0016040528060608152602001600015158152602001600081526020016000815260200160008152602001600081525090565b60028281548110610fac57610fac613499565b90600052602060002090600602016040518060c0016040529081600082018054610fd59061342a565b80601f01602080910402602001604051908101604052809291908181526020018280546110019061342a565b801561104e5780601f106110235761010080835404028352916020019161104e565b820191906000526020600020905b81548152906001019060200180831161103157829003601f168201915b5050509183525050600182015460ff161515602082015260028201546040820152600382015460608201526004820154608082015260059091015460a09091015292915050565b6000610d6982600019610d02565b6000546001600160a01b031633146110cd5760405162461bcd60e51b8152600401610ad190613464565b600061110d601760020154610f29601760010154610f29601454610f29601554610f29601760006003811061110457611104613499565b01548b90611dd2565b90506103e881106111305760405162461bcd60e51b8152600401610ad1906135d7565b601691909155601a55565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561126057838290600052602060002090600602016040518060c00160405290816000820180546111929061342a565b80601f01602080910402602001604051908101604052809291908181526020018280546111be9061342a565b801561120b5780601f106111e05761010080835404028352916020019161120b565b820191906000526020600020905b8154815290600101906020018083116111ee57829003601f168201915b505050918352505060018281015460ff16151560208084019190915260028401546040840152600384015460608401526004840154608084015260059093015460a0909201919091529183529201910161115f565b50505050905090565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610ad190613464565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000600282815481106112d3576112d3613499565b90600052602060002090600602016040518060c00160405290816000820180546112fc9061342a565b80601f01602080910402602001604051908101604052809291908181526020018280546113289061342a565b80156113755780601f1061134a57610100808354040283529160200191611375565b820191906000526020600020905b81548152906001019060200180831161135857829003601f168201915b5050509183525050600182015460ff16151560208201526002820154604080830191909152600383015460608301526004830154608083015260059092015460a09091015281015190915060006113cb3361060f565b90508181101561141d5760405162461bcd60e51b815260206004820152601960248201527f494e533a20496e73756666696369656e742042616c616e6365000000000000006044820152606401610ad1565b826020015161146e5760405162461bcd60e51b815260206004820181905260248201527f494e4143544956453a205468652054696572206973206e6f74206163746976656044820152606401610ad1565b611484336009546001600160a01b031684611e6b565b506005546114929083611dd2565b6005553360009081526003602052604090205460ff166114be576007546114ba906001611dd2565b6007555b60405180608001604052806001151581526020016114e9856080015143611dd290919063ffffffff16565b81526060850151602082015260400185905260036000336001600160a01b0316815260208082019290925260409081016000208351815460ff1916901515178155918301516001830155820151600282015560609091015160039091015550505050565b6000546001600160a01b031633146115775760405162461bcd60e51b8152600401610ad190613464565b60006103e8600c54600761158b91906135b8565b6115959190613601565b905060006103e883600c546115aa91906135b8565b6115b49190613601565b9050818110156115fc5760405162461bcd60e51b81526020600482015260136024820152725478204c696d697420697320746f6f206c6f7760681b6044820152606401610ad1565b600e555050565b6000546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610ad190613464565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116a15760405162461bcd60e51b8152600401610ad190613464565b6016546000906116ce90610f29601760020154610f29601760010154601554610f29908160176000611104565b90506103e88111156116f25760405162461bcd60e51b8152600401610ad1906135d7565b601491909155601a55565b6000546001600160a01b031633146117275760405162461bcd60e51b8152600401610ad190613464565b60006117a0601654610f29601554610f29601454610f298860028151811061175157611751613499565b6020026020010151610f298a60018151811061176f5761176f613499565b60200260200101518b60008151811061178a5761178a613499565b6020026020010151611dd290919063ffffffff16565b90506103e88111156117c45760405162461bcd60e51b8152600401610ad1906135d7565b816000815181106117d7576117d7613499565b602002602001015160176000600381106117f3576117f3613499565b015581518290600190811061180a5761180a613499565b6020026020010151601760016003811061182657611826613499565b015581518290600290811061183d5761183d613499565b6020026020010151601760026003811061185957611859613499565b0155601a5550565b6000610e73338484611e6b565b6000546001600160a01b031633146118985760405162461bcd60e51b8152600401610ad190613464565b6000821180156118a85750600081115b80156118b657506127108111155b6118bf57600080fd5b6118de816118d884600c546121c890919063ffffffff16565b9061224a565b600f555050565b6000546001600160a01b0316331461190f5760405162461bcd60e51b8152600401610ad190613464565b60006103e8600c54600761192391906135b8565b61192d9190613601565b905060006103e883600c5461194291906135b8565b61194c9190613601565b9050818110156119945760405162461bcd60e51b81526020600482015260136024820152725478204c696d697420697320746f6f206c6f7760681b6044820152606401610ad1565b600d555050565b6000610d696119a8610e7a565b6024546001600160a01b03166000908152601060205260409020546118d8906119d29060026121c8565b85906121c8565b611a146040518060c0016040528060608152602001600015158152602001600081526020016000815260200160008152602001600081525090565b600260036000846001600160a01b03166001600160a01b031681526020019081526020016000206003015481548110610fac57610fac613499565b6000546001600160a01b03163314611a795760405162461bcd60e51b8152600401610ad190613464565b601e5460405147916000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114611acf576040519150601f19603f3d011682016040523d82523d6000602084013e611ad4565b606091505b5050905080611b255760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e7366657200006044820152606401610ad1565b5050565b6000546001600160a01b03163314611b535760405162461bcd60e51b8152600401610ad190613464565b6024805460ff60a01b1916600160a01b84151502179055611b7581606461224a565b6025555050565b6000546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610ad190613464565b601c80546001600160a01b03199081166001600160a01b0398891617909155601e805482169688169690961790955560208054861694871694909417909355601d805485169286169290921790915560218054841692851692909217909155601f80549092169216919091179055565b611c4360405180608001604052806000151581526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152600360208181526040928390208351608081018552815460ff1615158152600182015492810192909252600281015493820193909352910154606082015290565b6000546001600160a01b03163314611cbd5760405162461bcd60e51b8152600401610ad190613464565b6001600160a01b038116611d225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611da75760405162461bcd60e51b8152600401610ad190613464565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600080611ddf8385613623565b905083811015610e735760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad1565b60008184841115611e555760405162461bcd60e51b8152600401610ad191906130ac565b506000611e62848661363b565b95945050505050565b60265460009060ff1615611e8b57611e8484848461228c565b9050610e73565b6001600160a01b03841660009081526013602052604081205460ff1680611eca57506001600160a01b03841660009081526013602052604090205460ff165b905060006001600160a01b038616301480611eed57506001600160a01b03851630145b6024549091506000906001600160a01b038881169116148015611f1d5750600b546001600160a01b038781169116145b80611f4d57506024546001600160a01b038781169116148015611f4d5750600b546001600160a01b038881169116145b905082158015611f5b575081155b8015611f65575080155b15611f7557611f75878787612372565b6024546001600160a01b03878116911614801590611fa157506009546001600160a01b03878116911614155b1561204f576001600160a01b03861660009081526013602052604090205460ff1680611ff25750600f546001600160a01b038716600090815260106020526040902054611fef908790613623565b11155b61204f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e742065786365656473207468652077616c6c60448201526732ba1039b4bd329760c11b6064820152608401610ad1565b612057612473565b15612064576120646124c9565b600061207088886127e1565b61207a5785612085565b612085888888612827565b90506120ed8660405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b815250601060008c6001600160a01b03166001600160a01b0316815260200190815260200160002054611e319092919063ffffffff16565b6001600160a01b03808a16600090815260106020526040808220939093559089168152205461211c9082611dd2565b6001600160a01b0380891660008181526010602052604090819020939093559151908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121709085815260200190565b60405180910390a3506001979650505050505050565b6000610e7383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e31565b6000826000036121da57506000610d69565b60006121e683856135b8565b9050826121f38583613601565b14610e735760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ad1565b6000610e7383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bb4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526010909152918220546122dd918490611e31565b6001600160a01b03808616600090815260106020526040808220939093559085168152205461230c9083611dd2565b6001600160a01b0380851660008181526010602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123609086815260200190565b60405180910390a35060019392505050565b6024546000906001600160a01b038581169116148061239e5750600b546001600160a01b038581169116145b6024549091506000906001600160a01b03858116911614806123cd5750600b546001600160a01b038581169116145b9050811561242057600d5483111561241b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ad1565b61246c565b801561246c57600e5483111561246c5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ad1565b5050505050565b6024546000906001600160a01b03163314801590612494575060265460ff16155b80156124a95750602454600160a01b900460ff165b8015610ec757505060255430600090815260106020526040902054101590565b6026805460ff191660011790556022546023546000916124e891610d6f565b6124f4576014546124f7565b60005b9050600061251b60026118d8601a546118d8866025546121c890919063ffffffff16565b905060006125348260255461218690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061256e5761256e613499565b6001600160a01b039283166020918202929092010152600a5482519116908290600190811061259f5761259f613499565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b81524792919091169063791ac947906125e9908690600090879030904290600401613652565b600060405180830381600087803b15801561260357600080fd5b505af1158015612617573d6000803e3d6000fd5b505050506000612630824761218690919063ffffffff16565b9050600061264b61264288600261224a565b601a5490612186565b9050600061266060026118d88481878d6121c8565b90506000612677836118d8601784015487906121c8565b9050600061268f846118d860176001015488906121c8565b905060006126a7856118d860176002015489906121c8565b905060006126c4866118d86016548a6121c890919063ffffffff16565b905060006126e1876118d86015548b6121c890919063ffffffff16565b90506126f08583868685612be2565b8b156127c857600b54601c5460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612766573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061278b91906136c3565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506026805460ff191690555050505050505050505050565b6001600160a01b03821660009081526012602052604081205460ff16158015610e735750506001600160a01b031660009081526012602052604090205460ff1615919050565b600080612843601b546118d861283c601a5490565b86906121c8565b905060008061287560405180608001604052806000151581526020016000815260200160008152602001600081525090565b6024546000906001600160a01b038a8116911614806128a15750600b546001600160a01b038a81169116145b6024549091506000906001600160a01b038a8116911614806128d05750600b546001600160a01b038a81169116145b6024549091506000906001600160a01b038c81169116148015906129025750600b546001600160a01b038c8116911614155b801561291c57506024546001600160a01b038b8116911614155b80156129365750600b546001600160a01b038b8116911614155b90508215612992576001600160a01b038a166000908152600360208181526040928390208351608081018552815460ff161515815260018201549281019290925260028101549382019390935291015460608201529350612a42565b81156129ec576001600160a01b038b166000908152600360208181526040928390208351608081018552815460ff161515815260018201549281019290925260028101549382019390935291015460608201529350612a42565b8015612a42576001600160a01b038b166000908152600360208181526040928390208351608081018552815460ff1615158152600182015492810192909252600281015493820193909352910154606082015293505b83518015612a54575083602001514311155b15612a7957612a76601b546118d886604001518a6121c890919063ffffffff16565b95505b600654612a869087611dd2565b6006558215612ad0576001600160a01b038a16600090815260046020526040902054612ab29087611dd2565b6001600160a01b038b16600090815260046020526040902055612b1b565b8180612ad95750805b15612b1b576001600160a01b038b16600090815260046020526040902054612b019087611dd2565b6001600160a01b038c166000908152600460205260409020555b612b258787612186565b30600090815260106020526040902054909550612b429086611dd2565b30600081815260106020526040908190209290925590516001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b939089815260200190565b60405180910390a3612ba58986612186565b9b9a5050505050505050505050565b60008183612bd55760405162461bcd60e51b8152600401610ad191906130ac565b506000611e628486613601565b601e546040516000916001600160a01b03169061753090889084818181858888f193505050503d8060008114612c34576040519150601f19603f3d011682016040523d82523d6000602084013e612c39565b606091505b50506020546040519192506000916001600160a01b039091169061753090889084818181858888f193505050503d8060008114612c92576040519150601f19603f3d011682016040523d82523d6000602084013e612c97565b606091505b5050601d546040519192506000916001600160a01b039091169061753090889084818181858888f193505050503d8060008114612cf0576040519150601f19603f3d011682016040523d82523d6000602084013e612cf5565b606091505b50506021546040519192506000916001600160a01b039091169061753090879084818181858888f193505050503d8060008114612d4e576040519150601f19603f3d011682016040523d82523d6000602084013e612d53565b606091505b50506021546040519192506000916001600160a01b039091169061753090899084818181858888f193505050503d8060008114612dac576040519150601f19603f3d011682016040523d82523d6000602084013e612db1565b606091505b50509050848015612dbf5750835b8015612dc85750825b8015612dd15750815b8015612dda5750805b612e265760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e7366657200006044820152606401610ad1565b50505050505050505050565b828054612e3e9061342a565b90600052602060002090601f016020900481019282612e605760008555612ea6565b82601f10612e7957805160ff1916838001178555612ea6565b82800160010185558215612ea6579182015b82811115612ea6578251825591602001919060010190612e8b565b50612eb2929150612eb6565b5090565b5b80821115612eb25760008155600101612eb7565b600060208284031215612edd57600080fd5b5035919050565b6000815180845260005b81811015612f0a57602081850181015186830182015201612eee565b81811115612f1c576000602083870101525b50601f01601f19169290920160200192915050565b60c081526000612f4460c0830189612ee4565b96151560208301525060408101949094526060840192909252608083015260a090910152919050565b80358015158114612f7d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612fc157612fc1612f82565b604052919050565b600082601f830112612fda57600080fd5b813567ffffffffffffffff811115612ff457612ff4612f82565b613007601f8201601f1916602001612f98565b81815284602083860101111561301c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561305257600080fd5b8635955061306260208801612f6d565b9450604087013567ffffffffffffffff81111561307e57600080fd5b61308a89828a01612fc9565b945050606087013592506080870135915060a087013590509295509295509295565b602081526000610e736020830184612ee4565b600080600080608085870312156130d557600080fd5b843567ffffffffffffffff8111156130ec57600080fd5b6130f887828801612fc9565b97602087013597506040870135966060013595509350505050565b80356001600160a01b0381168114612f7d57600080fd5b6000806040838503121561313d57600080fd5b61314683613113565b946020939093013593505050565b6000806040838503121561316757600080fd5b50508035926020909101359150565b60008060006060848603121561318b57600080fd5b61319484613113565b92506131a260208501613113565b9150604084013590509250925092565b6000815160c084526131c760c0850182612ee4565b905060208301511515602085015260408301516040850152606083015160608501526080830151608085015260a083015160a08501528091505092915050565b602081526000610e7360208301846131b2565b60006020828403121561322c57600080fd5b610e7382613113565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561328a57603f198886030184526132788583516131b2565b9450928501929085019060010161325c565b5092979650505050505050565b600080604083850312156132aa57600080fd5b6132b383613113565b91506132c160208401612f6d565b90509250929050565b600060208083850312156132dd57600080fd5b823567ffffffffffffffff808211156132f557600080fd5b818501915085601f83011261330957600080fd5b81358181111561331b5761331b612f82565b8060051b915061332c848301612f98565b818152918301840191848101908884111561334657600080fd5b938501935b838510156133645784358252938501939085019061334b565b98975050505050505050565b6000806040838503121561338357600080fd5b61338c83613113565b91506132c160208401613113565b600080604083850312156133ad57600080fd5b61314683612f6d565b60008060008060008060c087890312156133cf57600080fd5b6133d887613113565b95506133e660208801613113565b94506133f460408801613113565b935061340260608801613113565b925061341060808801613113565b915061341e60a08801613113565b90509295509295509295565b600181811c9082168061343e57607f821691505b60208210810361345e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135005781600019048211156134e6576134e66134af565b808516156134f357918102915b93841c93908002906134ca565b509250929050565b60008261351757506001610d69565b8161352457506000610d69565b816001811461353a576002811461354457613560565b6001915050610d69565b60ff841115613555576135556134af565b50506001821b610d69565b5060208310610133831016604e8410600b8410161715613583575081810a610d69565b61358d83836134c5565b80600019048211156135a1576135a16134af565b029392505050565b6000610e7360ff841683613508565b60008160001904831182151516156135d2576135d26134af565b500290565b60208082526010908201526f4665657320746f6f206869676820212160801b604082015260600190565b60008261361e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613636576136366134af565b500190565b60008282101561364d5761364d6134af565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136a25784516001600160a01b03168352938301939183019160010161367d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136d857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206c58d2261dd554a9f3f85d6efea940cf65506d58bd74b29bbaf8e49169b20ab664736f6c634300080e0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000d12fc4f6998680715f7f17d785213b00b737ccf7000000000000000000000000c870545e583a48db69c80c2dda1b87af1bd305de00000000000000000000000095cada9558bbaa3185885c4d849965ed868222920000000000000000000000007cd4ce89c008ee3b0911c4de5d1aec970c4d9da0000000000000000000000000c3b6421cf042d25fd58e14ca0b7e30f00b566df400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000960000000000000000000000000000000000000000000000000000000000000145000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000032

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063715018a611610190578063cf4be394116100dc578063df8069cd11610095578063f2fde38b1161006f578063f2fde38b14610958578063f84ba65d14610978578063f887ea4014610998578063f9b4a4c8146109b857600080fd5b8063df8069cd146108ad578063e4d2620e146108cd578063ed4da47a1461092257600080fd5b8063cf4be394146107dc578063d51ed1c8146107f2578063da0240c614610812578063dae3493814610832578063dd62ed3e14610847578063df20fd491461088d57600080fd5b806395d89b4111610149578063a9059cbb11610123578063a9059cbb14610766578063abe57e7014610786578063b2c6e1e6146107a6578063c20979dd146107c657600080fd5b806395d89b41146106fa578063a7d38c8914610726578063a8aa1b311461074657600080fd5b8063715018a61461064a5780637ae316d01461065f57806384dfbfe214610674578063893d20e8146106945780638da5cb5b146106c65780638f9a55c0146106e457600080fd5b8063313ce5671161024f578063625e764c116102085780636c770fc5116101e25780636c770fc5146105b35780636ddd1713146105d357806370a08231146105f4578063711370c51461062a57600080fd5b8063625e764c146105515780636471af8314610571578063658d4b7f1461059357600080fd5b8063313ce5671461049c57806333477327146104b85780633ae261ae146104ce5780634567bfba146104e457806348d02b8b14610504578063571ac8b01461053157600080fd5b80631161ae39116102a15780631161ae39146103fc57806318160ddd1461041c578063201e79911461043157806323b872dd1461045157806325635d24146104715780632b112e491461048757600080fd5b8063039af9eb146102f457806304457c1c1461032f5780630445b6671461035157806306fdde031461037557806307ac61dd146103ac578063095ea7b3146103cc57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612ecb565b6109ce565b60405161032696959493929190612f31565b60405180910390f35b34801561033b57600080fd5b5061034f61034a366004613039565b610aa7565b005b34801561035d57600080fd5b5061036760255481565b604051908152602001610326565b34801561038157600080fd5b50604080518082019091526005815264414552494560d81b60208201525b60405161032691906130ac565b3480156103b857600080fd5b5061034f6103c73660046130bf565b610be7565b3480156103d857600080fd5b506103ec6103e736600461312a565b610d02565b6040519015158152602001610326565b34801561040857600080fd5b506103ec610417366004613154565b610d6f565b34801561042857600080fd5b50600c54610367565b34801561043d57600080fd5b5061034f61044c366004613154565b610d83565b34801561045d57600080fd5b506103ec61046c366004613176565b610db8565b34801561047d57600080fd5b5061036760065481565b34801561049357600080fd5b50610367610e7a565b3480156104a857600080fd5b5060405160128152602001610326565b3480156104c457600080fd5b50610367600d5481565b3480156104da57600080fd5b5061036760015481565b3480156104f057600080fd5b5061034f6104ff366004612ecb565b610ecc565b34801561051057600080fd5b5061052461051f366004612ecb565b610f5e565b6040516103269190613207565b34801561053d57600080fd5b506103ec61054c36600461321a565b611095565b34801561055d57600080fd5b5061034f61056c366004612ecb565b6110a3565b34801561057d57600080fd5b5061058661113b565b6040516103269190613235565b34801561059f57600080fd5b5061034f6105ae366004613297565b611269565b3480156105bf57600080fd5b5061034f6105ce366004612ecb565b6112be565b3480156105df57600080fd5b506024546103ec90600160a01b900460ff1681565b34801561060057600080fd5b5061036761060f36600461321a565b6001600160a01b031660009081526010602052604090205490565b34801561063657600080fd5b5061034f610645366004612ecb565b61154d565b34801561065657600080fd5b5061034f611603565b34801561066b57600080fd5b50601a54610367565b34801561068057600080fd5b5061034f61068f366004612ecb565b611677565b3480156106a057600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610326565b3480156106d257600080fd5b506000546001600160a01b03166106ae565b3480156106f057600080fd5b50610367600f5481565b34801561070657600080fd5b5060408051808201909152600381526220a2a960e91b602082015261039f565b34801561073257600080fd5b5061034f6107413660046132ca565b6116fd565b34801561075257600080fd5b506024546106ae906001600160a01b031681565b34801561077257600080fd5b506103ec61078136600461312a565b611861565b34801561079257600080fd5b5061034f6107a1366004613154565b61186e565b3480156107b257600080fd5b5061034f6107c1366004612ecb565b6118e5565b3480156107d257600080fd5b5061036760075481565b3480156107e857600080fd5b50610367600e5481565b3480156107fe57600080fd5b5061036761080d366004612ecb565b61199b565b34801561081e57600080fd5b5061052461082d36600461321a565b6119d9565b34801561083e57600080fd5b5061034f611a4f565b34801561085357600080fd5b50610367610862366004613370565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561089957600080fd5b5061034f6108a836600461339a565b611b29565b3480156108b957600080fd5b5061034f6108c83660046133b6565b611b7c565b3480156108d957600080fd5b506108ed6108e836600461321a565b611c16565b604051610326919081511515815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561092e57600080fd5b5061036761093d36600461321a565b6001600160a01b031660009081526004602052604090205490565b34801561096457600080fd5b5061034f61097336600461321a565b611c93565b34801561098457600080fd5b5061034f610993366004613297565b611d7d565b3480156109a457600080fd5b50600b546106ae906001600160a01b031681565b3480156109c457600080fd5b5061036760055481565b600281815481106109de57600080fd5b9060005260206000209060060201600091509050806000018054610a019061342a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2d9061342a565b8015610a7a5780601f10610a4f57610100808354040283529160200191610a7a565b820191906000526020600020905b815481529060010190602001808311610a5d57829003601f168201915b5050506001840154600285015460038601546004870154600590970154959660ff90931695919450925086565b6000546001600160a01b03163314610ada5760405162461bcd60e51b8152600401610ad190613464565b60405180910390fd5b8460028781548110610aee57610aee613499565b906000526020600020906006020160010160006101000a81548160ff0219169083151502179055508360028781548110610b2a57610b2a613499565b90600052602060002090600602016000019080519060200190610b4e929190612e32565b50610b5b6012600a6135a9565b610b6590846135b8565b60028781548110610b7857610b78613499565b9060005260206000209060060201600201819055508160028781548110610ba157610ba1613499565b9060005260206000209060060201600301819055508060028781548110610bca57610bca613499565b906000526020600020906006020160040181905550505050505050565b6000546001600160a01b03163314610c115760405162461bcd60e51b8152600401610ad190613464565b6040805160c081018252858152600160208201526000918101610c366012600a6135a9565b610c4090876135b8565b81526020808201869052604082018590526001805460609093019290925260028054928301815560005282518051939450849360069093027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0192610ca89284920190612e32565b5060208201516001828101805460ff19169215159290921790915560408301516002830155606083015160038301556080830151600483015560a0909201516005909101558054610cf891611dd2565b6001555050505050565b3360008181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d5d9086815260200190565b60405180910390a35060015b92915050565b600082610d7b8361199b565b119392505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b8152600401610ad190613464565b602291909155602355565b6001600160a01b038316600090815260116020908152604080832033845290915281205460001914610e65576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601182528381203382529091529190912054610e40918490611e31565b6001600160a01b03851660009081526011602090815260408083203384529091529020555b610e70848484611e6b565b90505b9392505050565b6008546001600160a01b0316600090815260106020526040812054610ec7906009546001600160a01b0316600090815260106020526040902054610ec190600c5490612186565b90612186565b905090565b6000546001600160a01b03163314610ef65760405162461bcd60e51b8152600401610ad190613464565b601654600090610f2f90610f29601760020154610f29601760010154610f29601760000154601454610f29908b90611dd2565b90611dd2565b90506103e8811115610f535760405162461bcd60e51b8152600401610ad1906135d7565b601591909155601a55565b610f996040518060c0016040528060608152602001600015158152602001600081526020016000815260200160008152602001600081525090565b60028281548110610fac57610fac613499565b90600052602060002090600602016040518060c0016040529081600082018054610fd59061342a565b80601f01602080910402602001604051908101604052809291908181526020018280546110019061342a565b801561104e5780601f106110235761010080835404028352916020019161104e565b820191906000526020600020905b81548152906001019060200180831161103157829003601f168201915b5050509183525050600182015460ff161515602082015260028201546040820152600382015460608201526004820154608082015260059091015460a09091015292915050565b6000610d6982600019610d02565b6000546001600160a01b031633146110cd5760405162461bcd60e51b8152600401610ad190613464565b600061110d601760020154610f29601760010154610f29601454610f29601554610f29601760006003811061110457611104613499565b01548b90611dd2565b90506103e881106111305760405162461bcd60e51b8152600401610ad1906135d7565b601691909155601a55565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561126057838290600052602060002090600602016040518060c00160405290816000820180546111929061342a565b80601f01602080910402602001604051908101604052809291908181526020018280546111be9061342a565b801561120b5780601f106111e05761010080835404028352916020019161120b565b820191906000526020600020905b8154815290600101906020018083116111ee57829003601f168201915b505050918352505060018281015460ff16151560208084019190915260028401546040840152600384015460608401526004840154608084015260059093015460a0909201919091529183529201910161115f565b50505050905090565b6000546001600160a01b031633146112935760405162461bcd60e51b8152600401610ad190613464565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000600282815481106112d3576112d3613499565b90600052602060002090600602016040518060c00160405290816000820180546112fc9061342a565b80601f01602080910402602001604051908101604052809291908181526020018280546113289061342a565b80156113755780601f1061134a57610100808354040283529160200191611375565b820191906000526020600020905b81548152906001019060200180831161135857829003601f168201915b5050509183525050600182015460ff16151560208201526002820154604080830191909152600383015460608301526004830154608083015260059092015460a09091015281015190915060006113cb3361060f565b90508181101561141d5760405162461bcd60e51b815260206004820152601960248201527f494e533a20496e73756666696369656e742042616c616e6365000000000000006044820152606401610ad1565b826020015161146e5760405162461bcd60e51b815260206004820181905260248201527f494e4143544956453a205468652054696572206973206e6f74206163746976656044820152606401610ad1565b611484336009546001600160a01b031684611e6b565b506005546114929083611dd2565b6005553360009081526003602052604090205460ff166114be576007546114ba906001611dd2565b6007555b60405180608001604052806001151581526020016114e9856080015143611dd290919063ffffffff16565b81526060850151602082015260400185905260036000336001600160a01b0316815260208082019290925260409081016000208351815460ff1916901515178155918301516001830155820151600282015560609091015160039091015550505050565b6000546001600160a01b031633146115775760405162461bcd60e51b8152600401610ad190613464565b60006103e8600c54600761158b91906135b8565b6115959190613601565b905060006103e883600c546115aa91906135b8565b6115b49190613601565b9050818110156115fc5760405162461bcd60e51b81526020600482015260136024820152725478204c696d697420697320746f6f206c6f7760681b6044820152606401610ad1565b600e555050565b6000546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610ad190613464565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116a15760405162461bcd60e51b8152600401610ad190613464565b6016546000906116ce90610f29601760020154610f29601760010154601554610f29908160176000611104565b90506103e88111156116f25760405162461bcd60e51b8152600401610ad1906135d7565b601491909155601a55565b6000546001600160a01b031633146117275760405162461bcd60e51b8152600401610ad190613464565b60006117a0601654610f29601554610f29601454610f298860028151811061175157611751613499565b6020026020010151610f298a60018151811061176f5761176f613499565b60200260200101518b60008151811061178a5761178a613499565b6020026020010151611dd290919063ffffffff16565b90506103e88111156117c45760405162461bcd60e51b8152600401610ad1906135d7565b816000815181106117d7576117d7613499565b602002602001015160176000600381106117f3576117f3613499565b015581518290600190811061180a5761180a613499565b6020026020010151601760016003811061182657611826613499565b015581518290600290811061183d5761183d613499565b6020026020010151601760026003811061185957611859613499565b0155601a5550565b6000610e73338484611e6b565b6000546001600160a01b031633146118985760405162461bcd60e51b8152600401610ad190613464565b6000821180156118a85750600081115b80156118b657506127108111155b6118bf57600080fd5b6118de816118d884600c546121c890919063ffffffff16565b9061224a565b600f555050565b6000546001600160a01b0316331461190f5760405162461bcd60e51b8152600401610ad190613464565b60006103e8600c54600761192391906135b8565b61192d9190613601565b905060006103e883600c5461194291906135b8565b61194c9190613601565b9050818110156119945760405162461bcd60e51b81526020600482015260136024820152725478204c696d697420697320746f6f206c6f7760681b6044820152606401610ad1565b600d555050565b6000610d696119a8610e7a565b6024546001600160a01b03166000908152601060205260409020546118d8906119d29060026121c8565b85906121c8565b611a146040518060c0016040528060608152602001600015158152602001600081526020016000815260200160008152602001600081525090565b600260036000846001600160a01b03166001600160a01b031681526020019081526020016000206003015481548110610fac57610fac613499565b6000546001600160a01b03163314611a795760405162461bcd60e51b8152600401610ad190613464565b601e5460405147916000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114611acf576040519150601f19603f3d011682016040523d82523d6000602084013e611ad4565b606091505b5050905080611b255760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e7366657200006044820152606401610ad1565b5050565b6000546001600160a01b03163314611b535760405162461bcd60e51b8152600401610ad190613464565b6024805460ff60a01b1916600160a01b84151502179055611b7581606461224a565b6025555050565b6000546001600160a01b03163314611ba65760405162461bcd60e51b8152600401610ad190613464565b601c80546001600160a01b03199081166001600160a01b0398891617909155601e805482169688169690961790955560208054861694871694909417909355601d805485169286169290921790915560218054841692851692909217909155601f80549092169216919091179055565b611c4360405180608001604052806000151581526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152600360208181526040928390208351608081018552815460ff1615158152600182015492810192909252600281015493820193909352910154606082015290565b6000546001600160a01b03163314611cbd5760405162461bcd60e51b8152600401610ad190613464565b6001600160a01b038116611d225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611da75760405162461bcd60e51b8152600401610ad190613464565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600080611ddf8385613623565b905083811015610e735760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad1565b60008184841115611e555760405162461bcd60e51b8152600401610ad191906130ac565b506000611e62848661363b565b95945050505050565b60265460009060ff1615611e8b57611e8484848461228c565b9050610e73565b6001600160a01b03841660009081526013602052604081205460ff1680611eca57506001600160a01b03841660009081526013602052604090205460ff165b905060006001600160a01b038616301480611eed57506001600160a01b03851630145b6024549091506000906001600160a01b038881169116148015611f1d5750600b546001600160a01b038781169116145b80611f4d57506024546001600160a01b038781169116148015611f4d5750600b546001600160a01b038881169116145b905082158015611f5b575081155b8015611f65575080155b15611f7557611f75878787612372565b6024546001600160a01b03878116911614801590611fa157506009546001600160a01b03878116911614155b1561204f576001600160a01b03861660009081526013602052604090205460ff1680611ff25750600f546001600160a01b038716600090815260106020526040902054611fef908790613623565b11155b61204f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e742065786365656473207468652077616c6c60448201526732ba1039b4bd329760c11b6064820152608401610ad1565b612057612473565b15612064576120646124c9565b600061207088886127e1565b61207a5785612085565b612085888888612827565b90506120ed8660405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b815250601060008c6001600160a01b03166001600160a01b0316815260200190815260200160002054611e319092919063ffffffff16565b6001600160a01b03808a16600090815260106020526040808220939093559089168152205461211c9082611dd2565b6001600160a01b0380891660008181526010602052604090819020939093559151908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121709085815260200190565b60405180910390a3506001979650505050505050565b6000610e7383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e31565b6000826000036121da57506000610d69565b60006121e683856135b8565b9050826121f38583613601565b14610e735760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ad1565b6000610e7383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bb4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526010909152918220546122dd918490611e31565b6001600160a01b03808616600090815260106020526040808220939093559085168152205461230c9083611dd2565b6001600160a01b0380851660008181526010602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123609086815260200190565b60405180910390a35060019392505050565b6024546000906001600160a01b038581169116148061239e5750600b546001600160a01b038581169116145b6024549091506000906001600160a01b03858116911614806123cd5750600b546001600160a01b038581169116145b9050811561242057600d5483111561241b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ad1565b61246c565b801561246c57600e5483111561246c5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ad1565b5050505050565b6024546000906001600160a01b03163314801590612494575060265460ff16155b80156124a95750602454600160a01b900460ff165b8015610ec757505060255430600090815260106020526040902054101590565b6026805460ff191660011790556022546023546000916124e891610d6f565b6124f4576014546124f7565b60005b9050600061251b60026118d8601a546118d8866025546121c890919063ffffffff16565b905060006125348260255461218690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061256e5761256e613499565b6001600160a01b039283166020918202929092010152600a5482519116908290600190811061259f5761259f613499565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b81524792919091169063791ac947906125e9908690600090879030904290600401613652565b600060405180830381600087803b15801561260357600080fd5b505af1158015612617573d6000803e3d6000fd5b505050506000612630824761218690919063ffffffff16565b9050600061264b61264288600261224a565b601a5490612186565b9050600061266060026118d88481878d6121c8565b90506000612677836118d8601784015487906121c8565b9050600061268f846118d860176001015488906121c8565b905060006126a7856118d860176002015489906121c8565b905060006126c4866118d86016548a6121c890919063ffffffff16565b905060006126e1876118d86015548b6121c890919063ffffffff16565b90506126f08583868685612be2565b8b156127c857600b54601c5460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612766573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061278b91906136c3565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506026805460ff191690555050505050505050505050565b6001600160a01b03821660009081526012602052604081205460ff16158015610e735750506001600160a01b031660009081526012602052604090205460ff1615919050565b600080612843601b546118d861283c601a5490565b86906121c8565b905060008061287560405180608001604052806000151581526020016000815260200160008152602001600081525090565b6024546000906001600160a01b038a8116911614806128a15750600b546001600160a01b038a81169116145b6024549091506000906001600160a01b038a8116911614806128d05750600b546001600160a01b038a81169116145b6024549091506000906001600160a01b038c81169116148015906129025750600b546001600160a01b038c8116911614155b801561291c57506024546001600160a01b038b8116911614155b80156129365750600b546001600160a01b038b8116911614155b90508215612992576001600160a01b038a166000908152600360208181526040928390208351608081018552815460ff161515815260018201549281019290925260028101549382019390935291015460608201529350612a42565b81156129ec576001600160a01b038b166000908152600360208181526040928390208351608081018552815460ff161515815260018201549281019290925260028101549382019390935291015460608201529350612a42565b8015612a42576001600160a01b038b166000908152600360208181526040928390208351608081018552815460ff1615158152600182015492810192909252600281015493820193909352910154606082015293505b83518015612a54575083602001514311155b15612a7957612a76601b546118d886604001518a6121c890919063ffffffff16565b95505b600654612a869087611dd2565b6006558215612ad0576001600160a01b038a16600090815260046020526040902054612ab29087611dd2565b6001600160a01b038b16600090815260046020526040902055612b1b565b8180612ad95750805b15612b1b576001600160a01b038b16600090815260046020526040902054612b019087611dd2565b6001600160a01b038c166000908152600460205260409020555b612b258787612186565b30600090815260106020526040902054909550612b429086611dd2565b30600081815260106020526040908190209290925590516001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b939089815260200190565b60405180910390a3612ba58986612186565b9b9a5050505050505050505050565b60008183612bd55760405162461bcd60e51b8152600401610ad191906130ac565b506000611e628486613601565b601e546040516000916001600160a01b03169061753090889084818181858888f193505050503d8060008114612c34576040519150601f19603f3d011682016040523d82523d6000602084013e612c39565b606091505b50506020546040519192506000916001600160a01b039091169061753090889084818181858888f193505050503d8060008114612c92576040519150601f19603f3d011682016040523d82523d6000602084013e612c97565b606091505b5050601d546040519192506000916001600160a01b039091169061753090889084818181858888f193505050503d8060008114612cf0576040519150601f19603f3d011682016040523d82523d6000602084013e612cf5565b606091505b50506021546040519192506000916001600160a01b039091169061753090879084818181858888f193505050503d8060008114612d4e576040519150601f19603f3d011682016040523d82523d6000602084013e612d53565b606091505b50506021546040519192506000916001600160a01b039091169061753090899084818181858888f193505050503d8060008114612dac576040519150601f19603f3d011682016040523d82523d6000602084013e612db1565b606091505b50509050848015612dbf5750835b8015612dc85750825b8015612dd15750815b8015612dda5750805b612e265760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e7366657200006044820152606401610ad1565b50505050505050505050565b828054612e3e9061342a565b90600052602060002090601f016020900481019282612e605760008555612ea6565b82601f10612e7957805160ff1916838001178555612ea6565b82800160010185558215612ea6579182015b82811115612ea6578251825591602001919060010190612e8b565b50612eb2929150612eb6565b5090565b5b80821115612eb25760008155600101612eb7565b600060208284031215612edd57600080fd5b5035919050565b6000815180845260005b81811015612f0a57602081850181015186830182015201612eee565b81811115612f1c576000602083870101525b50601f01601f19169290920160200192915050565b60c081526000612f4460c0830189612ee4565b96151560208301525060408101949094526060840192909252608083015260a090910152919050565b80358015158114612f7d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612fc157612fc1612f82565b604052919050565b600082601f830112612fda57600080fd5b813567ffffffffffffffff811115612ff457612ff4612f82565b613007601f8201601f1916602001612f98565b81815284602083860101111561301c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561305257600080fd5b8635955061306260208801612f6d565b9450604087013567ffffffffffffffff81111561307e57600080fd5b61308a89828a01612fc9565b945050606087013592506080870135915060a087013590509295509295509295565b602081526000610e736020830184612ee4565b600080600080608085870312156130d557600080fd5b843567ffffffffffffffff8111156130ec57600080fd5b6130f887828801612fc9565b97602087013597506040870135966060013595509350505050565b80356001600160a01b0381168114612f7d57600080fd5b6000806040838503121561313d57600080fd5b61314683613113565b946020939093013593505050565b6000806040838503121561316757600080fd5b50508035926020909101359150565b60008060006060848603121561318b57600080fd5b61319484613113565b92506131a260208501613113565b9150604084013590509250925092565b6000815160c084526131c760c0850182612ee4565b905060208301511515602085015260408301516040850152606083015160608501526080830151608085015260a083015160a08501528091505092915050565b602081526000610e7360208301846131b2565b60006020828403121561322c57600080fd5b610e7382613113565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561328a57603f198886030184526132788583516131b2565b9450928501929085019060010161325c565b5092979650505050505050565b600080604083850312156132aa57600080fd5b6132b383613113565b91506132c160208401612f6d565b90509250929050565b600060208083850312156132dd57600080fd5b823567ffffffffffffffff808211156132f557600080fd5b818501915085601f83011261330957600080fd5b81358181111561331b5761331b612f82565b8060051b915061332c848301612f98565b818152918301840191848101908884111561334657600080fd5b938501935b838510156133645784358252938501939085019061334b565b98975050505050505050565b6000806040838503121561338357600080fd5b61338c83613113565b91506132c160208401613113565b600080604083850312156133ad57600080fd5b61314683612f6d565b60008060008060008060c087890312156133cf57600080fd5b6133d887613113565b95506133e660208801613113565b94506133f460408801613113565b935061340260608801613113565b925061341060808801613113565b915061341e60a08801613113565b90509295509295509295565b600181811c9082168061343e57607f821691505b60208210810361345e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156135005781600019048211156134e6576134e66134af565b808516156134f357918102915b93841c93908002906134ca565b509250929050565b60008261351757506001610d69565b8161352457506000610d69565b816001811461353a576002811461354457613560565b6001915050610d69565b60ff841115613555576135556134af565b50506001821b610d69565b5060208310610133831016604e8410600b8410161715613583575081810a610d69565b61358d83836134c5565b80600019048211156135a1576135a16134af565b029392505050565b6000610e7360ff841683613508565b60008160001904831182151516156135d2576135d26134af565b500290565b60208082526010908201526f4665657320746f6f206869676820212160801b604082015260600190565b60008261361e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613636576136366134af565b500190565b60008282101561364d5761364d6134af565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136a25784516001600160a01b03168352938301939183019160010161367d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136d857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206c58d2261dd554a9f3f85d6efea940cf65506d58bd74b29bbaf8e49169b20ab664736f6c634300080e0033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000d12fc4f6998680715f7f17d785213b00b737ccf7000000000000000000000000c870545e583a48db69c80c2dda1b87af1bd305de00000000000000000000000095cada9558bbaa3185885c4d849965ed868222920000000000000000000000007cd4ce89c008ee3b0911c4de5d1aec970c4d9da0000000000000000000000000c3b6421cf042d25fd58e14ca0b7e30f00b566df400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000960000000000000000000000000000000000000000000000000000000000000145000000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000032

-----Decoded View---------------
Arg [0] : _receivers (address[]): 0xd12fc4f6998680715F7F17D785213b00B737CcF7,0xC870545E583A48db69C80c2dDa1b87aF1Bd305dE,0x95CADa9558bbaA3185885c4D849965eD86822292,0x7CD4CE89C008Ee3B0911c4De5d1aec970C4d9DA0,0xc3B6421CF042d25fd58e14cA0B7e30f00B566df4
Arg [1] : _fees (uint256[]): 25,25,150,325,125,50

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 000000000000000000000000d12fc4f6998680715f7f17d785213b00b737ccf7
Arg [4] : 000000000000000000000000c870545e583a48db69c80c2dda1b87af1bd305de
Arg [5] : 00000000000000000000000095cada9558bbaa3185885c4d849965ed86822292
Arg [6] : 0000000000000000000000007cd4ce89c008ee3b0911c4de5d1aec970c4d9da0
Arg [7] : 000000000000000000000000c3b6421cf042d25fd58e14ca0b7e30f00b566df4
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000145
Arg [13] : 000000000000000000000000000000000000000000000000000000000000007d
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000032


Deployed Bytecode Sourcemap

7631:20364:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8015:26;;;;;;;;;;-1:-1:-1;8015:26:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;20972:426;;;;;;;;;;-1:-1:-1;20972:426:0;;;;;:::i;:::-;;:::i;:::-;;10161:50;;;;;;;;;;;;;;;;;;;3199:25:1;;;3187:2;3172:18;10161:50:0;3053:177:1;27588:71:0;;;;;;;;;;-1:-1:-1;27651:5:0;;;;;;;;;;;;-1:-1:-1;;;27651:5:0;;;;27588:71;;;;;;;:::i;20504:460::-;;;;;;;;;;-1:-1:-1;20504:460:0;;;;;:::i;:::-;;:::i;12023:216::-;;;;;;;;;;-1:-1:-1;12023:216:0;;;;;:::i;:::-;;:::i;:::-;;;4594:14:1;;4587:22;4569:41;;4557:2;4542:18;12023:216:0;4429:187:1;27092:150:0;;;;;;;;;;-1:-1:-1;27092:150:0;;;;;:::i;:::-;;:::i;27336:88::-;;;;;;;;;;-1:-1:-1;27409:12:0;;27336:88;;26565:182;;;;;;;;;;-1:-1:-1;26565:182:0;;;;;:::i;:::-;;:::i;12541:370::-;;;;;;;;;;-1:-1:-1;12541:370:0;;;;;:::i;:::-;;:::i;8396:28::-;;;;;;;;;;;;;;;;26767:142;;;;;;;;;;;;;:::i;27430:71::-;;;;;;;;;;-1:-1:-1;27430:71:0;;8621:2;5349:36:1;;5337:2;5322:18;27430:71:0;5207:184:1;9089:59:0;;;;;;;;;;;;;;;;7979:29;;;;;;;;;;;;;;;;23559:341;;;;;;;;;;-1:-1:-1;23559:341:0;;;;;:::i;:::-;;:::i;21510:113::-;;;;;;;;;;-1:-1:-1;21510:113:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12247:122::-;;;;;;;;;;-1:-1:-1;12247:122:0;;;;;:::i;:::-;;:::i;24254:342::-;;;;;;;;;;-1:-1:-1;24254:342:0;;;;;:::i;:::-;;:::i;21406:96::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25591:119::-;;;;;;;;;;-1:-1:-1;25591:119:0;;;;;:::i;:::-;;:::i;22030:1107::-;;;;;;;;;;-1:-1:-1;22030:1107:0;;;;;:::i;:::-;;:::i;10122:30::-;;;;;;;;;;-1:-1:-1;10122:30:0;;;;-1:-1:-1;;;10122:30:0;;;;;;27742:105;;;;;;;;;;-1:-1:-1;27742:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;27826:18:0;27808:7;27826:18;;;:9;:18;;;;;;;27742:105;24984:367;;;;;;;;;;-1:-1:-1;24984:367:0;;;;;:::i;:::-;;:::i;6914:148::-;;;;;;;;;;;;;:::i;15226:87::-;;;;;;;;;;-1:-1:-1;15297:8:0;;15226:87;;23906:336;;;;;;;;;;-1:-1:-1;23906:336:0;;;;;:::i;:::-;;:::i;27665:71::-;;;;;;;;;;-1:-1:-1;27708:7:0;6338:6;-1:-1:-1;;;;;6338:6:0;27665:71;;;-1:-1:-1;;;;;7664:32:1;;;7646:51;;7634:2;7619:18;27665:71:0;7500:203:1;6273:79:0;;;;;;;;;;-1:-1:-1;6311:7:0;6338:6;-1:-1:-1;;;;;6338:6:0;6273:79;;9258:58;;;;;;;;;;;;;;;;27507:75;;;;;;;;;;-1:-1:-1;27572:7:0;;;;;;;;;;;;-1:-1:-1;;;27572:7:0;;;;27507:75;;23149:404;;;;;;;;;;-1:-1:-1;23149:404:0;;;;;:::i;:::-;;:::i;10071:19::-;;;;;;;;;;-1:-1:-1;10071:19:0;;;;-1:-1:-1;;;;;10071:19:0;;;12377:156;;;;;;;;;;-1:-1:-1;12377:156:0;;;;;:::i;:::-;;:::i;25359:220::-;;;;;;;;;;-1:-1:-1;25359:220:0;;;;;:::i;:::-;;:::i;24608:364::-;;;;;;;;;;-1:-1:-1;24608:364:0;;;;;:::i;:::-;;:::i;8431:28::-;;;;;;;;;;;;;;;;9173:60;;;;;;;;;;;;;;;;26917:167;;;;;;;;;;-1:-1:-1;26917:167:0;;;;;:::i;:::-;;:::i;21629:143::-;;;;;;;;;;-1:-1:-1;21629:143:0;;;;;:::i;:::-;;:::i;20144:287::-;;;;;;;;;;;;;:::i;27853:133::-;;;;;;;;;;-1:-1:-1;27853:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;27955:19:0;;;27937:7;27955:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;27853:133;26393:164;;;;;;;;;;-1:-1:-1;26393:164:0;;;;;:::i;:::-;;:::i;25857:528::-;;;;;;;;;;-1:-1:-1;25857:528:0;;;;;:::i;:::-;;:::i;21780:113::-;;;;;;;;;;-1:-1:-1;21780:113:0;;;;;:::i;:::-;;:::i;:::-;;;;;;9970:13:1;;9963:21;9956:29;9938:48;;10042:4;10030:17;;;10024:24;10002:20;;;9995:54;10105:4;10093:17;;;10087:24;10065:20;;;10058:54;10168:4;10156:17;;;10150:24;10128:20;;;10121:54;;;;9925:3;9910:19;;9741:440;21899:125:0;;;;;;;;;;-1:-1:-1;21899:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21991:25:0;21965:7;21991:25;;;:19;:25;;;;;;;21899:125;7217:244;;;;;;;;;;-1:-1:-1;7217:244:0;;;;;:::i;:::-;;:::i;25718:127::-;;;;;;;;;;-1:-1:-1;25718:127:0;;;;;:::i;:::-;;:::i;8856:81::-;;;;;;;;;;-1:-1:-1;8856:81:0;;;;-1:-1:-1;;;;;8856:81:0;;;8356:33;;;;;;;;;;;;;;;;8015:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8015:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8015:26:0;-1:-1:-1;8015:26:0;:::o;20972:426::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;;;;;;;;;21204:7:::1;21182:5;21188;21182:12;;;;;;;;:::i;:::-;;;;;;;;;;;:19;;;:29;;;;;;;;;;;;;;;;;;21242:9;21222:5;21228;21222:12;;;;;;;;:::i;:::-;;;;;;;;;;;:17;;:29;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21291:15:0::1;8621:2;21291;:15;:::i;:::-;21283:24;::::0;:4;:24:::1;:::i;:::-;21262:5;21268;21262:12;;;;;;;;:::i;:::-;;;;;;;;;;;:17;;:46;;;;21343:8;21319:5;21325;21319:12;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;:32;;;;21384:6;21362:5;21368;21362:12;;;;;;;;:::i;:::-;;;;;;;;;;;:19;;:28;;;;20972:426:::0;;;;;;:::o;20504:460::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;20700:178:::1;::::0;;::::1;::::0;::::1;::::0;;;;;20750:4:::1;20700:178;::::0;::::1;::::0;20670:27:::1;::::0;20700:178;;20778:15:::1;8621:2;20778;:15;:::i;:::-;20770:24;::::0;:4;:24:::1;:::i;:::-;20700:178:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;20854:13:::1;::::0;;20700:178;;;;;;;;20889:5:::1;:20:::0;;;;::::1;::::0;;-1:-1:-1;20889:20:0;;;;;20670:208;;-1:-1:-1;20670:208:0;;20889:20:::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;20889:20:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;20889:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;20936:13;;:20:::1;::::0;:17:::1;:20::i;:::-;20920:13;:36:::0;-1:-1:-1;;;;;20504:460:0:o;12023:216::-;12127:10;12098:4;12115:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12115:32:0;;;;;;;;;;:41;;;12172:37;12098:4;;12115:32;;12172:37;;;;12150:6;3199:25:1;;3187:2;3172:18;;3053:177;12172:37:0;;;;;;;;-1:-1:-1;12227:4:0;12023:216;;;;;:::o;27092:150::-;27172:4;27228:6;27196:29;27216:8;27196:19;:29::i;:::-;:38;;27092:150;-1:-1:-1;;;27092:150:0:o;26565:182::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;26662:15:::1;:25:::0;;;;26698:26:::1;:41:::0;26565:182::o;12541:370::-;-1:-1:-1;;;;;12661:19:0;;12641:4;12661:19;;;:11;:19;;;;;;;;12681:10;12661:31;;;;;;;;-1:-1:-1;;12661:52:0;12658:186;;12763:69;;;;;;;;;;;-1:-1:-1;;;12763:69:0;;;;;;;;-1:-1:-1;;;;;12763:19:0;;-1:-1:-1;12763:19:0;;;:11;:19;;;;;12783:10;12763:31;;;;;;;;;;:69;;12799:6;;12763:35;:69::i;:::-;-1:-1:-1;;;;;12729:19:0;;;;;;:11;:19;;;;;;;;12749:10;12729:31;;;;;;;:103;12658:186;12863:40;12877:6;12885:9;12896:6;12863:13;:40::i;:::-;12856:47;;12541:370;;;;;;:::o;26767:142::-;26895:4;;-1:-1:-1;;;;;26895:4:0;26820:7;27826:18;;;:9;:18;;;;;;26847:54;;26874:4;;-1:-1:-1;;;;;26874:4:0;27808:7;27826:18;;;:9;:18;;;;;;26847:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;26840:61;;26767:142;:::o;23559:341::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;23764:6:::1;::::0;23676:20:::1;::::0;23699:72:::1;::::0;:60:::1;23749:6;23756:1;23749:9;::::0;23699:45:::1;23734:6;23741:1;23734:9;::::0;23699:30:::1;23719:6;23726:1;23719:9;::::0;23707:6:::1;::::0;23699:15:::1;::::0;:3;;:7:::1;:15::i;:::-;:19:::0;::::1;:30::i;:72::-;23676:95;;23806:4;23790:12;:20;;23782:49;;;;-1:-1:-1::0;;;23782:49:0::1;;;;;;;:::i;:::-;23842:10;:16:::0;;;;23869:8:::1;:23:::0;23559:341::o;21510:113::-;21566:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21566:18:0;21603:5;21609;21603:12;;;;;;;;:::i;:::-;;;;;;;;;;;21596:19;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21596:19:0;;;-1:-1:-1;;21596:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21510:113;-1:-1:-1;;21510:113:0:o;12247:122::-;12302:4;12326:35;12334:7;-1:-1:-1;;12326:7:0;:35::i;24254:342::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;24373:20:::1;24396:76;24462:6;24469:1;24462:9;::::0;24396:61:::1;24447:6;24454:1;24447:9;;24396:46;24435:6;;24396:34;24419:10;;24396:18;24404:6;24411:1;24404:9;;;;;;;:::i;:::-;;::::0;24396:3;;:7:::1;:18::i;:76::-;24373:99;;24506:4;24491:12;:19;24483:48;;;;-1:-1:-1::0;;;24483:48:0::1;;;;;;;:::i;:::-;24542:6;:12:::0;;;;24565:8:::1;:23:::0;24254:342::o;21406:96::-;21450:20;21489:5;21482:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21482:12:0;;;-1:-1:-1;;21482:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21406:96;:::o;25591:119::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25674:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;25674:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25591:119::o;22030:1107::-;22124:32;22159:5;22165;22159:12;;;;;;;;:::i;:::-;;;;;;;;;;;22124:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22124:47:0;;;-1:-1:-1;;22124:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22241:18;;;;;-1:-1:-1;;22288:23:0;258:10;22298:12;170:107;22288:23;22270:41;;22341:16;22330:7;:27;;22322:65;;;;-1:-1:-1;;;22322:65:0;;13525:2:1;22322:65:0;;;13507:21:1;13564:2;13544:18;;;13537:30;13603:27;13583:18;;;13576:55;13648:18;;22322:65:0;13323:349:1;22322:65:0;22406:13;:20;;;22398:64;;;;-1:-1:-1;;;22398:64:0;;13879:2:1;22398:64:0;;;13861:21:1;;;13898:18;;;13891:30;13957:34;13937:18;;;13930:62;14009:18;;22398:64:0;13677:356:1;22398:64:0;22483:51;258:10;22511:4;;-1:-1:-1;;;;;22511:4:0;22517:16;22483:13;:51::i;:::-;-1:-1:-1;22643:18:0;;:40;;22666:16;22643:22;:40::i;:::-;22622:18;:61;258:10;22770:23;;;;:9;:23;;;;;:33;;;22766:177;;22908:16;;:23;;22929:1;22908:20;:23::i;:::-;22889:16;:42;22766:177;22979:150;;;;;;;;23002:4;22979:150;;;;;;23021:40;23040:13;:20;;;23022:12;23021:18;;:40;;;;:::i;:::-;22979:150;;23076:22;;;;22979:150;;;;-1:-1:-1;22979:150:0;;;;22953:9;-1:-1:-1;258:10:0;-1:-1:-1;;;;;22953:23:0;;;;;;;;;;;;;;;-1:-1:-1;22953:23:0;:176;;;;-1:-1:-1;;22953:176:0;;;;;;;;;;;-1:-1:-1;22953:176:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;22030:1107:0:o;24984:367::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;25053:23:::1;25100:4;25080:12;;25095:1;25080:16;;;;:::i;:::-;25079:25;;;;:::i;:::-;25053:51;;25171:22;25219:4;25212:3;25197:12;;:18;;;;:::i;:::-;25196:27;;;;:::i;:::-;25171:52;;25260:15;25242:14;:33;;25234:65;;;::::0;-1:-1:-1;;;25234:65:0;;14462:2:1;25234:65:0::1;::::0;::::1;14444:21:1::0;14501:2;14481:18;;;14474:30;-1:-1:-1;;;14520:18:1;;;14513:49;14579:18;;25234:65:0::1;14260:343:1::0;25234:65:0::1;25310:16;:33:::0;-1:-1:-1;;24984:367:0:o;6914:148::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;7021:1:::1;7005:6:::0;;6984:40:::1;::::0;-1:-1:-1;;;;;7005:6:0;;::::1;::::0;6984:40:::1;::::0;7021:1;;6984:40:::1;7052:1;7035:19:::0;;-1:-1:-1;;;;;;7035:19:0::1;::::0;;6914:148::o;23906:336::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;24110:6:::1;::::0;24018:20:::1;::::0;24041:76:::1;::::0;:64:::1;24095:6;24102:1;24095:9;::::0;24041:49:::1;24080:6;24087:1;24080:9;::::0;24064:10:::1;::::0;24041:34:::1;::::0;;24049:6:::1;24056:1;24049:9;::::0;24041:76:::1;24018:99;;24152:4;24136:12;:20;;24128:49;;;;-1:-1:-1::0;;;24128:49:0::1;;;;;;;:::i;:::-;24188:6;:12:::0;;;;24211:8:::1;:23:::0;23906:336::o;23149:404::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;23271:20:::1;23294:70;23357:6;;23294:58;23341:10;;23294:42;23329:6;;23294:30;23317:3;23321:1;23317:6;;;;;;;;:::i;:::-;;;;;;;23294:18;23305:3;23309:1;23305:6;;;;;;;;:::i;:::-;;;;;;;23294:3;23298:1;23294:6;;;;;;;;:::i;:::-;;;;;;;:10;;:18;;;;:::i;:70::-;23271:93;;23399:4;23383:12;:20;;23375:49;;;;-1:-1:-1::0;;;23375:49:0::1;;;;;;;:::i;:::-;23447:3;23451:1;23447:6;;;;;;;;:::i;:::-;;;;;;;23435;23442:1;23435:9;;;;;;;:::i;:::-;;:18:::0;23476:6;;:3;;23480:1:::1;::::0;23476:6;::::1;;;;;:::i;:::-;;;;;;;23464;23471:1;23464:9;;;;;;;:::i;:::-;;:18:::0;23505:6;;:3;;23509:1:::1;::::0;23505:6;::::1;;;;;:::i;:::-;;;;;;;23493;23500:1;23493:9;;;;;;;:::i;:::-;;:18:::0;23522:8:::1;:23:::0;-1:-1:-1;23149:404:0:o;12377:156::-;12457:4;12481:44;12495:10;12507:9;12518:6;12481:13;:44::i;25359:220::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;25466:1:::1;25454:9;:13;:28;;;;;25481:1;25471:7;:11;25454:28;:48;;;;;25497:5;25486:7;:16;;25454:48;25446:57;;;::::0;::::1;;25531:40;25563:7;25531:27;25548:9;25531:12;;:16;;:27;;;;:::i;:::-;:31:::0;::::1;:40::i;:::-;25514:14;:57:::0;-1:-1:-1;;25359:220:0:o;24608:364::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;24675:23:::1;24722:4;24702:12;;24717:1;24702:16;;;;:::i;:::-;24701:25;;;;:::i;:::-;24675:51;;24793:22;24841:4;24834:3;24819:12;;:18;;;;:::i;:::-;24818:27;;;;:::i;:::-;24793:52;;24882:15;24864:14;:33;;24856:65;;;::::0;-1:-1:-1;;;24856:65:0;;14462:2:1;24856:65:0::1;::::0;::::1;14444:21:1::0;14501:2;14481:18;;;14474:30;-1:-1:-1;;;14520:18:1;;;14513:49;14579:18;;24856:65:0::1;14260:343:1::0;24856:65:0::1;24932:15;:32:::0;-1:-1:-1;;24608:364:0:o;26917:167::-;26985:7;27012:64;27053:22;:20;:22::i;:::-;27035:4;;-1:-1:-1;;;;;27035:4:0;27808:7;27826:18;;;:9;:18;;;;;;27012:36;;27025:22;;27045:1;27025:19;:22::i;:::-;27012:8;;:12;:36::i;21629:143::-;21693:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21693:18:0;21730:5;21736:9;:15;21746:4;-1:-1:-1;;;;;21736:15:0;-1:-1:-1;;;;;21736:15:0;;;;;;;;;;;;:27;;;21730:34;;;;;;;;:::i;20144:287::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;20310:18:::1;::::0;20302:60:::1;::::0;20217:21:::1;::::0;20203:11:::1;::::0;-1:-1:-1;;;;;20310:18:0;;::::1;::::0;20352:5:::1;::::0;20217:21;;20203:11;20302:60;20203:11;20302:60;20217:21;20310:18;20352:5;20302:60:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20284:78;;;20381:7;20373:50;;;::::0;-1:-1:-1;;;20373:50:0;;15020:2:1;20373:50:0::1;::::0;::::1;15002:21:1::0;15059:2;15039:18;;;15032:30;15098:32;15078:18;;;15071:60;15148:18;;20373:50:0::1;14818:354:1::0;20373:50:0::1;20192:239;;20144:287::o:0;26393:164::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;26484:11:::1;:22:::0;;-1:-1:-1;;;;26484:22:0::1;-1:-1:-1::0;;;26484:22:0;::::1;;;;::::0;;26533:16:::1;:7:::0;26545:3:::1;26533:11;:16::i;:::-;26517:13;:32:::0;-1:-1:-1;;26393:164:0:o;25857:528::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;26084:21:::1;:46:::0;;-1:-1:-1;;;;;;26084:46:0;;::::1;-1:-1:-1::0;;;;;26084:46:0;;::::1;;::::0;;;26141:18:::1;:40:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26192:14:::1;:32:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26235:17:::1;:38:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26284:18:::1;:40:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26335:19:::1;:42:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;25857:528::o;21780:113::-;21836:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21836:15:0;-1:-1:-1;;;;;;21870:15:0;;;;;:9;:15;;;;;;;;;21863:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21780:113::o;7217:244::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7306:22:0;::::1;7298:73;;;::::0;-1:-1:-1;;;7298:73:0;;15379:2:1;7298:73:0::1;::::0;::::1;15361:21:1::0;15418:2;15398:18;;;15391:30;15457:34;15437:18;;;15430:62;-1:-1:-1;;;15508:18:1;;;15501:36;15554:19;;7298:73:0::1;15177:402:1::0;7298:73:0::1;7408:6;::::0;;7387:38:::1;::::0;-1:-1:-1;;;;;7387:38:0;;::::1;::::0;7408:6;::::1;::::0;7387:38:::1;::::0;::::1;7436:6;:17:::0;;-1:-1:-1;;;;;;7436:17:0::1;-1:-1:-1::0;;;;;7436:17:0;;;::::1;::::0;;;::::1;::::0;;7217:244::o;25718:127::-;6485:6;;-1:-1:-1;;;;;6485:6:0;258:10;6485:22;6477:67;;;;-1:-1:-1;;;6477:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25805:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;25805:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25718:127::o;1896:181::-;1954:7;;1986:5;1990:1;1986;:5;:::i;:::-;1974:17;;2015:1;2010;:6;;2002:46;;;;-1:-1:-1;;;2002:46:0;;15919:2:1;2002:46:0;;;15901:21:1;15958:2;15938:18;;;15931:30;15997:29;15977:18;;;15970:57;16044:18;;2002:46:0;15717:351:1;2225:192:0;2311:7;2347:12;2339:6;;;;2331:29;;;;-1:-1:-1;;;2331:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2371:9:0;2383:5;2387:1;2383;:5;:::i;:::-;2371:17;2225:192;-1:-1:-1;;;;;2225:192:0:o;12919:1311::-;13031:6;;13011:4;;13031:6;;13028:63;;;13047:41;13062:6;13070:9;13081:6;13047:14;:41::i;:::-;13040:48;;;;13028:63;-1:-1:-1;;;;;13165:23:0;;13144:17;13165:23;;;:15;:23;;;;;;;;;:53;;-1:-1:-1;;;;;;13192:26:0;;;;;;:15;:26;;;;;;;;13165:53;13144:75;-1:-1:-1;13230:23:0;-1:-1:-1;;;;;13257:21:0;;13273:4;13257:21;;:49;;-1:-1:-1;;;;;;13282:24:0;;13301:4;13282:24;13257:49;13357:4;;13230:77;;-1:-1:-1;13318:24:0;;-1:-1:-1;;;;;13347:14:0;;;13357:4;;13347:14;:46;;;;-1:-1:-1;13386:6:0;;-1:-1:-1;;;;;13365:28:0;;;13386:6;;13365:28;13347:46;13346:101;;;-1:-1:-1;13412:4:0;;-1:-1:-1;;;;;13399:17:0;;;13412:4;;13399:17;:46;;;;-1:-1:-1;13438:6:0;;-1:-1:-1;;;;;13420:25:0;;;13438:6;;13420:25;13399:46;13318:130;;13473:12;13472:13;:36;;;;;13490:18;13489:19;13472:36;:60;;;;;13513:19;13512:20;13472:60;13469:128;;;13549:36;13560:6;13567:9;13578:6;13549:10;:36::i;:::-;13624:4;;-1:-1:-1;;;;;13611:17:0;;;13624:4;;13611:17;;;;:38;;-1:-1:-1;13645:4:0;;-1:-1:-1;;;;;13632:17:0;;;13645:4;;13632:17;;13611:38;13607:201;;;-1:-1:-1;;;;;13674:26:0;;;;;;:15;:26;;;;;;;;;:77;;-1:-1:-1;13737:14:0;;-1:-1:-1;;;;;13704:20:0;;;;;;:9;:20;;;;;;:29;;13727:6;;13704:29;:::i;:::-;:47;;13674:77;13666:130;;;;-1:-1:-1;;;13666:130:0;;16405:2:1;13666:130:0;;;16387:21:1;16444:2;16424:18;;;16417:30;16483:34;16463:18;;;16456:62;-1:-1:-1;;;16534:18:1;;;16527:38;16582:19;;13666:130:0;16203:404:1;13666:130:0;13821:16;:14;:16::i;:::-;13818:35;;;13840:10;:8;:10::i;:::-;13869:22;13894:31;13908:6;13915:9;13894:13;:31::i;:::-;:77;;13965:6;13894:77;;;13928:34;13936:6;13944:9;13955:6;13928:7;:34::i;:::-;13869:102;;14002:53;14024:6;14002:53;;;;;;;;;;;;;-1:-1:-1;;;14002:53:0;;;:9;:17;14012:6;-1:-1:-1;;;;;14002:17:0;-1:-1:-1;;;;;14002:17:0;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;-1:-1:-1;;;;;13982:17:0;;;;;;;:9;:17;;;;;;:73;;;;14089:20;;;;;;;:40;;14114:14;14089:24;:40::i;:::-;-1:-1:-1;;;;;14066:20:0;;;;;;;:9;:20;;;;;;;:63;;;;14157:43;;;;;;;;;;14185:14;3199:25:1;;3187:2;3172:18;;3053:177;14157:43:0;;;;;;;;-1:-1:-1;14218:4:0;;12919:1311;-1:-1:-1;;;;;;;12919:1311:0:o;2083:136::-;2141:7;2168:43;2172:1;2175;2168:43;;;;;;;;;;;;;;;;;:3;:43::i;2429:250::-;2487:7;2511:1;2516;2511:6;2507:47;;-1:-1:-1;2541:1:0;2534:8;;2507:47;2566:9;2578:5;2582:1;2578;:5;:::i;:::-;2566:17;-1:-1:-1;2611:1:0;2602:5;2606:1;2566:17;2602:5;:::i;:::-;:10;2594:56;;;;-1:-1:-1;;;2594:56:0;;16814:2:1;2594:56:0;;;16796:21:1;16853:2;16833:18;;;16826:30;16892:34;16872:18;;;16865:62;-1:-1:-1;;;16943:18:1;;;16936:31;16984:19;;2594:56:0;16612:397:1;2685:132:0;2743:7;2770:39;2774:1;2777;2770:39;;;;;;;;;;;;;;;;;:3;:39::i;14246:330::-;14376:53;;;;;;;;;;;-1:-1:-1;;;14376:53:0;;;;;;;;-1:-1:-1;;;;;14376:17:0;;14339:4;14376:17;;;:9;:17;;;;;;;:53;;14398:6;;14376:21;:53::i;:::-;-1:-1:-1;;;;;14356:17:0;;;;;;;:9;:17;;;;;;:73;;;;14463:20;;;;;;;:32;;14488:6;14463:24;:32::i;:::-;-1:-1:-1;;;;;14440:20:0;;;;;;;:9;:20;;;;;;;:55;;;;14511:35;;;;;;;;;;14539:6;3199:25:1;;3187:2;3172:18;;3053:177;14511:35:0;;;;;;;;-1:-1:-1;14564:4:0;14246:330;;;;;:::o;14584:462::-;14713:4;;14690:10;;-1:-1:-1;;;;;14703:14:0;;;14713:4;;14703:14;;:43;;-1:-1:-1;14739:6:0;;-1:-1:-1;;;;;14721:25:0;;;14739:6;;14721:25;14703:43;14783:4;;14690:56;;-1:-1:-1;14757:11:0;;-1:-1:-1;;;;;14771:16:0;;;14783:4;;14771:16;;:48;;-1:-1:-1;14812:6:0;;-1:-1:-1;;;;;14791:28:0;;;14812:6;;14791:28;14771:48;14757:62;;14843:5;14840:189;;;14882:15;;14872:6;:25;;14864:55;;;;-1:-1:-1;;;14864:55:0;;17216:2:1;14864:55:0;;;17198:21:1;17255:2;17235:18;;;17228:30;-1:-1:-1;;;17274:18:1;;;17267:47;17331:18;;14864:55:0;17014:341:1;14864:55:0;14840:189;;;14939:6;14936:93;;;14979:16;;14969:6;:26;;14961:56;;;;-1:-1:-1;;;14961:56:0;;17216:2:1;14961:56:0;;;17198:21:1;17255:2;17235:18;;;17228:30;-1:-1:-1;;;17274:18:1;;;17267:47;17331:18;;14961:56:0;17014:341:1;14961:56:0;14669:377;;14584:462;;;:::o;17310:197::-;17397:4;;17359;;-1:-1:-1;;;;;17397:4:0;17383:10;:18;;;;:38;;-1:-1:-1;17415:6:0;;;;17414:7;17383:38;:62;;;;-1:-1:-1;17434:11:0;;-1:-1:-1;;;17434:11:0;;;;17383:62;:116;;;;-1:-1:-1;;17486:13:0;;17476:4;17458:24;;;;:9;:24;;;;;;:41;;;17310:197::o;17519:1814::-;10266:6;:13;;-1:-1:-1;;10266:13:0;10275:4;10266:13;;;17614:15:::1;::::0;17631:26:::1;::::0;10266:6;;17598:60:::1;::::0;:15:::1;:60::i;:::-;:73;;17665:6;;17598:73;;;17661:1;17598:73;17568:103;;17682:23;17708:59;17765:1;17708:52;17751:8;;17708:38;17726:19;17708:13;;:17;;:38;;;;:::i;:59::-;17682:85;;17778:20;17801:34;17819:15;17801:13;;:17;;:34;;;;:::i;:::-;17872:16;::::0;;17886:1:::1;17872:16:::0;;;;;::::1;::::0;;17778:57;;-1:-1:-1;17848:21:0::1;::::0;17872:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17872:16:0::1;17848:40;;17917:4;17899;17904:1;17899:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17899:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;17943:4:::1;::::0;17933:7;;17943:4;::::1;::::0;17933;;17943;;17933:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;17933:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;18018:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;18018:188:0;;17984:21:::1;::::0;18018:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;18090:12;;17960:21:::1;::::0;18133:4;;18160::::1;::::0;18180:15:::1;::::0;18018:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18219:17;18239:40;18265:13;18239:21;:25;;:40;;;;:::i;:::-;18219:60:::0;-1:-1:-1;18292:19:0::1;18314:40;18327:26;:19:::0;18351:1:::1;18327:23;:26::i;:::-;18314:8;::::0;;:12:::1;:40::i;:::-;18292:62:::0;-1:-1:-1;18367:26:0::1;18396:58;18452:1;18396:51;18292:62:::0;18396:51;:9;18410:19;18396:13:::1;:34::i;:58::-;18367:87:::0;-1:-1:-1;18465:20:0::1;18488:41;18517:11:::0;18488:24:::1;18502:6;18465:20:::0;18502:9:::1;::::0;18488;;:13:::1;:24::i;:41::-;18465:64:::0;-1:-1:-1;18540:21:0::1;18564:41;18593:11:::0;18564:24:::1;18578:6;18585:1;18578:9;::::0;18564;;:13:::1;:24::i;:41::-;18540:65:::0;-1:-1:-1;18616:26:0::1;18645:41;18674:11:::0;18645:24:::1;18659:6;18666:1;18659:9;::::0;18645;;:13:::1;:24::i;:41::-;18616:70;;18697:20;18720:38;18746:11;18720:21;18734:6;;18720:9;:13;;:21;;;;:::i;:38::-;18697:61;;18769:24;18796:42;18826:11;18796:25;18810:10;;18796:9;:13;;:25;;;;:::i;:42::-;18769:69;;18859:92;18871:12;18885;18899:13;18914:18;18934:16;18859:11;:92::i;:::-;18967:19:::0;;18964:362:::1;;19002:6;::::0;19176:21:::1;::::0;19002:244:::1;::::0;-1:-1:-1;;;19002:244:0;;19078:4:::1;19002:244;::::0;::::1;18686:34:1::0;18736:18;;;18729:34;;;19002:6:0::1;18779:18:1::0;;;18772:34;;;18822:18;;;18815:34;-1:-1:-1;;;;;19176:21:0;;::::1;18865:19:1::0;;;18858:44;19216:15:0::1;18918:19:1::0;;;18911:35;19002:6:0;::::1;::::0;:22:::1;::::0;19032:18;;18620:19:1;;19002:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;19266:48:0::1;::::0;;19442:25:1;;;19498:2;19483:18;;19476:34;;;19266:48:0::1;::::0;-1:-1:-1;19415:18:1;19266:48:0::1;;;;;;;18964:362;-1:-1:-1::0;;10284:6:0;:14;;-1:-1:-1;;10284:14:0;;;-1:-1:-1;;;;;;;;;;;17519:1814:0:o;15058:160::-;-1:-1:-1;;;;;15164:19:0;;15139:4;15164:19;;;:11;:19;;;;;;;;15163:20;:47;;;;-1:-1:-1;;;;;;;15188:22:0;;;;;:11;:22;;;;;;;;15187:23;;15058:160;-1:-1:-1;15058:160:0:o;15321:1977::-;15406:7;15426:17;15446:45;15476:14;;15446:25;15457:13;15297:8;;;15226:87;15457:13;15446:6;;:10;:25::i;:45::-;15426:65;;15502:21;15534:22;15567:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15567:24:0;15625:4;;15602:10;;-1:-1:-1;;;;;15615:14:0;;;15625:4;;15615:14;;:43;;-1:-1:-1;15651:6:0;;-1:-1:-1;;;;;15633:25:0;;;15651:6;;15633:25;15615:43;15694:4;;15602:56;;-1:-1:-1;15669:11:0;;-1:-1:-1;;;;;15683:15:0;;;15694:4;;15683:15;;:46;;-1:-1:-1;15722:6:0;;-1:-1:-1;;;;;15702:27:0;;;15722:6;;15702:27;15683:46;15774:4;;15669:60;;-1:-1:-1;15740:21:0;;-1:-1:-1;;;;;15764:14:0;;;15774:4;;15764:14;;;;:43;;-1:-1:-1;15800:6:0;;-1:-1:-1;;;;;15782:25:0;;;15800:6;;15782:25;;15764:43;:63;;;;-1:-1:-1;15823:4:0;;-1:-1:-1;;;;;15811:16:0;;;15823:4;;15811:16;;15764:63;:94;;;;-1:-1:-1;15851:6:0;;-1:-1:-1;;;;;15831:27:0;;;15851:6;;15831:27;;15764:94;15740:118;;15943:5;15940:415;;;-1:-1:-1;;;;;16028:19:0;;;;;;:9;:19;;;;;;;;;16017:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15940:415:0;;;16075:6;16072:283;;;-1:-1:-1;;;;;16160:17:0;;;;;;:9;:17;;;;;;;;;16149:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16072:283:0;;;16197:16;16194:161;;;-1:-1:-1;;;;;16326:17:0;;;;;;:9;:17;;;;;;;;;16315:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16194:161:0;16370:18;;:56;;;;;16408:8;:18;;;16392:12;:34;;16370:56;16367:155;;;16458:52;16495:14;;16458:32;16472:8;:17;;;16458:9;:13;;:32;;;;:::i;:52::-;16442:68;;16367:155;16588:13;;:32;;16606:13;16588:17;:32::i;:::-;16572:13;:48;16715:274;;;;-1:-1:-1;;;;;16776:29:0;;;;;;:19;:29;;;;;;:48;;16810:13;16776:33;:48::i;:::-;-1:-1:-1;;;;;16744:29:0;;;;;;:19;:29;;;;;:80;16715:274;;;16849:6;:26;;;;16859:16;16849:26;16846:143;;;-1:-1:-1;;;;;16926:27:0;;;;;;:19;:27;;;;;;:46;;16958:13;16926:31;:46::i;:::-;-1:-1:-1;;;;;16896:27:0;;;;;;:19;:27;;;;;:76;16846:143;17027:28;:9;17041:13;17027;:28::i;:::-;17155:4;17137:24;;;;:9;:24;;;;;;17010:45;;-1:-1:-1;17137:44:0;;17010:45;17137:28;:44::i;:::-;17128:4;17110:24;;;;:9;:24;;;;;;;:71;;;;17197:47;;-1:-1:-1;;;;;17197:47:0;;;;;;;17229:14;3199:25:1;;3187:2;3172:18;;3053:177;17197:47:0;;;;;;;;17264:26;:6;17275:14;17264:10;:26::i;:::-;17257:33;15321:1977;-1:-1:-1;;;;;;;;;;;15321:1977:0:o;2829:345::-;2915:7;3017:12;3010:5;3002:28;;;;-1:-1:-1;;;3002:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3041:9:0;3053:5;3057:1;3053;:5;:::i;19341:738::-;19502:18;;19494:63;;19474:15;;-1:-1:-1;;;;;19502:18:0;;19547:5;;19534:6;;19474:15;19494:63;19474:15;19494:63;19534:6;19502:18;19547:5;19494:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19597:14:0;;19589:59;;19473:84;;-1:-1:-1;19569:15:0;;-1:-1:-1;;;;;19597:14:0;;;;19638:5;;19625:6;;19569:15;19589:59;19569:15;19589:59;19625:6;19597:14;19638:5;19589:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19690:17:0;;19682:63;;19568:80;;-1:-1:-1;19660:17:0;;-1:-1:-1;;;;;19690:17:0;;;;19735:5;;19721:7;;19660:17;19682:63;19660:17;19682:63;19721:7;19690:17;19735:5;19682:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19786:18:0;;19778:67;;19659:86;;-1:-1:-1;19757:16:0;;-1:-1:-1;;;;;19786:18:0;;;;19835:5;;19818:10;;19757:16;19778:67;19757:16;19778:67;19818:10;19786:18;19835:5;19778:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19886:18:0;;19878:69;;19756:89;;-1:-1:-1;19857:16:0;;-1:-1:-1;;;;;19886:18:0;;;;19937:5;;19918:12;;19857:16;19878:69;19857:16;19878:69;19918:12;19886:18;19937:5;19878:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19856:91;;;19966:10;:24;;;;;19980:10;19966:24;:40;;;;;19994:12;19966:40;:55;;;;;20010:11;19966:55;:70;;;;;20025:11;19966:70;19958:113;;;;-1:-1:-1;;;19958:113:0;;15020:2:1;19958:113:0;;;15002:21:1;15059:2;15039:18;;;15032:30;15098:32;15078:18;;;15071:60;15148:18;;19958:113:0;14818:354:1;19958:113:0;19462:617;;;;;19341:738;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:472::-;241:3;279:5;273:12;306:6;301:3;294:19;331:1;341:162;355:6;352:1;349:13;341:162;;;417:4;473:13;;;469:22;;463:29;445:11;;;441:20;;434:59;370:12;341:162;;;521:6;518:1;515:13;512:87;;;587:1;580:4;571:6;566:3;562:16;558:27;551:38;512:87;-1:-1:-1;653:2:1;632:15;-1:-1:-1;;628:29:1;619:39;;;;660:4;615:50;;199:472;-1:-1:-1;;199:472:1:o;676:589::-;959:3;948:9;941:22;922:4;980:46;1021:3;1010:9;1006:19;998:6;980:46;:::i;:::-;1069:14;;1062:22;1057:2;1042:18;;1035:50;-1:-1:-1;1116:2:1;1101:18;;1094:34;;;;1159:2;1144:18;;1137:34;;;;1202:3;1187:19;;1180:35;1246:3;1231:19;;;1224:35;972:54;676:589;-1:-1:-1;676:589:1:o;1270:160::-;1335:20;;1391:13;;1384:21;1374:32;;1364:60;;1420:1;1417;1410:12;1364:60;1270:160;;;:::o;1435:127::-;1496:10;1491:3;1487:20;1484:1;1477:31;1527:4;1524:1;1517:15;1551:4;1548:1;1541:15;1567:275;1638:2;1632:9;1703:2;1684:13;;-1:-1:-1;;1680:27:1;1668:40;;1738:18;1723:34;;1759:22;;;1720:62;1717:88;;;1785:18;;:::i;:::-;1821:2;1814:22;1567:275;;-1:-1:-1;1567:275:1:o;1847:531::-;1890:5;1943:3;1936:4;1928:6;1924:17;1920:27;1910:55;;1961:1;1958;1951:12;1910:55;1997:6;1984:20;2023:18;2019:2;2016:26;2013:52;;;2045:18;;:::i;:::-;2089:55;2132:2;2113:13;;-1:-1:-1;;2109:27:1;2138:4;2105:38;2089:55;:::i;:::-;2169:2;2160:7;2153:19;2215:3;2208:4;2203:2;2195:6;2191:15;2187:26;2184:35;2181:55;;;2232:1;2229;2222:12;2181:55;2297:2;2290:4;2282:6;2278:17;2271:4;2262:7;2258:18;2245:55;2345:1;2320:16;;;2338:4;2316:27;2309:38;;;;2324:7;1847:531;-1:-1:-1;;;1847:531:1:o;2383:665::-;2494:6;2502;2510;2518;2526;2534;2587:3;2575:9;2566:7;2562:23;2558:33;2555:53;;;2604:1;2601;2594:12;2555:53;2640:9;2627:23;2617:33;;2669:35;2700:2;2689:9;2685:18;2669:35;:::i;:::-;2659:45;;2755:2;2744:9;2740:18;2727:32;2782:18;2774:6;2771:30;2768:50;;;2814:1;2811;2804:12;2768:50;2837;2879:7;2870:6;2859:9;2855:22;2837:50;:::i;:::-;2827:60;;;2934:2;2923:9;2919:18;2906:32;2896:42;;2985:3;2974:9;2970:19;2957:33;2947:43;;3037:3;3026:9;3022:19;3009:33;2999:43;;2383:665;;;;;;;;:::o;3235:220::-;3384:2;3373:9;3366:21;3347:4;3404:45;3445:2;3434:9;3430:18;3422:6;3404:45;:::i;3460:527::-;3556:6;3564;3572;3580;3633:3;3621:9;3612:7;3608:23;3604:33;3601:53;;;3650:1;3647;3640:12;3601:53;3690:9;3677:23;3723:18;3715:6;3712:30;3709:50;;;3755:1;3752;3745:12;3709:50;3778;3820:7;3811:6;3800:9;3796:22;3778:50;:::i;:::-;3768:60;3875:2;3860:18;;3847:32;;-1:-1:-1;3926:2:1;3911:18;;3898:32;;3977:2;3962:18;3949:32;;-1:-1:-1;3460:527:1;-1:-1:-1;;;;3460:527:1:o;3992:173::-;4060:20;;-1:-1:-1;;;;;4109:31:1;;4099:42;;4089:70;;4155:1;4152;4145:12;4170:254;4238:6;4246;4299:2;4287:9;4278:7;4274:23;4270:32;4267:52;;;4315:1;4312;4305:12;4267:52;4338:29;4357:9;4338:29;:::i;:::-;4328:39;4414:2;4399:18;;;;4386:32;;-1:-1:-1;;;4170:254:1:o;4621:248::-;4689:6;4697;4750:2;4738:9;4729:7;4725:23;4721:32;4718:52;;;4766:1;4763;4756:12;4718:52;-1:-1:-1;;4789:23:1;;;4859:2;4844:18;;;4831:32;;-1:-1:-1;4621:248:1:o;4874:328::-;4951:6;4959;4967;5020:2;5008:9;4999:7;4995:23;4991:32;4988:52;;;5036:1;5033;5026:12;4988:52;5059:29;5078:9;5059:29;:::i;:::-;5049:39;;5107:38;5141:2;5130:9;5126:18;5107:38;:::i;:::-;5097:48;;5192:2;5181:9;5177:18;5164:32;5154:42;;4874:328;;;;;:::o;5396:520::-;5450:3;5494:5;5488:12;5521:4;5516:3;5509:17;5547:47;5588:4;5583:3;5579:14;5565:12;5547:47;:::i;:::-;5535:59;;5657:4;5650:5;5646:16;5640:23;5633:31;5626:39;5619:4;5614:3;5610:14;5603:63;5715:4;5708:5;5704:16;5698:23;5691:4;5686:3;5682:14;5675:47;5771:4;5764:5;5760:16;5754:23;5747:4;5742:3;5738:14;5731:47;5827:4;5820:5;5816:16;5810:23;5803:4;5798:3;5794:14;5787:47;5883:4;5876:5;5872:16;5866:23;5859:4;5854:3;5850:14;5843:47;5906:4;5899:11;;;5396:520;;;;:::o;5921:268::-;6106:2;6095:9;6088:21;6069:4;6126:57;6179:2;6168:9;6164:18;6156:6;6126:57;:::i;6194:186::-;6253:6;6306:2;6294:9;6285:7;6281:23;6277:32;6274:52;;;6322:1;6319;6312:12;6274:52;6345:29;6364:9;6345:29;:::i;6385:851::-;6583:4;6612:2;6652;6641:9;6637:18;6682:2;6671:9;6664:21;6705:6;6740;6734:13;6771:6;6763;6756:22;6809:2;6798:9;6794:18;6787:25;;6871:2;6861:6;6858:1;6854:14;6843:9;6839:30;6835:39;6821:53;;6909:2;6901:6;6897:15;6930:1;6940:267;6954:6;6951:1;6948:13;6940:267;;;7047:2;7043:7;7031:9;7023:6;7019:22;7015:36;7010:3;7003:49;7075:52;7120:6;7111;7105:13;7075:52;:::i;:::-;7065:62;-1:-1:-1;7185:12:1;;;;7150:15;;;;6976:1;6969:9;6940:267;;;-1:-1:-1;7224:6:1;;6385:851;-1:-1:-1;;;;;;;6385:851:1:o;7241:254::-;7306:6;7314;7367:2;7355:9;7346:7;7342:23;7338:32;7335:52;;;7383:1;7380;7373:12;7335:52;7406:29;7425:9;7406:29;:::i;:::-;7396:39;;7454:35;7485:2;7474:9;7470:18;7454:35;:::i;:::-;7444:45;;7241:254;;;;;:::o;7708:946::-;7792:6;7823:2;7866;7854:9;7845:7;7841:23;7837:32;7834:52;;;7882:1;7879;7872:12;7834:52;7922:9;7909:23;7951:18;7992:2;7984:6;7981:14;7978:34;;;8008:1;8005;7998:12;7978:34;8046:6;8035:9;8031:22;8021:32;;8091:7;8084:4;8080:2;8076:13;8072:27;8062:55;;8113:1;8110;8103:12;8062:55;8149:2;8136:16;8171:2;8167;8164:10;8161:36;;;8177:18;;:::i;:::-;8223:2;8220:1;8216:10;8206:20;;8246:28;8270:2;8266;8262:11;8246:28;:::i;:::-;8308:15;;;8378:11;;;8374:20;;;8339:12;;;;8406:19;;;8403:39;;;8438:1;8435;8428:12;8403:39;8462:11;;;;8482:142;8498:6;8493:3;8490:15;8482:142;;;8564:17;;8552:30;;8515:12;;;;8602;;;;8482:142;;;8643:5;7708:946;-1:-1:-1;;;;;;;;7708:946:1:o;8659:260::-;8727:6;8735;8788:2;8776:9;8767:7;8763:23;8759:32;8756:52;;;8804:1;8801;8794:12;8756:52;8827:29;8846:9;8827:29;:::i;:::-;8817:39;;8875:38;8909:2;8898:9;8894:18;8875:38;:::i;8924:248::-;8989:6;8997;9050:2;9038:9;9029:7;9025:23;9021:32;9018:52;;;9066:1;9063;9056:12;9018:52;9089:26;9105:9;9089:26;:::i;9177:559::-;9281:6;9289;9297;9305;9313;9321;9374:3;9362:9;9353:7;9349:23;9345:33;9342:53;;;9391:1;9388;9381:12;9342:53;9414:29;9433:9;9414:29;:::i;:::-;9404:39;;9462:38;9496:2;9485:9;9481:18;9462:38;:::i;:::-;9452:48;;9519:38;9553:2;9542:9;9538:18;9519:38;:::i;:::-;9509:48;;9576:38;9610:2;9599:9;9595:18;9576:38;:::i;:::-;9566:48;;9633:39;9667:3;9656:9;9652:19;9633:39;:::i;:::-;9623:49;;9691:39;9725:3;9714:9;9710:19;9691:39;:::i;:::-;9681:49;;9177:559;;;;;;;;:::o;10412:380::-;10491:1;10487:12;;;;10534;;;10555:61;;10609:4;10601:6;10597:17;10587:27;;10555:61;10662:2;10654:6;10651:14;10631:18;10628:38;10625:161;;10708:10;10703:3;10699:20;10696:1;10689:31;10743:4;10740:1;10733:15;10771:4;10768:1;10761:15;10625:161;;10412:380;;;:::o;10797:356::-;10999:2;10981:21;;;11018:18;;;11011:30;11077:34;11072:2;11057:18;;11050:62;11144:2;11129:18;;10797:356::o;11158:127::-;11219:10;11214:3;11210:20;11207:1;11200:31;11250:4;11247:1;11240:15;11274:4;11271:1;11264:15;11290:127;11351:10;11346:3;11342:20;11339:1;11332:31;11382:4;11379:1;11372:15;11406:4;11403:1;11396:15;11422:422;11511:1;11554:5;11511:1;11568:270;11589:7;11579:8;11576:21;11568:270;;;11648:4;11644:1;11640:6;11636:17;11630:4;11627:27;11624:53;;;11657:18;;:::i;:::-;11707:7;11697:8;11693:22;11690:55;;;11727:16;;;;11690:55;11806:22;;;;11766:15;;;;11568:270;;;11572:3;11422:422;;;;;:::o;11849:806::-;11898:5;11928:8;11918:80;;-1:-1:-1;11969:1:1;11983:5;;11918:80;12017:4;12007:76;;-1:-1:-1;12054:1:1;12068:5;;12007:76;12099:4;12117:1;12112:59;;;;12185:1;12180:130;;;;12092:218;;12112:59;12142:1;12133:10;;12156:5;;;12180:130;12217:3;12207:8;12204:17;12201:43;;;12224:18;;:::i;:::-;-1:-1:-1;;12280:1:1;12266:16;;12295:5;;12092:218;;12394:2;12384:8;12381:16;12375:3;12369:4;12366:13;12362:36;12356:2;12346:8;12343:16;12338:2;12332:4;12329:12;12325:35;12322:77;12319:159;;;-1:-1:-1;12431:19:1;;;12463:5;;12319:159;12510:34;12535:8;12529:4;12510:34;:::i;:::-;12580:6;12576:1;12572:6;12568:19;12559:7;12556:32;12553:58;;;12591:18;;:::i;:::-;12629:20;;11849:806;-1:-1:-1;;;11849:806:1:o;12660:140::-;12718:5;12747:47;12788:4;12778:8;12774:19;12768:4;12747:47;:::i;12805:168::-;12845:7;12911:1;12907;12903:6;12899:14;12896:1;12893:21;12888:1;12881:9;12874:17;12870:45;12867:71;;;12918:18;;:::i;:::-;-1:-1:-1;12958:9:1;;12805:168::o;12978:340::-;13180:2;13162:21;;;13219:2;13199:18;;;13192:30;-1:-1:-1;;;13253:2:1;13238:18;;13231:46;13309:2;13294:18;;12978:340::o;14038:217::-;14078:1;14104;14094:132;;14148:10;14143:3;14139:20;14136:1;14129:31;14183:4;14180:1;14173:15;14211:4;14208:1;14201:15;14094:132;-1:-1:-1;14240:9:1;;14038:217::o;15584:128::-;15624:3;15655:1;15651:6;15648:1;15645:13;15642:39;;;15661:18;;:::i;:::-;-1:-1:-1;15697:9:1;;15584:128::o;16073:125::-;16113:4;16141:1;16138;16135:8;16132:34;;;16146:18;;:::i;:::-;-1:-1:-1;16183:9:1;;16073:125::o;17360:980::-;17622:4;17670:3;17659:9;17655:19;17701:6;17690:9;17683:25;17727:2;17765:6;17760:2;17749:9;17745:18;17738:34;17808:3;17803:2;17792:9;17788:18;17781:31;17832:6;17867;17861:13;17898:6;17890;17883:22;17936:3;17925:9;17921:19;17914:26;;17975:2;17967:6;17963:15;17949:29;;17996:1;18006:195;18020:6;18017:1;18014:13;18006:195;;;18085:13;;-1:-1:-1;;;;;18081:39:1;18069:52;;18176:15;;;;18141:12;;;;18117:1;18035:9;18006:195;;;-1:-1:-1;;;;;;;18257:32:1;;;;18252:2;18237:18;;18230:60;-1:-1:-1;;;18321:3:1;18306:19;18299:35;18218:3;17360:980;-1:-1:-1;;;17360:980:1:o;18957:306::-;19045:6;19053;19061;19114:2;19102:9;19093:7;19089:23;19085:32;19082:52;;;19130:1;19127;19120:12;19082:52;19159:9;19153:16;19143:26;;19209:2;19198:9;19194:18;19188:25;19178:35;;19253:2;19242:9;19238:18;19232:25;19222:35;;18957:306;;;;;:::o

Swarm Source

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