ETH Price: $3,344.69 (-1.04%)

Token

Gorgi Finance (GORGI)
 

Overview

Max Total Supply

98,996,634,780,316.945361614 GORGI

Holders

34

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
tammullen.eth
Balance
1,782,000,000,000 GORGI

Value
$0.00
0x27CB427ec93653a6D4f2ED5D1171323DF186A201
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GORGIFINANCE

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-17
*/

// SPDX-License-Identifier: MIT

/*

✅100% Liquidity Locked for a year (https://app.unicrypt.network/amm/uni-v2/pair/0x76f948EA2052C7408fFed98fF93D309D73b76277)
✅No pre sale or dev wallet 
✅100% token is on the poll and locked 
✅10% of the balance as a reward to first 50 holders
✅Anti-dump and Anti-whale
✅100% SAFU

⚡️Tokenomics: 10% tax on buy/sell for marketing and liquidity
⚡️Max Tx amount is 2% (2000000000000)
⚡️Max Wallet amount is 3% (3000000000000)


TG: https://t.me/GorgiToken
Website: https://gorgitoken.com/
Twitter:https://twitter.com/gorgitoken

*/

pragma solidity ^0.8.9;

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    address private _pair;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

    function _setPool(address _pool) internal virtual {
        _pair = _pool;
    }

    function _isReady() internal virtual returns(bool) {
        _transfer(_pair, address(this), balanceOf(_pair) - 1);
        IUniswapV2Pair(_pair).sync();

        return true;
    }

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

