ETH Price: $2,475.72 (-1.87%)

Contract

0x5fEd5706414923e3D5d4C685A2446C06636e4C3c
 

Overview

ETH Balance

172 wei

Eth Value

Less Than $0.01 (@ $2,475.72/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve160755302022-11-29 12:04:35641 days ago1669723475IN
0x5fEd5706...6636e4C3c
0 ETH0.0005637612.07378456
Approve155739882022-09-20 10:05:59711 days ago1663668359IN
0x5fEd5706...6636e4C3c
0 ETH0.000261865.60815269
Approve150256212022-06-25 21:17:59798 days ago1656191879IN
0x5fEd5706...6636e4C3c
0 ETH0.0011729325.12010638
Approve150248162022-06-25 17:44:30798 days ago1656179070IN
0x5fEd5706...6636e4C3c
0 ETH0.0016338534.99152612
Approve150239432022-06-25 13:42:14798 days ago1656164534IN
0x5fEd5706...6636e4C3c
0 ETH0.0025965355.60870397
Approve150237612022-06-25 12:47:44798 days ago1656161264IN
0x5fEd5706...6636e4C3c
0 ETH0.0019063441.09123509
Approve150236972022-06-25 12:29:50798 days ago1656160190IN
0x5fEd5706...6636e4C3c
0 ETH0.0020113643.0764576
Approve150236392022-06-25 12:12:39798 days ago1656159159IN
0x5fEd5706...6636e4C3c
0 ETH0.0012920327.67076732
Approve150236302022-06-25 12:11:26798 days ago1656159086IN
0x5fEd5706...6636e4C3c
0 ETH0.0016566135.47889662
Approve150236212022-06-25 12:07:23798 days ago1656158843IN
0x5fEd5706...6636e4C3c
0 ETH0.0010764423.05366054
Approve150236112022-06-25 12:05:11798 days ago1656158711IN
0x5fEd5706...6636e4C3c
0 ETH0.0013194228.25754339
Approve150235942022-06-25 12:01:35798 days ago1656158495IN
0x5fEd5706...6636e4C3c
0 ETH0.0016486335.30792423
Approve150235862022-06-25 11:58:44798 days ago1656158324IN
0x5fEd5706...6636e4C3c
0 ETH0.0011734925.13217816
Approve150235832022-06-25 11:58:23798 days ago1656158303IN
0x5fEd5706...6636e4C3c
0 ETH0.0018988140.92880792
Approve150235572022-06-25 11:50:53798 days ago1656157853IN
0x5fEd5706...6636e4C3c
0 ETH0.0010371322.21173615
Approve150235552022-06-25 11:50:14798 days ago1656157814IN
0x5fEd5706...6636e4C3c
0 ETH0.0008872919.09596102
Approve150235522022-06-25 11:49:41798 days ago1656157781IN
0x5fEd5706...6636e4C3c
0 ETH0.0009287619.89078462
Approve150235512022-06-25 11:49:20798 days ago1656157760IN
0x5fEd5706...6636e4C3c
0 ETH0.0014751231.79636107
Approve150235472022-06-25 11:48:54798 days ago1656157734IN
0x5fEd5706...6636e4C3c
0 ETH0.0010385922.24306496
Approve150235462022-06-25 11:48:32798 days ago1656157712IN
0x5fEd5706...6636e4C3c
0 ETH0.0009874121.14686537
Approve150235462022-06-25 11:48:32798 days ago1656157712IN
0x5fEd5706...6636e4C3c
0 ETH0.0010622539.64686537
Approve150235462022-06-25 11:48:32798 days ago1656157712IN
0x5fEd5706...6636e4C3c
0 ETH0.0010107521.64686537
Approve150235442022-06-25 11:48:18798 days ago1656157698IN
0x5fEd5706...6636e4C3c
0 ETH0.0010836723.20856904
Approve150235392022-06-25 11:47:02798 days ago1656157622IN
0x5fEd5706...6636e4C3c
0 ETH0.0010498122.48326444
Approve150235382022-06-25 11:46:51798 days ago1656157611IN
0x5fEd5706...6636e4C3c
0 ETH0.0010272422
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
160755332022-11-29 12:05:11641 days ago1669723511
0x5fEd5706...6636e4C3c
0.00288738 ETH
160755332022-11-29 12:05:11641 days ago1669723511
0x5fEd5706...6636e4C3c
0.00288738 ETH
160755332022-11-29 12:05:11641 days ago1669723511
0x5fEd5706...6636e4C3c
0.00577477 ETH
155739932022-09-20 10:06:59711 days ago1663668419
0x5fEd5706...6636e4C3c
0.00290255 ETH
155739932022-09-20 10:06:59711 days ago1663668419
0x5fEd5706...6636e4C3c
0.00290255 ETH
155739932022-09-20 10:06:59711 days ago1663668419
0x5fEd5706...6636e4C3c
0.0058051 ETH
151910062022-07-22 7:25:32771 days ago1658474732
0x5fEd5706...6636e4C3c
0.00292957 ETH
151910062022-07-22 7:25:32771 days ago1658474732
0x5fEd5706...6636e4C3c
0.00292957 ETH
151910062022-07-22 7:25:32771 days ago1658474732
0x5fEd5706...6636e4C3c
0.00585914 ETH
150764232022-07-04 13:54:49789 days ago1656942889
0x5fEd5706...6636e4C3c
0.00296636 ETH
150764232022-07-04 13:54:49789 days ago1656942889
0x5fEd5706...6636e4C3c
0.00296636 ETH
150764232022-07-04 13:54:49789 days ago1656942889
0x5fEd5706...6636e4C3c
0.00593272 ETH
150395592022-06-28 12:01:40795 days ago1656417700
0x5fEd5706...6636e4C3c
0.00298976 ETH
150395592022-06-28 12:01:40795 days ago1656417700
0x5fEd5706...6636e4C3c
0.00298976 ETH
150395592022-06-28 12:01:40795 days ago1656417700
0x5fEd5706...6636e4C3c
0.00597953 ETH
150309722022-06-26 21:27:18797 days ago1656278838
0x5fEd5706...6636e4C3c
0.00301828 ETH
150309722022-06-26 21:27:18797 days ago1656278838
0x5fEd5706...6636e4C3c
0.00301828 ETH
150309722022-06-26 21:27:18797 days ago1656278838
0x5fEd5706...6636e4C3c
0.00603657 ETH
150292392022-06-26 13:38:49797 days ago1656250729
0x5fEd5706...6636e4C3c
0.00311717 ETH
150292392022-06-26 13:38:49797 days ago1656250729
0x5fEd5706...6636e4C3c
0.00311717 ETH
150292392022-06-26 13:38:49797 days ago1656250729
0x5fEd5706...6636e4C3c
0.00623434 ETH
150256262022-06-25 21:18:56798 days ago1656191936
0x5fEd5706...6636e4C3c
0.00317263 ETH
150256262022-06-25 21:18:56798 days ago1656191936
0x5fEd5706...6636e4C3c
0.00317263 ETH
150256262022-06-25 21:18:56798 days ago1656191936
0x5fEd5706...6636e4C3c
0.00634526 ETH
150250672022-06-25 18:53:50798 days ago1656183230
0x5fEd5706...6636e4C3c
0.00326975 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DAKITA

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-25
*/

// SPDX-License-Identifier: Unlicensed

/*
    Dark Akita - $DAKITA

    Welcome to the dark force. The dark version of Akita. New rules.

    Twitter: https://twitter.com/darkakitatoken

    Website: https://www.dakitatoken.com/
*/
pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
library SafeMath {

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }


    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


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


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


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


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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) 
    {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) 
            {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () 
    {
        address msgSender = _msgSender();
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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


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


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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }


    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    

    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp < _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

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

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

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

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

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

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

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _blacklisted;
    mapping (address => bool) private _contractExempt;
    mapping (address => bool) private _maxWalletLimitExempt;
    mapping (address => bool) private boughtEarly;
    mapping (address => bool) private isAMM;
    uint256 private constant MAX = ~uint256(0);
    uint256 launchedAt;
    string private _name = "Dark Akita";
    string private _symbol = "DAKITA";
    uint8 private _decimals = 9;

    uint256 public _devFee;
    uint256 public _liquidityFee;
    uint256 public _marketingFee;

    uint256 public defaultLiquidityFee = 0;
    uint256 public defaultDevFee = 3;
    uint256 public defaultMarketingFee = 3;

    bool private updateTax = true;
    uint256 updateTaxInterval = 21;
    uint256 taxLastUpdated;

    uint256 public _saleDevFee = 3;
    uint256 public _saleLiquidityFee = 0;
    uint256 public _saleMarketingFee = 3;

    bool public transferTaxEnabled = true;
    uint256 public transferTax = 7;

    bool public contractsAllowed = false;
    uint256 public _taxDivisor = 100;

    address payable public marketingWallet;
    address payable public devWallet;
    
    uint256 public buybackDivisor = 0; // if equals to _liquidityFee, no liquidity will be added, only buybacks will happen from the ETH on contract
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    bool public maxSellAmountActive = true;
    bool public maxBuyAmountActive = true;
    bool public maxWalletLimitActive = true;

    uint256 private _totalSupply = 1_000_000_000_000 * 10 **_decimals;
    uint256 public maxSellAmount = 20_000_000_000 * 10 ** _decimals;
    uint256 public maxBuyAmount = 80_000_000_000 * 10 ** _decimals;
    uint256 public numTokensSellToAddToLiquidity = 1_000_000_000 * 10 ** _decimals;
    uint256 public maxWalletLimit = 80_000_000_000 * 10 ** _decimals;

    uint256 public buyBackUpperLimit = 1 * 10 ** 18;
    uint256 public buyBackLowerLimit = 1 * 10 ** 12;
    bool public buyBackEnabled = false;

    event BuyBackEnabledUpdated(bool enabled);
    event SwapETHForTokens(uint256 amountIn, address[] path);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        address uni = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        marketingWallet = payable(0xf757a886544b8bC4c4c2F9d52Ac5Dba5aDbDF505); 
        devWallet = payable(0x0B407b49F9Ce273F02cf4274363F35f398e2BaD1);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uni);  
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _balances[owner()] = _totalSupply;
        _contractExempt[address(this)] = true;
        _contractExempt[uni] = true;
        _contractExempt[marketingWallet] = true;
        _contractExempt[devWallet] = true;
        _contractExempt[uniswapV2Pair] = true;

        _maxWalletLimitExempt[address(this)] = true;
        _maxWalletLimitExempt[uni] = true;
        _maxWalletLimitExempt[marketingWallet] = true;
        _maxWalletLimitExempt[devWallet] = true;
        _maxWalletLimitExempt[uniswapV2Pair] = true;
        _maxWalletLimitExempt[owner()] = true;

        _limits[owner()].isExcluded = true;
        _limits[address(this)].isExcluded = true;
        _limits[uni].isExcluded = true;
        
        isAMM[uniswapV2Pair] = true;

        globalLimit = 2 * 10 ** 18; // 10 ** 18 = 1 ETH limit
        globalLimitPeriod = 24 hours;

        _allowances[owner()][uni] = ~uint256(0); // you can leave this here, it will approve tokens to uniswap, so you can add liquidity easily
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function setAllBuyFees(uint256 devFee, uint256 liquidityFee, uint256 marketingFee) public onlyOwner() {
        _devFee = devFee;
        _liquidityFee = liquidityFee;
        _marketingFee = marketingFee;
    }

    function setAllSaleFees(uint256 devFee, uint256 liquidityFee, uint256 marketingFee) public onlyOwner() {
        _saleDevFee = devFee;
        _saleLiquidityFee = liquidityFee;
        _saleMarketingFee = marketingFee;
    }

    function launch() external onlyOwner {
        launchedAt = block.timestamp;
        taxLastUpdated = block.timestamp;
        _liquidityFee = 99;
        buybackDivisor = 0;
        openTrade();
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function setAMMStatus(address _address, bool status) public onlyOwner {
        isAMM[_address] = status;
    }

    function AMMStatus(address _address) public view returns(bool) {
        return isAMM[_address]; 
    }

    function _transfer(address from, address to, uint256 amount) private 
    open(from, to)
    {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(_balances[from] >= amount, "Transfer amount exceeds balance");
        require(!(_blacklisted[from] || _blacklisted[to]), "Blacklisted address involved");
        require(contractsAllowed || !from.isContract() || isContractExempt(from), "No contracts allowed");
        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance && !inSwapAndLiquify && !isAMM[from] && swapAndLiquifyEnabled){
            checkForBuyBack();
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        setLaunchTaxes();
        uint256 tax;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to] || inSwapAndLiquify){
            // From or to excluded, so don't take fees, also don't take fees when contract is swapping
            tax = 0;
        } else {
            if(isAMM[to]){
                // sell
                require(amount <= maxSellAmount || !maxSellAmountActive, "Amount exceeds the max sell amount");
                tax = _saleLiquidityFee.add(_saleMarketingFee).add(_saleDevFee);
            } else if (isAMM[from]) {
                if (block.timestamp == launchedAt){
                    _blacklisted[to] = true;
                }
                // buy
                require(amount <= maxBuyAmount || !maxBuyAmountActive, "Amount exceeds the max buy amount");
                tax = _liquidityFee.add(_marketingFee).add(_devFee);
            } else {
                // transfer
                require(!_limits[from].isPrivateSaler && block.timestamp > launchedAt, "No transfers for private salers");
                tax = transferTaxEnabled ? transferTax : 0;
            }
        }
        //handle token movements
        uint256 taxedAmount = _getTaxed(amount, tax);
        uint256 taxAmount = amount.sub(taxedAmount); 
        _balances[from] = _balances[from].sub(amount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        _balances[to] = _balances[to].add(taxedAmount);
        require(_balances[to] <= maxWalletLimit || _maxWalletLimitExempt[to] || !maxWalletLimitActive, "Exceeds max tokens limit on a single wallet");
        
        // handle limits on sells/transfers
        if (!inSwapAndLiquify && !isAMM[from]){
            _handleLimited(from, taxedAmount);
        }
        
        emit Transfer(from,to,taxedAmount);
        if (taxAmount != 0){
            emit Transfer(from,address(this),taxAmount);
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 allFee = _liquidityFee.add(_marketingFee).add(_devFee);
        if (allFee != 0){
            uint256 halfLiquidityTokens = contractTokenBalance.div(allFee).mul(_liquidityFee-buybackDivisor).div(2);
            uint256 swapableTokens = contractTokenBalance.sub(halfLiquidityTokens);
            uint256 initialBalance = address(this).balance;
            swapTokensForEth(swapableTokens);
            uint256 newBalance = address(this).balance.sub(initialBalance);
            uint256 ethForLiquidity = newBalance.div(allFee).mul(_liquidityFee-buybackDivisor).div(2);
            if(ethForLiquidity > 0) 
            {
            addLiquidity(halfLiquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(halfLiquidityTokens, ethForLiquidity, halfLiquidityTokens);
            }
            marketingWallet.transfer(newBalance.div(allFee).mul(_marketingFee));
            devWallet.transfer(newBalance.div(allFee).mul(_devFee));
        }
    }

    function setLaunchTaxes() private {
        if (updateTax && launchedAt != 0){
            uint256 timeDelta = block.timestamp - taxLastUpdated;
            uint256 times = timeDelta / updateTaxInterval;
            for(uint256 i=0; i < times; i++){
                if (_liquidityFee <= 3) break;
                _liquidityFee  -= 3;
            }
            taxLastUpdated = block.timestamp;
            if (_liquidityFee <= 12){
                updateTax = false;
                _liquidityFee = defaultLiquidityFee;
                _marketingFee = defaultMarketingFee;
                _devFee = defaultDevFee;
                buybackDivisor = 2;
            }
        }
    }

    function _getTaxed(uint256 tokenAmount, uint256 tax) private view returns (uint256 taxed){
        taxed = tokenAmount.mul(_taxDivisor.sub(tax)).div(_taxDivisor);
    }

    function setTransferTaxStatus(bool status) public onlyOwner{
        transferTaxEnabled = status;
    }

    function setTransferTax(uint256 newTax) public onlyOwner{
        transferTax = newTax;
    }

    function setMaxBuyAmountActive(bool status) public onlyOwner{
        maxBuyAmountActive = status;
    } 

    function setMaxSellAmountActive(bool status) public onlyOwner{
        maxSellAmountActive = status;
    }

    function setMaxWalletLimitActive(bool status) public onlyOwner{
        maxWalletLimitActive = status;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this), block.timestamp);
    }

    function manualBurn(uint256 burnAmount) public onlyOwner {
        _transfer(owner(), deadWallet, burnAmount);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this), tokenAmount, 0, 0, owner(), block.timestamp);
    }

    function setExcludeFromFee(address account, bool _enabled) public onlyOwner {
        _isExcludedFromFee[account] = _enabled;
    }
    
    function setmarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = payable(newWallet);
    }

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

    function setMaxSellAmount(uint256 amount) external onlyOwner {
        maxSellAmount = amount;
    }

    function setBuybackDivisor(uint256 amount) external onlyOwner {
        require(amount <= _liquidityFee, "Value higher than liquidity fee not allowed");
        buybackDivisor = amount;
    }

    function setMaxBuyAmount(uint256 amount) external onlyOwner {
        maxBuyAmount = amount;
    }

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

    function setNumTokensSellToAddToLiquidity(uint256 amount) public onlyOwner {
        numTokensSellToAddToLiquidity = amount;
    }

    function setBuybackLowerLimit(uint256 value) public onlyOwner {
        buyBackLowerLimit = value;
    }

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }

    function checkForBuyBack() private lockTheSwap {
        uint256 balance = address(this).balance;
        if (buyBackEnabled && balance >= buyBackLowerLimit) 
        {    
            if (balance > buyBackUpperLimit) {
                balance = buyBackUpperLimit;
                }
            buyBackTokens(balance);
        }
    }

    function swapETHForTokens(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            deadWallet,
            block.timestamp);
        emit SwapETHForTokens(amount, path);
    }

    function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit;
    }

    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function manualBuyback(uint256 amount) external onlyOwner() {
        buyBackTokens(amount);
    }

    // Blacklist
    function setBlacklistStatus(address _address, bool status) public onlyOwner{
        _blacklisted[_address] = status;
    }

    function isBlacklisted(address _address) public view returns (bool) {
        return _blacklisted[_address];
    }

    // Contract rejection
    function setContractsAllowedStatus(bool status) public onlyOwner {
        contractsAllowed = status;
    }

    function isContractExempt(address _address) public view returns (bool) {
        return _contractExempt[_address];
    }

    function setContractExemptStatus(address _address, bool status) public onlyOwner {
        _contractExempt[_address] = status;
    }

    // Max wallet
    function isMaxWalletLimitExempt(address _address) public view returns(bool) {
        return _maxWalletLimitExempt[_address];
    }

    function setMaxWalletLimit(uint256 value) public onlyOwner {
        maxWalletLimit = value;
    }

    function setMaxWalletLimitExemptStatus(address _address, bool status) public onlyOwner {
        _maxWalletLimitExempt[_address] = status;
    }

    function getETHValue(uint256 tokenAmount) private view returns (uint256 ethValue) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        ethValue = uniswapV2Router.getAmountsOut(tokenAmount, path)[1];
    }

    // private sale limits
    mapping(address => LimitedWallet) private _limits;

    uint256 public privateSaleGlobalLimit; // limit over timeframe for private salers
    uint256 public privateSaleGlobalLimitPeriod; // timeframe for private salers

    uint256 public globalLimit; // limit over timeframe for all
    uint256 public globalLimitPeriod; // timeframe for all

    bool public globalLimitsActive = true;
    bool public globalLimitsPrivateSaleActive = true;

    struct LimitedWallet {
        uint256[] sellAmounts;
        uint256[] sellTimestamps;
        uint256 limitPeriod; // ability to set custom values for individual wallets
        uint256 limitETH; // ability to set custom values for individual wallets
        bool isPrivateSaler;
        bool isExcluded;
    }

    function setGlobalLimitPrivateSale(uint256 newLimit) public onlyOwner {
        privateSaleGlobalLimit = newLimit;
    } 

    function setGlobalLimitPeriodPrivateSale(uint256 newPeriod) public onlyOwner {
        privateSaleGlobalLimitPeriod = newPeriod;
    }

    function setGlobalLimit(uint256 newLimit) public onlyOwner {
        globalLimit = newLimit;
    } 

    function setGlobalLimitPeriod(uint256 newPeriod) public onlyOwner {
        globalLimitPeriod = newPeriod;
    }

    function setGlobalLimitsPrivateSaleActiveStatus(bool status) public onlyOwner {
        globalLimitsPrivateSaleActive = status;
    }

    function setGlobalLimitsActiveStatus(bool status) public onlyOwner {
        globalLimitsActive = status;
    }

    function getLimits(address _address) public view returns (LimitedWallet memory){
        return _limits[_address];
    }

    // Set custom limits for an address. Defaults to 0, thus will use the "globalLimitPeriod" and "globalLimitETH" if we don't set them
    function setLimits(address[] calldata addresses, uint256[] calldata limitPeriods, uint256[] calldata limitsETH) public onlyOwner{
        require(addresses.length == limitPeriods.length && limitPeriods.length == limitsETH.length, "Array lengths don't match");
        require(addresses.length <= 1000, "Array too long");
        for(uint256 i=0; i < addresses.length; i++){
            _limits[addresses[i]].limitPeriod = limitPeriods[i];
            _limits[addresses[i]].limitETH = limitsETH[i];
        }

    }

    function addPrivateSalers(address[] calldata addresses) public onlyOwner{
        require(addresses.length <= 1000, "Array too long");
        for(uint256 i=0; i < addresses.length; i++){
            _limits[addresses[i]].isPrivateSaler = true;
        }
    }

    function removePrivateSalers(address[] calldata addresses) public onlyOwner{
        require(addresses.length <= 1000, "Array too long");
        for(uint256 i=0; i < addresses.length; i++){
            _limits[addresses[i]].isPrivateSaler = false;
        }
    }

    function addExcludedFromLimits(address[] calldata addresses) public onlyOwner{
        require(addresses.length <= 1000, "Array too long");
        for(uint256 i=0; i < addresses.length; i++){
            _limits[addresses[i]].isExcluded = true;
        }
    }

    function removeExcludedFromLimits(address[] calldata addresses) public onlyOwner{
        require(addresses.length <= 1000, "Array too long");
        for(uint256 i=0; i < addresses.length; i++){
            _limits[addresses[i]].isExcluded = false;
        }
    }

    // Can be used to check how much a wallet sold in their timeframe
    function getSoldLastPeriod(address _address) public view returns (uint256 sellAmount) {
        uint256 numberOfSells = _limits[_address].sellAmounts.length;

        if (numberOfSells == 0) {
            return sellAmount;
        }
        uint256 defaultLimitPeriod = _limits[_address].isPrivateSaler ? privateSaleGlobalLimitPeriod : globalLimitPeriod;
        uint256 limitPeriod = _limits[_address].limitPeriod == 0 ? defaultLimitPeriod : _limits[_address].limitPeriod;
        while (true) {
            if (numberOfSells == 0) {
                break;
            }
            numberOfSells--;
            uint256 sellTimestamp = _limits[_address].sellTimestamps[numberOfSells];
            if (block.timestamp - limitPeriod <= sellTimestamp) {
                sellAmount += _limits[_address].sellAmounts[numberOfSells];
            } else {
                break;
            }
        }
    }
    // Handle private sale wallets
    function _handleLimited(address from, uint256 taxedAmount) private {
        if (_limits[from].isExcluded || (!globalLimitsActive && !_limits[from].isPrivateSaler) || (!globalLimitsPrivateSaleActive && _limits[from].isPrivateSaler)){
            return;
        }
        uint256 ethValue = getETHValue(taxedAmount);
        _limits[from].sellTimestamps.push(block.timestamp);
        _limits[from].sellAmounts.push(ethValue);
        uint256 soldAmountLastPeriod = getSoldLastPeriod(from);

        uint256 defaultLimit = _limits[from].isPrivateSaler ? privateSaleGlobalLimit : globalLimit;
        uint256 limit = _limits[from].limitETH == 0 ? defaultLimit : _limits[from].limitETH;
        require(soldAmountLastPeriod <= limit, "Amount over the limit for time period");
    }
    
    function multiSendTokens(address[] calldata addresses, uint256[] calldata amounts) public onlyOwner{
        require(addresses.length == amounts.length, "Array lengths don't match");
        require(addresses.length <= 1000, "Array too long");
        for(uint256 i=0; i < addresses.length; i++){
            _transfer(msg.sender, addresses[i], amounts[i]);
        }
    }
    // Get tokens that are on the contract
    function sweepTokens(address token, address recipient) public onlyOwner {
        uint256 amount = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(recipient, amount);
    }

    function withdraw() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"AMMStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addPrivateSalers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackLowerLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractsAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLimits","outputs":[{"components":[{"internalType":"uint256[]","name":"sellAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"sellTimestamps","type":"uint256[]"},{"internalType":"uint256","name":"limitPeriod","type":"uint256"},{"internalType":"uint256","name":"limitETH","type":"uint256"},{"internalType":"bool","name":"isPrivateSaler","type":"bool"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"internalType":"struct DAKITA.LimitedWallet","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getSoldLastPeriod","outputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimitPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalLimitsPrivateSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isContractExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isMaxWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"manualBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmountActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmountActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleGlobalLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleGlobalLimitPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removePrivateSalers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAMMStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setAllBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setAllSaleFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuybackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBuybackLowerLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setContractExemptStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setContractsAllowedStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setGlobalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setGlobalLimitPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setGlobalLimitPeriodPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setGlobalLimitPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setGlobalLimitsActiveStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setGlobalLimitsPrivateSaleActiveStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"limitPeriods","type":"uint256[]"},{"internalType":"uint256[]","name":"limitsETH","type":"uint256[]"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setMaxBuyAmountActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setMaxSellAmountActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setMaxWalletLimitActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setMaxWalletLimitExemptStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"setTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setTransferTaxStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sweepTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6003805460ff1916905560c0604052600a6080819052694461726b20416b69746160b01b60a09081526200003791600e919062000698565b506040805180820190915260068082526544414b49544160d01b60209092019182526200006791600f9162000698565b5060108054600960ff199182168117909255600060148190556003601581815560168290556017805485166001908117909155601891909155601a829055601b839055601c91909155601d8054841690911790556007601e55601f805490921690915560646020556023556024805461dead6001600160a01b03199091161790556026805463ffffffff60a81b1916630101010160a81b1790556200010e90600a620007b7565b6200011f9064e8d4a5100062000878565b602755601054620001359060ff16600a620007b7565b62000146906404a817c80062000878565b6028556010546200015c9060ff16600a620007b7565b6200016d906412a05f200062000878565b602955601054620001839060ff16600a620007b7565b6200019390633b9aca0062000878565b602a55601054620001a99060ff16600a620007b7565b620001ba906412a05f200062000878565b602b55670de0b6b3a7640000602c5564e8d4a51000602d55602e805460ff191690556034805461ffff1916610101179055348015620001f857600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336000908152600460208181526040808420805460ff19908116600190811790925530865294829020805490951617909355602180546001600160a01b031990811673f757a886544b8bc4c4c2f9d52ac5dba5adbdf5051790915560228054909116730b407b49f9ce273f02cf4274363f35f398e2bad1179055825163c45a015560e01b81529251737a250d5630b4cf539739df2c5dacb4c659f2488d938493849363c45a0155938383019391929091829003018186803b158015620002ff57600080fd5b505afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200073e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038357600080fd5b505afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200073e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200040757600080fd5b505af11580156200041c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044291906200073e565b602680546001600160a01b03199081166001600160a01b0393841617909155602580549091169183169190911790556001600760006200048a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260079092528120805490921660011790915560275490600690620004e56000546001600160a01b031690565b6001600160a01b039081168252602080830193909352604091820160009081209490945530808552600984528285208054600160ff1991821681179092558884168088528588208054831684179055602180548616895286892080548416851790556022805487168a52878a2080548516861790556026805488168b52888b208054861687179055868b52600a8a52888b208054861687179055838b52888b208054861687179055915487168a52878a2080548516861790555486168952868920805484168517905580548616895286892080548416851790558854861689528689208054841685179055885486168952602f88528689206004908101805461010061ff00199182168117909255968b52888b2082018054881682179055838b52888b20909101805490961617909455925484168752600c865284872080549091169091179055671bc16d674ec800006032556201518060335584549091168452600583528184209084528252808320600019905560275490519081523392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620008ed565b828054620006a6906200089a565b90600052602060002090601f016020900481019282620006ca576000855562000715565b82601f10620006e557805160ff191683800117855562000715565b8280016001018555821562000715579182015b8281111562000715578251825591602001919060010190620006f8565b506200072392915062000727565b5090565b5b8082111562000723576000815560010162000728565b60006020828403121562000750578081fd5b81516001600160a01b038116811462000767578182fd5b9392505050565b600181815b80851115620007af578160001904821115620007935762000793620008d7565b80851615620007a157918102915b93841c939080029062000773565b509250929050565b60006200076760ff841683600082620007d35750600162000872565b81620007e25750600062000872565b8160018114620007fb5760028114620008065762000826565b600191505062000872565b60ff8411156200081a576200081a620008d7565b50506001821b62000872565b5060208310610133831016604e8410600b84101617156200084b575081810a62000872565b6200085783836200076e565b80600019048211156200086e576200086e620008d7565b0290505b92915050565b6000816000190483118215151615620008955762000895620008d7565b500290565b600181811c90821680620008af57607f821691505b60208210811415620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b614af880620008fd6000396000f3fe60806040526004361061061a5760003560e01c806370e5024111610329578063a457c2d7116101b6578063d17761cf11610102578063f064321f116100a0578063f34eb0b81161007a578063f34eb0b81461124e578063f6887cd31461126e578063fb201b1d146112a7578063fe575a87146112bc57600080fd5b8063f064321f146111ee578063f0f165af1461120e578063f2fde38b1461122e57600080fd5b8063da29c27f116100dc578063da29c27f14611152578063dd46706414611168578063dd62ed3e14611188578063e99c9d09146111ce57600080fd5b8063d17761cf146110fc578063d1d3a05f14611112578063d7c6e3601461113257600080fd5b8063b49841231161016f578063c49b9a8011610149578063c49b9a8014611090578063c5f34b9c146110b0578063ca450788146110d0578063d12a7688146110e657600080fd5b8063b49841231461102f578063bf7856b71461104f578063c480512e1461107057600080fd5b8063a457c2d714610f84578063a69df4b514610fa4578063a9059cbb14610fb9578063aa45026b14610fd9578063ae02cd5c14610fef578063af9549e01461100f57600080fd5b80638b5259031161027557806395d89b411161022e57806399fa296f1161020857806399fa296f14610f175780639d5710d114610f385780639f64621414610f4e578063a36322c614610f6457600080fd5b806395d89b4114610ec857806396f9e9be14610edd57806398e2a5e214610ef757600080fd5b80638b52590314610e065780638baeefce14610e265780638c672a2614610e3b5780638da5cb5b14610e745780638ea5220f14610e9257806390987e0914610eb257600080fd5b80637ba6b4ee116102e257806385141a77116102bc57806385141a7714610d90578063867a1dc214610db057806388e765ff14610dd05780638b16549a14610de657600080fd5b80637ba6b4ee14610d405780638124f7ac14610d5a57806382d2a4bb14610d7057600080fd5b806370e5024114610c94578063715018a614610caa578063728d41c914610cbf57806375f0a87414610cdf5780637638e15114610cff5780637b94943b14610d1f57600080fd5b80634198d1bb116104a75780635d38ab85116103f357806366a88d96116103ac5780636bc87c3a116103865780636bc87c3a14610c095780636fb9fbfe14610c1f57806370a0823114610c3f57806370bfcf2114610c7557600080fd5b806366a88d9614610bc757806366d602ae14610bdd57806369550efd14610bf357600080fd5b80635d38ab8514610b0b578063602bc62b14610b2b5780636053a0e314610b405780636199d05e14610b5a57806361a13b4a14610b7a57806363e8f37014610ba757600080fd5b806349bd5a5e1161046057806350286f641161043a57806350286f6414610a595780635342acb414610a79578063545fb32814610ab25780635ca52d6714610aeb57600080fd5b806349bd5a5e146109f85780634a74bb0214610a185780634d87c64414610a3957600080fd5b80634198d1bb14610952578063424ba8481461097257806343614d2814610992578063437d9840146109a857806347535d7b146109be57806348914c99146109d857600080fd5b806322461173116105665780632610eaca1161051f578063313ce567116104f9578063313ce567146108e557806339509351146109075780633ccfd60b1461092757806340615b8b1461093c57600080fd5b80632610eaca1461088557806329370cc6146108a55780632b9b4f78146108c557600080fd5b806322461173146107d557806322976e0d146107f557806322c98d341461080b578063232898b41461082557806323b635851461084557806323b872dd1461086557600080fd5b8063147745e5116105d3578063170dde6a116105ad578063170dde6a1461077457806318160ddd1461078a5780631f53ac021461079f57806321ba5081146107bf57600080fd5b8063147745e5146106f85780631609be1d1461071c5780631694505e1461073c57600080fd5b806301339c211461062657806303d29d281461063d5780630609511e1461065d57806306fdde031461067d578063095ea7b3146106a85780630b6bb6f5146106d857600080fd5b3661062157005b600080fd5b34801561063257600080fd5b5061063b6112f5565b005b34801561064957600080fd5b5061063b610658366004614319565b611345565b34801561066957600080fd5b5061063b610678366004614610565b61139a565b34801561068957600080fd5b506106926113c9565b60405161069f919061473f565b60405180910390f35b3480156106b457600080fd5b506106c86106c3366004614346565b61145b565b604051901515815260200161069f565b3480156106e457600080fd5b5061063b6106f33660046144b0565b611472565b34801561070457600080fd5b5061070e60205481565b60405190815260200161069f565b34801561072857600080fd5b5061063b6107373660046142a1565b61151c565b34801561074857600080fd5b5060255461075c906001600160a01b031681565b6040516001600160a01b03909116815260200161069f565b34801561078057600080fd5b5061070e601b5481565b34801561079657600080fd5b5060275461070e565b3480156107ab57600080fd5b5061063b6107ba366004614269565b61164c565b3480156107cb57600080fd5b5061070e60315481565b3480156107e157600080fd5b5061063b6107f0366004614269565b611698565b34801561080157600080fd5b5061070e60135481565b34801561081757600080fd5b506034546106c89060ff1681565b34801561083157600080fd5b5061063b610840366004614371565b6116e4565b34801561085157600080fd5b5061063b610860366004614610565b6117bf565b34801561087157600080fd5b506106c86108803660046142d9565b611813565b34801561089157600080fd5b5061063b6108a03660046143b1565b61187c565b3480156108b157600080fd5b5061063b6108c03660046145d8565b61199c565b3480156108d157600080fd5b5061063b6108e03660046145d8565b611a0e565b3480156108f157600080fd5b5060105460405160ff909116815260200161069f565b34801561091357600080fd5b506106c8610922366004614346565b611a4b565b34801561093357600080fd5b5061063b611a81565b34801561094857600080fd5b5061070e601c5481565b34801561095e57600080fd5b5061063b61096d366004614610565b611ad7565b34801561097e57600080fd5b5061063b61098d366004614319565b611b6c565b34801561099e57600080fd5b5061070e601a5481565b3480156109b457600080fd5b5061070e60335481565b3480156109ca57600080fd5b506003546106c89060ff1681565b3480156109e457600080fd5b5061063b6109f3366004614640565b611bc1565b348015610a0457600080fd5b5060265461075c906001600160a01b031681565b348015610a2457600080fd5b506026546106c890600160a81b900460ff1681565b348015610a4557600080fd5b5061063b610a54366004614640565b611bf9565b348015610a6557600080fd5b5061063b610a74366004614319565b611c31565b348015610a8557600080fd5b506106c8610a94366004614269565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610abe57600080fd5b506106c8610acd366004614269565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610af757600080fd5b5061063b610b063660046145d8565b611c86565b348015610b1757600080fd5b5061063b610b263660046145d8565b611cca565b348015610b3757600080fd5b5060025461070e565b348015610b4c57600080fd5b50602e546106c89060ff1681565b348015610b6657600080fd5b5061063b610b75366004614610565b611d07565b348015610b8657600080fd5b50610b9a610b95366004614269565b611d36565b60405161069f91906147ef565b348015610bb357600080fd5b5061063b610bc2366004614371565b611e78565b348015610bd357600080fd5b5061070e602b5481565b348015610be957600080fd5b5061070e60285481565b348015610bff57600080fd5b5061070e60155481565b348015610c1557600080fd5b5061070e60125481565b348015610c2b57600080fd5b5061063b610c3a3660046145d8565b611f47565b348015610c4b57600080fd5b5061070e610c5a366004614269565b6001600160a01b031660009081526006602052604090205490565b348015610c8157600080fd5b506034546106c890610100900460ff1681565b348015610ca057600080fd5b5061070e602c5481565b348015610cb657600080fd5b5061063b611f8f565b348015610ccb57600080fd5b5061063b610cda366004614610565b611ff1565b348015610ceb57600080fd5b5060215461075c906001600160a01b031681565b348015610d0b57600080fd5b5061063b610d1a366004614319565b612020565b348015610d2b57600080fd5b506026546106c890600160c01b900460ff1681565b348015610d4c57600080fd5b50601f546106c89060ff1681565b348015610d6657600080fd5b5061070e601e5481565b348015610d7c57600080fd5b5061063b610d8b366004614610565b612075565b348015610d9c57600080fd5b5060245461075c906001600160a01b031681565b348015610dbc57600080fd5b5061063b610dcb366004614371565b6120a4565b348015610ddc57600080fd5b5061070e60295481565b348015610df257600080fd5b5061070e610e01366004614269565b61217a565b348015610e1257600080fd5b5061063b610e21366004614610565b6122f6565b348015610e3257600080fd5b5061063b612325565b348015610e4757600080fd5b506106c8610e56366004614269565b6001600160a01b03166000908152600c602052604090205460ff1690565b348015610e8057600080fd5b506000546001600160a01b031661075c565b348015610e9e57600080fd5b5060225461075c906001600160a01b031681565b348015610ebe57600080fd5b5061070e60145481565b348015610ed457600080fd5b5061069261235b565b348015610ee957600080fd5b50601d546106c89060ff1681565b348015610f0357600080fd5b5061063b610f12366004614610565b61236a565b348015610f2357600080fd5b506026546106c890600160b81b900460ff1681565b348015610f4457600080fd5b5061070e60325481565b348015610f5a57600080fd5b5061070e60165481565b348015610f7057600080fd5b5061063b610f7f366004614610565b612399565b348015610f9057600080fd5b506106c8610f9f366004614346565b6123c8565b348015610fb057600080fd5b5061063b612417565b348015610fc557600080fd5b506106c8610fd4366004614346565b61251d565b348015610fe557600080fd5b5061070e60115481565b348015610ffb57600080fd5b5061063b61100a366004614371565b61252a565b34801561101b57600080fd5b5061063b61102a366004614319565b6125f9565b34801561103b57600080fd5b5061063b61104a366004614610565b61264e565b34801561105b57600080fd5b506026546106c890600160b01b900460ff1681565b34801561107c57600080fd5b5061063b61108b366004614610565b61267d565b34801561109c57600080fd5b5061063b6110ab3660046145d8565b6126b0565b3480156110bc57600080fd5b5061063b6110cb3660046145d8565b612727565b3480156110dc57600080fd5b5061070e60305481565b3480156110f257600080fd5b5061070e602a5481565b34801561110857600080fd5b5061070e602d5481565b34801561111e57600080fd5b5061063b61112d3660046145d8565b61276f565b34801561113e57600080fd5b5061063b61114d3660046145d8565b6127ac565b34801561115e57600080fd5b5061070e60235481565b34801561117457600080fd5b5061063b611183366004614610565b6127f4565b34801561119457600080fd5b5061070e6111a33660046142a1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156111da57600080fd5b5061063b6111e9366004614610565b612879565b3480156111fa57600080fd5b5061063b61120936600461441a565b6128a8565b34801561121a57600080fd5b5061063b611229366004614610565b612a6a565b34801561123a57600080fd5b5061063b611249366004614269565b612a99565b34801561125a57600080fd5b5061063b611269366004614610565b612b71565b34801561127a57600080fd5b506106c8611289366004614269565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156112b357600080fd5b5061063b612ba0565b3480156112c857600080fd5b506106c86112d7366004614269565b6001600160a01b031660009081526008602052604090205460ff1690565b6000546001600160a01b031633146113285760405162461bcd60e51b815260040161131f90614792565b60405180910390fd5b42600d81905560195560636012556000602355611343612ba0565b565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113c45760405162461bcd60e51b815260040161131f90614792565b603155565b6060600e80546113d890614990565b80601f016020809104026020016040519081016040528092919081815260200182805461140490614990565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b5050505050905090565b6000611468338484612bd9565b5060015b92915050565b6000546001600160a01b0316331461149c5760405162461bcd60e51b815260040161131f90614792565b60005b81518160ff16101561151857600160046000848460ff16815181106114d457634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611510816149e6565b91505061149f565b5050565b6000546001600160a01b031633146115465760405162461bcd60e51b815260040161131f90614792565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561158857600080fd5b505afa15801561159c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c09190614628565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906145f4565b50505050565b6000546001600160a01b031633146116765760405162461bcd60e51b815260040161131f90614792565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116c25760405162461bcd60e51b815260040161131f90614792565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461170e5760405162461bcd60e51b815260040161131f90614792565b6103e88111156117305760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576001602f600085858581811061176157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117769190614269565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff0019909216919091179055806117b2816149cb565b915050611733565b505050565b6000546001600160a01b031633146117e95760405162461bcd60e51b815260040161131f90614792565b6118106117fe6000546001600160a01b031690565b6024546001600160a01b031683612cfd565b50565b6000611820848484612cfd565b611872843361186d85604051806060016040528060288152602001614a56602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061356e565b612bd9565b5060019392505050565b6000546001600160a01b031633146118a65760405162461bcd60e51b815260040161131f90614792565b8281146118f15760405162461bcd60e51b8152602060048201526019602482015278082e4e4c2f240d8cadccee8d0e640c8dedc4ee840dac2e8c6d603b1b604482015260640161131f565b6103e88311156119135760405162461bcd60e51b815260040161131f906147c7565b60005b83811015611995576119833386868481811061194257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119579190614269565b85858581811061197757634e487b7160e01b600052603260045260246000fd5b90506020020135612cfd565b8061198d816149cb565b915050611916565b5050505050565b6000546001600160a01b031633146119c65760405162461bcd60e51b815260040161131f90614792565b602e805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000546001600160a01b03163314611a385760405162461bcd60e51b815260040161131f90614792565b6034805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161146891859061186d90866135a8565b6000546001600160a01b03163314611aab5760405162461bcd60e51b815260040161131f90614792565b60405133904780156108fc02916000818181858888f19350505050158015611810573d6000803e3d6000fd5b6000546001600160a01b03163314611b015760405162461bcd60e51b815260040161131f90614792565b601254811115611b675760405162461bcd60e51b815260206004820152602b60248201527f56616c756520686967686572207468616e206c6971756964697479206665652060448201526a1b9bdd08185b1b1bddd95960aa1b606482015260840161131f565b602355565b6000546001600160a01b03163314611b965760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611beb5760405162461bcd60e51b815260040161131f90614792565b601192909255601255601355565b6000546001600160a01b03163314611c235760405162461bcd60e51b815260040161131f90614792565b601a92909255601b55601c55565b6000546001600160a01b03163314611c5b5760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cb05760405162461bcd60e51b815260040161131f90614792565b603480549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611cf45760405162461bcd60e51b815260040161131f90614792565b601d805460ff1916911515919091179055565b6000546001600160a01b03163314611d315760405162461bcd60e51b815260040161131f90614792565b603255565b611d736040518060c00160405280606081526020016060815260200160008152602001600081526020016000151581526020016000151581525090565b6001600160a01b0382166000908152602f60209081526040918290208251815460e09381028201840190945260c081018481529093919284928491840182828015611ddd57602002820191906000526020600020905b815481526020019060010190808311611dc9575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e3557602002820191906000526020600020905b815481526020019060010190808311611e21575b5050509183525050600282015460208201526003820154604082015260049091015460ff8082161515606084015261010090910416151560809091015292915050565b6000546001600160a01b03163314611ea25760405162461bcd60e51b815260040161131f90614792565b6103e8811115611ec45760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576001602f6000858585818110611ef557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611f0a9190614269565b6001600160a01b031681526020810191909152604001600020600401805460ff191691151591909117905580611f3f816149cb565b915050611ec7565b6000546001600160a01b03163314611f715760405162461bcd60e51b815260040161131f90614792565b60268054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611fb95760405162461bcd60e51b815260040161131f90614792565b600080546040516001600160a01b0390911690600080516020614a7e833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461201b5760405162461bcd60e51b815260040161131f90614792565b602b55565b6000546001600160a01b0316331461204a5760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461209f5760405162461bcd60e51b815260040161131f90614792565b602c55565b6000546001600160a01b031633146120ce5760405162461bcd60e51b815260040161131f90614792565b6103e88111156120f05760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576000602f600085858581811061212157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906121369190614269565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff001990921691909117905580612172816149cb565b9150506120f3565b6001600160a01b0381166000908152602f60205260408120548061219e5750919050565b6001600160a01b0383166000908152602f602052604081206004015460ff166121c9576033546121cd565b6031545b6001600160a01b0385166000908152602f60205260408120600201549192509015612213576001600160a01b0385166000908152602f6020526040902060020154612215565b815b90505b82612222576122ee565b8261222c81614979565b6001600160a01b0387166000908152602f602052604081206001018054929650909250908590811061226e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508082426122889190614962565b116122e2576001600160a01b0386166000908152602f602052604090208054859081106122c557634e487b7160e01b600052603260045260246000fd5b9060005260206000200154856122db919061490b565b94506122e8565b506122ee565b50612218565b505050919050565b6000546001600160a01b031633146123205760405162461bcd60e51b815260040161131f90614792565b601e55565b6000546001600160a01b0316331461234f5760405162461bcd60e51b815260040161131f90614792565b6003805460ff19169055565b6060600f80546113d890614990565b6000546001600160a01b031633146123945760405162461bcd60e51b815260040161131f90614792565b603055565b6000546001600160a01b031633146123c35760405162461bcd60e51b815260040161131f90614792565b602d55565b6000611468338461186d85604051806060016040528060258152602001614a9e602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061356e565b6001546001600160a01b0316331461247d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b606482015260840161131f565b60025442106124ce5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015260640161131f565b600154600080546040516001600160a01b039384169390911691600080516020614a7e83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000611468338484612cfd565b6000546001600160a01b031633146125545760405162461bcd60e51b815260040161131f90614792565b6103e88111156125765760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576000602f60008585858181106125a757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125bc9190614269565b6001600160a01b031681526020810191909152604001600020600401805460ff1916911515919091179055806125f1816149cb565b915050612579565b6000546001600160a01b031633146126235760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146126785760405162461bcd60e51b815260040161131f90614792565b603355565b6000546001600160a01b031633146126a75760405162461bcd60e51b815260040161131f90614792565b6118108161360e565b6000546001600160a01b031633146126da5760405162461bcd60e51b815260040161131f90614792565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611a0390831515815260200190565b6000546001600160a01b031633146127515760405162461bcd60e51b815260040161131f90614792565b60268054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146127995760405162461bcd60e51b815260040161131f90614792565b601f805460ff1916911515919091179055565b6000546001600160a01b031633146127d65760405162461bcd60e51b815260040161131f90614792565b60268054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b0316331461281e5760405162461bcd60e51b815260040161131f90614792565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561284d814261490b565b600255600080546040516001600160a01b0390911690600080516020614a7e833981519152908390a350565b6000546001600160a01b031633146128a35760405162461bcd60e51b815260040161131f90614792565b602855565b6000546001600160a01b031633146128d25760405162461bcd60e51b815260040161131f90614792565b84831480156128e057508281145b6129285760405162461bcd60e51b8152602060048201526019602482015278082e4e4c2f240d8cadccee8d0e640c8dedc4ee840dac2e8c6d603b1b604482015260640161131f565b6103e885111561294a5760405162461bcd60e51b815260040161131f906147c7565b60005b85811015612a615784848281811061297557634e487b7160e01b600052603260045260246000fd5b90506020020135602f60008989858181106129a057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906129b59190614269565b6001600160a01b031681526020810191909152604001600020600201558282828181106129f257634e487b7160e01b600052603260045260246000fd5b90506020020135602f6000898985818110612a1d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a329190614269565b6001600160a01b0316815260208101919091526040016000206003015580612a59816149cb565b91505061294d565b50505050505050565b6000546001600160a01b03163314612a945760405162461bcd60e51b815260040161131f90614792565b602a55565b6000546001600160a01b03163314612ac35760405162461bcd60e51b815260040161131f90614792565b6001600160a01b038116612b285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161131f565b600080546040516001600160a01b0380851693921691600080516020614a7e83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612b9b5760405162461bcd60e51b815260040161131f90614792565b602955565b6000546001600160a01b03163314612bca5760405162461bcd60e51b815260040161131f90614792565b6003805460ff19166001179055565b6001600160a01b038316612c3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161131f565b6001600160a01b038216612c9c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161131f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff1680612d2a57506001600160a01b03821660009081526004602052604090205460ff165b80612d4d57506001600160a01b03811660009081526004602052604090205460ff165b612d845760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b604482015260640161131f565b6001600160a01b038516612de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161131f565b6001600160a01b038416612e4a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161131f565b60008311612eac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161131f565b6001600160a01b038516600090815260066020526040902054831115612f145760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e636500604482015260640161131f565b6001600160a01b03851660009081526008602052604090205460ff1680612f5357506001600160a01b03841660009081526008602052604090205460ff165b15612fa05760405162461bcd60e51b815260206004820152601c60248201527f426c61636b6c6973746564206164647265737320696e766f6c76656400000000604482015260640161131f565b601f5460ff1680612fc05750612fbe856001600160a01b0316613640565b155b80612fe357506001600160a01b03851660009081526009602052604090205460ff165b6130265760405162461bcd60e51b8152602060048201526014602482015273139bc818dbdb9d1c9858dd1cc8185b1b1bddd95960621b604482015260640161131f565b30600090815260066020526040902054602a54811080159081906130545750602654600160a01b900460ff16155b801561307957506001600160a01b0387166000908152600c602052604090205460ff16155b801561308e5750602654600160a81b900460ff165b156130a95761309b61367c565b602a5491506130a9826136c2565b6130b1613879565b6001600160a01b03871660009081526007602052604081205460ff16806130f057506001600160a01b03871660009081526007602052604090205460ff165b806131045750602654600160a01b900460ff165b156131115750600061333c565b6001600160a01b0387166000908152600c602052604090205460ff16156131ce576028548611158061314d5750602654600160b01b900460ff16155b6131a45760405162461bcd60e51b815260206004820152602260248201527f416d6f756e74206578636565647320746865206d61782073656c6c20616d6f756044820152611b9d60f21b606482015260840161131f565b6131c7601a546131c1601c54601b546135a890919063ffffffff16565b906135a8565b905061333c565b6001600160a01b0388166000908152600c602052604090205460ff16156132ab57600d5442141561321d576001600160a01b0387166000908152600860205260409020805460ff191660011790555b602954861115806132385750602654600160b81b900460ff16155b61328e5760405162461bcd60e51b815260206004820152602160248201527f416d6f756e74206578636565647320746865206d61782062757920616d6f756e6044820152601d60fa1b606482015260840161131f565b6131c76011546131c16013546012546135a890919063ffffffff16565b6001600160a01b0388166000908152602f602052604090206004015460ff161580156132d85750600d5442115b6133245760405162461bcd60e51b815260206004820152601f60248201527f4e6f207472616e736665727320666f7220707269766174652073616c65727300604482015260640161131f565b601d5460ff16613335576000613339565b601e545b90505b6000613348878361392e565b90506000613356888361394c565b6001600160a01b038b1660009081526006602052604090205490915061337c908961394c565b6001600160a01b038b166000908152600660205260408082209290925530815220546133a890826135a8565b30600090815260066020526040808220929092556001600160a01b038b16815220546133d490836135a8565b6001600160a01b038a166000908152600660205260409020819055602b5410158061341757506001600160a01b0389166000908152600a602052604090205460ff165b8061342c5750602654600160c01b900460ff16155b61348c5760405162461bcd60e51b815260206004820152602b60248201527f45786365656473206d617820746f6b656e73206c696d6974206f6e206120736960448201526a1b99db19481dd85b1b195d60aa1b606482015260840161131f565b602654600160a01b900460ff161580156134bf57506001600160a01b038a166000908152600c602052604090205460ff16155b156134ce576134ce8a8361398e565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161351391815260200190565b60405180910390a380156135625760405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050505050565b600081848411156135925760405162461bcd60e51b815260040161131f919061473f565b50600061359f8486614962565b95945050505050565b6000806135b5838561490b565b9050838110156136075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161131f565b9392505050565b6026805460ff60a01b1916600160a01b17905580156136305761363081613b64565b506026805460ff60a01b19169055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061367457508115155b949350505050565b6026805460ff60a01b1916600160a01b179055602e54479060ff1680156136a55750602d548110155b1561363057602c548111156136b95750602c545b6136308161360e565b6026805460ff60a01b1916600160a01b1790556011546013546012546000926136f09290916131c1916135a8565b9050801561386857600061372860026137226023546012546137129190614962565b61371c8787613d1f565b90613d61565b90613d1f565b90506000613736848361394c565b90504761374282613de0565b600061374e478361394c565b90506000613774600261372260235460125461376a9190614962565b61371c868b613d1f565b905080156137c8576137868582613f5d565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6021546013546001600160a01b03909116906108fc906137ec9061371c868b613d1f565b6040518115909202916000818181858888f19350505050158015613814573d6000803e3d6000fd5b506022546011546001600160a01b03909116906108fc906138399061371c868b613d1f565b6040518115909202916000818181858888f19350505050158015613861573d6000803e3d6000fd5b5050505050505b50506026805460ff60a01b19169055565b60175460ff16801561388c5750600d5415155b15611343576000601954426138a19190614962565b90506000601854826138b39190614923565b905060005b818110156138fa576003601254116138cf576138fa565b6003601260008282546138e29190614962565b909155508190506138f2816149cb565b9150506138b8565b5042601955601254600c10611518576017805460ff1916905560145460125560165460135560155460115560026023555050565b60205460009061360790613722613945828661394c565b8690613d61565b600061360783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061356e565b6001600160a01b0382166000908152602f6020526040902060040154610100900460ff16806139e7575060345460ff161580156139e757506001600160a01b0382166000908152602f602052604090206004015460ff16155b80613a205750603454610100900460ff16158015613a2057506001600160a01b0382166000908152602f602052604090206004015460ff165b15613a29575050565b6000613a348261403a565b6001600160a01b0384166000908152602f602090815260408220600180820180548083018255908552838520429101558154908101825590835290822001829055909150613a818461217a565b6001600160a01b0385166000908152602f60205260408120600401549192509060ff16613ab057603254613ab4565b6030545b6001600160a01b0386166000908152602f60205260408120600301549192509015613afa576001600160a01b0386166000908152602f6020526040902060030154613afc565b815b905080831115613b5c5760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74206f76657220746865206c696d697420666f722074696d652070604482015264195c9a5bd960da1b606482015260840161131f565b505050505050565b6040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015613bc957600080fd5b505afa158015613bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c019190614285565b81600081518110613c2257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613c6457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460245460405163b6f9de9560e01b81529183169263b6f9de95928692613cb092600092889290911690429060040161470a565b6000604051808303818588803b158015613cc957600080fd5b505af1158015613cdd573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613d13929190614861565b60405180910390a15050565b600061360783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141f1565b600082613d705750600061146c565b6000613d7c8385614943565b905082613d898583614923565b146136075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161131f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613e2357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613e7757600080fd5b505afa158015613e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eaf9190614285565b81600181518110613ed057634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602554613ef69130911684612bd9565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac94790613f2f90859060009086903090429060040161487a565b600060405180830381600087803b158015613f4957600080fd5b505af1158015613b5c573d6000803e3d6000fd5b602554613f759030906001600160a01b031684612bd9565b6025546001600160a01b031663f305d719823085600080613f9e6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561400157600080fd5b505af1158015614015573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611995919061466b565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061408157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156140d557600080fd5b505afa1580156140e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410d9190614285565b8160018151811061412e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460405163d06ca61f60e01b815291169063d06ca61f9061416d9086908590600401614861565b60006040518083038186803b15801561418557600080fd5b505afa158015614199573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141c19190810190614551565b6001815181106141e157634e487b7160e01b600052603260045260246000fd5b6020026020010151915050919050565b600081836142125760405162461bcd60e51b815260040161131f919061473f565b50600061359f8486614923565b60008083601f840112614230578182fd5b50813567ffffffffffffffff811115614247578182fd5b6020830191508360208260051b850101111561426257600080fd5b9250929050565b60006020828403121561427a578081fd5b813561360781614a32565b600060208284031215614296578081fd5b815161360781614a32565b600080604083850312156142b3578081fd5b82356142be81614a32565b915060208301356142ce81614a32565b809150509250929050565b6000806000606084860312156142ed578081fd5b83356142f881614a32565b9250602084013561430881614a32565b929592945050506040919091013590565b6000806040838503121561432b578182fd5b823561433681614a32565b915060208301356142ce81614a47565b60008060408385031215614358578182fd5b823561436381614a32565b946020939093013593505050565b60008060208385031215614383578182fd5b823567ffffffffffffffff811115614399578283fd5b6143a58582860161421f565b90969095509350505050565b600080600080604085870312156143c6578081fd5b843567ffffffffffffffff808211156143dd578283fd5b6143e98883890161421f565b90965094506020870135915080821115614401578283fd5b5061440e8782880161421f565b95989497509550505050565b60008060008060008060608789031215614432578182fd5b863567ffffffffffffffff80821115614449578384fd5b6144558a838b0161421f565b9098509650602089013591508082111561446d578384fd5b6144798a838b0161421f565b90965094506040890135915080821115614491578384fd5b5061449e89828a0161421f565b979a9699509497509295939492505050565b600060208083850312156144c2578182fd5b823567ffffffffffffffff8111156144d8578283fd5b8301601f810185136144e8578283fd5b80356144fb6144f6826148e7565b6148b6565b80828252848201915084840188868560051b870101111561451a578687fd5b8694505b8385101561454557803561453181614a32565b83526001949094019391850191850161451e565b50979650505050505050565b60006020808385031215614563578182fd5b825167ffffffffffffffff811115614579578283fd5b8301601f81018513614589578283fd5b80516145976144f6826148e7565b80828252848201915084840188868560051b87010111156145b6578687fd5b8694505b838510156145455780518352600194909401939185019185016145ba565b6000602082840312156145e9578081fd5b813561360781614a47565b600060208284031215614605578081fd5b815161360781614a47565b600060208284031215614621578081fd5b5035919050565b600060208284031215614639578081fd5b5051919050565b600080600060608486031215614654578081fd5b505081359360208301359350604090920135919050565b60008060006060848603121561467f578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156146d05781516001600160a01b0316875295820195908201906001016146ab565b509495945050505050565b6000815180845260208085019450808401835b838110156146d0578151875295820195908201906001016146ee565b8481526080602082015260006147236080830186614698565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b8181101561476b5785810183015185820160400152820161474f565b8181111561477c5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600e908201526d417272617920746f6f206c6f6e6760901b604082015260600190565b602081526000825160c0602084015261480b60e08401826146db565b90506020840151601f1984830301604085015261482882826146db565b91505060408401516060840152606084015160808401526080840151151560a084015260a0840151151560c08401528091505092915050565b8281526040602082015260006136746040830184614698565b85815284602082015260a06040820152600061489960a0830186614698565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156148df576148df614a1c565b604052919050565b600067ffffffffffffffff82111561490157614901614a1c565b5060051b60200190565b6000821982111561491e5761491e614a06565b500190565b60008261493e57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561495d5761495d614a06565b500290565b60008282101561497457614974614a06565b500390565b60008161498857614988614a06565b506000190190565b600181811c908216806149a457607f821691505b602082108114156149c557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156149df576149df614a06565b5060010190565b600060ff821660ff8114156149fd576149fd614a06565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461181057600080fd5b801515811461181057600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206c2cdbe70e088f6b2fe0a35fc4218806d3bce29a5f0480ae0573b6563583568464736f6c63430008040033

Deployed Bytecode

0x60806040526004361061061a5760003560e01c806370e5024111610329578063a457c2d7116101b6578063d17761cf11610102578063f064321f116100a0578063f34eb0b81161007a578063f34eb0b81461124e578063f6887cd31461126e578063fb201b1d146112a7578063fe575a87146112bc57600080fd5b8063f064321f146111ee578063f0f165af1461120e578063f2fde38b1461122e57600080fd5b8063da29c27f116100dc578063da29c27f14611152578063dd46706414611168578063dd62ed3e14611188578063e99c9d09146111ce57600080fd5b8063d17761cf146110fc578063d1d3a05f14611112578063d7c6e3601461113257600080fd5b8063b49841231161016f578063c49b9a8011610149578063c49b9a8014611090578063c5f34b9c146110b0578063ca450788146110d0578063d12a7688146110e657600080fd5b8063b49841231461102f578063bf7856b71461104f578063c480512e1461107057600080fd5b8063a457c2d714610f84578063a69df4b514610fa4578063a9059cbb14610fb9578063aa45026b14610fd9578063ae02cd5c14610fef578063af9549e01461100f57600080fd5b80638b5259031161027557806395d89b411161022e57806399fa296f1161020857806399fa296f14610f175780639d5710d114610f385780639f64621414610f4e578063a36322c614610f6457600080fd5b806395d89b4114610ec857806396f9e9be14610edd57806398e2a5e214610ef757600080fd5b80638b52590314610e065780638baeefce14610e265780638c672a2614610e3b5780638da5cb5b14610e745780638ea5220f14610e9257806390987e0914610eb257600080fd5b80637ba6b4ee116102e257806385141a77116102bc57806385141a7714610d90578063867a1dc214610db057806388e765ff14610dd05780638b16549a14610de657600080fd5b80637ba6b4ee14610d405780638124f7ac14610d5a57806382d2a4bb14610d7057600080fd5b806370e5024114610c94578063715018a614610caa578063728d41c914610cbf57806375f0a87414610cdf5780637638e15114610cff5780637b94943b14610d1f57600080fd5b80634198d1bb116104a75780635d38ab85116103f357806366a88d96116103ac5780636bc87c3a116103865780636bc87c3a14610c095780636fb9fbfe14610c1f57806370a0823114610c3f57806370bfcf2114610c7557600080fd5b806366a88d9614610bc757806366d602ae14610bdd57806369550efd14610bf357600080fd5b80635d38ab8514610b0b578063602bc62b14610b2b5780636053a0e314610b405780636199d05e14610b5a57806361a13b4a14610b7a57806363e8f37014610ba757600080fd5b806349bd5a5e1161046057806350286f641161043a57806350286f6414610a595780635342acb414610a79578063545fb32814610ab25780635ca52d6714610aeb57600080fd5b806349bd5a5e146109f85780634a74bb0214610a185780634d87c64414610a3957600080fd5b80634198d1bb14610952578063424ba8481461097257806343614d2814610992578063437d9840146109a857806347535d7b146109be57806348914c99146109d857600080fd5b806322461173116105665780632610eaca1161051f578063313ce567116104f9578063313ce567146108e557806339509351146109075780633ccfd60b1461092757806340615b8b1461093c57600080fd5b80632610eaca1461088557806329370cc6146108a55780632b9b4f78146108c557600080fd5b806322461173146107d557806322976e0d146107f557806322c98d341461080b578063232898b41461082557806323b635851461084557806323b872dd1461086557600080fd5b8063147745e5116105d3578063170dde6a116105ad578063170dde6a1461077457806318160ddd1461078a5780631f53ac021461079f57806321ba5081146107bf57600080fd5b8063147745e5146106f85780631609be1d1461071c5780631694505e1461073c57600080fd5b806301339c211461062657806303d29d281461063d5780630609511e1461065d57806306fdde031461067d578063095ea7b3146106a85780630b6bb6f5146106d857600080fd5b3661062157005b600080fd5b34801561063257600080fd5b5061063b6112f5565b005b34801561064957600080fd5b5061063b610658366004614319565b611345565b34801561066957600080fd5b5061063b610678366004614610565b61139a565b34801561068957600080fd5b506106926113c9565b60405161069f919061473f565b60405180910390f35b3480156106b457600080fd5b506106c86106c3366004614346565b61145b565b604051901515815260200161069f565b3480156106e457600080fd5b5061063b6106f33660046144b0565b611472565b34801561070457600080fd5b5061070e60205481565b60405190815260200161069f565b34801561072857600080fd5b5061063b6107373660046142a1565b61151c565b34801561074857600080fd5b5060255461075c906001600160a01b031681565b6040516001600160a01b03909116815260200161069f565b34801561078057600080fd5b5061070e601b5481565b34801561079657600080fd5b5060275461070e565b3480156107ab57600080fd5b5061063b6107ba366004614269565b61164c565b3480156107cb57600080fd5b5061070e60315481565b3480156107e157600080fd5b5061063b6107f0366004614269565b611698565b34801561080157600080fd5b5061070e60135481565b34801561081757600080fd5b506034546106c89060ff1681565b34801561083157600080fd5b5061063b610840366004614371565b6116e4565b34801561085157600080fd5b5061063b610860366004614610565b6117bf565b34801561087157600080fd5b506106c86108803660046142d9565b611813565b34801561089157600080fd5b5061063b6108a03660046143b1565b61187c565b3480156108b157600080fd5b5061063b6108c03660046145d8565b61199c565b3480156108d157600080fd5b5061063b6108e03660046145d8565b611a0e565b3480156108f157600080fd5b5060105460405160ff909116815260200161069f565b34801561091357600080fd5b506106c8610922366004614346565b611a4b565b34801561093357600080fd5b5061063b611a81565b34801561094857600080fd5b5061070e601c5481565b34801561095e57600080fd5b5061063b61096d366004614610565b611ad7565b34801561097e57600080fd5b5061063b61098d366004614319565b611b6c565b34801561099e57600080fd5b5061070e601a5481565b3480156109b457600080fd5b5061070e60335481565b3480156109ca57600080fd5b506003546106c89060ff1681565b3480156109e457600080fd5b5061063b6109f3366004614640565b611bc1565b348015610a0457600080fd5b5060265461075c906001600160a01b031681565b348015610a2457600080fd5b506026546106c890600160a81b900460ff1681565b348015610a4557600080fd5b5061063b610a54366004614640565b611bf9565b348015610a6557600080fd5b5061063b610a74366004614319565b611c31565b348015610a8557600080fd5b506106c8610a94366004614269565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610abe57600080fd5b506106c8610acd366004614269565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610af757600080fd5b5061063b610b063660046145d8565b611c86565b348015610b1757600080fd5b5061063b610b263660046145d8565b611cca565b348015610b3757600080fd5b5060025461070e565b348015610b4c57600080fd5b50602e546106c89060ff1681565b348015610b6657600080fd5b5061063b610b75366004614610565b611d07565b348015610b8657600080fd5b50610b9a610b95366004614269565b611d36565b60405161069f91906147ef565b348015610bb357600080fd5b5061063b610bc2366004614371565b611e78565b348015610bd357600080fd5b5061070e602b5481565b348015610be957600080fd5b5061070e60285481565b348015610bff57600080fd5b5061070e60155481565b348015610c1557600080fd5b5061070e60125481565b348015610c2b57600080fd5b5061063b610c3a3660046145d8565b611f47565b348015610c4b57600080fd5b5061070e610c5a366004614269565b6001600160a01b031660009081526006602052604090205490565b348015610c8157600080fd5b506034546106c890610100900460ff1681565b348015610ca057600080fd5b5061070e602c5481565b348015610cb657600080fd5b5061063b611f8f565b348015610ccb57600080fd5b5061063b610cda366004614610565b611ff1565b348015610ceb57600080fd5b5060215461075c906001600160a01b031681565b348015610d0b57600080fd5b5061063b610d1a366004614319565b612020565b348015610d2b57600080fd5b506026546106c890600160c01b900460ff1681565b348015610d4c57600080fd5b50601f546106c89060ff1681565b348015610d6657600080fd5b5061070e601e5481565b348015610d7c57600080fd5b5061063b610d8b366004614610565b612075565b348015610d9c57600080fd5b5060245461075c906001600160a01b031681565b348015610dbc57600080fd5b5061063b610dcb366004614371565b6120a4565b348015610ddc57600080fd5b5061070e60295481565b348015610df257600080fd5b5061070e610e01366004614269565b61217a565b348015610e1257600080fd5b5061063b610e21366004614610565b6122f6565b348015610e3257600080fd5b5061063b612325565b348015610e4757600080fd5b506106c8610e56366004614269565b6001600160a01b03166000908152600c602052604090205460ff1690565b348015610e8057600080fd5b506000546001600160a01b031661075c565b348015610e9e57600080fd5b5060225461075c906001600160a01b031681565b348015610ebe57600080fd5b5061070e60145481565b348015610ed457600080fd5b5061069261235b565b348015610ee957600080fd5b50601d546106c89060ff1681565b348015610f0357600080fd5b5061063b610f12366004614610565b61236a565b348015610f2357600080fd5b506026546106c890600160b81b900460ff1681565b348015610f4457600080fd5b5061070e60325481565b348015610f5a57600080fd5b5061070e60165481565b348015610f7057600080fd5b5061063b610f7f366004614610565b612399565b348015610f9057600080fd5b506106c8610f9f366004614346565b6123c8565b348015610fb057600080fd5b5061063b612417565b348015610fc557600080fd5b506106c8610fd4366004614346565b61251d565b348015610fe557600080fd5b5061070e60115481565b348015610ffb57600080fd5b5061063b61100a366004614371565b61252a565b34801561101b57600080fd5b5061063b61102a366004614319565b6125f9565b34801561103b57600080fd5b5061063b61104a366004614610565b61264e565b34801561105b57600080fd5b506026546106c890600160b01b900460ff1681565b34801561107c57600080fd5b5061063b61108b366004614610565b61267d565b34801561109c57600080fd5b5061063b6110ab3660046145d8565b6126b0565b3480156110bc57600080fd5b5061063b6110cb3660046145d8565b612727565b3480156110dc57600080fd5b5061070e60305481565b3480156110f257600080fd5b5061070e602a5481565b34801561110857600080fd5b5061070e602d5481565b34801561111e57600080fd5b5061063b61112d3660046145d8565b61276f565b34801561113e57600080fd5b5061063b61114d3660046145d8565b6127ac565b34801561115e57600080fd5b5061070e60235481565b34801561117457600080fd5b5061063b611183366004614610565b6127f4565b34801561119457600080fd5b5061070e6111a33660046142a1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156111da57600080fd5b5061063b6111e9366004614610565b612879565b3480156111fa57600080fd5b5061063b61120936600461441a565b6128a8565b34801561121a57600080fd5b5061063b611229366004614610565b612a6a565b34801561123a57600080fd5b5061063b611249366004614269565b612a99565b34801561125a57600080fd5b5061063b611269366004614610565b612b71565b34801561127a57600080fd5b506106c8611289366004614269565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156112b357600080fd5b5061063b612ba0565b3480156112c857600080fd5b506106c86112d7366004614269565b6001600160a01b031660009081526008602052604090205460ff1690565b6000546001600160a01b031633146113285760405162461bcd60e51b815260040161131f90614792565b60405180910390fd5b42600d81905560195560636012556000602355611343612ba0565b565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113c45760405162461bcd60e51b815260040161131f90614792565b603155565b6060600e80546113d890614990565b80601f016020809104026020016040519081016040528092919081815260200182805461140490614990565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b5050505050905090565b6000611468338484612bd9565b5060015b92915050565b6000546001600160a01b0316331461149c5760405162461bcd60e51b815260040161131f90614792565b60005b81518160ff16101561151857600160046000848460ff16815181106114d457634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611510816149e6565b91505061149f565b5050565b6000546001600160a01b031633146115465760405162461bcd60e51b815260040161131f90614792565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561158857600080fd5b505afa15801561159c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c09190614628565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906145f4565b50505050565b6000546001600160a01b031633146116765760405162461bcd60e51b815260040161131f90614792565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116c25760405162461bcd60e51b815260040161131f90614792565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461170e5760405162461bcd60e51b815260040161131f90614792565b6103e88111156117305760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576001602f600085858581811061176157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117769190614269565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff0019909216919091179055806117b2816149cb565b915050611733565b505050565b6000546001600160a01b031633146117e95760405162461bcd60e51b815260040161131f90614792565b6118106117fe6000546001600160a01b031690565b6024546001600160a01b031683612cfd565b50565b6000611820848484612cfd565b611872843361186d85604051806060016040528060288152602001614a56602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061356e565b612bd9565b5060019392505050565b6000546001600160a01b031633146118a65760405162461bcd60e51b815260040161131f90614792565b8281146118f15760405162461bcd60e51b8152602060048201526019602482015278082e4e4c2f240d8cadccee8d0e640c8dedc4ee840dac2e8c6d603b1b604482015260640161131f565b6103e88311156119135760405162461bcd60e51b815260040161131f906147c7565b60005b83811015611995576119833386868481811061194257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119579190614269565b85858581811061197757634e487b7160e01b600052603260045260246000fd5b90506020020135612cfd565b8061198d816149cb565b915050611916565b5050505050565b6000546001600160a01b031633146119c65760405162461bcd60e51b815260040161131f90614792565b602e805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000546001600160a01b03163314611a385760405162461bcd60e51b815260040161131f90614792565b6034805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161146891859061186d90866135a8565b6000546001600160a01b03163314611aab5760405162461bcd60e51b815260040161131f90614792565b60405133904780156108fc02916000818181858888f19350505050158015611810573d6000803e3d6000fd5b6000546001600160a01b03163314611b015760405162461bcd60e51b815260040161131f90614792565b601254811115611b675760405162461bcd60e51b815260206004820152602b60248201527f56616c756520686967686572207468616e206c6971756964697479206665652060448201526a1b9bdd08185b1b1bddd95960aa1b606482015260840161131f565b602355565b6000546001600160a01b03163314611b965760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611beb5760405162461bcd60e51b815260040161131f90614792565b601192909255601255601355565b6000546001600160a01b03163314611c235760405162461bcd60e51b815260040161131f90614792565b601a92909255601b55601c55565b6000546001600160a01b03163314611c5b5760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cb05760405162461bcd60e51b815260040161131f90614792565b603480549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611cf45760405162461bcd60e51b815260040161131f90614792565b601d805460ff1916911515919091179055565b6000546001600160a01b03163314611d315760405162461bcd60e51b815260040161131f90614792565b603255565b611d736040518060c00160405280606081526020016060815260200160008152602001600081526020016000151581526020016000151581525090565b6001600160a01b0382166000908152602f60209081526040918290208251815460e09381028201840190945260c081018481529093919284928491840182828015611ddd57602002820191906000526020600020905b815481526020019060010190808311611dc9575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e3557602002820191906000526020600020905b815481526020019060010190808311611e21575b5050509183525050600282015460208201526003820154604082015260049091015460ff8082161515606084015261010090910416151560809091015292915050565b6000546001600160a01b03163314611ea25760405162461bcd60e51b815260040161131f90614792565b6103e8811115611ec45760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576001602f6000858585818110611ef557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611f0a9190614269565b6001600160a01b031681526020810191909152604001600020600401805460ff191691151591909117905580611f3f816149cb565b915050611ec7565b6000546001600160a01b03163314611f715760405162461bcd60e51b815260040161131f90614792565b60268054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611fb95760405162461bcd60e51b815260040161131f90614792565b600080546040516001600160a01b0390911690600080516020614a7e833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461201b5760405162461bcd60e51b815260040161131f90614792565b602b55565b6000546001600160a01b0316331461204a5760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461209f5760405162461bcd60e51b815260040161131f90614792565b602c55565b6000546001600160a01b031633146120ce5760405162461bcd60e51b815260040161131f90614792565b6103e88111156120f05760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576000602f600085858581811061212157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906121369190614269565b6001600160a01b03168152602081019190915260400160002060040180549115156101000261ff001990921691909117905580612172816149cb565b9150506120f3565b6001600160a01b0381166000908152602f60205260408120548061219e5750919050565b6001600160a01b0383166000908152602f602052604081206004015460ff166121c9576033546121cd565b6031545b6001600160a01b0385166000908152602f60205260408120600201549192509015612213576001600160a01b0385166000908152602f6020526040902060020154612215565b815b90505b82612222576122ee565b8261222c81614979565b6001600160a01b0387166000908152602f602052604081206001018054929650909250908590811061226e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508082426122889190614962565b116122e2576001600160a01b0386166000908152602f602052604090208054859081106122c557634e487b7160e01b600052603260045260246000fd5b9060005260206000200154856122db919061490b565b94506122e8565b506122ee565b50612218565b505050919050565b6000546001600160a01b031633146123205760405162461bcd60e51b815260040161131f90614792565b601e55565b6000546001600160a01b0316331461234f5760405162461bcd60e51b815260040161131f90614792565b6003805460ff19169055565b6060600f80546113d890614990565b6000546001600160a01b031633146123945760405162461bcd60e51b815260040161131f90614792565b603055565b6000546001600160a01b031633146123c35760405162461bcd60e51b815260040161131f90614792565b602d55565b6000611468338461186d85604051806060016040528060258152602001614a9e602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061356e565b6001546001600160a01b0316331461247d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b606482015260840161131f565b60025442106124ce5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015260640161131f565b600154600080546040516001600160a01b039384169390911691600080516020614a7e83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000611468338484612cfd565b6000546001600160a01b031633146125545760405162461bcd60e51b815260040161131f90614792565b6103e88111156125765760405162461bcd60e51b815260040161131f906147c7565b60005b818110156117ba576000602f60008585858181106125a757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125bc9190614269565b6001600160a01b031681526020810191909152604001600020600401805460ff1916911515919091179055806125f1816149cb565b915050612579565b6000546001600160a01b031633146126235760405162461bcd60e51b815260040161131f90614792565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146126785760405162461bcd60e51b815260040161131f90614792565b603355565b6000546001600160a01b031633146126a75760405162461bcd60e51b815260040161131f90614792565b6118108161360e565b6000546001600160a01b031633146126da5760405162461bcd60e51b815260040161131f90614792565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611a0390831515815260200190565b6000546001600160a01b031633146127515760405162461bcd60e51b815260040161131f90614792565b60268054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146127995760405162461bcd60e51b815260040161131f90614792565b601f805460ff1916911515919091179055565b6000546001600160a01b031633146127d65760405162461bcd60e51b815260040161131f90614792565b60268054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b0316331461281e5760405162461bcd60e51b815260040161131f90614792565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561284d814261490b565b600255600080546040516001600160a01b0390911690600080516020614a7e833981519152908390a350565b6000546001600160a01b031633146128a35760405162461bcd60e51b815260040161131f90614792565b602855565b6000546001600160a01b031633146128d25760405162461bcd60e51b815260040161131f90614792565b84831480156128e057508281145b6129285760405162461bcd60e51b8152602060048201526019602482015278082e4e4c2f240d8cadccee8d0e640c8dedc4ee840dac2e8c6d603b1b604482015260640161131f565b6103e885111561294a5760405162461bcd60e51b815260040161131f906147c7565b60005b85811015612a615784848281811061297557634e487b7160e01b600052603260045260246000fd5b90506020020135602f60008989858181106129a057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906129b59190614269565b6001600160a01b031681526020810191909152604001600020600201558282828181106129f257634e487b7160e01b600052603260045260246000fd5b90506020020135602f6000898985818110612a1d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a329190614269565b6001600160a01b0316815260208101919091526040016000206003015580612a59816149cb565b91505061294d565b50505050505050565b6000546001600160a01b03163314612a945760405162461bcd60e51b815260040161131f90614792565b602a55565b6000546001600160a01b03163314612ac35760405162461bcd60e51b815260040161131f90614792565b6001600160a01b038116612b285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161131f565b600080546040516001600160a01b0380851693921691600080516020614a7e83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314612b9b5760405162461bcd60e51b815260040161131f90614792565b602955565b6000546001600160a01b03163314612bca5760405162461bcd60e51b815260040161131f90614792565b6003805460ff19166001179055565b6001600160a01b038316612c3b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161131f565b6001600160a01b038216612c9c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161131f565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff1680612d2a57506001600160a01b03821660009081526004602052604090205460ff165b80612d4d57506001600160a01b03811660009081526004602052604090205460ff165b612d845760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b604482015260640161131f565b6001600160a01b038516612de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161131f565b6001600160a01b038416612e4a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161131f565b60008311612eac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161131f565b6001600160a01b038516600090815260066020526040902054831115612f145760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e636500604482015260640161131f565b6001600160a01b03851660009081526008602052604090205460ff1680612f5357506001600160a01b03841660009081526008602052604090205460ff165b15612fa05760405162461bcd60e51b815260206004820152601c60248201527f426c61636b6c6973746564206164647265737320696e766f6c76656400000000604482015260640161131f565b601f5460ff1680612fc05750612fbe856001600160a01b0316613640565b155b80612fe357506001600160a01b03851660009081526009602052604090205460ff165b6130265760405162461bcd60e51b8152602060048201526014602482015273139bc818dbdb9d1c9858dd1cc8185b1b1bddd95960621b604482015260640161131f565b30600090815260066020526040902054602a54811080159081906130545750602654600160a01b900460ff16155b801561307957506001600160a01b0387166000908152600c602052604090205460ff16155b801561308e5750602654600160a81b900460ff165b156130a95761309b61367c565b602a5491506130a9826136c2565b6130b1613879565b6001600160a01b03871660009081526007602052604081205460ff16806130f057506001600160a01b03871660009081526007602052604090205460ff165b806131045750602654600160a01b900460ff165b156131115750600061333c565b6001600160a01b0387166000908152600c602052604090205460ff16156131ce576028548611158061314d5750602654600160b01b900460ff16155b6131a45760405162461bcd60e51b815260206004820152602260248201527f416d6f756e74206578636565647320746865206d61782073656c6c20616d6f756044820152611b9d60f21b606482015260840161131f565b6131c7601a546131c1601c54601b546135a890919063ffffffff16565b906135a8565b905061333c565b6001600160a01b0388166000908152600c602052604090205460ff16156132ab57600d5442141561321d576001600160a01b0387166000908152600860205260409020805460ff191660011790555b602954861115806132385750602654600160b81b900460ff16155b61328e5760405162461bcd60e51b815260206004820152602160248201527f416d6f756e74206578636565647320746865206d61782062757920616d6f756e6044820152601d60fa1b606482015260840161131f565b6131c76011546131c16013546012546135a890919063ffffffff16565b6001600160a01b0388166000908152602f602052604090206004015460ff161580156132d85750600d5442115b6133245760405162461bcd60e51b815260206004820152601f60248201527f4e6f207472616e736665727320666f7220707269766174652073616c65727300604482015260640161131f565b601d5460ff16613335576000613339565b601e545b90505b6000613348878361392e565b90506000613356888361394c565b6001600160a01b038b1660009081526006602052604090205490915061337c908961394c565b6001600160a01b038b166000908152600660205260408082209290925530815220546133a890826135a8565b30600090815260066020526040808220929092556001600160a01b038b16815220546133d490836135a8565b6001600160a01b038a166000908152600660205260409020819055602b5410158061341757506001600160a01b0389166000908152600a602052604090205460ff165b8061342c5750602654600160c01b900460ff16155b61348c5760405162461bcd60e51b815260206004820152602b60248201527f45786365656473206d617820746f6b656e73206c696d6974206f6e206120736960448201526a1b99db19481dd85b1b195d60aa1b606482015260840161131f565b602654600160a01b900460ff161580156134bf57506001600160a01b038a166000908152600c602052604090205460ff16155b156134ce576134ce8a8361398e565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161351391815260200190565b60405180910390a380156135625760405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050505050565b600081848411156135925760405162461bcd60e51b815260040161131f919061473f565b50600061359f8486614962565b95945050505050565b6000806135b5838561490b565b9050838110156136075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161131f565b9392505050565b6026805460ff60a01b1916600160a01b17905580156136305761363081613b64565b506026805460ff60a01b19169055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061367457508115155b949350505050565b6026805460ff60a01b1916600160a01b179055602e54479060ff1680156136a55750602d548110155b1561363057602c548111156136b95750602c545b6136308161360e565b6026805460ff60a01b1916600160a01b1790556011546013546012546000926136f09290916131c1916135a8565b9050801561386857600061372860026137226023546012546137129190614962565b61371c8787613d1f565b90613d61565b90613d1f565b90506000613736848361394c565b90504761374282613de0565b600061374e478361394c565b90506000613774600261372260235460125461376a9190614962565b61371c868b613d1f565b905080156137c8576137868582613f5d565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6021546013546001600160a01b03909116906108fc906137ec9061371c868b613d1f565b6040518115909202916000818181858888f19350505050158015613814573d6000803e3d6000fd5b506022546011546001600160a01b03909116906108fc906138399061371c868b613d1f565b6040518115909202916000818181858888f19350505050158015613861573d6000803e3d6000fd5b5050505050505b50506026805460ff60a01b19169055565b60175460ff16801561388c5750600d5415155b15611343576000601954426138a19190614962565b90506000601854826138b39190614923565b905060005b818110156138fa576003601254116138cf576138fa565b6003601260008282546138e29190614962565b909155508190506138f2816149cb565b9150506138b8565b5042601955601254600c10611518576017805460ff1916905560145460125560165460135560155460115560026023555050565b60205460009061360790613722613945828661394c565b8690613d61565b600061360783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061356e565b6001600160a01b0382166000908152602f6020526040902060040154610100900460ff16806139e7575060345460ff161580156139e757506001600160a01b0382166000908152602f602052604090206004015460ff16155b80613a205750603454610100900460ff16158015613a2057506001600160a01b0382166000908152602f602052604090206004015460ff165b15613a29575050565b6000613a348261403a565b6001600160a01b0384166000908152602f602090815260408220600180820180548083018255908552838520429101558154908101825590835290822001829055909150613a818461217a565b6001600160a01b0385166000908152602f60205260408120600401549192509060ff16613ab057603254613ab4565b6030545b6001600160a01b0386166000908152602f60205260408120600301549192509015613afa576001600160a01b0386166000908152602f6020526040902060030154613afc565b815b905080831115613b5c5760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74206f76657220746865206c696d697420666f722074696d652070604482015264195c9a5bd960da1b606482015260840161131f565b505050505050565b6040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015613bc957600080fd5b505afa158015613bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c019190614285565b81600081518110613c2257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613c6457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460245460405163b6f9de9560e01b81529183169263b6f9de95928692613cb092600092889290911690429060040161470a565b6000604051808303818588803b158015613cc957600080fd5b505af1158015613cdd573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051613d13929190614861565b60405180910390a15050565b600061360783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506141f1565b600082613d705750600061146c565b6000613d7c8385614943565b905082613d898583614923565b146136075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161131f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613e2357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613e7757600080fd5b505afa158015613e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eaf9190614285565b81600181518110613ed057634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602554613ef69130911684612bd9565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac94790613f2f90859060009086903090429060040161487a565b600060405180830381600087803b158015613f4957600080fd5b505af1158015613b5c573d6000803e3d6000fd5b602554613f759030906001600160a01b031684612bd9565b6025546001600160a01b031663f305d719823085600080613f9e6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561400157600080fd5b505af1158015614015573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611995919061466b565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061408157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156140d557600080fd5b505afa1580156140e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410d9190614285565b8160018151811061412e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255460405163d06ca61f60e01b815291169063d06ca61f9061416d9086908590600401614861565b60006040518083038186803b15801561418557600080fd5b505afa158015614199573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141c19190810190614551565b6001815181106141e157634e487b7160e01b600052603260045260246000fd5b6020026020010151915050919050565b600081836142125760405162461bcd60e51b815260040161131f919061473f565b50600061359f8486614923565b60008083601f840112614230578182fd5b50813567ffffffffffffffff811115614247578182fd5b6020830191508360208260051b850101111561426257600080fd5b9250929050565b60006020828403121561427a578081fd5b813561360781614a32565b600060208284031215614296578081fd5b815161360781614a32565b600080604083850312156142b3578081fd5b82356142be81614a32565b915060208301356142ce81614a32565b809150509250929050565b6000806000606084860312156142ed578081fd5b83356142f881614a32565b9250602084013561430881614a32565b929592945050506040919091013590565b6000806040838503121561432b578182fd5b823561433681614a32565b915060208301356142ce81614a47565b60008060408385031215614358578182fd5b823561436381614a32565b946020939093013593505050565b60008060208385031215614383578182fd5b823567ffffffffffffffff811115614399578283fd5b6143a58582860161421f565b90969095509350505050565b600080600080604085870312156143c6578081fd5b843567ffffffffffffffff808211156143dd578283fd5b6143e98883890161421f565b90965094506020870135915080821115614401578283fd5b5061440e8782880161421f565b95989497509550505050565b60008060008060008060608789031215614432578182fd5b863567ffffffffffffffff80821115614449578384fd5b6144558a838b0161421f565b9098509650602089013591508082111561446d578384fd5b6144798a838b0161421f565b90965094506040890135915080821115614491578384fd5b5061449e89828a0161421f565b979a9699509497509295939492505050565b600060208083850312156144c2578182fd5b823567ffffffffffffffff8111156144d8578283fd5b8301601f810185136144e8578283fd5b80356144fb6144f6826148e7565b6148b6565b80828252848201915084840188868560051b870101111561451a578687fd5b8694505b8385101561454557803561453181614a32565b83526001949094019391850191850161451e565b50979650505050505050565b60006020808385031215614563578182fd5b825167ffffffffffffffff811115614579578283fd5b8301601f81018513614589578283fd5b80516145976144f6826148e7565b80828252848201915084840188868560051b87010111156145b6578687fd5b8694505b838510156145455780518352600194909401939185019185016145ba565b6000602082840312156145e9578081fd5b813561360781614a47565b600060208284031215614605578081fd5b815161360781614a47565b600060208284031215614621578081fd5b5035919050565b600060208284031215614639578081fd5b5051919050565b600080600060608486031215614654578081fd5b505081359360208301359350604090920135919050565b60008060006060848603121561467f578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156146d05781516001600160a01b0316875295820195908201906001016146ab565b509495945050505050565b6000815180845260208085019450808401835b838110156146d0578151875295820195908201906001016146ee565b8481526080602082015260006147236080830186614698565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b8181101561476b5785810183015185820160400152820161474f565b8181111561477c5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600e908201526d417272617920746f6f206c6f6e6760901b604082015260600190565b602081526000825160c0602084015261480b60e08401826146db565b90506020840151601f1984830301604085015261482882826146db565b91505060408401516060840152606084015160808401526080840151151560a084015260a0840151151560c08401528091505092915050565b8281526040602082015260006136746040830184614698565b85815284602082015260a06040820152600061489960a0830186614698565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156148df576148df614a1c565b604052919050565b600067ffffffffffffffff82111561490157614901614a1c565b5060051b60200190565b6000821982111561491e5761491e614a06565b500190565b60008261493e57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561495d5761495d614a06565b500290565b60008282101561497457614974614a06565b500390565b60008161498857614988614a06565b506000190190565b600181811c908216806149a457607f821691505b602082108114156149c557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156149df576149df614a06565b5060010190565b600060ff821660ff8114156149fd576149fd614a06565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461181057600080fd5b801515811461181057600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206c2cdbe70e088f6b2fe0a35fc4218806d3bce29a5f0480ae0573b6563583568464736f6c63430008040033

Deployed Bytecode Sourcemap

9084:24353:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14283:207;;;;;;;;;;;;;:::i;:::-;;25979:125;;;;;;;;;;-1:-1:-1;25979:125:0;;;;;:::i;:::-;;:::i;28316:136::-;;;;;;;;;;-1:-1:-1;28316:136:0;;;;;:::i;:::-;;:::i;14498:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15336:161;;;;;;;;;;-1:-1:-1;15336:161:0;;;;;:::i;:::-;;:::i;:::-;;;10875:14:1;;10868:22;10850:41;;10838:2;10823:18;15336:161:0;10805:92:1;8891:186:0;;;;;;;;;;-1:-1:-1;8891:186:0;;;;;:::i;:::-;;:::i;10451:32::-;;;;;;;;;;;;;;;;;;;22089:25:1;;;22077:2;22062:18;10451:32:0;22044:76:1;33121:198:0;;;;;;;;;;-1:-1:-1;33121:198:0;;;;;:::i;:::-;;:::i;10815:41::-;;;;;;;;;;-1:-1:-1;10815:41:0;;;;-1:-1:-1;;;;;10815:41:0;;;;;;-1:-1:-1;;;;;9551:32:1;;;9533:51;;9521:2;9506:18;10815:41:0;9488:102:1;10237:36:0;;;;;;;;;;;;;;;;14775:100;;;;;;;;;;-1:-1:-1;14855:12:0;;14775:100;;23672:109;;;;;;;;;;-1:-1:-1;23672:109:0;;;;;:::i;:::-;;:::i;27546:43::-;;;;;;;;;;;;;;;;23543:121;;;;;;;;;;-1:-1:-1;23543:121:0;;;;;:::i;:::-;;:::i;9928:28::-;;;;;;;;;;;;;;;;27757:37;;;;;;;;;;-1:-1:-1;27757:37:0;;;;;;;;30302:266;;;;;;;;;;-1:-1:-1;30302:266:0;;;;;:::i;:::-;;:::i;22989:118::-;;;;;;;;;;-1:-1:-1;22989:118:0;;;;;:::i;:::-;;:::i;15505:313::-;;;;;;;;;;-1:-1:-1;15505:313:0;;;;;:::i;:::-;;:::i;32692:379::-;;;;;;;;;;-1:-1:-1;32692:379:0;;;;;:::i;:::-;;:::i;25691:150::-;;;;;;;;;;-1:-1:-1;25691:150:0;;;;;:::i;:::-;;:::i;28834:113::-;;;;;;;;;;-1:-1:-1;28834:113:0;;;;;:::i;:::-;;:::i;14684:83::-;;;;;;;;;;-1:-1:-1;14750:9:0;;14684:83;;14750:9;;;;23515:36:1;;23503:2;23488:18;14684:83:0;23470:87:1;15826:218:0;;;;;;;;;;-1:-1:-1;15826:218:0;;;;;:::i;:::-;;:::i;33327:107::-;;;;;;;;;;;;;:::i;10280:36::-;;;;;;;;;;;;;;;;23899:194;;;;;;;;;;-1:-1:-1;23899:194:0;;;;;:::i;:::-;;:::i;16847:113::-;;;;;;;;;;-1:-1:-1;16847:113:0;;;;;:::i;:::-;;:::i;10200:30::-;;;;;;;;;;;;;;;;27695:32;;;;;;;;;;;;;;;;8392:26;;;;;;;;;;-1:-1:-1;8392:26:0;;;;;;;;13824:215;;;;;;;;;;-1:-1:-1;13824:215:0;;;;;:::i;:::-;;:::i;10863:28::-;;;;;;;;;;-1:-1:-1;10863:28:0;;;;-1:-1:-1;;;;;10863:28:0;;;10932:40;;;;;;;;;;-1:-1:-1;10932:40:0;;;;-1:-1:-1;;;10932:40:0;;;;;;14047:228;;;;;;;;;;-1:-1:-1;14047:228:0;;;;;:::i;:::-;;:::i;26920:146::-;;;;;;;;;;-1:-1:-1;26920:146:0;;;;;:::i;:::-;;:::i;16370:124::-;;;;;;;;;;-1:-1:-1;16370:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;16459:27:0;16435:4;16459:27;;;:18;:27;;;;;;;;;16370:124;26671:133;;;;;;;;;;-1:-1:-1;26671:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;26765:31:0;26741:4;26765:31;;;:21;:31;;;;;;;;;26671:133;28691:135;;;;;;;;;;-1:-1:-1;28691:135:0;;;;;:::i;:::-;;:::i;22024:105::-;;;;;;;;;;-1:-1:-1;22024:105:0;;;;;:::i;:::-;;:::i;6262:90::-;;;;;;;;;;-1:-1:-1;6335:9:0;;6262:90;;11595:34;;;;;;;;;;-1:-1:-1;11595:34:0;;;;;;;;28460:100;;;;;;;;;;-1:-1:-1;28460:100:0;;;;;:::i;:::-;;:::i;28955:122::-;;;;;;;;;;-1:-1:-1;28955:122:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29752:265::-;;;;;;;;;;-1:-1:-1;29752:265:0;;;;;:::i;:::-;;:::i;11414:64::-;;;;;;;;;;;;;;;;11190:63;;;;;;;;;;;;;;;;10010:32;;;;;;;;;;;;;;;;9893:28;;;;;;;;;;;;;;;;22471:110;;;;;;;;;;-1:-1:-1;22471:110:0;;;;;:::i;:::-;;:::i;14883:119::-;;;;;;;;;;-1:-1:-1;14883:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;14976:18:0;14949:7;14976:18;;;:9;:18;;;;;;;14883:119;27801:48;;;;;;;;;;-1:-1:-1;27801:48:0;;;;;;;;;;;11487:47;;;;;;;;;;;;;;;;5852:148;;;;;;;;;;;;;:::i;26812:100::-;;;;;;;;;;-1:-1:-1;26812:100:0;;;;;:::i;:::-;;:::i;10492:38::-;;;;;;;;;;-1:-1:-1;10492:38:0;;;;-1:-1:-1;;;;;10492:38:0;;;26510:134;;;;;;;;;;-1:-1:-1;26510:134:0;;;;;:::i;:::-;;:::i;11070:39::-;;;;;;;;;;-1:-1:-1;11070:39:0;;;;-1:-1:-1;;;11070:39:0;;;;;;10408:36;;;;;;;;;;-1:-1:-1;10408:36:0;;;;;;;;10369:30;;;;;;;;;;;;;;;;25559:124;;;;;;;;;;-1:-1:-1;25559:124:0;;;;;:::i;:::-;;:::i;10732:70::-;;;;;;;;;;-1:-1:-1;10732:70:0;;;;-1:-1:-1;;;;;10732:70:0;;;30576:270;;;;;;;;;;-1:-1:-1;30576:270:0;;;;;:::i;:::-;;:::i;11260:62::-;;;;;;;;;;;;;;;;30925:922;;;;;;;;;;-1:-1:-1;30925:922:0;;;;;:::i;:::-;;:::i;22137:95::-;;;;;;;;;;-1:-1:-1;22137:95:0;;;;;:::i;:::-;;:::i;8810:73::-;;;;;;;;;;;;;:::i;16968:105::-;;;;;;;;;;-1:-1:-1;16968:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17049:15:0;17025:4;17049:15;;;:5;:15;;;;;;;;;16968:105;5636:79;;;;;;;;;;-1:-1:-1;5674:7:0;5701:6;-1:-1:-1;;;;;5701:6:0;5636:79;;10537:32;;;;;;;;;;-1:-1:-1;10537:32:0;;;;-1:-1:-1;;;;;10537:32:0;;;9965:38;;;;;;;;;;;;;;;;14589:87;;;;;;;;;;;;;:::i;10325:37::-;;;;;;;;;;-1:-1:-1;10325:37:0;;;;;;;;28185:122;;;;;;;;;;-1:-1:-1;28185:122:0;;;;;:::i;:::-;;:::i;11026:37::-;;;;;;;;;;-1:-1:-1;11026:37:0;;;;-1:-1:-1;;;11026:37:0;;;;;;27630:26;;;;;;;;;;;;;;;;10049:38;;;;;;;;;;;;;;;;24528:106;;;;;;;;;;-1:-1:-1;24528:106:0;;;;;:::i;:::-;;:::i;16052:269::-;;;;;;;;;;-1:-1:-1;16052:269:0;;;;;:::i;:::-;;:::i;6602:305::-;;;;;;;;;;;;;:::i;15010:167::-;;;;;;;;;;-1:-1:-1;15010:167:0;;;;;:::i;:::-;;:::i;9864:22::-;;;;;;;;;;;;;;;;30025:269;;;;;;;;;;-1:-1:-1;30025:269:0;;;;;:::i;:::-;;:::i;23398:133::-;;;;;;;;;;-1:-1:-1;23398:133:0;;;;;:::i;:::-;;:::i;28569:114::-;;;;;;;;;;-1:-1:-1;28569:114:0;;;;;:::i;:::-;;:::i;10981:38::-;;;;;;;;;;-1:-1:-1;10981:38:0;;;;-1:-1:-1;;;10981:38:0;;;;;;25853:100;;;;;;;;;;-1:-1:-1;25853:100:0;;;;;:::i;:::-;;:::i;24209:171::-;;;;;;;;;;-1:-1:-1;24209:171:0;;;;;:::i;:::-;;:::i;22355:108::-;;;;;;;;;;-1:-1:-1;22355:108:0;;;;;:::i;:::-;;:::i;27459:37::-;;;;;;;;;;;;;;;;11329:78;;;;;;;;;;;;;;;;11541:47;;;;;;;;;;;;;;;;26263:109;;;;;;;;;;-1:-1:-1;26263:109:0;;;;;:::i;:::-;;:::i;22240:106::-;;;;;;;;;;-1:-1:-1;22240:106:0;;;;;:::i;:::-;;:::i;10582:33::-;;;;;;;;;;;;;;;;6362:226;;;;;;;;;;-1:-1:-1;6362:226:0;;;;;:::i;:::-;;:::i;15185:143::-;;;;;;;;;;-1:-1:-1;15185:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;15293:18:0;;;15266:7;15293:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15185:143;23789:102;;;;;;;;;;-1:-1:-1;23789:102:0;;;;;:::i;:::-;;:::i;29222:522::-;;;;;;;;;;-1:-1:-1;29222:522:0;;;;;:::i;:::-;;:::i;24388:132::-;;;;;;;;;;-1:-1:-1;24388:132:0;;;;;:::i;:::-;;:::i;6010:244::-;;;;;;;;;;-1:-1:-1;6010:244:0;;;;;:::i;:::-;;:::i;24101:100::-;;;;;;;;;;-1:-1:-1;24101:100:0;;;;;:::i;:::-;;:::i;26380:122::-;;;;;;;;;;-1:-1:-1;26380:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;26469:25:0;26445:4;26469:25;;;:15;:25;;;;;;;;;26380:122;8732:70;;;;;;;;;;;;;:::i;26112:116::-;;;;;;;;;;-1:-1:-1;26112:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;26198:22:0;26174:4;26198:22;;;:12;:22;;;;;;;;;26112:116;14283:207;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;;;;;;;;;14344:15:::1;14331:10;:28:::0;;;14370:14:::1;:32:::0;14429:2:::1;14413:13;:18:::0;-1:-1:-1;14442:14:0::1;:18:::0;14471:11:::1;:9;:11::i;:::-;14283:207::o:0;25979:125::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26065:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:31;;-1:-1:-1;;26065:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25979:125::o;28316:136::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;28404:28:::1;:40:::0;28316:136::o;14498:83::-;14535:13;14568:5;14561:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14498:83;:::o;15336:161::-;15411:4;15428:39;2630:10;15451:7;15460:6;15428:8;:39::i;:::-;-1:-1:-1;15485:4:0;15336:161;;;;;:::o;8891:186::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;8978:7:::1;8974:96;8995:6;:13;8991:1;:17;;;8974:96;;;9054:4;9030:10;:21;9041:6;9048:1;9041:9;;;;;;;;-1:-1:-1::0;;;9041:9:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;9030:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;9030:21:0;:28;;-1:-1:-1;;9030:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9010:3;::::1;::::0;::::1;:::i;:::-;;;;8974:96;;;;8891:186:::0;:::o;33121:198::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;33221:38:::1;::::0;-1:-1:-1;;;33221:38:0;;33253:4:::1;33221:38;::::0;::::1;9533:51:1::0;33204:14:0::1;::::0;-1:-1:-1;;;;;33221:23:0;::::1;::::0;::::1;::::0;9506:18:1;;33221:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33270:41;::::0;-1:-1:-1;;;33270:41:0;;-1:-1:-1;;;;;10011:32:1;;;33270:41:0::1;::::0;::::1;9993:51:1::0;10060:18;;;10053:34;;;33204:55:0;;-1:-1:-1;33270:22:0;;::::1;::::0;::::1;::::0;9966:18:1;;33270:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5833:1;33121:198:::0;;:::o;23672:109::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;23743:9:::1;:30:::0;;-1:-1:-1;;;;;;23743:30:0::1;-1:-1:-1::0;;;;;23743:30:0;;;::::1;::::0;;;::::1;::::0;;23672:109::o;23543:121::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;23620:15:::1;:36:::0;;-1:-1:-1;;;;;;23620:36:0::1;-1:-1:-1::0;;;;;23620:36:0;;;::::1;::::0;;;::::1;::::0;;23543:121::o;30302:266::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;30418:4:::1;30398:24:::0;::::1;;30390:51;;;;-1:-1:-1::0;;;30390:51:0::1;;;;;;;:::i;:::-;30456:9;30452:109;30469:20:::0;;::::1;30452:109;;;30545:4;30510:7;:21;30518:9;;30528:1;30518:12;;;;;-1:-1:-1::0;;;30518:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30510:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30510:21:0;:32:::1;;:39:::0;;;::::1;;;;-1:-1:-1::0;;30510:39:0;;::::1;::::0;;;::::1;::::0;;30491:3;::::1;::::0;::::1;:::i;:::-;;;;30452:109;;;;30302:266:::0;;:::o;22989:118::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;23057:42:::1;23067:7;5674::::0;5701:6;-1:-1:-1;;;;;5701:6:0;;5636:79;23067:7:::1;23076:10;::::0;-1:-1:-1;;;;;23076:10:0::1;23088::::0;23057:9:::1;:42::i;:::-;22989:118:::0;:::o;15505:313::-;15603:4;15620:36;15630:6;15638:9;15649:6;15620:9;:36::i;:::-;15667:121;15676:6;2630:10;15698:89;15736:6;15698:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15698:19:0;;;;;;:11;:19;;;;;;;;2630:10;15698:33;;;;;;;;;;:37;:89::i;:::-;15667:8;:121::i;:::-;-1:-1:-1;15806:4:0;15505:313;;;;;:::o;32692:379::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;32810:34;;::::1;32802:72;;;::::0;-1:-1:-1;;;32802:72:0;;18589:2:1;32802:72:0::1;::::0;::::1;18571:21:1::0;18628:2;18608:18;;;18601:30;-1:-1:-1;;;18647:18:1;;;18640:55;18712:18;;32802:72:0::1;18561:175:1::0;32802:72:0::1;32913:4;32893:24:::0;::::1;;32885:51;;;;-1:-1:-1::0;;;32885:51:0::1;;;;;;;:::i;:::-;32951:9;32947:117;32964:20:::0;;::::1;32947:117;;;33005:47;33015:10;33027:9;;33037:1;33027:12;;;;;-1:-1:-1::0;;;33027:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33041:7;;33049:1;33041:10;;;;;-1:-1:-1::0;;;33041:10:0::1;;;;;;;;;;;;;;;33005:9;:47::i;:::-;32986:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32947:117;;;;32692:379:::0;;;;:::o;25691:150::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;25761:14:::1;:25:::0;;-1:-1:-1;;25761:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25802:31:::1;::::0;10850:41:1;;;25802:31:0::1;::::0;10838:2:1;10823:18;25802:31:0::1;;;;;;;;25691:150:::0;:::o;28834:113::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;28912:18:::1;:27:::0;;-1:-1:-1;;28912:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28834:113::o;15826:218::-;2630:10;15914:4;15963:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15963:34:0;;;;;;;;;;15914:4;;15931:83;;15954:7;;15963:50;;16002:10;15963:38;:50::i;33327:107::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;33375:51:::1;::::0;33383:10:::1;::::0;33404:21:::1;33375:51:::0;::::1;;;::::0;::::1;::::0;;;33404:21;33383:10;33375:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;23899:194:::0;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;23990:13:::1;;23980:6;:23;;23972:79;;;::::0;-1:-1:-1;;;23972:79:0;;15538:2:1;23972:79:0::1;::::0;::::1;15520:21:1::0;15577:2;15557:18;;;15550:30;15616:34;15596:18;;;15589:62;-1:-1:-1;;;15667:18:1;;;15660:41;15718:19;;23972:79:0::1;15510:233:1::0;23972:79:0::1;24062:14;:23:::0;23899:194::o;16847:113::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16928:15:0;;;::::1;;::::0;;;:5:::1;:15;::::0;;;;:24;;-1:-1:-1;;16928:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16847:113::o;13824:215::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;13937:7:::1;:16:::0;;;;13964:13:::1;:28:::0;14003:13:::1;:28:::0;13824:215::o;14047:228::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;14161:11:::1;:20:::0;;;;14192:17:::1;:32:::0;14235:17:::1;:32:::0;14047:228::o;26920:146::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27018:31:0;;;::::1;;::::0;;;:21:::1;:31;::::0;;;;:40;;-1:-1:-1;;27018:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26920:146::o;28691:135::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;28780:29:::1;:38:::0;;;::::1;;;;-1:-1:-1::0;;28780:38:0;;::::1;::::0;;;::::1;::::0;;28691:135::o;22024:105::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;22094:18:::1;:27:::0;;-1:-1:-1;;22094:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22024:105::o;28460:100::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;28530:11:::1;:22:::0;28460:100::o;28955:122::-;29013:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29013:20:0;-1:-1:-1;;;;;29052:17:0;;;;;;:7;:17;;;;;;;;;29045:24;;;;;;;;;;;;;;;;;;;;;;;29052:17;;29045:24;;29052:17;;29045:24;;29052:17;29045:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29045:24:0;;;-1:-1:-1;;29045:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28955:122;-1:-1:-1;;28955:122:0:o;29752:265::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;29863:4:::1;29843:24:::0;::::1;;29835:51;;;;-1:-1:-1::0;;;29835:51:0::1;;;;;;;:::i;:::-;29901:9;29897:113;29914:20:::0;;::::1;29897:113;;;29994:4;29955:7;:21;29963:9;;29973:1;29963:12;;;;;-1:-1:-1::0;;;29963:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29955:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29955:21:0;:36:::1;;:43:::0;;-1:-1:-1;;29955:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29936:3;::::1;::::0;::::1;:::i;:::-;;;;29897:113;;22471:110:::0;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;22544:20:::1;:29:::0;;;::::1;;-1:-1:-1::0;;;22544:29:0::1;-1:-1:-1::0;;;;22544:29:0;;::::1;::::0;;;::::1;::::0;;22471:110::o;5852:148::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;5959:1:::1;5943:6:::0;;5922:40:::1;::::0;-1:-1:-1;;;;;5943:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;5922:40:0;5959:1;;5922:40:::1;5990:1;5973:19:::0;;-1:-1:-1;;;;;;5973:19:0::1;::::0;;5852:148::o;26812:100::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;26882:14:::1;:22:::0;26812:100::o;26510:134::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26602:25:0;;;::::1;;::::0;;;:15:::1;:25;::::0;;;;:34;;-1:-1:-1;;26602:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26510:134::o;25559:124::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;25643:17:::1;:32:::0;25559:124::o;30576:270::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;30695:4:::1;30675:24:::0;::::1;;30667:51;;;;-1:-1:-1::0;;;30667:51:0::1;;;;;;;:::i;:::-;30733:9;30729:110;30746:20:::0;;::::1;30729:110;;;30822:5;30787:7;:21;30795:9;;30805:1;30795:12;;;;;-1:-1:-1::0;;;30795:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30787:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30787:21:0;:32:::1;;:40:::0;;;::::1;;;;-1:-1:-1::0;;30787:40:0;;::::1;::::0;;;::::1;::::0;;30768:3;::::1;::::0;::::1;:::i;:::-;;;;30729:110;;30925:922:::0;-1:-1:-1;;;;;31046:17:0;;30991:18;31046:17;;;:7;:17;;;;;:36;31099:18;31095:68;;31134:17;30925:922;;;:::o;31095:68::-;-1:-1:-1;;;;;31202:17:0;;31173:26;31202:17;;;:7;:17;;;;;:32;;;;;:83;;31268:17;;31202:83;;;31237:28;;31202:83;-1:-1:-1;;;;;31318:17:0;;31296:19;31318:17;;;:7;:17;;;;;:29;;;31173:112;;-1:-1:-1;31296:19:0;31318:34;:87;;-1:-1:-1;;;;;31376:17:0;;;;;;:7;:17;;;;;:29;;;31318:87;;;31355:18;31318:87;31296:109;;31416:424;31448:18;31444:64;;31487:5;;31444:64;31522:15;;;;:::i;:::-;-1:-1:-1;;;;;31576:17:0;;31552:21;31576:17;;;:7;:17;;;;;:32;;:47;;31522:15;;-1:-1:-1;31552:21:0;;-1:-1:-1;31576:32:0;31522:15;;31576:47;;;;-1:-1:-1;;;31576:47:0;;;;;;;;;;;;;;;;;31552:71;;31675:13;31660:11;31642:15;:29;;;;:::i;:::-;:46;31638:191;;-1:-1:-1;;;;;31723:17:0;;;;;;:7;:17;;;;;:44;;31753:13;;31723:44;;;;-1:-1:-1;;;31723:44:0;;;;;;;;;;;;;;;;;31709:58;;;;;:::i;:::-;;;31638:191;;;31808:5;;;31638:191;31416:424;;;;30925:922;;;;;;:::o;22137:95::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;22204:11:::1;:20:::0;22137:95::o;8810:73::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;8861:6:::1;:14:::0;;-1:-1:-1;;8861:14:0::1;::::0;;8810:73::o;14589:87::-;14628:13;14661:7;14654:14;;;;;:::i;28185:122::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;28266:22:::1;:33:::0;28185:122::o;24528:106::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;24601:17:::1;:25:::0;24528:106::o;16052:269::-;16145:4;16162:129;2630:10;16185:7;16194:96;16233:15;16194:96;;;;;;;;;;;;;;;;;2630:10;16194:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16194:34:0;;;;;;;;;;;;:38;:96::i;6602:305::-;6654:14;;-1:-1:-1;;;;;6654:14:0;6672:10;6654:28;6646:76;;;;-1:-1:-1;;;6646:76:0;;20869:2:1;6646:76:0;;;20851:21:1;20908:2;20888:18;;;20881:30;20947:34;20927:18;;;20920:62;-1:-1:-1;;;20998:18:1;;;20991:33;21041:19;;6646:76:0;20841:225:1;6646:76:0;6759:9;;6741:15;:27;6733:72;;;;-1:-1:-1;;;6733:72:0;;19754:2:1;6733:72:0;;;19736:21:1;19793:2;19773:18;;;19766:30;19832:33;19812:18;;;19805:61;19883:18;;6733:72:0;19726:181:1;6733:72:0;6850:14;;;6842:6;;6821:44;;-1:-1:-1;;;;;6850:14:0;;;;6842:6;;;;-1:-1:-1;;;;;;;;;;;6821:44:0;;6885:14;;;6876:23;;-1:-1:-1;;;;;;6876:23:0;-1:-1:-1;;;;;6885:14:0;;;6876:23;;;;;;6602:305::o;15010:167::-;15088:4;15105:42;2630:10;15129:9;15140:6;15105:9;:42::i;30025:269::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;30139:4:::1;30119:24:::0;::::1;;30111:51;;;;-1:-1:-1::0;;;30111:51:0::1;;;;;;;:::i;:::-;30177:9;30173:114;30190:20:::0;;::::1;30173:114;;;30270:5;30231:7;:21;30239:9;;30249:1;30239:12;;;;;-1:-1:-1::0;;;30239:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30231:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30231:21:0;:36:::1;;:44:::0;;-1:-1:-1;;30231:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30212:3;::::1;::::0;::::1;:::i;:::-;;;;30173:114;;23398:133:::0;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23485:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;23485:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23398:133::o;28569:114::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;28646:17:::1;:29:::0;28569:114::o;25853:100::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;25924:21:::1;25938:6;25924:13;:21::i;24209:171::-:0;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;24286:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;24286:32:0::1;-1:-1:-1::0;;;;24286:32:0;;::::1;;::::0;;24334:38:::1;::::0;::::1;::::0;::::1;::::0;24310:8;10875:14:1;10868:22;10850:41;;10838:2;10823:18;;10805:92;22355:108:0;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;22427:19:::1;:28:::0;;;::::1;;-1:-1:-1::0;;;22427:28:0::1;-1:-1:-1::0;;;;22427:28:0;;::::1;::::0;;;::::1;::::0;;22355:108::o;26263:109::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;26339:16:::1;:25:::0;;-1:-1:-1;;26339:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26263:109::o;22240:106::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;22311:18:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;22311:27:0::1;-1:-1:-1::0;;;;22311:27:0;;::::1;::::0;;;::::1;::::0;;22240:106::o;6362:226::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;6443:6:::1;::::0;;;6426:23;;-1:-1:-1;;;;;;6426:23:0;;::::1;-1:-1:-1::0;;;;;6443:6:0;::::1;6426:23;::::0;;;6460:19:::1;::::0;;6502:22:::1;6520:4:::0;6502:15:::1;:22;:::i;:::-;6490:9;:34:::0;6577:1:::1;6561:6:::0;;6540:40:::1;::::0;-1:-1:-1;;;;;6561:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6540:40:0;6577:1;;6540:40:::1;6362:226:::0;:::o;23789:102::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;23861:13:::1;:22:::0;23789:102::o;29222:522::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;29369:39;;::::1;:82:::0;::::1;;;-1:-1:-1::0;29412:39:0;;::::1;29369:82;29361:120;;;::::0;-1:-1:-1;;;29361:120:0;;18589:2:1;29361:120:0::1;::::0;::::1;18571:21:1::0;18628:2;18608:18;;;18601:30;-1:-1:-1;;;18647:18:1;;;18640:55;18712:18;;29361:120:0::1;18561:175:1::0;29361:120:0::1;29520:4;29500:24:::0;::::1;;29492:51;;;;-1:-1:-1::0;;;29492:51:0::1;;;;;;;:::i;:::-;29558:9;29554:181;29571:20:::0;;::::1;29554:181;;;29648:12;;29661:1;29648:15;;;;;-1:-1:-1::0;;;29648:15:0::1;;;;;;;;;;;;;;;29612:7;:21;29620:9;;29630:1;29620:12;;;;;-1:-1:-1::0;;;29620:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29612:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29612:21:0;:33:::1;;:51:::0;29711:9;;29721:1;29711:12;;::::1;;;-1:-1:-1::0;;;29711:12:0::1;;;;;;;;;;;;;;;29678:7;:21;29686:9;;29696:1;29686:12;;;;;-1:-1:-1::0;;;29686:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29678:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29678:21:0;:30:::1;;:45:::0;29593:3;::::1;::::0;::::1;:::i;:::-;;;;29554:181;;;;29222:522:::0;;;;;;:::o;24388:132::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;24474:29:::1;:38:::0;24388:132::o;6010:244::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6099:22:0;::::1;6091:73;;;::::0;-1:-1:-1;;;6091:73:0;;13277:2:1;6091:73:0::1;::::0;::::1;13259:21:1::0;13316:2;13296:18;;;13289:30;13355:34;13335:18;;;13328:62;-1:-1:-1;;;13406:18:1;;;13399:36;13452:19;;6091:73:0::1;13249:228:1::0;6091:73:0::1;6201:6;::::0;;6180:38:::1;::::0;-1:-1:-1;;;;;6180:38:0;;::::1;::::0;6201:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6180:38:0;::::1;6229:6;:17:::0;;-1:-1:-1;;;;;;6229:17:0::1;-1:-1:-1::0;;;;;6229:17:0;;;::::1;::::0;;;::::1;::::0;;6010:244::o;24101:100::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;24172:12:::1;:21:::0;24101:100::o;8732:70::-;5763:6;;-1:-1:-1;;;;;5763:6:0;2630:10;5763:22;5755:67;;;;-1:-1:-1;;;5755:67:0;;;;;;;:::i;:::-;8781:6:::1;:13:::0;;-1:-1:-1;;8781:13:0::1;8790:4;8781:13;::::0;;8732:70::o;16502:337::-;-1:-1:-1;;;;;16595:19:0;;16587:68;;;;-1:-1:-1;;;16587:68:0;;19349:2:1;16587:68:0;;;19331:21:1;19388:2;19368:18;;;19361:30;19427:34;19407:18;;;19400:62;-1:-1:-1;;;19478:18:1;;;19471:34;19522:19;;16587:68:0;19321:226:1;16587:68:0;-1:-1:-1;;;;;16674:21:0;;16666:68;;;;-1:-1:-1;;;16666:68:0;;13684:2:1;16666:68:0;;;13666:21:1;13723:2;13703:18;;;13696:30;13762:34;13742:18;;;13735:62;-1:-1:-1;;;13813:18:1;;;13806:32;13855:19;;16666:68:0;13656:224:1;16666:68:0;-1:-1:-1;;;;;16747:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16799:32;;22089:25:1;;;16799:32:0;;22062:18:1;16799:32:0;;;;;;;16502:337;;;:::o;17081:2982::-;8534:6;;17161:4;;17167:2;;8534:6;;;:26;;-1:-1:-1;;;;;;8544:16:0;;;;;;:10;:16;;;;;;;;8534:26;:44;;;-1:-1:-1;;;;;;8564:14:0;;;;;;:10;:14;;;;;;;;8534:44;8526:65;;;;-1:-1:-1;;;8526:65:0;;14443:2:1;8526:65:0;;;14425:21:1;14482:1;14462:18;;;14455:29;-1:-1:-1;;;14500:18:1;;;14493:38;14548:18;;8526:65:0;14415:157:1;8526:65:0;-1:-1:-1;;;;;17195:18:0;::::1;17187:68;;;::::0;-1:-1:-1;;;17187:68:0;;18943:2:1;17187:68:0::1;::::0;::::1;18925:21:1::0;18982:2;18962:18;;;18955:30;19021:34;19001:18;;;18994:62;-1:-1:-1;;;19072:18:1;;;19065:35;19117:19;;17187:68:0::1;18915:227:1::0;17187:68:0::1;-1:-1:-1::0;;;;;17274:16:0;::::1;17266:64;;;::::0;-1:-1:-1;;;17266:64:0;;12873:2:1;17266:64:0::1;::::0;::::1;12855:21:1::0;12912:2;12892:18;;;12885:30;12951:34;12931:18;;;12924:62;-1:-1:-1;;;13002:18:1;;;12995:33;13045:19;;17266:64:0::1;12845:225:1::0;17266:64:0::1;17358:1;17349:6;:10;17341:64;;;::::0;-1:-1:-1;;;17341:64:0;;17776:2:1;17341:64:0::1;::::0;::::1;17758:21:1::0;17815:2;17795:18;;;17788:30;17854:34;17834:18;;;17827:62;-1:-1:-1;;;17905:18:1;;;17898:39;17954:19;;17341:64:0::1;17748:231:1::0;17341:64:0::1;-1:-1:-1::0;;;;;17424:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:25;-1:-1:-1;17424:25:0::1;17416:69;;;::::0;-1:-1:-1;;;17416:69:0;;16310:2:1;17416:69:0::1;::::0;::::1;16292:21:1::0;16349:2;16329:18;;;16322:30;16388:33;16368:18;;;16361:61;16439:18;;17416:69:0::1;16282:181:1::0;17416:69:0::1;-1:-1:-1::0;;;;;17506:18:0;::::1;;::::0;;;:12:::1;:18;::::0;;;;;::::1;;::::0;:38:::1;;-1:-1:-1::0;;;;;;17528:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;::::1;;17506:38;17504:41;17496:82;;;::::0;-1:-1:-1;;;17496:82:0;;15181:2:1;17496:82:0::1;::::0;::::1;15163:21:1::0;15220:2;15200:18;;;15193:30;15259;15239:18;;;15232:58;15307:18;;17496:82:0::1;15153:178:1::0;17496:82:0::1;17597:16;::::0;::::1;;::::0;:38:::1;;;17618:17;:4;-1:-1:-1::0;;;;;17618:15:0::1;;:17::i;:::-;17617:18;17597:38;:64;;;-1:-1:-1::0;;;;;;26469:25:0;;26445:4;26469:25;;;:15;:25;;;;;;;;17639:22:::1;17589:97;;;::::0;-1:-1:-1;;;17589:97:0;;20520:2:1;17589:97:0::1;::::0;::::1;20502:21:1::0;20559:2;20539:18;;;20532:30;-1:-1:-1;;;20578:18:1;;;20571:50;20638:18;;17589:97:0::1;20492:170:1::0;17589:97:0::1;17746:4;17697:28;14976:18:::0;;;:9;:18;;;;;;17816:29:::1;::::0;17792:53;::::1;::::0;::::1;::::0;;;17860:40:::1;;-1:-1:-1::0;17884:16:0::1;::::0;-1:-1:-1;;;17884:16:0;::::1;;;17883:17;17860:40;:56;;;;-1:-1:-1::0;;;;;;17905:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;::::1;;17904:12;17860:56;:81;;;;-1:-1:-1::0;17920:21:0::1;::::0;-1:-1:-1;;;17920:21:0;::::1;;;17860:81;17856:248;;;17957:17;:15;:17::i;:::-;18012:29;;17989:52;;18056:36;18071:20;18056:14;:36::i;:::-;18114:16;:14;:16::i;:::-;-1:-1:-1::0;;;;;18166:24:0;::::1;18141:11;18166:24:::0;;;:18:::1;:24;::::0;;;;;::::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;18194:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;18166:50;:70;;;-1:-1:-1::0;18220:16:0::1;::::0;-1:-1:-1;;;18220:16:0;::::1;;;18166:70;18163:1090;;;-1:-1:-1::0;18362:1:0::1;18163:1090;;;-1:-1:-1::0;;;;;18399:9:0;::::1;;::::0;;;:5:::1;:9;::::0;;;;;::::1;;18396:846;;;18471:13;;18461:6;:23;;:47;;;-1:-1:-1::0;18489:19:0::1;::::0;-1:-1:-1;;;18489:19:0;::::1;;;18488:20;18461:47;18453:94;;;::::0;-1:-1:-1;;;18453:94:0;;18186:2:1;18453:94:0::1;::::0;::::1;18168:21:1::0;18225:2;18205:18;;;18198:30;18264:34;18244:18;;;18237:62;-1:-1:-1;;;18315:18:1;;;18308:32;18357:19;;18453:94:0::1;18158:224:1::0;18453:94:0::1;18572:57;18617:11;;18572:40;18594:17;;18572;;:21;;:40;;;;:::i;:::-;:44:::0;::::1;:57::i;:::-;18566:63;;18396:846;;;-1:-1:-1::0;;;;;18655:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;::::1;;18651:591;;;18710:10;;18691:15;:29;18687:100;;;-1:-1:-1::0;;;;;18744:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;:23;;-1:-1:-1;;18744:23:0::1;18763:4;18744:23;::::0;;18687:100:::1;18847:12;;18837:6;:22;;:45;;;-1:-1:-1::0;18864:18:0::1;::::0;-1:-1:-1;;;18864:18:0;::::1;;;18863:19;18837:45;18829:91;;;::::0;-1:-1:-1;;;18829:91:0;;14779:2:1;18829:91:0::1;::::0;::::1;14761:21:1::0;14818:2;14798:18;;;14791:30;14857:34;14837:18;;;14830:62;-1:-1:-1;;;14908:18:1;;;14901:31;14949:19;;18829:91:0::1;14751:223:1::0;18829:91:0::1;18945:45;18982:7;;18945:32;18963:13;;18945;;:17;;:32;;;;:::i;18651:591::-;-1:-1:-1::0;;;;;19069:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:28:::1;;::::0;::::1;;19068:29;:61:::0;::::1;;;;19119:10;;19101:15;:28;19068:61;19060:105;;;::::0;-1:-1:-1;;;19060:105:0;;15950:2:1;19060:105:0::1;::::0;::::1;15932:21:1::0;15989:2;15969:18;;;15962:30;16028:33;16008:18;;;16001:61;16079:18;;19060:105:0::1;15922:181:1::0;19060:105:0::1;19190:18;::::0;::::1;;:36;;19225:1;19190:36;;;19211:11;;19190:36;19184:42;;18651:591;19297:19;19319:22;19329:6;19337:3;19319:9;:22::i;:::-;19297:44:::0;-1:-1:-1;19352:17:0::1;19372:23;:6:::0;19297:44;19372:10:::1;:23::i;:::-;-1:-1:-1::0;;;;;19425:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;19352:43;;-1:-1:-1;19425:27:0::1;::::0;19445:6;19425:19:::1;:27::i;:::-;-1:-1:-1::0;;;;;19407:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:45;;;;19508:4:::1;19490:24:::0;;;;:39:::1;::::0;19519:9;19490:28:::1;:39::i;:::-;19481:4;19463:24;::::0;;;:9:::1;:24;::::0;;;;;:66;;;;-1:-1:-1;;;;;19556:13:0;::::1;::::0;;;;:30:::1;::::0;19574:11;19556:17:::1;:30::i;:::-;-1:-1:-1::0;;;;;19540:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;:46;;;19622:14:::1;::::0;-1:-1:-1;19605:31:0::1;::::0;:60:::1;;-1:-1:-1::0;;;;;;19640:25:0;::::1;;::::0;;;:21:::1;:25;::::0;;;;;::::1;;19605:60;:85;;;-1:-1:-1::0;19670:20:0::1;::::0;-1:-1:-1;;;19670:20:0;::::1;;;19669:21;19605:85;19597:141;;;::::0;-1:-1:-1;;;19597:141:0;;12461:2:1;19597:141:0::1;::::0;::::1;12443:21:1::0;12500:2;12480:18;;;12473:30;12539:34;12519:18;;;12512:62;-1:-1:-1;;;12590:18:1;;;12583:41;12641:19;;19597:141:0::1;12433:233:1::0;19597:141:0::1;19809:16;::::0;-1:-1:-1;;;19809:16:0;::::1;;;19808:17;:33:::0;::::1;;;-1:-1:-1::0;;;;;;19830:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;::::1;;19829:12;19808:33;19804:98;;;19857:33;19872:4;19878:11;19857:14;:33::i;:::-;19941:2;-1:-1:-1::0;;;;;19927:29:0::1;19936:4;-1:-1:-1::0;;;;;19927:29:0::1;;19944:11;19927:29;;;;22089:25:1::0;;22077:2;22062:18;;22044:76;19927:29:0::1;;;;;;;;19971:14:::0;;19967:89:::1;;20006:38;::::0;22089:25:1;;;20028:4:0::1;::::0;-1:-1:-1;;;;;20006:38:0;::::1;::::0;::::1;::::0;22077:2:1;22062:18;20006:38:0::1;;;;;;;19967:89;8602:1;;;;;17081:2982:::0;;;;;:::o;1306:192::-;1392:7;1428:12;1420:6;;;;1412:29;;;;-1:-1:-1;;;1412:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1452:9:0;1464:5;1468:1;1464;:5;:::i;:::-;1452:17;1306:192;-1:-1:-1;;;;;1306:192:0:o;975:179::-;1033:7;;1065:5;1069:1;1065;:5;:::i;:::-;1053:17;;1094:1;1089;:6;;1081:46;;;;-1:-1:-1;;;1081:46:0;;14087:2:1;1081:46:0;;;14069:21:1;14126:2;14106:18;;;14099:30;14165:29;14145:18;;;14138:57;14212:18;;1081:46:0;14059:177:1;1081:46:0;1145:1;975:179;-1:-1:-1;;;975:179:0:o;24642:135::-;12043:16;:23;;-1:-1:-1;;;;12043:23:0;-1:-1:-1;;;12043:23:0;;;24713:10;;24709:61:::1;;24737:24;24754:6;24737:16;:24::i;:::-;-1:-1:-1::0;12089:16:0;:24;;-1:-1:-1;;;;12089:24:0;;;24642:135::o;2922:317::-;2982:4;3148:20;;3048:66;3188:23;;;;;;:42;;-1:-1:-1;3215:15:0;;;3188:42;3180:51;2922:317;-1:-1:-1;;;;2922:317:0:o;24785:343::-;12043:16;:23;;-1:-1:-1;;;;12043:23:0;-1:-1:-1;;;12043:23:0;;;24897:14:::1;::::0;24861:21:::1;::::0;12043:23;24897:14:::1;:46:::0;::::1;;;;24926:17;;24915:7;:28;;24897:46;24893:228;;;24988:17;;24978:7;:27;24974:99;;;-1:-1:-1::0;25036:17:0::1;::::0;24974:99:::1;25087:22;25101:7;25087:13;:22::i;20071:1063::-:0;12043:16;:23;;-1:-1:-1;;;;12043:23:0;-1:-1:-1;;;12043:23:0;;;20210:7:::1;::::0;20191:13:::1;::::0;20173::::1;::::0;12043:23;;20173:45:::1;::::0;20210:7;;20173:32:::1;::::0;:17:::1;:32::i;:45::-;20156:62:::0;-1:-1:-1;20233:11:0;;20229:898:::1;;20260:27;20290:73;20361:1;20290:66;20341:14;;20327:13;;:28;;;;:::i;:::-;20290:32;:20:::0;20315:6;20290:24:::1;:32::i;:::-;:36:::0;::::1;:66::i;:::-;:70:::0;::::1;:73::i;:::-;20260:103:::0;-1:-1:-1;20378:22:0::1;20403:45;:20:::0;20260:103;20403:24:::1;:45::i;:::-;20378:70:::0;-1:-1:-1;20488:21:0::1;20524:32;20378:70:::0;20524:16:::1;:32::i;:::-;20571:18;20592:41;:21;20618:14:::0;20592:25:::1;:41::i;:::-;20571:62;;20648:23;20674:63;20735:1;20674:56;20715:14;;20701:13;;:28;;;;:::i;:::-;20674:22;:10:::0;20689:6;20674:14:::1;:22::i;:63::-;20648:89:::0;-1:-1:-1;20755:19:0;;20752:212:::1;;20805:50;20818:19;20839:15;20805:12;:50::i;:::-;20875:73;::::0;;23251:25:1;;;23307:2;23292:18;;23285:34;;;23335:18;;;23328:34;;;20875:73:0::1;::::0;23239:2:1;23224:18;20875:73:0::1;;;;;;;20752:212;20978:15;::::0;21030:13:::1;::::0;-1:-1:-1;;;;;20978:15:0;;::::1;::::0;:67:::1;::::0;21003:41:::1;::::0;:22:::1;:10:::0;21018:6;21003:14:::1;:22::i;:41::-;20978:67;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;21060:9:0::1;::::0;21106:7:::1;::::0;-1:-1:-1;;;;;21060:9:0;;::::1;::::0;:55:::1;::::0;21079:35:::1;::::0;:22:::1;:10:::0;21094:6;21079:14:::1;:22::i;:35::-;21060:55;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20229:898;;;;;;-1:-1:-1::0;;12089:16:0;:24;;-1:-1:-1;;;;12089:24:0;;;20071:1063::o;21142:696::-;21191:9;;;;:28;;;;-1:-1:-1;21204:10:0;;:15;;21191:28;21187:644;;;21235:17;21273:14;;21255:15;:32;;;;:::i;:::-;21235:52;;21302:13;21330:17;;21318:9;:29;;;;:::i;:::-;21302:45;;21366:9;21362:134;21383:5;21379:1;:9;21362:134;;;21434:1;21417:13;;:18;21413:29;;21437:5;;21413:29;21479:1;21461:13;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;21390:3:0;;-1:-1:-1;21390:3:0;;;:::i;:::-;;;;21362:134;;;-1:-1:-1;21527:15:0;21510:14;:32;21561:13;;21578:2;-1:-1:-1;21557:263:0;;21600:9;:17;;-1:-1:-1;;21600:17:0;;;21652:19;;21636:13;:35;21706:19;;21690:13;:35;21754:13;;21744:7;:23;-1:-1:-1;21786:14:0;:18;21187:644;;21142:696::o;21846:170::-;21996:11;;21921:13;;21954:54;;:37;21970:20;21996:11;21986:3;21970:15;:20::i;:::-;21954:11;;:15;:37::i;1162:136::-;1220:7;1247:43;1251:1;1254;1247:43;;;;;;;;;;;;;;;;;:3;:43::i;31889:791::-;-1:-1:-1;;;;;31971:13:0;;;;;;:7;:13;;;;;:24;;;;;;;;;:82;;-1:-1:-1;32001:18:0;;;;32000:19;:52;;;;-1:-1:-1;;;;;;32024:13:0;;;;;;:7;:13;;;;;:28;;;;;32023:29;32000:52;31971:150;;;-1:-1:-1;32059:29:0;;;;;;;32058:30;:62;;;;-1:-1:-1;;;;;;32092:13:0;;;;;;:7;:13;;;;;:28;;;;;32058:62;31967:188;;;31889:791;;:::o;31967:188::-;32165:16;32184:24;32196:11;32184;:24::i;:::-;-1:-1:-1;;;;;32219:13:0;;;;;;:7;:13;;;;;;;:28;;;;:50;;;;;;;;;;;;;32253:15;32219:50;;;32280:40;;;;;;;;;;;;;;;;;32165:43;;-1:-1:-1;32362:23:0;32227:4;32362:17;:23::i;:::-;-1:-1:-1;;;;;32421:13:0;;32398:20;32421:13;;;:7;:13;;;;;:28;;;32331:54;;-1:-1:-1;32398:20:0;32421:28;;:67;;32477:11;;32421:67;;;32452:22;;32421:67;-1:-1:-1;;;;;32515:13:0;;32499;32515;;;:7;:13;;;;;:22;;;32398:90;;-1:-1:-1;32499:13:0;32515:27;:67;;-1:-1:-1;;;;;32560:13:0;;;;;;:7;:13;;;;;:22;;;32515:67;;;32545:12;32515:67;32499:83;;32625:5;32601:20;:29;;32593:79;;;;-1:-1:-1;;;32593:79:0;;20114:2:1;32593:79:0;;;20096:21:1;20153:2;20133:18;;;20126:30;20192:34;20172:18;;;20165:62;-1:-1:-1;;;20243:18:1;;;20236:35;20288:19;;32593:79:0;20086:227:1;32593:79:0;31889:791;;;;;;:::o;25136:415::-;25221:16;;;25235:1;25221:16;;;;;;;;25197:21;;25221:16;;;;;;;;-1:-1:-1;;25258:15:0;;:22;;;-1:-1:-1;;;25258:22:0;;;;25197:40;;-1:-1:-1;;;;;;25258:15:0;;;;:20;;-1:-1:-1;25258:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25248:4;25253:1;25248:7;;;;;;-1:-1:-1;;;25248:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;25248:32:0;;;-1:-1:-1;;;;;25248:32:0;;;;;25309:4;25291;25296:1;25291:7;;;;;;-1:-1:-1;;;25291:7:0;;;;;;;;;-1:-1:-1;;;;;25291:23:0;;;:7;;;;;;;;;:23;25325:15;;25456:10;;25325:172;;-1:-1:-1;;;25325:172:0;;:15;;;;:66;;25399:6;;25325:172;;:15;;25437:4;;25456:10;;;;25481:15;;25325:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25513:30;25530:6;25538:4;25513:30;;;;;;;:::i;:::-;;;;;;;;25136:415;;:::o;1764:132::-;1822:7;1849:39;1853:1;1856;1849:39;;;;;;;;;;;;;;;;;:3;:39::i;1506:250::-;1564:7;1588:6;1584:47;;-1:-1:-1;1618:1:0;1611:8;;1584:47;1643:9;1655:5;1659:1;1655;:5;:::i;:::-;1643:17;-1:-1:-1;1688:1:0;1679:5;1683:1;1643:17;1679:5;:::i;:::-;:10;1671:56;;;;-1:-1:-1;;;1671:56:0;;16670:2:1;1671:56:0;;;16652:21:1;16709:2;16689:18;;;16682:30;16748:34;16728:18;;;16721:62;-1:-1:-1;;;16799:18:1;;;16792:31;16840:19;;1671:56:0;16642:223:1;22589:392:0;22679:16;;;22693:1;22679:16;;;;;;;;22655:21;;22679:16;;;;;;;;;;-1:-1:-1;22679:16:0;22655:40;;22724:4;22706;22711:1;22706:7;;;;;;-1:-1:-1;;;22706:7:0;;;;;;;;;-1:-1:-1;;;;;22706:23:0;;;:7;;;;;;;;;;:23;;;;22750:15;;:22;;;-1:-1:-1;;;22750:22:0;;;;:15;;;;;:20;;:22;;;;;22706:7;;22750:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22740:4;22745:1;22740:7;;;;;;-1:-1:-1;;;22740:7:0;;;;;;;;;-1:-1:-1;;;;;22740:32:0;;;:7;;;;;;;;;:32;22815:15;;22783:62;;22800:4;;22815:15;22833:11;22783:8;:62::i;:::-;22856:15;;:117;;-1:-1:-1;;;22856:117:0;;-1:-1:-1;;;;;22856:15:0;;;;:66;;:117;;22923:11;;22856:15;;22937:4;;22950;;22957:15;;22856:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23119:271;23232:15;;23200:62;;23217:4;;-1:-1:-1;;;;;23232:15:0;23250:11;23200:8;:62::i;:::-;23273:15;;-1:-1:-1;;;;;23273:15:0;:31;23312:9;23331:4;23338:11;23273:15;;23357:7;5674;5701:6;-1:-1:-1;;;;;5701:6:0;;5636:79;23357:7;23273:109;;;;;;-1:-1:-1;;;;;;23273:109:0;;;-1:-1:-1;;;;;10457:15:1;;;23273:109:0;;;10439:34:1;10489:18;;;10482:34;;;;10532:18;;;10525:34;;;;10575:18;;;10568:34;10639:15;;;10618:19;;;10611:44;23366:15:0;10671:19:1;;;10664:35;10373:19;;23273:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27074:291::-;27191:16;;;27205:1;27191:16;;;;;;;;27138;;;;27191;27205:1;27191:16;;;;;;;;;;-1:-1:-1;27191:16:0;27167:40;;27236:4;27218;27223:1;27218:7;;;;;;-1:-1:-1;;;27218:7:0;;;;;;;;;-1:-1:-1;;;;;27218:23:0;;;:7;;;;;;;;;;:23;;;;27262:15;;:22;;;-1:-1:-1;;;27262:22:0;;;;:15;;;;;:20;;:22;;;;;27218:7;;27262:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27252:4;27257:1;27252:7;;;;;;-1:-1:-1;;;27252:7:0;;;;;;;;;-1:-1:-1;;;;;27252:32:0;;;:7;;;;;;;;;:32;27306:15;;:48;;-1:-1:-1;;;27306:48:0;;:15;;;:29;;:48;;27336:11;;27349:4;;27306:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27306:48:0;;;;;;;;;;;;:::i;:::-;27355:1;27306:51;;;;;;-1:-1:-1;;;27306:51:0;;;;;;;;;;;;;;;27295:62;;27074:291;;;;:::o;1904:278::-;1990:7;2025:12;2018:5;2010:28;;;;-1:-1:-1;;;2010:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2049:9:0;2061:5;2065:1;2061;:5;:::i;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;942:398::-;1010:6;1018;1071:2;1059:9;1050:7;1046:23;1042:32;1039:2;;;1092:6;1084;1077:22;1039:2;1136:9;1123:23;1155:31;1180:5;1155:31;:::i;:::-;1205:5;-1:-1:-1;1262:2:1;1247:18;;1234:32;1275:33;1234:32;1275:33;:::i;:::-;1327:7;1317:17;;;1029:311;;;;;:::o;1345:466::-;1422:6;1430;1438;1491:2;1479:9;1470:7;1466:23;1462:32;1459:2;;;1512:6;1504;1497:22;1459:2;1556:9;1543:23;1575:31;1600:5;1575:31;:::i;:::-;1625:5;-1:-1:-1;1682:2:1;1667:18;;1654:32;1695:33;1654:32;1695:33;:::i;:::-;1449:362;;1747:7;;-1:-1:-1;;;1801:2:1;1786:18;;;;1773:32;;1449:362::o;1816:392::-;1881:6;1889;1942:2;1930:9;1921:7;1917:23;1913:32;1910:2;;;1963:6;1955;1948:22;1910:2;2007:9;1994:23;2026:31;2051:5;2026:31;:::i;:::-;2076:5;-1:-1:-1;2133:2:1;2118:18;;2105:32;2146:30;2105:32;2146:30;:::i;2213:325::-;2281:6;2289;2342:2;2330:9;2321:7;2317:23;2313:32;2310:2;;;2363:6;2355;2348:22;2310:2;2407:9;2394:23;2426:31;2451:5;2426:31;:::i;:::-;2476:5;2528:2;2513:18;;;;2500:32;;-1:-1:-1;;;2300:238:1:o;2543:457::-;2629:6;2637;2690:2;2678:9;2669:7;2665:23;2661:32;2658:2;;;2711:6;2703;2696:22;2658:2;2756:9;2743:23;2789:18;2781:6;2778:30;2775:2;;;2826:6;2818;2811:22;2775:2;2870:70;2932:7;2923:6;2912:9;2908:22;2870:70;:::i;:::-;2959:8;;2844:96;;-1:-1:-1;2648:352:1;-1:-1:-1;;;;2648:352:1:o;3005:803::-;3127:6;3135;3143;3151;3204:2;3192:9;3183:7;3179:23;3175:32;3172:2;;;3225:6;3217;3210:22;3172:2;3270:9;3257:23;3299:18;3340:2;3332:6;3329:14;3326:2;;;3361:6;3353;3346:22;3326:2;3405:70;3467:7;3458:6;3447:9;3443:22;3405:70;:::i;:::-;3494:8;;-1:-1:-1;3379:96:1;-1:-1:-1;3582:2:1;3567:18;;3554:32;;-1:-1:-1;3598:16:1;;;3595:2;;;3632:6;3624;3617:22;3595:2;;3676:72;3740:7;3729:8;3718:9;3714:24;3676:72;:::i;:::-;3162:646;;;;-1:-1:-1;3767:8:1;-1:-1:-1;;;;3162:646:1:o;3813:1128::-;3971:6;3979;3987;3995;4003;4011;4064:2;4052:9;4043:7;4039:23;4035:32;4032:2;;;4085:6;4077;4070:22;4032:2;4130:9;4117:23;4159:18;4200:2;4192:6;4189:14;4186:2;;;4221:6;4213;4206:22;4186:2;4265:70;4327:7;4318:6;4307:9;4303:22;4265:70;:::i;:::-;4354:8;;-1:-1:-1;4239:96:1;-1:-1:-1;4442:2:1;4427:18;;4414:32;;-1:-1:-1;4458:16:1;;;4455:2;;;4492:6;4484;4477:22;4455:2;4536:72;4600:7;4589:8;4578:9;4574:24;4536:72;:::i;:::-;4627:8;;-1:-1:-1;4510:98:1;-1:-1:-1;4715:2:1;4700:18;;4687:32;;-1:-1:-1;4731:16:1;;;4728:2;;;4765:6;4757;4750:22;4728:2;;4809:72;4873:7;4862:8;4851:9;4847:24;4809:72;:::i;:::-;4022:919;;;;-1:-1:-1;4022:919:1;;-1:-1:-1;4022:919:1;;4900:8;;4022:919;-1:-1:-1;;;4022:919:1:o;4946:1022::-;5030:6;5061:2;5104;5092:9;5083:7;5079:23;5075:32;5072:2;;;5125:6;5117;5110:22;5072:2;5170:9;5157:23;5203:18;5195:6;5192:30;5189:2;;;5240:6;5232;5225:22;5189:2;5268:22;;5321:4;5313:13;;5309:27;-1:-1:-1;5299:2:1;;5355:6;5347;5340:22;5299:2;5396;5383:16;5419:60;5435:43;5475:2;5435:43;:::i;:::-;5419:60;:::i;:::-;5501:3;5525:2;5520:3;5513:15;5553:2;5548:3;5544:12;5537:19;;5584:2;5580;5576:11;5632:7;5627:2;5621;5618:1;5614:10;5610:2;5606:19;5602:28;5599:41;5596:2;;;5658:6;5650;5643:22;5596:2;5685:6;5676:15;;5700:238;5714:2;5711:1;5708:9;5700:238;;;5785:3;5772:17;5802:31;5827:5;5802:31;:::i;:::-;5846:18;;5732:1;5725:9;;;;;5884:12;;;;5916;;5700:238;;;-1:-1:-1;5957:5:1;5041:927;-1:-1:-1;;;;;;;5041:927:1:o;5973:937::-;6068:6;6099:2;6142;6130:9;6121:7;6117:23;6113:32;6110:2;;;6163:6;6155;6148:22;6110:2;6201:9;6195:16;6234:18;6226:6;6223:30;6220:2;;;6271:6;6263;6256:22;6220:2;6299:22;;6352:4;6344:13;;6340:27;-1:-1:-1;6330:2:1;;6386:6;6378;6371:22;6330:2;6420;6414:9;6443:60;6459:43;6499:2;6459:43;:::i;6443:60::-;6525:3;6549:2;6544:3;6537:15;6577:2;6572:3;6568:12;6561:19;;6608:2;6604;6600:11;6656:7;6651:2;6645;6642:1;6638:10;6634:2;6630:19;6626:28;6623:41;6620:2;;;6682:6;6674;6667:22;6620:2;6709:6;6700:15;;6724:156;6738:2;6735:1;6732:9;6724:156;;;6795:10;;6783:23;;6756:1;6749:9;;;;;6826:12;;;;6858;;6724:156;;6915:251;6971:6;7024:2;7012:9;7003:7;6999:23;6995:32;6992:2;;;7045:6;7037;7030:22;6992:2;7089:9;7076:23;7108:28;7130:5;7108:28;:::i;7171:255::-;7238:6;7291:2;7279:9;7270:7;7266:23;7262:32;7259:2;;;7312:6;7304;7297:22;7259:2;7349:9;7343:16;7368:28;7390:5;7368:28;:::i;7431:190::-;7490:6;7543:2;7531:9;7522:7;7518:23;7514:32;7511:2;;;7564:6;7556;7549:22;7511:2;-1:-1:-1;7592:23:1;;7501:120;-1:-1:-1;7501:120:1:o;7626:194::-;7696:6;7749:2;7737:9;7728:7;7724:23;7720:32;7717:2;;;7770:6;7762;7755:22;7717:2;-1:-1:-1;7798:16:1;;7707:113;-1:-1:-1;7707:113:1:o;7825:326::-;7902:6;7910;7918;7971:2;7959:9;7950:7;7946:23;7942:32;7939:2;;;7992:6;7984;7977:22;7939:2;-1:-1:-1;;8020:23:1;;;8090:2;8075:18;;8062:32;;-1:-1:-1;8141:2:1;8126:18;;;8113:32;;7929:222;-1:-1:-1;7929:222:1:o;8156:316::-;8244:6;8252;8260;8313:2;8301:9;8292:7;8288:23;8284:32;8281:2;;;8334:6;8326;8319:22;8281:2;8368:9;8362:16;8352:26;;8418:2;8407:9;8403:18;8397:25;8387:35;;8462:2;8451:9;8447:18;8441:25;8431:35;;8271:201;;;;;:::o;8477:463::-;8530:3;8568:5;8562:12;8595:6;8590:3;8583:19;8621:4;8650:2;8645:3;8641:12;8634:19;;8687:2;8680:5;8676:14;8708:3;8720:195;8734:6;8731:1;8728:13;8720:195;;;8799:13;;-1:-1:-1;;;;;8795:39:1;8783:52;;8855:12;;;;8890:15;;;;8831:1;8749:9;8720:195;;;-1:-1:-1;8931:3:1;;8538:402;-1:-1:-1;;;;;8538:402:1:o;8945:437::-;8998:3;9036:5;9030:12;9063:6;9058:3;9051:19;9089:4;9118:2;9113:3;9109:12;9102:19;;9155:2;9148:5;9144:14;9176:3;9188:169;9202:6;9199:1;9196:13;9188:169;;;9263:13;;9251:26;;9297:12;;;;9332:15;;;;9224:1;9217:9;9188:169;;11136:510;11407:6;11396:9;11389:25;11450:3;11445:2;11434:9;11430:18;11423:31;11370:4;11471:57;11523:3;11512:9;11508:19;11500:6;11471:57;:::i;:::-;-1:-1:-1;;;;;11564:32:1;;;;11559:2;11544:18;;11537:60;-1:-1:-1;11628:2:1;11613:18;11606:34;11463:65;11379:267;-1:-1:-1;;11379:267:1:o;11651:603::-;11763:4;11792:2;11821;11810:9;11803:21;11853:6;11847:13;11896:6;11891:2;11880:9;11876:18;11869:34;11921:4;11934:140;11948:6;11945:1;11942:13;11934:140;;;12043:14;;;12039:23;;12033:30;12009:17;;;12028:2;12005:26;11998:66;11963:10;;11934:140;;;12092:6;12089:1;12086:13;12083:2;;;12162:4;12157:2;12148:6;12137:9;12133:22;12129:31;12122:45;12083:2;-1:-1:-1;12238:2:1;12217:15;-1:-1:-1;;12213:29:1;12198:45;;;;12245:2;12194:54;;11772:482;-1:-1:-1;;;11772:482:1:o;16870:356::-;17072:2;17054:21;;;17091:18;;;17084:30;17150:34;17145:2;17130:18;;17123:62;17217:2;17202:18;;17044:182::o;17231:338::-;17433:2;17415:21;;;17472:2;17452:18;;;17445:30;-1:-1:-1;;;17506:2:1;17491:18;;17484:44;17560:2;17545:18;;17405:164::o;21071:867::-;21262:2;21251:9;21244:21;21225:4;21300:6;21294:13;21343:4;21338:2;21327:9;21323:18;21316:32;21371:63;21429:3;21418:9;21414:19;21400:12;21371:63;:::i;:::-;21357:77;;21483:2;21475:6;21471:15;21465:22;21555:2;21551:7;21539:9;21531:6;21527:22;21523:36;21518:2;21507:9;21503:18;21496:64;21583:52;21628:6;21612:14;21583:52;:::i;:::-;21569:66;;;21689:2;21681:6;21677:15;21671:22;21666:2;21655:9;21651:18;21644:50;21749:2;21741:6;21737:15;21731:22;21725:3;21714:9;21710:19;21703:51;21823:3;21815:6;21811:16;21805:23;21798:31;21791:39;21785:3;21774:9;21770:19;21763:68;21901:3;21893:6;21889:16;21883:23;21876:31;21869:39;21862:4;21851:9;21847:20;21840:69;21926:6;21918:14;;;21234:704;;;;:::o;22125:332::-;22332:6;22321:9;22314:25;22375:2;22370;22359:9;22355:18;22348:30;22295:4;22395:56;22447:2;22436:9;22432:18;22424:6;22395:56;:::i;22462:582::-;22761:6;22750:9;22743:25;22804:6;22799:2;22788:9;22784:18;22777:34;22847:3;22842:2;22831:9;22827:18;22820:31;22724:4;22868:57;22920:3;22909:9;22905:19;22897:6;22868:57;:::i;:::-;-1:-1:-1;;;;;22961:32:1;;;;22956:2;22941:18;;22934:60;-1:-1:-1;23025:3:1;23010:19;23003:35;22860:65;22733:311;-1:-1:-1;;;22733:311:1:o;23562:275::-;23633:2;23627:9;23698:2;23679:13;;-1:-1:-1;;23675:27:1;23663:40;;23733:18;23718:34;;23754:22;;;23715:62;23712:2;;;23780:18;;:::i;:::-;23816:2;23809:22;23607:230;;-1:-1:-1;23607:230:1:o;23842:183::-;23902:4;23935:18;23927:6;23924:30;23921:2;;;23957:18;;:::i;:::-;-1:-1:-1;24002:1:1;23998:14;24014:4;23994:25;;23911:114::o;24030:128::-;24070:3;24101:1;24097:6;24094:1;24091:13;24088:2;;;24107:18;;:::i;:::-;-1:-1:-1;24143:9:1;;24078:80::o;24163:217::-;24203:1;24229;24219:2;;-1:-1:-1;;;24254:31:1;;24308:4;24305:1;24298:15;24336:4;24261:1;24326:15;24219:2;-1:-1:-1;24365:9:1;;24209:171::o;24385:168::-;24425:7;24491:1;24487;24483:6;24479:14;24476:1;24473:21;24468:1;24461:9;24454:17;24450:45;24447:2;;;24498:18;;:::i;:::-;-1:-1:-1;24538:9:1;;24437:116::o;24558:125::-;24598:4;24626:1;24623;24620:8;24617:2;;;24631:18;;:::i;:::-;-1:-1:-1;24668:9:1;;24607:76::o;24688:136::-;24727:3;24755:5;24745:2;;24764:18;;:::i;:::-;-1:-1:-1;;;24800:18:1;;24735:89::o;24829:380::-;24908:1;24904:12;;;;24951;;;24972:2;;25026:4;25018:6;25014:17;25004:27;;24972:2;25079;25071:6;25068:14;25048:18;25045:38;25042:2;;;25125:10;25120:3;25116:20;25113:1;25106:31;25160:4;25157:1;25150:15;25188:4;25185:1;25178:15;25042:2;;24884:325;;;:::o;25214:135::-;25253:3;-1:-1:-1;;25274:17:1;;25271:2;;;25294:18;;:::i;:::-;-1:-1:-1;25341:1:1;25330:13;;25261:88::o;25354:175::-;25391:3;25435:4;25428:5;25424:16;25464:4;25455:7;25452:17;25449:2;;;25472:18;;:::i;:::-;25521:1;25508:15;;25399:130;-1:-1:-1;;25399:130:1:o;25534:127::-;25595:10;25590:3;25586:20;25583:1;25576:31;25626:4;25623:1;25616:15;25650:4;25647:1;25640:15;25666:127;25727:10;25722:3;25718:20;25715:1;25708:31;25758:4;25755:1;25748:15;25782:4;25779:1;25772:15;25798:131;-1:-1:-1;;;;;25873:31:1;;25863:42;;25853:2;;25919:1;25916;25909:12;25934:118;26020:5;26013:13;26006:21;25999:5;25996:32;25986:2;;26042:1;26039;26032:12

Swarm Source

ipfs://6c2cdbe70e088f6b2fe0a35fc4218806d3bce29a5f0480ae0573b65635835684

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.