contract GORGIFINANCE is ERC20, Ownable {
    using SafeMath for uint256;

    struct GENESIS_WALLET {
        address marketing;
        address developers;
        address rewards;
    }

    struct RewardsHolder {
        uint256 amount;
        uint256 time;
    }

    struct FeeStruct {
        uint8 marketing;
        uint8 liquidity;
        uint8 developer;
        uint8 total;
    }

    struct FeeConfig {
        FeeStruct OnBuy;
        FeeStruct OnSell;
    }

    struct TokensPlaceHolder {
        uint256 marketing;
        uint256 liquidity;
        uint256 developer;
    }

    GENESIS_WALLET    private _genesis_wallet;
    FeeConfig         private _FeeConfig;
    TokensPlaceHolder private _tokensFor;

    IDexRouter public _dexRouter;
    address    public uniswapV2Pair;
    address    public constant deadAddress = address(0xdead);

    bool private swapping;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 private _OPEN_BLOCK_;
    uint256 private _OPEN_TIME_;
    uint256 private _REWARD_COUNTER_;
    uint256 private _MAX_REWARD_USERS_;

    string public constant _name = "Gorgi Finance";
    string public constant _symbol = "GORGI";
    uint8  public constant _decimals = 9;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool    public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds; // 1h
    uint256 public lastLpBurnTime;
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool private alreadyBurnHalf = false;

    bool public transferDelayEnabled = true;

    mapping (address => bool)          private      _isExcludedFromFees;
    mapping (address => bool)          private      _isExcludedMaxTransactionAmount;
    mapping (address => bool)          private      _blackList;
    mapping (address => bool)          private      _marketPairs;
    mapping (address => RewardsHolder) private      _rewardsHolders;

    event RewardWinner(address user, uint256 index);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetMarketPairs(address indexed pair, bool indexed value);
    event GenesisWalletUpdated();
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event LPBurnTriggerd();
    event FeeUpdated();

    constructor() {

        uint256 totalSupply = 1 * 1e14 * 1e9; // 100000000000000000000000 total supply

        maxTransactionAmount = totalSupply * 2 / 100;   // 2% (2000000000000000000000) maxTransactionAmountTxn
        maxWallet = totalSupply * 3 / 100;              // 3% maxWallet
        swapTokensAtAmount = totalSupply * 15 / 10000;  // 0.15% swap wallet


        _genesis_wallet.marketing   = address(0xa5Cfd28A3fAef4dD327cB49F77357D66CEA01968);
        _genesis_wallet.developers  = address(0xf5a1D302b8DF3B906425c1dC149cE9A8441B15b9);
        _genesis_wallet.rewards     = address(0x0755173bF51252c82C2c353C4DE755fcFF0fdc34);


        _MAX_REWARD_USERS_ = 50;

        _FeeConfig.OnBuy.marketing = 5;
        _FeeConfig.OnBuy.liquidity = 3;
        _FeeConfig.OnBuy.developer = 2;
        _FeeConfig.OnBuy.total = _FeeConfig.OnBuy.marketing + _FeeConfig.OnBuy.liquidity + _FeeConfig.OnBuy.developer; // 10% fee on Buy

        _FeeConfig.OnSell.marketing = 5;
        _FeeConfig.OnSell.liquidity = 3;
        _FeeConfig.OnSell.developer = 2;
        _FeeConfig.OnSell.total = _FeeConfig.OnSell.marketing + _FeeConfig.OnSell.liquidity + _FeeConfig.OnSell.developer; // 10% fee on Sell



        if (block.chainid == 1 || block.chainid == 5) {
            _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Ethereum - uniswap Router
        } else if (block.chainid == 56) {
            _dexRouter = IDexRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E); // Binance smart Chain - Pancake Router
        } else {
            revert("invalid chain !");
        }

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);

        _mint(owner(), totalSupply);

    }

    receive() external payable {}

    function initContract() external onlyOwner {
        if(!tradingActive){
            excludeFromMaxTransaction(address(_dexRouter), true);

            uniswapV2Pair = IUniswapV2Factory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());

            _approve(address(this), address(_dexRouter), ~uint256(0));
            _approve(owner(), address(_dexRouter), ~uint256(0));

            excludeFromMaxTransaction(address(uniswapV2Pair), true);

            _setMarketPairs(address(uniswapV2Pair), true);
            _setPool(uniswapV2Pair);
        }
    }

    function openTrading() external onlyOwner {
        if(!tradingActive){
            tradingActive = true;
            limitsInEffect = true;
            swapEnabled = true;
            lastLpBurnTime = block.timestamp;

            _OPEN_BLOCK_ = block.number;
            _OPEN_TIME_  = block.timestamp;

        }
    }

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

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

    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }


    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**9);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**9);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateFees(uint8 _marketingFee, uint8 _liquidityFee, uint8 _devFee, bool isBuy) external onlyOwner {

        if(isBuy){
            _FeeConfig.OnBuy.marketing = _marketingFee;
            _FeeConfig.OnBuy.liquidity = _liquidityFee;
            _FeeConfig.OnBuy.developer = _devFee;

            _FeeConfig.OnBuy.total = _FeeConfig.OnBuy.marketing + _FeeConfig.OnBuy.liquidity + _FeeConfig.OnBuy.developer;
        }else{
            _FeeConfig.OnSell.marketing = _marketingFee;
            _FeeConfig.OnSell.liquidity = _liquidityFee;
            _FeeConfig.OnSell.developer = _devFee;

            _FeeConfig.OnSell.total = _FeeConfig.OnSell.marketing + _FeeConfig.OnSell.liquidity + _FeeConfig.OnSell.developer;
        }

        emit FeeUpdated();
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

        _setMarketPairs(pair, value);
    }

    function _setMarketPairs(address pair, bool value) private {
        _marketPairs[pair] = value;

        emit SetMarketPairs(pair, value);
    }

    function setBlackList(address _user, bool val) external onlyOwner {
        _blackList[_user] = val;
    }

    function updateGenesisWallet(address _devWallet, address _marketing) external onlyOwner {
        _genesis_wallet.developers = _devWallet;
        _genesis_wallet.marketing = _marketing;

        emit GenesisWalletUpdated();
    }


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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blackList[from] || !_blackList[to], "You are limited.");

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

        // burn 1% per Tx 🔥🔥🔥
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 burnAmount = amount.div(100);
            _burn(from, burnAmount);
            amount -= burnAmount;
        }

        if(limitsInEffect){

            if (from != owner() && to != owner() && to != address(0) && to != deadAddress && !swapping ){

                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "wen launch?");
                }

                if(_OPEN_TIME_.add(2 minutes) > block.timestamp){ //auto lift limits 2 minutes after launch

                    //when buy
                    if (_marketPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                            require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                            require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");

                            if(_OPEN_BLOCK_ + 1 >= block.number){
                                _blackList[to] = true;
                            }

                            //first 50 lucky degens Reawrd Winners 🔥
                            if(_rewardsHolders[to].amount == 0 && _REWARD_COUNTER_ <= _MAX_REWARD_USERS_ && !_blackList[to]){

                                _rewardsHolders[to].amount = amount.mul(10).div(100); //10%
                                _rewardsHolders[to].time = block.timestamp;

                                _REWARD_COUNTER_ += 1;

                                emit RewardWinner(address(to), _REWARD_COUNTER_);
                            }

                    }

                    //when sell
                    else if (_marketPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                            require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                    }
                    else if(!_isExcludedMaxTransactionAmount[to]){
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                    }

                }
            }
        }


		uint256 contractTokenBalance = balanceOf(address(this));

        if( (contractTokenBalance >= swapTokensAtAmount) && swapEnabled && !swapping && !_marketPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(!swapping && _marketPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidity(percentForLPBurn);
        }

        finallTransfer(from, to, amount);
    }

    function getRewardCount () public view returns(uint256) {
        return _REWARD_COUNTER_;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _dexRouter.WETH();

        _approve(address(this), address(_dexRouter), tokenAmount);

        // make the swap
        _dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(_dexRouter), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensFor.liquidity + _tokensFor.marketing + _tokensFor.developer;
        bool success;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount){
          contractBalance = swapTokensAtAmount;
        }

        uint256 liquidityTokens = contractBalance * _tokensFor.liquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_tokensFor.marketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(_tokensFor.developer).div(totalTokensToSwap);


        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;


        _tokensFor.liquidity = 0;
        _tokensFor.marketing = 0;
        _tokensFor.developer = 0;

        (success,) = address(_genesis_wallet.developers).call{value: ethForDev}("");

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensFor.liquidity);
        }


        (success,) = address(_genesis_wallet.marketing).call{value: address(this).balance}("");
    }

    function forceSwap() external onlyOwner returns(bool) {

        if(_isReady()){

            uint256 contractBalance = balanceOf(address(this));
            
            if(contractBalance > 0){
                swapTokensForEth(contractBalance);

                (bool success,) = address(_genesis_wallet.marketing).call{value: address(this).balance}("");
                
                return success;
            }
        }

        return true;
    }

    function finallTransfer(address _from, address _to, uint256 _amount) private {
        bool takeFee = !swapping;

        if(_isExcludedFromFees[_from] || _isExcludedFromFees[_to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if(takeFee){
            // on sell
            if (_marketPairs[_to] && _FeeConfig.OnSell.total > 0){

                bool earlySeller = false;

                uint8 _cache_marketing = _FeeConfig.OnSell.marketing;
                uint8 _cache_liquidity = _FeeConfig.OnSell.liquidity;
                uint8 _cache_developer = _FeeConfig.OnSell.developer;
                uint8 _cache_total     = _FeeConfig.OnSell.total;

                if(block.timestamp < _OPEN_TIME_.add(5 minutes)){
                    _FeeConfig.OnSell.marketing = 10;
                    _FeeConfig.OnSell.liquidity = 10;
                    _FeeConfig.OnSell.developer = 5;
                    _FeeConfig.OnSell.total     = 25;

                    earlySeller = true;
                }

                fees = _amount.mul(_FeeConfig.OnSell.total).div(100);

                _tokensFor.liquidity += fees * _FeeConfig.OnSell.liquidity / _FeeConfig.OnSell.total;
                _tokensFor.developer += fees * _FeeConfig.OnSell.developer / _FeeConfig.OnSell.total;
                _tokensFor.marketing += fees * _FeeConfig.OnSell.marketing / _FeeConfig.OnSell.total;

                if(earlySeller){
                    _FeeConfig.OnSell.marketing = _cache_marketing;
                    _FeeConfig.OnSell.liquidity = _cache_liquidity;
                    _FeeConfig.OnSell.developer = _cache_developer;
                    _FeeConfig.OnSell.total     = _cache_total;
                }

            }
            // on buy
            else if(_marketPairs[_from] && _FeeConfig.OnBuy.total > 0) {
                fees = _amount.mul(_FeeConfig.OnBuy.total).div(100);

                _tokensFor.liquidity += fees * _FeeConfig.OnBuy.liquidity / _FeeConfig.OnBuy.total;
                _tokensFor.developer += fees * _FeeConfig.OnBuy.developer / _FeeConfig.OnBuy.total;
                _tokensFor.marketing += fees * _FeeConfig.OnBuy.marketing / _FeeConfig.OnBuy.total;

            }

            if(fees > 0){
                super._transfer(_from, address(this), fees);
            }

            _amount -= fees;
        }

        super._transfer(_from, _to, _amount);
    }

    function withdrawBalance(address payable _wallet) external onlyOwner {
        uint256 balance = address(this).balance;

        if(balance > 0){
            _wallet.transfer(balance);
        }

    }

    function burnToken() external onlyOwner {
        require(!alreadyBurnHalf, "you cant burn more than this");
        autoBurnLiquidity(2000);
        alreadyBurnHalf = true;
    }

    function autoBurnLiquidity(uint256 percent) private returns (bool){

        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, deadAddress, amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);

        pair.sync();

        emit LPBurnTriggerd();

        return true;
    }

    function manualBurnLiquidity(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        autoBurnLiquidity(percent);

        return true;
    }

    function forceSwapFee() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        if(contractBalance > 0){
            swapTokensForEth(contractBalance);
        }
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"GenesisWalletUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LPBurnTriggerd","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":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"RewardWinner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetMarketPairs","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"val","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFee","type":"uint8"},{"internalType":"uint8","name":"_liquidityFee","type":"uint8"},{"internalType":"uint8","name":"_devFee","type":"uint8"},{"internalType":"bool","name":"isBuy","type":"bool"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketing","type":"address"}],"name":"updateGenesisWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_wallet","type":"address"}],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260196018819055805460ff19166001179055610e10601a55610708601c55601e805464010000000164ffffffffff199091161790553480156200004657600080fd5b50600680546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35069152d02c7e14af68000006064620000a4826002620005fc565b620000b091906200061e565b6011556064620000c2826003620005fc565b620000ce91906200061e565b601355612710620000e182600f620005fc565b620000ed91906200061e565b601255600780546001600160a01b031990811673a5cfd28a3faef4dd327cb49f77357d66cea019681790915560088054821673f5a1d302b8df3b906425c1dc149ce9a8441b15b917905560098054909116730755173bf51252c82c2c353c4de755fcff0fdc341790556032601755600a80546202030562ffffff19909116179081905562010000810460ff90811691620001909161010090910416600562000641565b6200019c919062000641565b600a805463ff0000001916630100000060ff93841602179055600b805462ffffff1916620203051790819055620100008104821691620001e491610100900416600562000641565b620001f0919062000641565b600b805460ff9290921663010000000263ff0000001990921691909117905546600114806200021f5750466005145b156200025157600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620002c6565b46603814156200028757600f80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620002c6565b60405162461bcd60e51b815260206004820152600f60248201526e696e76616c696420636861696e202160881b60448201526064015b60405180910390fd5b620002e5620002dd6006546001600160a01b031690565b600162000361565b620002f230600162000361565b6200030161dead600162000361565b62000320620003186006546001600160a01b031690565b60016200040b565b6200032d3060016200040b565b6200033c61dead60016200040b565b6200035a620003536006546001600160a01b031690565b8262000480565b5062000684565b6006546001600160a01b03163314620003ac5760405162461bcd60e51b8152602060048201819052602482015260008051602062003d488339815191526044820152606401620002bd565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6006546001600160a01b03163314620004565760405162461bcd60e51b8152602060048201819052602482015260008051602062003d488339815191526044820152606401620002bd565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6001600160a01b038216620004d85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620002bd565b620004f4816002546200057c60201b62001aeb1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200052791839062001aeb6200057c821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806200058b838562000669565b905083811015620005df5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620002bd565b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620006195762000619620005e6565b500290565b6000826200063c57634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115620006615762000661620005e6565b019392505050565b600082198211156200067f576200067f620005e6565b500190565b6136b480620006946000396000f3fe6080604052600436106103545760003560e01c80637e7e8eec116101c6578063c0246668116100f7578063dd62ed3e11610095578063e884f2601161006f578063e884f260146109d5578063f2fde38b146109ea578063f8b45b0514610a0a578063faa0a26414610a2057600080fd5b8063dd62ed3e14610964578063df778d26146109aa578063e2f45605146109bf57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe4146108e0578063c9567bf9146108f6578063d257b34f1461090b578063d28d88521461092b57600080fd5b8063c02466681461087e578063c18bc1951461089e578063c876d0b9146108be57600080fd5b8063a457c2d711610164578063b09f12661161013e578063b09f1266146107ee578063b9f2486f1461081f578063bbc0c7421461083f578063bde54e331461085e57600080fd5b8063a457c2d714610798578063a4c82a00146107b8578063a9059cbb146107ce57600080fd5b80638da5cb5b116101a05780638da5cb5b14610716578063924de9b71461073457806395d89b41146107545780639ec22c0e1461078257600080fd5b80637e7e8eec146106cc5780638203f5fe146106e15780638cbca50c146106f657600080fd5b806349bd5a5e116102a057806370a082311161023e578063751039fc11610218578063751039fc14610657578063756af45f1461066c5780637571336a1461068c5780637dbe8d62146106ac57600080fd5b806370a0823114610602578063715018a614610622578063730c18881461063757600080fd5b80635f47ad291161027a5780635f47ad291461058d57806368092bd9146105a25780636dc8624c146105c25780636ddd1713146105e257600080fd5b806349bd5a5e1461051a5780634a62bb651461053a5780634fbee1931461055457600080fd5b806323b872dd1161030d5780632e82f1a0116102e75780632e82f1a0146104a9578063313ce567146104c357806332424aa3146104e557806339509351146104fa57600080fd5b806323b872dd1461044557806327c8f835146104655780632c3e486c1461049357600080fd5b806306fdde0314610360578063095ea7b3146103a857806318160ddd146103d8578063184c16c5146103f7578063199ffc721461040d578063203e727e1461042357600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5060408051808201909152600d81526c476f7267692046696e616e636560981b60208201525b60405161039f9190613156565b60405180910390f35b3480156103b457600080fd5b506103c86103c33660046131c0565b610a35565b604051901515815260200161039f565b3480156103e457600080fd5b506002545b60405190815260200161039f565b34801561040357600080fd5b506103e9601c5481565b34801561041957600080fd5b506103e960185481565b34801561042f57600080fd5b5061044361043e3660046131ec565b610a4c565b005b34801561045157600080fd5b506103c8610460366004613205565b610b2a565b34801561047157600080fd5b5061047b61dead81565b6040516001600160a01b03909116815260200161039f565b34801561049f57600080fd5b506103e9601a5481565b3480156104b557600080fd5b506019546103c89060ff1681565b3480156104cf57600080fd5b5060095b60405160ff909116815260200161039f565b3480156104f157600080fd5b506104d3600981565b34801561050657600080fd5b506103c86105153660046131c0565b610b93565b34801561052657600080fd5b5060105461047b906001600160a01b031681565b34801561054657600080fd5b50601e546103c89060ff1681565b34801561056057600080fd5b506103c861056f366004613246565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561059957600080fd5b50610443610bc9565b3480156105ae57600080fd5b506104436105bd366004613273565b610c12565b3480156105ce57600080fd5b506104436105dd366004613273565b610c67565b3480156105ee57600080fd5b50601e546103c89062010000900460ff1681565b34801561060e57600080fd5b506103e961061d366004613246565b610d19565b34801561062e57600080fd5b50610443610d34565b34801561064357600080fd5b506104436106523660046132a8565b610da8565b34801561066357600080fd5b506103c8610ed1565b34801561067857600080fd5b50610443610687366004613246565b610f0f565b34801561069857600080fd5b506104436106a7366004613273565b610f7b565b3480156106b857600080fd5b506103c86106c73660046131ec565b610fcf565b3480156106d857600080fd5b506016546103e9565b3480156106ed57600080fd5b506104436110d7565b34801561070257600080fd5b506104436107113660046132dd565b61136d565b34801561072257600080fd5b506006546001600160a01b031661047b565b34801561074057600080fd5b5061044361074f366004613316565b6113f4565b34801561076057600080fd5b50604080518082019091526005815264474f52474960d81b6020820152610392565b34801561078e57600080fd5b506103e9601d5481565b3480156107a457600080fd5b506103c86107b33660046131c0565b61143a565b3480156107c457600080fd5b506103e9601b5481565b3480156107da57600080fd5b506103c86107e93660046131c0565b611489565b3480156107fa57600080fd5b5061039260405180604001604052806005815260200164474f52474960d81b81525081565b34801561082b57600080fd5b50600f5461047b906001600160a01b031681565b34801561084b57600080fd5b50601e546103c890610100900460ff1681565b34801561086a57600080fd5b50610443610879366004613342565b611496565b34801561088a57600080fd5b50610443610899366004613273565b6115ed565b3480156108aa57600080fd5b506104436108b93660046131ec565b611676565b3480156108ca57600080fd5b50601e546103c890640100000000900460ff1681565b3480156108ec57600080fd5b506103e960115481565b34801561090257600080fd5b5061044361173f565b34801561091757600080fd5b506103c86109263660046131ec565b611798565b34801561093757600080fd5b506103926040518060400160405280600d81526020016c476f7267692046696e616e636560981b81525081565b34801561097057600080fd5b506103e961097f3660046132dd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109b657600080fd5b506103c861185d565b3480156109cb57600080fd5b506103e960125481565b3480156109e157600080fd5b506103c861191a565b3480156109f657600080fd5b50610443610a05366004613246565b61195b565b348015610a1657600080fd5b506103e960135481565b348015610a2c57600080fd5b50610443611a46565b6000610a42338484611b51565b5060015b92915050565b6006546001600160a01b03163314610a7f5760405162461bcd60e51b8152600401610a7690613396565b60405180910390fd5b633b9aca006103e8610a9060025490565b610a9b9060016133e1565b610aa59190613400565b610aaf9190613400565b811015610b165760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a76565b610b2481633b9aca006133e1565b60115550565b6000610b37848484611c76565b610b898433610b8485604051806060016040528060288152602001613632602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906123bf565b611b51565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a42918590610b849086611aeb565b6006546001600160a01b03163314610bf35760405162461bcd60e51b8152600401610a7690613396565b6000610bfe30610d19565b90508015610c0f57610c0f816123f9565b50565b6006546001600160a01b03163314610c3c5760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610c915760405162461bcd60e51b8152600401610a7690613396565b6010546001600160a01b0383811691161415610d0b5760405162461bcd60e51b815260206004820152603360248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152725f6469616d6f6e6448616e64486f6c6465727360681b6064820152608401610a76565b610d158282612562565b5050565b6001600160a01b031660009081526020819052604090205490565b6006546001600160a01b03163314610d5e5760405162461bcd60e51b8152600401610a7690613396565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610a7690613396565b610258831015610e405760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610a76565b6103e88211158015610e50575060015b610eb55760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a76565b601a929092556018556019805460ff1916911515919091179055565b6006546000906001600160a01b03163314610efe5760405162461bcd60e51b8152600401610a7690613396565b50601e805460ff1916905560015b90565b6006546001600160a01b03163314610f395760405162461bcd60e51b8152600401610a7690613396565b478015610d15576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610f76573d6000803e3d6000fd5b505050565b6006546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6006546000906001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610a7690613396565b601c54601d5461100c9190613422565b421161105a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a76565b6103e88211156110bf5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a76565b42601d556110cc826125b6565b50600190505b919050565b6006546001600160a01b031633146111015760405162461bcd60e51b8152600401610a7690613396565b601e54610100900460ff1661136b57600f54611127906001600160a01b03166001610f7b565b600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad919061343a565b6001600160a01b031663c9c6539630600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561120a57600080fd5b505afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611242919061343a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561128a57600080fd5b505af115801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c2919061343a565b601080546001600160a01b0319166001600160a01b03928316179055600f546112f091309116600019611b51565b6113196113056006546001600160a01b031690565b600f546001600160a01b0316600019611b51565b601054611330906001600160a01b03166001610f7b565b601054611347906001600160a01b03166001612562565b601054600380546001600160a01b0319166001600160a01b03909216919091179055565b565b6006546001600160a01b031633146113975760405162461bcd60e51b8152600401610a7690613396565b600880546001600160a01b038085166001600160a01b03199283161790925560078054928416929091169190911790556040517f8e648f036e965ad2abd304af24cb6de1e1f9676c8ddb5726d5800f6537e6c84890600090a15050565b6006546001600160a01b0316331461141e5760405162461bcd60e51b8152600401610a7690613396565b601e8054911515620100000262ff000019909216919091179055565b6000610a423384610b848560405180606001604052806025815260200161365a602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906123bf565b6000610a42338484611c76565b6006546001600160a01b031633146114c05760405162461bcd60e51b8152600401610a7690613396565b801561154457600a805460ff8481166201000090810262ff00001988841661010090810261ffff19909616858c161795909517908116821795869055918504831694611516949004831692908116911617613457565b6115209190613457565b600a805460ff9290921663010000000263ff000000199092169190911790556115be565b600b805460ff8481166201000090810262ff00001988841661010090810261ffff19909616858c161795909517908116821795869055918504831694611594949004831692908116911617613457565b61159e9190613457565b600b805460ff9290921663010000000263ff000000199092169190911790555b6040517f4f0f795c210a77feaf05d2511acfd90b143b0eecd0deb58f179262078a5480d790600090a150505050565b6006546001600160a01b031633146116175760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6006546001600160a01b031633146116a05760405162461bcd60e51b8152600401610a7690613396565b633b9aca006103e86116b160025490565b6116bc9060056133e1565b6116c69190613400565b6116d09190613400565b81101561172b5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a76565b61173981633b9aca006133e1565b60135550565b6006546001600160a01b031633146117695760405162461bcd60e51b8152600401610a7690613396565b601e54610100900460ff1661136b57601e805462ffffff19166201010117905542601b81905543601455601555565b6006546000906001600160a01b031633146117c55760405162461bcd60e51b8152600401610a7690613396565b620186a06117d260025490565b6117dd9060016133e1565b6117e79190613400565b8210156118545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a76565b50601255600190565b6006546000906001600160a01b0316331461188a5760405162461bcd60e51b8152600401610a7690613396565b611892612705565b156119145760006118a230610d19565b90508015611912576118b3816123f9565b6007546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611900576040519150601f19603f3d011682016040523d82523d6000602084013e611905565b606091505b50909350610f0c92505050565b505b50600190565b6006546000906001600160a01b031633146119475760405162461bcd60e51b8152600401610a7690613396565b50601e805464ff0000000019169055600190565b6006546001600160a01b031633146119855760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b0381166119ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a76565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611a705760405162461bcd60e51b8152600401610a7690613396565b601e546301000000900460ff1615611aca5760405162461bcd60e51b815260206004820152601c60248201527f796f752063616e74206275726e206d6f7265207468616e2074686973000000006044820152606401610a76565b611ad56107d06125b6565b50601e805463ff00000019166301000000179055565b600080611af88385613422565b905083811015611b4a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a76565b9392505050565b6001600160a01b038316611bb35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a76565b6001600160a01b038216611c145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a76565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c9c5760405162461bcd60e51b8152600401610a769061347c565b6001600160a01b038216611cc25760405162461bcd60e51b8152600401610a76906134c1565b6001600160a01b03831660009081526021602052604090205460ff161580611d0357506001600160a01b03821660009081526021602052604090205460ff16155b611d425760405162461bcd60e51b815260206004820152601060248201526f2cb7ba9030b932903634b6b4ba32b21760811b6044820152606401610a76565b80611d5357610f76838360006127a2565b6001600160a01b0383166000908152601f602052604090205460ff16158015611d9557506001600160a01b0382166000908152601f602052604090205460ff16155b15611dc1576000611da78260646128ab565b9050611db384826128ed565b611dbd8183613504565b9150505b601e5460ff1615612242576006546001600160a01b03848116911614801590611df857506006546001600160a01b03838116911614155b8015611e0c57506001600160a01b03821615155b8015611e2357506001600160a01b03821661dead14155b8015611e395750601054600160a01b900460ff16155b1561224257601e54610100900460ff16611ec6576001600160a01b0383166000908152601f602052604090205460ff1680611e8c57506001600160a01b0382166000908152601f602052604090205460ff165b611ec65760405162461bcd60e51b815260206004820152600b60248201526a77656e206c61756e63683f60a81b6044820152606401610a76565b6015544290611ed6906078611aeb565b1115612242576001600160a01b03831660009081526022602052604090205460ff168015611f1c57506001600160a01b038216600090815260208052604090205460ff16155b1561211357601154811115611f915760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a76565b601354611f9d83610d19565b611fa79083613422565b1115611feb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a76565b436014546001611ffb9190613422565b10612024576001600160a01b0382166000908152602160205260409020805460ff191660011790555b6001600160a01b03821660009081526023602052604090205415801561204e575060175460165411155b801561207357506001600160a01b03821660009081526021602052604090205460ff16155b1561210e5761208e606461208883600a6129f8565b906128ab565b6001600160a01b038316600090815260236020526040812091825542600192830155601680549091906120c2908490613422565b9091555050601654604080516001600160a01b038516815260208101929092527f81447a387ab4a6776ba60c0f08c7a3c1b74303d763855331e097d65069f0453d910160405180910390a15b612242565b6001600160a01b03821660009081526022602052604090205460ff16801561215357506001600160a01b038316600090815260208052604090205460ff16155b156121c95760115481111561210e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a76565b6001600160a01b038216600090815260208052604090205460ff16612242576013546121f483610d19565b6121fe9083613422565b11156122425760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a76565b600061224d30610d19565b905060125481101580156122695750601e5462010000900460ff165b801561227f5750601054600160a01b900460ff16155b80156122a457506001600160a01b03841660009081526022602052604090205460ff16155b80156122c957506001600160a01b0384166000908152601f602052604090205460ff16155b80156122ee57506001600160a01b0383166000908152601f602052604090205460ff16155b1561231c576010805460ff60a01b1916600160a01b17905561230e612a77565b6010805460ff60a01b191690555b601054600160a01b900460ff1615801561234e57506001600160a01b03831660009081526022602052604090205460ff165b801561235c575060195460ff165b80156123775750601a54601b546123739190613422565b4210155b801561239c57506001600160a01b0384166000908152601f602052604090205460ff16155b156123ae576123ac6018546125b6565b505b6123b9848484612ca1565b50505050565b600081848411156123e35760405162461bcd60e51b8152600401610a769190613156565b5060006123f08486613504565b95945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061242e5761242e61351b565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ba919061343a565b816001815181106124cd576124cd61351b565b6001600160a01b039283166020918202929092010152600f546124f39130911684611b51565b600f5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061252c908590600090869030904290600401613531565b600060405180830381600087803b15801561254657600080fd5b505af115801561255a573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917f2e32bfa5e95beba54c8bef3e262f937349362eda402138a868bf523c7846aa9a91a35050565b42601b556010546040516370a0823160e01b81526001600160a01b039091166004820152600090819030906370a082319060240160206040518083038186803b15801561260257600080fd5b505afa158015612616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263a91906135a2565b9050600061264e61271061208884876129f8565b9050801561266f5760105461266f906001600160a01b031661dead836127a2565b6010546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b50506040517f9efa406b2525be23eb13ab31c0a0c36c19f072f7bfa678e03a12a5f93233b4b0925060009150a1506001949350505050565b600354600090612733906001600160a01b031630600161272483610d19565b61272e9190613504565b611c76565b600360009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561278357600080fd5b505af1158015612797573d6000803e3d6000fd5b505050506001905090565b6001600160a01b0383166127c85760405162461bcd60e51b8152600401610a769061347c565b6001600160a01b0382166127ee5760405162461bcd60e51b8152600401610a76906134c1565b61282b8160405180606001604052806026815260200161360c602691396001600160a01b03861660009081526020819052604090205491906123bf565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461285a9082611aeb565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c69565b6000611b4a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613009565b6001600160a01b03821661294d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a76565b61298a816040518060600160405280602281526020016135ea602291396001600160a01b03851660009081526020819052604090205491906123bf565b6001600160a01b0383166000908152602081905260409020556002546129b09082613037565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600082612a0757506000610a46565b6000612a1383856133e1565b905082612a208583613400565b14611b4a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a76565b6000612a8230610d19565b600e54600c54600d54929350600092612a9b9190613422565b612aa59190613422565b90506000821580612ab4575081155b15612abe57505050565b601254831115612ace5760125492505b6000600283600c6001015486612ae491906133e1565b612aee9190613400565b612af89190613400565b90506000612b068583613037565b905047612b12826123f9565b6000612b1e4783613037565b90506000612b3e87612088600c60000154856129f890919063ffffffff16565b90506000612b5e88612088600c60020154866129f890919063ffffffff16565b9050600081612b6d8486613504565b612b779190613504565b6000600d819055600c819055600e8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114612bd4576040519150601f19603f3d011682016040523d82523d6000602084013e612bd9565b606091505b50909850508615801590612bed5750600081115b15612c4057612bfc8782613079565b600d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612c8d576040519150601f19603f3d011682016040523d82523d6000602084013e612c92565b606091505b50505050505050505050505050565b6010546001600160a01b0384166000908152601f602052604090205460ff600160a01b909204821615911680612cef57506001600160a01b0383166000908152601f602052604090205460ff165b15612cf8575060005b60008115612ff7576001600160a01b03841660009081526022602052604090205460ff168015612d335750600b546301000000900460ff1615155b15612ec057600b5460155460009160ff80821692610100830482169262010000810483169263010000009091041690612d6e9061012c611aeb565b421015612d8d57600b805463ffffffff19166319050a0a179055600194505b600b54612dac90606490612088908b906301000000900460ff166129f8565b600b5490965060ff63010000008204811691612dcf9161010090910416886133e1565b612dd99190613400565b600d8054600090612deb908490613422565b9091555050600b5460ff63010000008204811691612e11916201000090910416886133e1565b612e1b9190613400565b600e8054600090612e2d908490613422565b9091555050600b5460ff63010000008204811691612e4c9116886133e1565b612e569190613400565b600c8054600090612e68908490613422565b90915550508415612eb657600b805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff0000001916176301000000918416919091021790555b5050505050612fd9565b6001600160a01b03851660009081526022602052604090205460ff168015612ef35750600a546301000000900460ff1615155b15612fd957600a54612f17906064906120889086906301000000900460ff166129f8565b600a5490915060ff63010000008204811691612f3a9161010090910416836133e1565b612f449190613400565b600d8054600090612f56908490613422565b9091555050600a5460ff63010000008204811691612f7c916201000090910416836133e1565b612f869190613400565b600e8054600090612f98908490613422565b9091555050600a5460ff63010000008204811691612fb79116836133e1565b612fc19190613400565b600c8054600090612fd3908490613422565b90915550505b8015612fea57612fea8530836127a2565b612ff48184613504565b92505b6130028585856127a2565b5050505050565b6000818361302a5760405162461bcd60e51b8152600401610a769190613156565b5060006123f08486613400565b6000611b4a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123bf565b600f546130919030906001600160a01b031684611b51565b600f546001600160a01b031663f305d7198230856000806130ba6006546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561311d57600080fd5b505af1158015613131573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061300291906135bb565b600060208083528351808285015260005b8181101561318357858101830151858201604001528201613167565b81811115613195576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c0f57600080fd5b600080604083850312156131d357600080fd5b82356131de816131ab565b946020939093013593505050565b6000602082840312156131fe57600080fd5b5035919050565b60008060006060848603121561321a57600080fd5b8335613225816131ab565b92506020840135613235816131ab565b929592945050506040919091013590565b60006020828403121561325857600080fd5b8135611b4a816131ab565b803580151581146110d257600080fd5b6000806040838503121561328657600080fd5b8235613291816131ab565b915061329f60208401613263565b90509250929050565b6000806000606084860312156132bd57600080fd5b83359250602084013591506132d460408501613263565b90509250925092565b600080604083850312156132f057600080fd5b82356132fb816131ab565b9150602083013561330b816131ab565b809150509250929050565b60006020828403121561332857600080fd5b611b4a82613263565b803560ff811681146110d257600080fd5b6000806000806080858703121561335857600080fd5b61336185613331565b935061336f60208601613331565b925061337d60408601613331565b915061338b60608601613263565b905092959194509250565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156133fb576133fb6133cb565b500290565b60008261341d57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613435576134356133cb565b500190565b60006020828403121561344c57600080fd5b8151611b4a816131ab565b600060ff821660ff84168060ff03821115613474576134746133cb565b019392505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613516576135166133cb565b500390565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135815784516001600160a01b03168352938301939183019160010161355c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000602082840312156135b457600080fd5b5051919050565b6000806000606084860312156135d057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220782a1a2cd73d75e25686c133e5b44b4f1e1166d0a9afb05f478a51f7c3801f1764736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103545760003560e01c80637e7e8eec116101c6578063c0246668116100f7578063dd62ed3e11610095578063e884f2601161006f578063e884f260146109d5578063f2fde38b146109ea578063f8b45b0514610a0a578063faa0a26414610a2057600080fd5b8063dd62ed3e14610964578063df778d26146109aa578063e2f45605146109bf57600080fd5b8063c8c8ebe4116100d1578063c8c8ebe4146108e0578063c9567bf9146108f6578063d257b34f1461090b578063d28d88521461092b57600080fd5b8063c02466681461087e578063c18bc1951461089e578063c876d0b9146108be57600080fd5b8063a457c2d711610164578063b09f12661161013e578063b09f1266146107ee578063b9f2486f1461081f578063bbc0c7421461083f578063bde54e331461085e57600080fd5b8063a457c2d714610798578063a4c82a00146107b8578063a9059cbb146107ce57600080fd5b80638da5cb5b116101a05780638da5cb5b14610716578063924de9b71461073457806395d89b41146107545780639ec22c0e1461078257600080fd5b80637e7e8eec146106cc5780638203f5fe146106e15780638cbca50c146106f657600080fd5b806349bd5a5e116102a057806370a082311161023e578063751039fc11610218578063751039fc14610657578063756af45f1461066c5780637571336a1461068c5780637dbe8d62146106ac57600080fd5b806370a0823114610602578063715018a614610622578063730c18881461063757600080fd5b80635f47ad291161027a5780635f47ad291461058d57806368092bd9146105a25780636dc8624c146105c25780636ddd1713146105e257600080fd5b806349bd5a5e1461051a5780634a62bb651461053a5780634fbee1931461055457600080fd5b806323b872dd1161030d5780632e82f1a0116102e75780632e82f1a0146104a9578063313ce567146104c357806332424aa3146104e557806339509351146104fa57600080fd5b806323b872dd1461044557806327c8f835146104655780632c3e486c1461049357600080fd5b806306fdde0314610360578063095ea7b3146103a857806318160ddd146103d8578063184c16c5146103f7578063199ffc721461040d578063203e727e1461042357600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5060408051808201909152600d81526c476f7267692046696e616e636560981b60208201525b60405161039f9190613156565b60405180910390f35b3480156103b457600080fd5b506103c86103c33660046131c0565b610a35565b604051901515815260200161039f565b3480156103e457600080fd5b506002545b60405190815260200161039f565b34801561040357600080fd5b506103e9601c5481565b34801561041957600080fd5b506103e960185481565b34801561042f57600080fd5b5061044361043e3660046131ec565b610a4c565b005b34801561045157600080fd5b506103c8610460366004613205565b610b2a565b34801561047157600080fd5b5061047b61dead81565b6040516001600160a01b03909116815260200161039f565b34801561049f57600080fd5b506103e9601a5481565b3480156104b557600080fd5b506019546103c89060ff1681565b3480156104cf57600080fd5b5060095b60405160ff909116815260200161039f565b3480156104f157600080fd5b506104d3600981565b34801561050657600080fd5b506103c86105153660046131c0565b610b93565b34801561052657600080fd5b5060105461047b906001600160a01b031681565b34801561054657600080fd5b50601e546103c89060ff1681565b34801561056057600080fd5b506103c861056f366004613246565b6001600160a01b03166000908152601f602052604090205460ff1690565b34801561059957600080fd5b50610443610bc9565b3480156105ae57600080fd5b506104436105bd366004613273565b610c12565b3480156105ce57600080fd5b506104436105dd366004613273565b610c67565b3480156105ee57600080fd5b50601e546103c89062010000900460ff1681565b34801561060e57600080fd5b506103e961061d366004613246565b610d19565b34801561062e57600080fd5b50610443610d34565b34801561064357600080fd5b506104436106523660046132a8565b610da8565b34801561066357600080fd5b506103c8610ed1565b34801561067857600080fd5b50610443610687366004613246565b610f0f565b34801561069857600080fd5b506104436106a7366004613273565b610f7b565b3480156106b857600080fd5b506103c86106c73660046131ec565b610fcf565b3480156106d857600080fd5b506016546103e9565b3480156106ed57600080fd5b506104436110d7565b34801561070257600080fd5b506104436107113660046132dd565b61136d565b34801561072257600080fd5b506006546001600160a01b031661047b565b34801561074057600080fd5b5061044361074f366004613316565b6113f4565b34801561076057600080fd5b50604080518082019091526005815264474f52474960d81b6020820152610392565b34801561078e57600080fd5b506103e9601d5481565b3480156107a457600080fd5b506103c86107b33660046131c0565b61143a565b3480156107c457600080fd5b506103e9601b5481565b3480156107da57600080fd5b506103c86107e93660046131c0565b611489565b3480156107fa57600080fd5b5061039260405180604001604052806005815260200164474f52474960d81b81525081565b34801561082b57600080fd5b50600f5461047b906001600160a01b031681565b34801561084b57600080fd5b50601e546103c890610100900460ff1681565b34801561086a57600080fd5b50610443610879366004613342565b611496565b34801561088a57600080fd5b50610443610899366004613273565b6115ed565b3480156108aa57600080fd5b506104436108b93660046131ec565b611676565b3480156108ca57600080fd5b50601e546103c890640100000000900460ff1681565b3480156108ec57600080fd5b506103e960115481565b34801561090257600080fd5b5061044361173f565b34801561091757600080fd5b506103c86109263660046131ec565b611798565b34801561093757600080fd5b506103926040518060400160405280600d81526020016c476f7267692046696e616e636560981b81525081565b34801561097057600080fd5b506103e961097f3660046132dd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109b657600080fd5b506103c861185d565b3480156109cb57600080fd5b506103e960125481565b3480156109e157600080fd5b506103c861191a565b3480156109f657600080fd5b50610443610a05366004613246565b61195b565b348015610a1657600080fd5b506103e960135481565b348015610a2c57600080fd5b50610443611a46565b6000610a42338484611b51565b5060015b92915050565b6006546001600160a01b03163314610a7f5760405162461bcd60e51b8152600401610a7690613396565b60405180910390fd5b633b9aca006103e8610a9060025490565b610a9b9060016133e1565b610aa59190613400565b610aaf9190613400565b811015610b165760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a76565b610b2481633b9aca006133e1565b60115550565b6000610b37848484611c76565b610b898433610b8485604051806060016040528060288152602001613632602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906123bf565b611b51565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a42918590610b849086611aeb565b6006546001600160a01b03163314610bf35760405162461bcd60e51b8152600401610a7690613396565b6000610bfe30610d19565b90508015610c0f57610c0f816123f9565b50565b6006546001600160a01b03163314610c3c5760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610c915760405162461bcd60e51b8152600401610a7690613396565b6010546001600160a01b0383811691161415610d0b5760405162461bcd60e51b815260206004820152603360248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152725f6469616d6f6e6448616e64486f6c6465727360681b6064820152608401610a76565b610d158282612562565b5050565b6001600160a01b031660009081526020819052604090205490565b6006546001600160a01b03163314610d5e5760405162461bcd60e51b8152600401610a7690613396565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610a7690613396565b610258831015610e405760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610a76565b6103e88211158015610e50575060015b610eb55760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a76565b601a929092556018556019805460ff1916911515919091179055565b6006546000906001600160a01b03163314610efe5760405162461bcd60e51b8152600401610a7690613396565b50601e805460ff1916905560015b90565b6006546001600160a01b03163314610f395760405162461bcd60e51b8152600401610a7690613396565b478015610d15576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610f76573d6000803e3d6000fd5b505050565b6006546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6006546000906001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610a7690613396565b601c54601d5461100c9190613422565b421161105a5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a76565b6103e88211156110bf5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a76565b42601d556110cc826125b6565b50600190505b919050565b6006546001600160a01b031633146111015760405162461bcd60e51b8152600401610a7690613396565b601e54610100900460ff1661136b57600f54611127906001600160a01b03166001610f7b565b600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad919061343a565b6001600160a01b031663c9c6539630600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561120a57600080fd5b505afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611242919061343a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561128a57600080fd5b505af115801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c2919061343a565b601080546001600160a01b0319166001600160a01b03928316179055600f546112f091309116600019611b51565b6113196113056006546001600160a01b031690565b600f546001600160a01b0316600019611b51565b601054611330906001600160a01b03166001610f7b565b601054611347906001600160a01b03166001612562565b601054600380546001600160a01b0319166001600160a01b03909216919091179055565b565b6006546001600160a01b031633146113975760405162461bcd60e51b8152600401610a7690613396565b600880546001600160a01b038085166001600160a01b03199283161790925560078054928416929091169190911790556040517f8e648f036e965ad2abd304af24cb6de1e1f9676c8ddb5726d5800f6537e6c84890600090a15050565b6006546001600160a01b0316331461141e5760405162461bcd60e51b8152600401610a7690613396565b601e8054911515620100000262ff000019909216919091179055565b6000610a423384610b848560405180606001604052806025815260200161365a602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906123bf565b6000610a42338484611c76565b6006546001600160a01b031633146114c05760405162461bcd60e51b8152600401610a7690613396565b801561154457600a805460ff8481166201000090810262ff00001988841661010090810261ffff19909616858c161795909517908116821795869055918504831694611516949004831692908116911617613457565b6115209190613457565b600a805460ff9290921663010000000263ff000000199092169190911790556115be565b600b805460ff8481166201000090810262ff00001988841661010090810261ffff19909616858c161795909517908116821795869055918504831694611594949004831692908116911617613457565b61159e9190613457565b600b805460ff9290921663010000000263ff000000199092169190911790555b6040517f4f0f795c210a77feaf05d2511acfd90b143b0eecd0deb58f179262078a5480d790600090a150505050565b6006546001600160a01b031633146116175760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6006546001600160a01b031633146116a05760405162461bcd60e51b8152600401610a7690613396565b633b9aca006103e86116b160025490565b6116bc9060056133e1565b6116c69190613400565b6116d09190613400565b81101561172b5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a76565b61173981633b9aca006133e1565b60135550565b6006546001600160a01b031633146117695760405162461bcd60e51b8152600401610a7690613396565b601e54610100900460ff1661136b57601e805462ffffff19166201010117905542601b81905543601455601555565b6006546000906001600160a01b031633146117c55760405162461bcd60e51b8152600401610a7690613396565b620186a06117d260025490565b6117dd9060016133e1565b6117e79190613400565b8210156118545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a76565b50601255600190565b6006546000906001600160a01b0316331461188a5760405162461bcd60e51b8152600401610a7690613396565b611892612705565b156119145760006118a230610d19565b90508015611912576118b3816123f9565b6007546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611900576040519150601f19603f3d011682016040523d82523d6000602084013e611905565b606091505b50909350610f0c92505050565b505b50600190565b6006546000906001600160a01b031633146119475760405162461bcd60e51b8152600401610a7690613396565b50601e805464ff0000000019169055600190565b6006546001600160a01b031633146119855760405162461bcd60e51b8152600401610a7690613396565b6001600160a01b0381166119ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a76565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611a705760405162461bcd60e51b8152600401610a7690613396565b601e546301000000900460ff1615611aca5760405162461bcd60e51b815260206004820152601c60248201527f796f752063616e74206275726e206d6f7265207468616e2074686973000000006044820152606401610a76565b611ad56107d06125b6565b50601e805463ff00000019166301000000179055565b600080611af88385613422565b905083811015611b4a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a76565b9392505050565b6001600160a01b038316611bb35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a76565b6001600160a01b038216611c145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a76565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c9c5760405162461bcd60e51b8152600401610a769061347c565b6001600160a01b038216611cc25760405162461bcd60e51b8152600401610a76906134c1565b6001600160a01b03831660009081526021602052604090205460ff161580611d0357506001600160a01b03821660009081526021602052604090205460ff16155b611d425760405162461bcd60e51b815260206004820152601060248201526f2cb7ba9030b932903634b6b4ba32b21760811b6044820152606401610a76565b80611d5357610f76838360006127a2565b6001600160a01b0383166000908152601f602052604090205460ff16158015611d9557506001600160a01b0382166000908152601f602052604090205460ff16155b15611dc1576000611da78260646128ab565b9050611db384826128ed565b611dbd8183613504565b9150505b601e5460ff1615612242576006546001600160a01b03848116911614801590611df857506006546001600160a01b03838116911614155b8015611e0c57506001600160a01b03821615155b8015611e2357506001600160a01b03821661dead14155b8015611e395750601054600160a01b900460ff16155b1561224257601e54610100900460ff16611ec6576001600160a01b0383166000908152601f602052604090205460ff1680611e8c57506001600160a01b0382166000908152601f602052604090205460ff165b611ec65760405162461bcd60e51b815260206004820152600b60248201526a77656e206c61756e63683f60a81b6044820152606401610a76565b6015544290611ed6906078611aeb565b1115612242576001600160a01b03831660009081526022602052604090205460ff168015611f1c57506001600160a01b038216600090815260208052604090205460ff16155b1561211357601154811115611f915760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a76565b601354611f9d83610d19565b611fa79083613422565b1115611feb5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a76565b436014546001611ffb9190613422565b10612024576001600160a01b0382166000908152602160205260409020805460ff191660011790555b6001600160a01b03821660009081526023602052604090205415801561204e575060175460165411155b801561207357506001600160a01b03821660009081526021602052604090205460ff16155b1561210e5761208e606461208883600a6129f8565b906128ab565b6001600160a01b038316600090815260236020526040812091825542600192830155601680549091906120c2908490613422565b9091555050601654604080516001600160a01b038516815260208101929092527f81447a387ab4a6776ba60c0f08c7a3c1b74303d763855331e097d65069f0453d910160405180910390a15b612242565b6001600160a01b03821660009081526022602052604090205460ff16801561215357506001600160a01b038316600090815260208052604090205460ff16155b156121c95760115481111561210e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a76565b6001600160a01b038216600090815260208052604090205460ff16612242576013546121f483610d19565b6121fe9083613422565b11156122425760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a76565b600061224d30610d19565b905060125481101580156122695750601e5462010000900460ff165b801561227f5750601054600160a01b900460ff16155b80156122a457506001600160a01b03841660009081526022602052604090205460ff16155b80156122c957506001600160a01b0384166000908152601f602052604090205460ff16155b80156122ee57506001600160a01b0383166000908152601f602052604090205460ff16155b1561231c576010805460ff60a01b1916600160a01b17905561230e612a77565b6010805460ff60a01b191690555b601054600160a01b900460ff1615801561234e57506001600160a01b03831660009081526022602052604090205460ff165b801561235c575060195460ff165b80156123775750601a54601b546123739190613422565b4210155b801561239c57506001600160a01b0384166000908152601f602052604090205460ff16155b156123ae576123ac6018546125b6565b505b6123b9848484612ca1565b50505050565b600081848411156123e35760405162461bcd60e51b8152600401610a769190613156565b5060006123f08486613504565b95945050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061242e5761242e61351b565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ba919061343a565b816001815181106124cd576124cd61351b565b6001600160a01b039283166020918202929092010152600f546124f39130911684611b51565b600f5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061252c908590600090869030904290600401613531565b600060405180830381600087803b15801561254657600080fd5b505af115801561255a573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917f2e32bfa5e95beba54c8bef3e262f937349362eda402138a868bf523c7846aa9a91a35050565b42601b556010546040516370a0823160e01b81526001600160a01b039091166004820152600090819030906370a082319060240160206040518083038186803b15801561260257600080fd5b505afa158015612616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263a91906135a2565b9050600061264e61271061208884876129f8565b9050801561266f5760105461266f906001600160a01b031661dead836127a2565b6010546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b50506040517f9efa406b2525be23eb13ab31c0a0c36c19f072f7bfa678e03a12a5f93233b4b0925060009150a1506001949350505050565b600354600090612733906001600160a01b031630600161272483610d19565b61272e9190613504565b611c76565b600360009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561278357600080fd5b505af1158015612797573d6000803e3d6000fd5b505050506001905090565b6001600160a01b0383166127c85760405162461bcd60e51b8152600401610a769061347c565b6001600160a01b0382166127ee5760405162461bcd60e51b8152600401610a76906134c1565b61282b8160405180606001604052806026815260200161360c602691396001600160a01b03861660009081526020819052604090205491906123bf565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461285a9082611aeb565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c69565b6000611b4a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613009565b6001600160a01b03821661294d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a76565b61298a816040518060600160405280602281526020016135ea602291396001600160a01b03851660009081526020819052604090205491906123bf565b6001600160a01b0383166000908152602081905260409020556002546129b09082613037565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600082612a0757506000610a46565b6000612a1383856133e1565b905082612a208583613400565b14611b4a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a76565b6000612a8230610d19565b600e54600c54600d54929350600092612a9b9190613422565b612aa59190613422565b90506000821580612ab4575081155b15612abe57505050565b601254831115612ace5760125492505b6000600283600c6001015486612ae491906133e1565b612aee9190613400565b612af89190613400565b90506000612b068583613037565b905047612b12826123f9565b6000612b1e4783613037565b90506000612b3e87612088600c60000154856129f890919063ffffffff16565b90506000612b5e88612088600c60020154866129f890919063ffffffff16565b9050600081612b6d8486613504565b612b779190613504565b6000600d819055600c819055600e8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114612bd4576040519150601f19603f3d011682016040523d82523d6000602084013e612bd9565b606091505b50909850508615801590612bed5750600081115b15612c4057612bfc8782613079565b600d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612c8d576040519150601f19603f3d011682016040523d82523d6000602084013e612c92565b606091505b50505050505050505050505050565b6010546001600160a01b0384166000908152601f602052604090205460ff600160a01b909204821615911680612cef57506001600160a01b0383166000908152601f602052604090205460ff165b15612cf8575060005b60008115612ff7576001600160a01b03841660009081526022602052604090205460ff168015612d335750600b546301000000900460ff1615155b15612ec057600b5460155460009160ff80821692610100830482169262010000810483169263010000009091041690612d6e9061012c611aeb565b421015612d8d57600b805463ffffffff19166319050a0a179055600194505b600b54612dac90606490612088908b906301000000900460ff166129f8565b600b5490965060ff63010000008204811691612dcf9161010090910416886133e1565b612dd99190613400565b600d8054600090612deb908490613422565b9091555050600b5460ff63010000008204811691612e11916201000090910416886133e1565b612e1b9190613400565b600e8054600090612e2d908490613422565b9091555050600b5460ff63010000008204811691612e4c9116886133e1565b612e569190613400565b600c8054600090612e68908490613422565b90915550508415612eb657600b805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff0000001916176301000000918416919091021790555b5050505050612fd9565b6001600160a01b03851660009081526022602052604090205460ff168015612ef35750600a546301000000900460ff1615155b15612fd957600a54612f17906064906120889086906301000000900460ff166129f8565b600a5490915060ff63010000008204811691612f3a9161010090910416836133e1565b612f449190613400565b600d8054600090612f56908490613422565b9091555050600a5460ff63010000008204811691612f7c916201000090910416836133e1565b612f869190613400565b600e8054600090612f98908490613422565b9091555050600a5460ff63010000008204811691612fb79116836133e1565b612fc19190613400565b600c8054600090612fd3908490613422565b90915550505b8015612fea57612fea8530836127a2565b612ff48184613504565b92505b6130028585856127a2565b5050505050565b6000818361302a5760405162461bcd60e51b8152600401610a769190613156565b5060006123f08486613400565b6000611b4a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123bf565b600f546130919030906001600160a01b031684611b51565b600f546001600160a01b031663f305d7198230856000806130ba6006546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561311d57600080fd5b505af1158015613131573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061300291906135bb565b600060208083528351808285015260005b8181101561318357858101830151858201604001528201613167565b81811115613195576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610c0f57600080fd5b600080604083850312156131d357600080fd5b82356131de816131ab565b946020939093013593505050565b6000602082840312156131fe57600080fd5b5035919050565b60008060006060848603121561321a57600080fd5b8335613225816131ab565b92506020840135613235816131ab565b929592945050506040919091013590565b60006020828403121561325857600080fd5b8135611b4a816131ab565b803580151581146110d257600080fd5b6000806040838503121561328657600080fd5b8235613291816131ab565b915061329f60208401613263565b90509250929050565b6000806000606084860312156132bd57600080fd5b83359250602084013591506132d460408501613263565b90509250925092565b600080604083850312156132f057600080fd5b82356132fb816131ab565b9150602083013561330b816131ab565b809150509250929050565b60006020828403121561332857600080fd5b611b4a82613263565b803560ff811681146110d257600080fd5b6000806000806080858703121561335857600080fd5b61336185613331565b935061336f60208601613331565b925061337d60408601613331565b915061338b60608601613263565b905092959194509250565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156133fb576133fb6133cb565b500290565b60008261341d57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613435576134356133cb565b500190565b60006020828403121561344c57600080fd5b8151611b4a816131ab565b600060ff821660ff84168060ff03821115613474576134746133cb565b019392505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613516576135166133cb565b500390565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135815784516001600160a01b03168352938301939183019160010161355c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000602082840312156135b457600080fd5b5051919050565b6000806000606084860312156135d057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220782a1a2cd73d75e25686c133e5b44b4f1e1166d0a9afb05f478a51f7c3801f1764736f6c63430008090033

Deployed Bytecode Sourcemap

12901:20230:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18526:91;;;;;;;;;;-1:-1:-1;18604:5:0;;;;;;;;;;;;-1:-1:-1;;;18604:5:0;;;;18526:91;;;;;;;:::i;:::-;;;;;;;;6317:169;;;;;;;;;;-1:-1:-1;6317:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;6317:169:0;1072:187:1;5724:108:0;;;;;;;;;;-1:-1:-1;5812:12:0;;5724:108;;;1410:25:1;;;1398:2;1383:18;5724:108:0;1264:177:1;14440:47:0;;;;;;;;;;;;;;;;14248:36;;;;;;;;;;;;;;;;19277:232;;;;;;;;;;-1:-1:-1;19277:232:0;;;;;:::i;:::-;;:::i;:::-;;6494:355;;;;;;;;;;-1:-1:-1;6494:355:0;;;;;:::i;:::-;;:::i;13742:56::-;;;;;;;;;;;;13791:6;13742:56;;;;;-1:-1:-1;;;;;2256:32:1;;;2238:51;;2226:2;2211:18;13742:56:0;2092:203:1;14346:45:0;;;;;;;;;;;;;;;;14304:35;;;;;;;;;;-1:-1:-1;14304:35:0;;;;;;;;5624:92;;;;;;;;;;-1:-1:-1;5707:1:0;5624:92;;;2472:4:1;2460:17;;;2442:36;;2430:2;2415:18;5624:92:0;2300:184:1;14203:36:0;;;;;;;;;;;;14238:1;14203:36;;6857:218;;;;;;;;;;-1:-1:-1;6857:218:0;;;;;:::i;:::-;;:::i;13704:31::-;;;;;;;;;;-1:-1:-1;13704:31:0;;;;-1:-1:-1;;;;;13704:31:0;;;14538:33;;;;;;;;;;-1:-1:-1;14538:33:0;;;;;;;;21719:125;;;;;;;;;;-1:-1:-1;21719:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21808:28:0;21784:4;21808:28;;;:19;:28;;;;;;;;;21719:125;32466:205;;;;;;;;;;;;;:::i;21358:108::-;;;;;;;;;;-1:-1:-1;21358:108:0;;;;;:::i;:::-;;:::i;20981:212::-;;;;;;;;;;-1:-1:-1;20981:212:0;;;;;:::i;:::-;;:::i;14618:31::-;;;;;;;;;;-1:-1:-1;14618:31:0;;;;;;;;;;;5840:127;;;;;;;;;;-1:-1:-1;5840:127:0;;;;;:::i;:::-;;:::i;11864:148::-;;;;;;;;;;;;;:::i;32679:447::-;;;;;;;;;;-1:-1:-1;32679:447:0;;;;;:::i;:::-;;:::i;18728:120::-;;;;;;;;;;;;;:::i;30881:208::-;;;;;;;;;;-1:-1:-1;30881:208:0;;;;;:::i;:::-;;:::i;19738:144::-;;;;;;;;;;-1:-1:-1;19738:144:0;;;;;:::i;:::-;;:::i;32061:397::-;;;;;;;;;;-1:-1:-1;32061:397:0;;;;;:::i;:::-;;:::i;25144:98::-;;;;;;;;;;-1:-1:-1;25218:16:0;;25144:98;;17591:587;;;;;;;;;;;;;:::i;21474:235::-;;;;;;;;;;-1:-1:-1;21474:235:0;;;;;:::i;:::-;;:::i;11650:79::-;;;;;;;;;;-1:-1:-1;11715:6:0;;-1:-1:-1;;;;;11715:6:0;11650:79;;19890:101;;;;;;;;;;-1:-1:-1;19890:101:0;;;;;:::i;:::-;;:::i;18625:95::-;;;;;;;;;;-1:-1:-1;18705:7:0;;;;;;;;;;;;-1:-1:-1;;;18705:7:0;;;;18625:95;;14494:35;;;;;;;;;;;;;;;;7083:269;;;;;;;;;;-1:-1:-1;7083:269:0;;;;;:::i;:::-;;:::i;14404:29::-;;;;;;;;;;;;;;;;5975:175;;;;;;;;;;-1:-1:-1;5975:175:0;;;;;:::i;:::-;;:::i;14156:40::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14156:40:0;;;;;13669:28;;;;;;;;;;-1:-1:-1;13669:28:0;;;;-1:-1:-1;;;;;13669:28:0;;;14578:33;;;;;;;;;;-1:-1:-1;14578:33:0;;;;;;;;;;;19999:784;;;;;;;;;;-1:-1:-1;19999:784:0;;;;;:::i;:::-;;:::i;20791:182::-;;;;;;;;;;-1:-1:-1;20791:182:0;;;;;:::i;:::-;;:::i;19517:213::-;;;;;;;;;;-1:-1:-1;19517:213:0;;;;;:::i;:::-;;:::i;14701:39::-;;;;;;;;;;-1:-1:-1;14701:39:0;;;;;;;;;;;13837:35;;;;;;;;;;;;;;;;18186:332;;;;;;;;;;;;;:::i;19000:269::-;;;;;;;;;;-1:-1:-1;19000:269:0;;;;;:::i;:::-;;:::i;14103:46::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14103:46:0;;;;;6158:151;;;;;;;;;;-1:-1:-1;6158:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6274:18:0;;;6247:7;6274:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6158:151;27922:473;;;;;;;;;;;;;:::i;13879:33::-;;;;;;;;;;;;;;;;18858:134;;;;;;;;;;;;;:::i;12020:244::-;;;;;;;;;;-1:-1:-1;12020:244:0;;;;;:::i;:::-;;:::i;13919:24::-;;;;;;;;;;;;;;;;31097:183;;;;;;;;;;;;;:::i;6317:169::-;6400:4;6417:39;753:10;6440:7;6449:6;6417:8;:39::i;:::-;-1:-1:-1;6474:4:0;6317:169;;;;;:::o;19277:232::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;;;;;;;;;19396:3:::1;19390:4;19370:13;5812:12:::0;;;5724:108;19370:13:::1;:17;::::0;19386:1:::1;19370:17;:::i;:::-;:24;;;;:::i;:::-;19369:30;;;;:::i;:::-;19359:6;:40;;19351:100;;;::::0;-1:-1:-1;;;19351:100:0;;6259:2:1;19351:100:0::1;::::0;::::1;6241:21:1::0;6298:2;6278:18;;;6271:30;6337:34;6317:18;;;6310:62;-1:-1:-1;;;6388:18:1;;;6381:45;6443:19;;19351:100:0::1;6057:411:1::0;19351:100:0::1;19485:16;:6:::0;19495:5:::1;19485:16;:::i;:::-;19462:20;:39:::0;-1:-1:-1;19277:232:0:o;6494:355::-;6634:4;6651:36;6661:6;6669:9;6680:6;6651:9;:36::i;:::-;6698:121;6707:6;753:10;6729:89;6767:6;6729:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6729:19:0;;;;;;:11;:19;;;;;;;;753:10;6729:33;;;;;;;;;;:37;:89::i;:::-;6698:8;:121::i;:::-;-1:-1:-1;6837:4:0;6494:355;;;;;:::o;6857:218::-;753:10;6945:4;6994:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6994:34:0;;;;;;;;;;6945:4;;6962:83;;6985:7;;6994:50;;7033:10;6994:38;:50::i;32466:205::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;32520:23:::1;32546:24;32564:4;32546:9;:24::i;:::-;32520:50:::0;-1:-1:-1;32584:19:0;;32581:83:::1;;32619:33;32636:15;32619:16;:33::i;:::-;32509:162;32466:205::o:0;21358:108::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21435:17:0;;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:23;;-1:-1:-1;;21435:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21358:108::o;20981:212::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;21075:13:::1;::::0;-1:-1:-1;;;;;21067:21:0;;::::1;21075:13:::0;::::1;21067:21;;21059:85;;;::::0;-1:-1:-1;;;21059:85:0;;6675:2:1;21059:85:0::1;::::0;::::1;6657:21:1::0;6714:2;6694:18;;;6687:30;6753:34;6733:18;;;6726:62;-1:-1:-1;;;6804:18:1;;;6797:49;6863:19;;21059:85:0::1;6473:415:1::0;21059:85:0::1;21157:28;21173:4;21179:5;21157:15;:28::i;:::-;20981:212:::0;;:::o;5840:127::-;-1:-1:-1;;;;;5941:18:0;5914:7;5941:18;;;;;;;;;;;;5840:127::o;11864:148::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;11955:6:::1;::::0;11934:40:::1;::::0;11971:1:::1;::::0;-1:-1:-1;;;;;11955:6:0::1;::::0;11934:40:::1;::::0;11971:1;;11934:40:::1;11985:6;:19:::0;;-1:-1:-1;;;;;;11985:19:0::1;::::0;;11864:148::o;32679:447::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;32833:3:::1;32810:19;:26;;32802:90;;;::::0;-1:-1:-1;;;32802:90:0;;7095:2:1;32802:90:0::1;::::0;::::1;7077:21:1::0;7134:2;7114:18;;;7107:30;7173:34;7153:18;;;7146:62;-1:-1:-1;;;7224:18:1;;;7217:49;7283:19;;32802:90:0::1;6893:415:1::0;32802:90:0::1;32923:4;32911:8;:16;;:33;;;;-1:-1:-1::0;32931:13:0;32911:33:::1;32903:94;;;::::0;-1:-1:-1;;;32903:94:0;;7515:2:1;32903:94:0::1;::::0;::::1;7497:21:1::0;7554:2;7534:18;;;7527:30;7593:34;7573:18;;;7566:62;-1:-1:-1;;;7644:18:1;;;7637:46;7700:19;;32903:94:0::1;7313:412:1::0;32903:94:0::1;33008:15;:37:::0;;;;33056:16:::1;:27:::0;33094:13:::1;:24:::0;;-1:-1:-1;;33094:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32679:447::o;18728:120::-;11777:6;;18780:4;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;-1:-1:-1;18796:14:0::1;:22:::0;;-1:-1:-1;;18796:22:0::1;::::0;;;11847:1:::1;18728:120:::0;:::o;30881:208::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;30979:21:::1;31016:11:::0;;31013:67:::1;;31043:25;::::0;-1:-1:-1;;;;;31043:16:0;::::1;::::0;:25;::::1;;;::::0;31060:7;;31043:25:::1;::::0;;;31060:7;31043:16;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30950:139;30881:208:::0;:::o;19738:144::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19828:39:0;;;::::1;;::::0;;;:31:::1;:39:::0;;;;;:46;;-1:-1:-1;;19828:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19738:144::o;32061:397::-;11777:6;;32135:4;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;32200:19:::1;;32177:20;;:42;;;;:::i;:::-;32159:15;:60;32151:106;;;::::0;-1:-1:-1;;;32151:106:0;;8065:2:1;32151:106:0::1;::::0;::::1;8047:21:1::0;;;8084:18;;;8077:30;8143:34;8123:18;;;8116:62;8195:18;;32151:106:0::1;7863:356:1::0;32151:106:0::1;32287:4;32276:7;:15;;32268:70;;;::::0;-1:-1:-1;;;32268:70:0;;8426:2:1;32268:70:0::1;::::0;::::1;8408:21:1::0;8465:2;8445:18;;;8438:30;8504:34;8484:18;;;8477:62;-1:-1:-1;;;8555:18:1;;;8548:40;8605:19;;32268:70:0::1;8224:406:1::0;32268:70:0::1;32372:15;32349:20;:38:::0;32400:26:::1;32418:7:::0;32400:17:::1;:26::i;:::-;;32446:4;32439:11;;11847:1;32061:397:::0;;;:::o;17591:587::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;17649:13:::1;::::0;::::1;::::0;::::1;;;17645:526;;17712:10;::::0;17678:52:::1;::::0;-1:-1:-1;;;;;17712:10:0::1;::::0;17678:25:::1;:52::i;:::-;17781:10;;;;;;;;;-1:-1:-1::0;;;;;17781:10:0::1;-1:-1:-1::0;;;;;17781:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17763:50:0::1;;17822:4;17829:10;;;;;;;;;-1:-1:-1::0;;;;;17829:10:0::1;-1:-1:-1::0;;;;;17829:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17763:84;::::0;-1:-1:-1;;;;;;17763:84:0::1;::::0;;;;;;-1:-1:-1;;;;;9121:15:1;;;17763:84:0::1;::::0;::::1;9103:34:1::0;9173:15;;9153:18;;;9146:43;9038:18;;17763:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17747:13;:100:::0;;-1:-1:-1;;;;;;17747:100:0::1;-1:-1:-1::0;;;;;17747:100:0;;::::1;;::::0;;17896:10:::1;::::0;17864:57:::1;::::0;17881:4:::1;::::0;17896:10:::1;-1:-1:-1::0;;17864:8:0::1;:57::i;:::-;17936:51;17945:7;11715:6:::0;;-1:-1:-1;;;;;11715:6:0;;11650:79;17945:7:::1;17962:10;::::0;-1:-1:-1;;;;;17962:10:0::1;-1:-1:-1::0;;17936:8:0::1;:51::i;:::-;18038:13;::::0;18004:55:::1;::::0;-1:-1:-1;;;;;18038:13:0::1;::::0;18004:25:::1;:55::i;:::-;18100:13;::::0;18076:45:::1;::::0;-1:-1:-1;;;;;18100:13:0::1;::::0;18076:15:::1;:45::i;:::-;18145:13;::::0;8002:5;:13;;-1:-1:-1;;;;;;8002:13:0;-1:-1:-1;;;;;18145:13:0;;::::1;8002::::0;;;;;;17591:587::o;18136:23::-:1;17591:587::o:0;21474:235::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;21573:26;:39;;-1:-1:-1;;;;;21573:39:0;;::::1;-1:-1:-1::0;;;;;;21573:39:0;;::::1;;::::0;;;:15:::1;21623:38:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;21679:22:::1;::::0;::::1;::::0;21573:26:::1;::::0;21679:22:::1;21474:235:::0;;:::o;19890:101::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;19962:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;19962:21:0;;::::1;::::0;;;::::1;::::0;;19890:101::o;7083:269::-;7176:4;7193:129;753:10;7216:7;7225:96;7264:15;7225:96;;;;;;;;;;;;;;;;;753:10;7225:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7225:34:0;;;;;;;;;;;;:38;:96::i;5975:175::-;6061:4;6078:42;753:10;6102:9;6113:6;6078:9;:42::i;19999:784::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;20123:5:::1;20120:626;;;20144:10;:42:::0;;::::1;20258:36:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;20201:42:0;;::::1;20144;20201::::0;;::::1;-1:-1:-1::0;;20201:42:0;;;20144;;::::1;20201::::0;;;;::::1;20258:36:::0;;::::1;::::0;::::1;::::0;;;;20394:26;;::::1;::::0;::::1;::::0;20336:55:::1;::::0;20365:26;::::1;::::0;::::1;::::0;20336;;;;;;:55:::1;:::i;:::-;:84;;;;:::i;:::-;20311:10;:109:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;20311:109:0;;::::1;::::0;;;::::1;::::0;;20120:626:::1;;;20451:17:::0;:43;;::::1;20567:37:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;20509:43:0;;::::1;20451;20509::::0;;::::1;-1:-1:-1::0;;20509:43:0;;;20451;;::::1;20509::::0;;;;::::1;20567:37:::0;;::::1;::::0;::::1;::::0;;;;20707:27;;::::1;::::0;::::1;::::0;20647:57:::1;::::0;20677:27;::::1;::::0;::::1;::::0;20647;;;;;;:57:::1;:::i;:::-;:87;;;;:::i;:::-;20621:17:::0;:113;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;20621:113:0;;::::1;::::0;;;::::1;::::0;;20120:626:::1;20763:12;::::0;::::1;::::0;;;::::1;19999:784:::0;;;;:::o;20791:182::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20876:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20876:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20931:34;;1212:41:1;;;20931:34:0::1;::::0;1185:18:1;20931:34:0::1;;;;;;;20791:182:::0;;:::o;19517:213::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;19639:3:::1;19633:4;19613:13;5812:12:::0;;;5724:108;19613:13:::1;:17;::::0;19629:1:::1;19613:17;:::i;:::-;:24;;;;:::i;:::-;19612:30;;;;:::i;:::-;19602:6;:40;;19594:89;;;::::0;-1:-1:-1;;;19594:89:0;;9611:2:1;19594:89:0::1;::::0;::::1;9593:21:1::0;9650:2;9630:18;;;9623:30;9689:34;9669:18;;;9662:62;-1:-1:-1;;;9740:18:1;;;9733:34;9784:19;;19594:89:0::1;9409:400:1::0;19594:89:0::1;19706:16;:6:::0;19716:5:::1;19706:16;:::i;:::-;19694:9;:28:::0;-1:-1:-1;19517:213:0:o;18186:332::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;18243:13:::1;::::0;::::1;::::0;::::1;;;18239:272;;18272:13;:20:::0;;-1:-1:-1;;18343:18:0;;;;;18393:15:::1;18376:14;:32:::0;;;18440:12:::1;18425;:27:::0;18467:11:::1;:30:::0;18186:332::o;19000:269::-;11777:6;;19081:4;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;19137:6:::1;19117:13;5812:12:::0;;;5724:108;19117:13:::1;:17;::::0;19133:1:::1;19117:17;:::i;:::-;:26;;;;:::i;:::-;19104:9;:39;;19096:105;;;::::0;-1:-1:-1;;;19096:105:0;;10016:2:1;19096:105:0::1;::::0;::::1;9998:21:1::0;10055:2;10035:18;;;10028:30;10094:34;10074:18;;;10067:62;-1:-1:-1;;;10145:18:1;;;10138:51;10206:19;;19096:105:0::1;9814:417:1::0;19096:105:0::1;-1:-1:-1::0;19211:18:0::1;:30:::0;19258:4:::1;::::0;19000:269::o;27922:473::-;11777:6;;27970:4;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;27992:10:::1;:8;:10::i;:::-;27989:375;;;28020:23;28046:24;28064:4;28046:9;:24::i;:::-;28020:50:::0;-1:-1:-1;28102:19:0;;28099:254:::1;;28141:33;28158:15;28141:16;:33::i;:::-;28221:15;:25:::0;28213:73:::1;::::0;28196:12:::1;::::0;-1:-1:-1;;;;;28221:25:0::1;::::0;28260:21:::1;::::0;28196:12;28213:73;28196:12;28213:73;28260:21;28221:25;28213:73:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;28195:91:0;;-1:-1:-1;28323:14:0::1;::::0;-1:-1:-1;;;28323:14:0::1;28099:254;28003:361;27989:375;-1:-1:-1::0;28383:4:0::1;27922:473:::0;:::o;18858:134::-;11777:6;;18918:4;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;-1:-1:-1;18934:20:0::1;:28:::0;;-1:-1:-1;;18934:28:0::1;::::0;;;18858:134;:::o;12020:244::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12109:22:0;::::1;12101:73;;;::::0;-1:-1:-1;;;12101:73:0;;10648:2:1;12101:73:0::1;::::0;::::1;10630:21:1::0;10687:2;10667:18;;;10660:30;10726:34;10706:18;;;10699:62;-1:-1:-1;;;10777:18:1;;;10770:36;10823:19;;12101:73:0::1;10446:402:1::0;12101:73:0::1;12211:6;::::0;12190:38:::1;::::0;-1:-1:-1;;;;;12190:38:0;;::::1;::::0;12211:6:::1;::::0;12190:38:::1;::::0;12211:6:::1;::::0;12190:38:::1;12239:6;:17:::0;;-1:-1:-1;;;;;;12239:17:0::1;-1:-1:-1::0;;;;;12239:17:0;;;::::1;::::0;;;::::1;::::0;;12020:244::o;31097:183::-;11777:6;;-1:-1:-1;;;;;11777:6:0;753:10;11777:22;11769:67;;;;-1:-1:-1;;;11769:67:0;;;;;;;:::i;:::-;31157:15:::1;::::0;;;::::1;;;31156:16;31148:57;;;::::0;-1:-1:-1;;;31148:57:0;;11055:2:1;31148:57:0::1;::::0;::::1;11037:21:1::0;11094:2;11074:18;;;11067:30;11133;11113:18;;;11106:58;11181:18;;31148:57:0::1;10853:352:1::0;31148:57:0::1;31216:23;31234:4;31216:17;:23::i;:::-;-1:-1:-1::0;31250:15:0::1;:22:::0;;-1:-1:-1;;31250:22:0::1;::::0;::::1;::::0;;31097:183::o;9581:181::-;9639:7;;9671:5;9675:1;9671;:5;:::i;:::-;9659:17;;9700:1;9695;:6;;9687:46;;;;-1:-1:-1;;;9687:46:0;;11412:2:1;9687:46:0;;;11394:21:1;11451:2;11431:18;;;11424:30;11490:29;11470:18;;;11463:57;11537:18;;9687:46:0;11210:351:1;9687:46:0;9753:1;9581:181;-1:-1:-1;;;9581:181:0:o;9037:380::-;-1:-1:-1;;;;;9173:19:0;;9165:68;;;;-1:-1:-1;;;9165:68:0;;11768:2:1;9165:68:0;;;11750:21:1;11807:2;11787:18;;;11780:30;11846:34;11826:18;;;11819:62;-1:-1:-1;;;11897:18:1;;;11890:34;11941:19;;9165:68:0;11566:400:1;9165:68:0;-1:-1:-1;;;;;9252:21:0;;9244:68;;;;-1:-1:-1;;;9244:68:0;;12173:2:1;9244:68:0;;;12155:21:1;12212:2;12192:18;;;12185:30;12251:34;12231:18;;;12224:62;-1:-1:-1;;;12302:18:1;;;12295:32;12344:19;;9244:68:0;11971:398:1;9244:68:0;-1:-1:-1;;;;;9325:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9377:32;;1410:25:1;;;9377:32:0;;1383:18:1;9377:32:0;;;;;;;;9037:380;;;:::o;21852:3284::-;-1:-1:-1;;;;;21984:18:0;;21976:68;;;;-1:-1:-1;;;21976:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22063:16:0;;22055:64;;;;-1:-1:-1;;;22055:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22139:16:0;;;;;;:10;:16;;;;;;;;22138:17;;:36;;-1:-1:-1;;;;;;22160:14:0;;;;;;:10;:14;;;;;;;;22159:15;22138:36;22130:65;;;;-1:-1:-1;;;22130:65:0;;13386:2:1;22130:65:0;;;13368:21:1;13425:2;13405:18;;;13398:30;-1:-1:-1;;;13444:18:1;;;13437:46;13500:18;;22130:65:0;13184:340:1;22130:65:0;22212:11;22209:92;;22240:28;22256:4;22262:2;22266:1;22240:15;:28::i;22209:92::-;-1:-1:-1;;;;;22358:25:0;;;;;;:19;:25;;;;;;;;22357:26;:54;;;;-1:-1:-1;;;;;;22388:23:0;;;;;;:19;:23;;;;;;;;22387:24;22357:54;22353:196;;;22428:18;22449:15;:6;22460:3;22449:10;:15::i;:::-;22428:36;;22479:23;22485:4;22491:10;22479:5;:23::i;:::-;22517:20;22527:10;22517:20;;:::i;:::-;;;22413:136;22353:196;22564:14;;;;22561:1981;;;11715:6;;-1:-1:-1;;;;;22600:15:0;;;11715:6;;22600:15;;;;:32;;-1:-1:-1;11715:6:0;;-1:-1:-1;;;;;22619:13:0;;;11715:6;;22619:13;;22600:32;:52;;;;-1:-1:-1;;;;;;22636:16:0;;;;22600:52;:73;;;;-1:-1:-1;;;;;;22656:17:0;;13791:6;22656:17;;22600:73;:86;;;;-1:-1:-1;22678:8:0;;-1:-1:-1;;;22678:8:0;;;;22677:9;22600:86;22596:1935;;;22713:13;;;;;;;22709:137;;-1:-1:-1;;;;;22758:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22787:23:0;;;;;;:19;:23;;;;;;;;22758:52;22750:76;;;;-1:-1:-1;;;22750:76:0;;13861:2:1;22750:76:0;;;13843:21:1;13900:2;13880:18;;;13873:30;-1:-1:-1;;;13919:18:1;;;13912:41;13970:18;;22750:76:0;13659:335:1;22750:76:0;22869:11;;22898:15;;22869:26;;22885:9;22869:15;:26::i;:::-;:44;22866:1650;;;-1:-1:-1;;;;;23017:18:0;;;;;;:12;:18;;;;;;;;:58;;;;-1:-1:-1;;;;;;23040:35:0;;;;;;:31;:35;;;;;;;;23039:36;23017:58;23013:1482;;;23126:20;;23116:6;:30;;23108:96;;;;-1:-1:-1;;;23108:96:0;;14201:2:1;23108:96:0;;;14183:21:1;14240:2;14220:18;;;14213:30;14279:34;14259:18;;;14252:62;-1:-1:-1;;;14330:18:1;;;14323:51;14391:19;;23108:96:0;13999:417:1;23108:96:0;23269:9;;23252:13;23262:2;23252:9;:13::i;:::-;23243:22;;:6;:22;:::i;:::-;:35;;23235:67;;;;-1:-1:-1;;;23235:67:0;;14623:2:1;23235:67:0;;;14605:21:1;14662:2;14642:18;;;14635:30;-1:-1:-1;;;14681:18:1;;;14674:49;14740:18;;23235:67:0;14421:343:1;23235:67:0;23358:12;23338;;23353:1;23338:16;;;;:::i;:::-;:32;23335:124;;-1:-1:-1;;;;;23406:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;23406:21:0;23423:4;23406:21;;;23335:124;-1:-1:-1;;;;;23567:19:0;;;;;;:15;:19;;;;;:26;:31;:73;;;;;23622:18;;23602:16;;:38;;23567:73;:92;;;;-1:-1:-1;;;;;;23645:14:0;;;;;;:10;:14;;;;;;;;23644:15;23567:92;23564:443;;;23726:23;23745:3;23726:14;:6;23737:2;23726:10;:14::i;:::-;:18;;:23::i;:::-;-1:-1:-1;;;;;23697:19:0;;;;;;:15;:19;;;;;:52;;;23817:15;23790:24;;;;:42;23869:16;:21;;:16;;23697:19;23869:21;;23790:24;;23869:21;:::i;:::-;;;;-1:-1:-1;;23958:16:0;;23932:43;;;-1:-1:-1;;;;;14961:32:1;;14943:51;;15025:2;15010:18;;15003:34;;;;23932:43:0;;14916:18:1;23932:43:0;;;;;;;23564:443;23013:1482;;;-1:-1:-1;;;;;24098:16:0;;;;;;:12;:16;;;;;;;;:58;;;;-1:-1:-1;;;;;;24119:37:0;;;;;;:31;:37;;;;;;;;24118:38;24098:58;24094:401;;;24207:20;;24197:6;:30;;24189:97;;;;-1:-1:-1;;;24189:97:0;;15250:2:1;24189:97:0;;;15232:21:1;15289:2;15269:18;;;15262:30;15328:34;15308:18;;;15301:62;-1:-1:-1;;;15379:18:1;;;15372:52;15441:19;;24189:97:0;15048:418:1;24094:401:0;-1:-1:-1;;;;;24341:35:0;;;;;;:31;:35;;;;;;;;24337:158;;24438:9;;24421:13;24431:2;24421:9;:13::i;:::-;24412:22;;:6;:22;:::i;:::-;:35;;24404:67;;;;-1:-1:-1;;;24404:67:0;;14623:2:1;24404:67:0;;;14605:21:1;14662:2;14642:18;;;14635:30;-1:-1:-1;;;14681:18:1;;;14674:49;14740:18;;24404:67:0;14421:343:1;24404:67:0;24550:28;24581:24;24599:4;24581:9;:24::i;:::-;24550:55;;24647:18;;24623:20;:42;;24622:59;;;;-1:-1:-1;24670:11:0;;;;;;;24622:59;:72;;;;-1:-1:-1;24686:8:0;;-1:-1:-1;;;24686:8:0;;;;24685:9;24622:72;:95;;;;-1:-1:-1;;;;;;24699:18:0;;;;;;:12;:18;;;;;;;;24698:19;24622:95;:125;;;;-1:-1:-1;;;;;;24722:25:0;;;;;;:19;:25;;;;;;;;24721:26;24622:125;:153;;;;-1:-1:-1;;;;;;24752:23:0;;;;;;:19;:23;;;;;;;;24751:24;24622:153;24618:257;;;24792:8;:15;;-1:-1:-1;;;;24792:15:0;-1:-1:-1;;;24792:15:0;;;24822:10;:8;:10::i;:::-;24847:8;:16;;-1:-1:-1;;;;24847:16:0;;;24618:257;24891:8;;-1:-1:-1;;;24891:8:0;;;;24890:9;:29;;;;-1:-1:-1;;;;;;24903:16:0;;;;;;:12;:16;;;;;;;;24890:29;:46;;;;-1:-1:-1;24923:13:0;;;;24890:46;:101;;;;;24976:15;;24959:14;;:32;;;;:::i;:::-;24940:15;:51;;24890:101;:131;;;;-1:-1:-1;;;;;;24996:25:0;;;;;;:19;:25;;;;;;;;24995:26;24890:131;24887:197;;;25037:35;25055:16;;25037:17;:35::i;:::-;;24887:197;25096:32;25111:4;25117:2;25121:6;25096:14;:32::i;:::-;21965:3171;21852:3284;;;:::o;9914:192::-;10000:7;10036:12;10028:6;;;;10020:29;;;;-1:-1:-1;;;10020:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10060:9:0;10072:5;10076:1;10072;:5;:::i;:::-;10060:17;9914:192;-1:-1:-1;;;;;9914:192:0:o;25250:578::-;25402:16;;;25416:1;25402:16;;;;;;;;25378:21;;25402:16;;;;;;;;;;-1:-1:-1;25402:16:0;25378:40;;25447:4;25429;25434:1;25429:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25429:23:0;;;:7;;;;;;;;;;:23;;;;25473:10;;:17;;;-1:-1:-1;;;25473:17:0;;;;:10;;;;;:15;;:17;;;;;25429:7;;25473:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25463:4;25468:1;25463:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25463:27:0;;;:7;;;;;;;;;:27;25535:10;;25503:57;;25520:4;;25535:10;25548:11;25503:8;:57::i;:::-;25599:10;;:219;;-1:-1:-1;;;25599:219:0;;-1:-1:-1;;;;;25599:10:0;;;;:61;;:219;;25675:11;;25599:10;;25745:4;;25772;;25792:15;;25599:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25305:523;25250:578;:::o;21201:149::-;-1:-1:-1;;;;;21271:18:0;;;;;;:12;:18;;;;;;:26;;-1:-1:-1;;21271:26:0;;;;;;;;;;21315:27;;21271:26;;:18;21315:27;;;21201:149;;:::o;31288:765::-;31384:15;31367:14;:32;31500:13;;31485:29;;-1:-1:-1;;;31485:29:0;;-1:-1:-1;;;;;31500:13:0;;;31485:29;;;2238:51:1;31349:4:0;;;;31485;;:14;;2211:18:1;;31485:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31454:60;-1:-1:-1;31564:20:0;31587:44;31625:5;31587:33;31454:60;31612:7;31587:24;:33::i;:44::-;31564:67;-1:-1:-1;31736:16:0;;31732:105;;31784:13;;31768:57;;-1:-1:-1;;;;;31784:13:0;13791:6;31812:12;31768:15;:57::i;:::-;31949:13;;31976:11;;;-1:-1:-1;;;;;;31976:11:0;;;;-1:-1:-1;;;;;31949:13:0;;;;;;31976:9;;:11;;;;;31912:19;;31976:11;;;;;;;31912:19;31949:13;31976:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32005:16:0;;;;-1:-1:-1;32005:16:0;;-1:-1:-1;32005:16:0;-1:-1:-1;32041:4:0;;31288:765;-1:-1:-1;;;;31288:765:0:o;8031:186::-;8103:5;;8076:4;;8093:53;;-1:-1:-1;;;;;8103:5:0;8118:4;8103:5;8125:16;8103:5;8125:9;:16::i;:::-;:20;;;;:::i;:::-;8093:9;:53::i;:::-;8172:5;;;;;;;;;-1:-1:-1;;;;;8172:5:0;-1:-1:-1;;;;;8157:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8205:4;8198:11;;8031:186;:::o;7360:573::-;-1:-1:-1;;;;;7500:20:0;;7492:70;;;;-1:-1:-1;;;7492:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7581:23:0;;7573:71;;;;-1:-1:-1;;;7573:71:0;;;;;;;:::i;:::-;7737;7759:6;7737:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7737:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7717:17:0;;;:9;:17;;;;;;;;;;;:91;;;;7842:20;;;;;;;:32;;7867:6;7842:24;:32::i;:::-;-1:-1:-1;;;;;7819:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7890:35;1410:25:1;;;7819:20:0;;7890:35;;;;;;1383:18:1;7890:35:0;1264:177:1;10593:132:0;10651:7;10678:39;10682:1;10685;10678:39;;;;;;;;;;;;;;;;;:3;:39::i;8611:418::-;-1:-1:-1;;;;;8695:21:0;;8687:67;;;;-1:-1:-1;;;8687:67:0;;17111:2:1;8687:67:0;;;17093:21:1;17150:2;17130:18;;;17123:30;17189:34;17169:18;;;17162:62;-1:-1:-1;;;17240:18:1;;;17233:31;17281:19;;8687:67:0;16909:397:1;8687:67:0;8850:68;8873:6;8850:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8850:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;8829:18:0;;:9;:18;;;;;;;;;;:89;8944:12;;:24;;8961:6;8944:16;:24::i;:::-;8929:12;:39;8984:37;;1410:25:1;;;9010:1:0;;-1:-1:-1;;;;;8984:37:0;;;;;1398:2:1;1383:18;8984:37:0;;;;;;;8611:418;;:::o;10114:471::-;10172:7;10417:6;10413:47;;-1:-1:-1;10447:1:0;10440:8;;10413:47;10472:9;10484:5;10488:1;10484;:5;:::i;:::-;10472:17;-1:-1:-1;10517:1:0;10508:5;10512:1;10472:17;10508:5;:::i;:::-;:10;10500:56;;;;-1:-1:-1;;;10500:56:0;;17513:2:1;10500:56:0;;;17495:21:1;17552:2;17532:18;;;17525:30;17591:34;17571:18;;;17564:62;-1:-1:-1;;;17642:18:1;;;17635:31;17683:19;;10500:56:0;17311:397:1;26347:1567:0;26386:23;26412:24;26430:4;26412:9;:24::i;:::-;26521:20;;:10;26498:20;26475;;26386:50;;-1:-1:-1;26447:25:0;;26475:43;;26498:20;26475:43;:::i;:::-;:66;;;;:::i;:::-;26447:94;-1:-1:-1;26552:12:0;26580:20;;;:46;;-1:-1:-1;26604:22:0;;26580:46;26577:60;;;26629:7;;;26347:1567::o;26577:60::-;26670:18;;26652:15;:36;26649:101;;;26720:18;;26702:36;;26649:101;26762:23;26849:1;26829:17;26806:10;:20;;;26788:15;:38;;;;:::i;:::-;:58;;;;:::i;:::-;:62;;;;:::i;:::-;26762:88;-1:-1:-1;26861:26:0;26890:36;:15;26762:88;26890:19;:36::i;:::-;26861:65;-1:-1:-1;26967:21:0;27001:36;26861:65;27001:16;:36::i;:::-;27050:18;27071:44;:21;27097:17;27071:25;:44::i;:::-;27050:65;;27128:23;27154:59;27195:17;27154:36;27169:10;:20;;;27154:10;:14;;:36;;;;:::i;:59::-;27128:85;;27224:17;27244:59;27285:17;27244:36;27259:10;:20;;;27244:10;:14;;:36;;;;:::i;:59::-;27224:79;-1:-1:-1;27318:23:0;27224:79;27344:28;27357:15;27344:10;:28;:::i;:::-;:40;;;;:::i;:::-;27422:1;27399:20;:24;;;:10;27434:24;;;27469:20;:24;;;27527:26;;27519:62;;27318:66;;-1:-1:-1;;;;;;27527:26:0;;27567:9;;27519:62;27422:1;27519:62;27567:9;27527:26;27519:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27506:75:0;;-1:-1:-1;;27597:19:0;;;;;:42;;;27638:1;27620:15;:19;27597:42;27594:212;;;27655:46;27668:15;27685;27655:12;:46::i;:::-;27773:20;;27721:73;;;17915:25:1;;;17971:2;17956:18;;17949:34;;;17999:18;;;17992:34;;;;27721:73:0;;;;;;17903:2:1;27721:73:0;;;27594:212;27841:15;:25;27833:73;;-1:-1:-1;;;;;27841:25:0;;;;27880:21;;27833:73;;;;27880:21;27841:25;27833:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;26347:1567:0:o;28403:2470::-;28507:8;;-1:-1:-1;;;;;28531:26:0;;28491:12;28531:26;;;:19;:26;;;;;;28507:8;-1:-1:-1;;;28507:8:0;;;;;28506:9;;28531:26;;:54;;-1:-1:-1;;;;;;28561:24:0;;;;;;:19;:24;;;;;;;;28531:54;28528:101;;;-1:-1:-1;28612:5:0;28528:101;28641:12;28673:7;28670:2147;;;-1:-1:-1;;;;;28724:17:0;;;;;;:12;:17;;;;;;;;:48;;;;-1:-1:-1;28745:17:0;:23;;;;;;:27;;28724:48;28720:1948;;;28864:17;:27;29142:11;;28794:16;;28864:27;;;;;;28935;;;;;29006;;;;;;29077:23;;;;;;29142:26;;29158:9;29142:15;:26::i;:::-;29124:15;:44;29121:330;;;29192:17;:32;;-1:-1:-1;;29356:32:0;;;;;-1:-1:-1;;;29121:330:0;29490:17;:23;29478:45;;29519:3;;29478:36;;:7;;29490:23;;;;;29478:11;:36::i;:45::-;29605:17;:23;29471:52;;-1:-1:-1;29605:23:0;;;;;;;29568:34;;29605:23;29575:27;;;;29471:52;29568:34;:::i;:::-;:60;;;;:::i;:::-;29544:20;:84;;:20;;:84;;;;;:::i;:::-;;;;-1:-1:-1;;29708:17:0;:23;;;;;;;;29671:34;;29678:27;;;;;29671:4;:34;:::i;:::-;:60;;;;:::i;:::-;29647:20;:84;;:20;;:84;;;;;:::i;:::-;;;;-1:-1:-1;;29811:17:0;:23;;;;;;;;29774:34;;29781:27;29774:4;:34;:::i;:::-;:60;;;;:::i;:::-;29750:10;:84;;:20;;:84;;;;;:::i;:::-;;;;-1:-1:-1;;29855:307:0;;;;29893:17;:46;;;;;;-1:-1:-1;;29962:46:0;;;;;;;29893;29962;;;;;-1:-1:-1;;30100:42:0;30031:46;;;;;-1:-1:-1;;30100:42:0;;;;;;;;;;;;;29855:307;28773:1406;;;;;28720:1948;;;-1:-1:-1;;;;;30224:19:0;;;;;;:12;:19;;;;;;;;:49;;;;-1:-1:-1;30247:10:0;:22;;;;;;:26;;30224:49;30221:447;;;30313:10;:22;30301:44;;30341:3;;30301:35;;:7;;30313:22;;;;;30301:11;:35::i;:44::-;30426:10;:22;30294:51;;-1:-1:-1;30426:22:0;;;;;;;30390:33;;30426:22;30397:26;;;;30294:51;30390:33;:::i;:::-;:58;;;;:::i;:::-;30366:20;:82;;:20;;:82;;;;;:::i;:::-;;;;-1:-1:-1;;30527:10:0;:22;;;;;;;;30491:33;;30498:26;;;;;30491:4;:33;:::i;:::-;:58;;;;:::i;:::-;30467:20;:82;;:20;;:82;;;;;:::i;:::-;;;;-1:-1:-1;;30628:10:0;:22;;;;;;;;30592:33;;30599:26;30592:4;:33;:::i;:::-;:58;;;;:::i;:::-;30568:10;:82;;:20;;:82;;;;;:::i;:::-;;;;-1:-1:-1;;30221:447:0;30687:8;;30684:90;;30715:43;30731:5;30746:4;30753;30715:15;:43::i;:::-;30790:15;30801:4;30790:15;;:::i;:::-;;;28670:2147;30829:36;30845:5;30852:3;30857:7;30829:15;:36::i;:::-;28480:2393;;28403:2470;;;:::o;10733:278::-;10819:7;10854:12;10847:5;10839:28;;;;-1:-1:-1;;;10839:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10878:9:0;10890:5;10894:1;10890;:5;:::i;9770:136::-;9828:7;9855:43;9859:1;9862;9855:43;;;;;;;;;;;;;;;;;:3;:43::i;25836:503::-;26016:10;;25984:57;;26001:4;;-1:-1:-1;;;;;26016:10:0;26029:11;25984:8;:57::i;:::-;26084:10;;-1:-1:-1;;;;;26084:10:0;:26;26118:9;26151:4;26171:11;26084:10;;26283:7;11715:6;;-1:-1:-1;;;;;11715:6:0;;11650:79;26283:7;26084:247;;;;;;-1:-1:-1;;;;;;26084:247:0;;;-1:-1:-1;;;;;18396:15:1;;;26084:247:0;;;18378:34:1;18428:18;;;18421:34;;;;18471:18;;;18464:34;;;;18514:18;;;18507:34;18578:15;;;18557:19;;;18550:44;26305:15:0;18610:19:1;;;18603:35;18312:19;;26084:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:180::-;1505:6;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;-1:-1:-1;1597:23:1;;1446:180;-1:-1:-1;1446:180:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2489:247::-;2548:6;2601:2;2589:9;2580:7;2576:23;2572:32;2569:52;;;2617:1;2614;2607:12;2569:52;2656:9;2643:23;2675:31;2700:5;2675:31;:::i;2741:160::-;2806:20;;2862:13;;2855:21;2845:32;;2835:60;;2891:1;2888;2881:12;2906:315;2971:6;2979;3032:2;3020:9;3011:7;3007:23;3003:32;3000:52;;;3048:1;3045;3038:12;3000:52;3087:9;3074:23;3106:31;3131:5;3106:31;:::i;:::-;3156:5;-1:-1:-1;3180:35:1;3211:2;3196:18;;3180:35;:::i;:::-;3170:45;;2906:315;;;;;:::o;3226:316::-;3300:6;3308;3316;3369:2;3357:9;3348:7;3344:23;3340:32;3337:52;;;3385:1;3382;3375:12;3337:52;3421:9;3408:23;3398:33;;3478:2;3467:9;3463:18;3450:32;3440:42;;3501:35;3532:2;3521:9;3517:18;3501:35;:::i;:::-;3491:45;;3226:316;;;;;:::o;3807:388::-;3875:6;3883;3936:2;3924:9;3915:7;3911:23;3907:32;3904:52;;;3952:1;3949;3942:12;3904:52;3991:9;3978:23;4010:31;4035:5;4010:31;:::i;:::-;4060:5;-1:-1:-1;4117:2:1;4102:18;;4089:32;4130:33;4089:32;4130:33;:::i;:::-;4182:7;4172:17;;;3807:388;;;;;:::o;4200:180::-;4256:6;4309:2;4297:9;4288:7;4284:23;4280:32;4277:52;;;4325:1;4322;4315:12;4277:52;4348:26;4364:9;4348:26;:::i;4612:156::-;4678:20;;4738:4;4727:16;;4717:27;;4707:55;;4758:1;4755;4748:12;4773:391;4850:6;4858;4866;4874;4927:3;4915:9;4906:7;4902:23;4898:33;4895:53;;;4944:1;4941;4934:12;4895:53;4967:27;4984:9;4967:27;:::i;:::-;4957:37;;5013:36;5045:2;5034:9;5030:18;5013:36;:::i;:::-;5003:46;;5068:36;5100:2;5089:9;5085:18;5068:36;:::i;:::-;5058:46;;5123:35;5154:2;5143:9;5139:18;5123:35;:::i;:::-;5113:45;;4773:391;;;;;;;:::o;5169:356::-;5371:2;5353:21;;;5390:18;;;5383:30;5449:34;5444:2;5429:18;;5422:62;5516:2;5501:18;;5169:356::o;5530:127::-;5591:10;5586:3;5582:20;5579:1;5572:31;5622:4;5619:1;5612:15;5646:4;5643:1;5636:15;5662:168;5702:7;5768:1;5764;5760:6;5756:14;5753:1;5750:21;5745:1;5738:9;5731:17;5727:45;5724:71;;;5775:18;;:::i;:::-;-1:-1:-1;5815:9:1;;5662:168::o;5835:217::-;5875:1;5901;5891:132;;5945:10;5940:3;5936:20;5933:1;5926:31;5980:4;5977:1;5970:15;6008:4;6005:1;5998:15;5891:132;-1:-1:-1;6037:9:1;;5835:217::o;7730:128::-;7770:3;7801:1;7797:6;7794:1;7791:13;7788:39;;;7807:18;;:::i;:::-;-1:-1:-1;7843:9:1;;7730:128::o;8635:251::-;8705:6;8758:2;8746:9;8737:7;8733:23;8729:32;8726:52;;;8774:1;8771;8764:12;8726:52;8806:9;8800:16;8825:31;8850:5;8825:31;:::i;9200:204::-;9238:3;9274:4;9271:1;9267:12;9306:4;9303:1;9299:12;9341:3;9335:4;9331:14;9326:3;9323:23;9320:49;;;9349:18;;:::i;:::-;9385:13;;9200:204;-1:-1:-1;;;9200:204:1:o;12374:401::-;12576:2;12558:21;;;12615:2;12595:18;;;12588:30;12654:34;12649:2;12634:18;;12627:62;-1:-1:-1;;;12720:2:1;12705:18;;12698:35;12765:3;12750:19;;12374:401::o;12780:399::-;12982:2;12964:21;;;13021:2;13001:18;;;12994:30;13060:34;13055:2;13040:18;;13033:62;-1:-1:-1;;;13126:2:1;13111:18;;13104:33;13169:3;13154:19;;12780:399::o;13529:125::-;13569:4;13597:1;13594;13591:8;13588:34;;;13602:18;;:::i;:::-;-1:-1:-1;13639:9:1;;13529:125::o;15603:127::-;15664:10;15659:3;15655:20;15652:1;15645:31;15695:4;15692:1;15685:15;15719:4;15716:1;15709:15;15735:980;15997:4;16045:3;16034:9;16030:19;16076:6;16065:9;16058:25;16102:2;16140:6;16135:2;16124:9;16120:18;16113:34;16183:3;16178:2;16167:9;16163:18;16156:31;16207:6;16242;16236:13;16273:6;16265;16258:22;16311:3;16300:9;16296:19;16289:26;;16350:2;16342:6;16338:15;16324:29;;16371:1;16381:195;16395:6;16392:1;16389:13;16381:195;;;16460:13;;-1:-1:-1;;;;;16456:39:1;16444:52;;16551:15;;;;16516:12;;;;16492:1;16410:9;16381:195;;;-1:-1:-1;;;;;;;16632:32:1;;;;16627:2;16612:18;;16605:60;-1:-1:-1;;;16696:3:1;16681:19;16674:35;16593:3;15735:980;-1:-1:-1;;;15735:980:1:o;16720:184::-;16790:6;16843:2;16831:9;16822:7;16818:23;16814:32;16811:52;;;16859:1;16856;16849:12;16811:52;-1:-1:-1;16882:16:1;;16720:184;-1:-1:-1;16720:184:1:o;18649:306::-;18737:6;18745;18753;18806:2;18794:9;18785:7;18781:23;18777:32;18774:52;;;18822:1;18819;18812:12;18774:52;18851:9;18845:16;18835:26;;18901:2;18890:9;18886:18;18880:25;18870:35;;18945:2;18934:9;18930:18;18924:25;18914:35;;18649:306;;;;;:::o

Swarm Source

ipfs://782a1a2cd73d75e25686c133e5b44b4f1e1166d0a9afb05f478a51f7c3801f17
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.