ETH Price: $2,529.30 (+0.94%)

Contract

0x3396dFc9F432f09A96F2B9d427538EAe7a80258b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve164718732023-01-23 20:24:11583 days ago1674505451IN
0x3396dFc9...e7a80258b
0 ETH0.0010008921.49405078
Approve163614482023-01-08 10:23:11599 days ago1673173391IN
0x3396dFc9...e7a80258b
0 ETH0.0006803314.59125754
Approve161930462022-12-15 22:21:59622 days ago1671142919IN
0x3396dFc9...e7a80258b
0 ETH0.0008858919
Approve161372512022-12-08 3:17:11630 days ago1670469431IN
0x3396dFc9...e7a80258b
0 ETH0.0006656814.27705069
Set Taxes161315532022-12-07 8:08:11631 days ago1670400491IN
0x3396dFc9...e7a80258b
0 ETH0.0008040413.94600139
Set Taxes161315312022-12-07 8:03:11631 days ago1670400191IN
0x3396dFc9...e7a80258b
0 ETH0.0005062214.16328442
Set Taxes161312132022-12-07 6:57:47631 days ago1670396267IN
0x3396dFc9...e7a80258b
0 ETH0.0008253814.31620063
Set Taxes161312042022-12-07 6:55:59631 days ago1670396159IN
0x3396dFc9...e7a80258b
0 ETH0.0006244316.20138558
Approve161308022022-12-07 5:31:23631 days ago1670391083IN
0x3396dFc9...e7a80258b
0 ETH0.0010346622.19071778
Approve161229742022-12-06 3:10:23632 days ago1670296223IN
0x3396dFc9...e7a80258b
0 ETH0.0006318513.55153196
Approve161178372022-12-05 9:54:11633 days ago1670234051IN
0x3396dFc9...e7a80258b
0 ETH0.0006014612.89980968
Transfer161145842022-12-04 23:00:35633 days ago1670194835IN
0x3396dFc9...e7a80258b
0 ETH0.0004112311.25080526
Transfer161139792022-12-04 20:58:59633 days ago1670187539IN
0x3396dFc9...e7a80258b
0 ETH0.0004441112.16222029
Approve161139272022-12-04 20:48:35633 days ago1670186915IN
0x3396dFc9...e7a80258b
0 ETH0.0002811511.55
Transfer161138272022-12-04 20:28:35633 days ago1670185715IN
0x3396dFc9...e7a80258b
0 ETH0.0004543312.43385724
Transfer161135542022-12-04 19:33:47634 days ago1670182427IN
0x3396dFc9...e7a80258b
0 ETH0.0004541312.42430333
Approve161094132022-12-04 5:38:59634 days ago1670132339IN
0x3396dFc9...e7a80258b
0 ETH0.000458969.8436133
Transfer161075852022-12-03 23:31:47634 days ago1670110307IN
0x3396dFc9...e7a80258b
0 ETH0.0004891913.38343624
Transfer161064672022-12-03 19:47:47634 days ago1670096867IN
0x3396dFc9...e7a80258b
0 ETH0.0005080313.89892447
Transfer161044932022-12-03 13:09:35635 days ago1670072975IN
0x3396dFc9...e7a80258b
0 ETH0.0003964610.84670143
Transfer161031942022-12-03 8:48:11635 days ago1670057291IN
0x3396dFc9...e7a80258b
0 ETH0.00052289.74657771
Set Taxes161018242022-12-03 4:13:11635 days ago1670040791IN
0x3396dFc9...e7a80258b
0 ETH0.0006589911.4254225
Approve161012672022-12-03 2:21:23635 days ago1670034083IN
0x3396dFc9...e7a80258b
0 ETH0.0005450411.68968738
Approve161008322022-12-03 0:53:59635 days ago1670028839IN
0x3396dFc9...e7a80258b
0 ETH0.0004992210.70709512
Transfer161008212022-12-03 0:51:47635 days ago1670028707IN
0x3396dFc9...e7a80258b
0 ETH0.0004271511.68624567
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
160859512022-11-30 23:03:11637 days ago1669849391
0x3396dFc9...e7a80258b
0.15494144 ETH
160859512022-11-30 23:03:11637 days ago1669849391
0x3396dFc9...e7a80258b
0.15494144 ETH
160830792022-11-30 13:24:11638 days ago1669814651
0x3396dFc9...e7a80258b
0.17852265 ETH
160830792022-11-30 13:24:11638 days ago1669814651
0x3396dFc9...e7a80258b
0.17852265 ETH
160828902022-11-30 12:45:47638 days ago1669812347
0x3396dFc9...e7a80258b
0.21898523 ETH
160828902022-11-30 12:45:47638 days ago1669812347
0x3396dFc9...e7a80258b
0.21898523 ETH
160805602022-11-30 4:56:59638 days ago1669784219
0x3396dFc9...e7a80258b
0.25726983 ETH
160805602022-11-30 4:56:59638 days ago1669784219
0x3396dFc9...e7a80258b
0.25726983 ETH
160775782022-11-29 18:56:47639 days ago1669748207
0x3396dFc9...e7a80258b
0.2681575 ETH
160775782022-11-29 18:56:47639 days ago1669748207
0x3396dFc9...e7a80258b
0.2681575 ETH
160771032022-11-29 17:21:23639 days ago1669742483
0x3396dFc9...e7a80258b
0.23941932 ETH
160771032022-11-29 17:21:23639 days ago1669742483
0x3396dFc9...e7a80258b
0.23941932 ETH
160771002022-11-29 17:20:47639 days ago1669742447
0x3396dFc9...e7a80258b
0.23941932 ETH
160770992022-11-29 17:20:35639 days ago1669742435
0x3396dFc9...e7a80258b
0.23941932 ETH
160770982022-11-29 17:20:23639 days ago1669742423
0x3396dFc9...e7a80258b
0.23941932 ETH
160770982022-11-29 17:20:23639 days ago1669742423
0x3396dFc9...e7a80258b
0.23941932 ETH
160767082022-11-29 16:01:47639 days ago1669737707
0x3396dFc9...e7a80258b
0.29383682 ETH
160767082022-11-29 16:01:47639 days ago1669737707
0x3396dFc9...e7a80258b
0.29383682 ETH
160765462022-11-29 15:28:47639 days ago1669735727
0x3396dFc9...e7a80258b
0.28549509 ETH
160765462022-11-29 15:28:47639 days ago1669735727
0x3396dFc9...e7a80258b
0.28549509 ETH
160764442022-11-29 15:08:11639 days ago1669734491
0x3396dFc9...e7a80258b
0.34656823 ETH
160764442022-11-29 15:08:11639 days ago1669734491
0x3396dFc9...e7a80258b
0.34656823 ETH
160758462022-11-29 13:08:23639 days ago1669727303
0x3396dFc9...e7a80258b
0.3850181 ETH
160758462022-11-29 13:08:23639 days ago1669727303
0x3396dFc9...e7a80258b
0.3850181 ETH
160751342022-11-29 10:44:59639 days ago1669718699
0x3396dFc9...e7a80258b
0.35347917 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NIHON

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 150 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-28
*/

// SPDX-License-Identifier: UNLICENSED
// ALL RIGHTS RESERVED

pragma solidity =0.8.17;

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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 IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDexRouter {
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

}

interface IDexPair {
    event Sync(uint112 reserve0, uint112 reserve1);
    function sync() external;
}

abstract contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() external onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

pragma solidity =0.8.17;
contract NIHON is IERC20, Ownable  
{
    mapping (address => uint) private _balances;
    mapping (address => mapping (address => uint)) private _allowances;
    mapping(address => bool) private excludedFromLimits;
    mapping(address => bool) public excludedFromFees;
    mapping(address=>bool) public isAMM;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    
    string private constant _name = 'Nihon Inu';
    string private constant _symbol = 'NINU';

    uint8 private constant _decimals=18;

    uint private constant InitialSupply=10**9 * 10**_decimals;
    uint public buyTax = 50; //10=1%  
    uint public sellTax = 350;
    uint public transferTax = 0;
    uint public liquidityTax= 0;
    uint public Tax= 1000; // lp+tax must equal 1000 // 1000=100%
    uint public swapTreshold=10; //Dynamic Swap Threshold based on price impact. 1=0.1% max 10
    uint public overLiquifyTreshold=100;
    uint public LaunchTimestamp;
    uint private devFee=100; //devfee+marketingfee must = 100 
    uint private marketingFee= 0;
    uint constant TAX_DENOMINATOR=1000;
    uint constant MAXTAXDENOMINATOR=10;

    uint256 public maxWalletBalance;
    uint256 public maxTransactionAmount;
    uint256 public percentForLPBurn = 25; // 25 = .25%
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool private _isSwappingContractModifier;
    bool public manualSwap;
    bool public lpBurnEnabled = true;

    IDexRouter private  _DexRouter;

    address private _PairAddress; 
    address public marketingWallet;
    address public devWallet; 
    address public constant burnWallet=address(0xdead);
    address private constant DexRouter= 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; 
    
    event ManualNukeLP();
    event AutoNukeLP();
    event MaxWalletBalanceUpdated(uint256 percent);
    event OnSetTaxes(uint buy, uint sell, uint transfer_, uint project,uint liquidity);
    event ExcludeAccount(address account, bool exclude);
    event OnEnableTrading();
    event OnReleaseLP();
    event ExcludeFromLimits(address account, bool exclude);
    event MarketingWalletChange(address newWallet);
    event DevWalletChange(address newWallet);
    event SharesUpdated(uint _devShare, uint _marketingShare);
    event AMMadded(address AMM);
    event ManualSwapOn(bool manual);
    event ManualSwapPerformed();
    event MaxTransactionAmountUpdated(uint256 percent);
    event SwapThresholdChange(uint newSwapTresholdPermille);
    event OverLiquifiedThresholdChange(uint newOverLiquifyTresholdPermille);
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    constructor () {
        uint ownerBalance=InitialSupply;
        _balances[msg.sender] = ownerBalance;
        emit Transfer(address(0), msg.sender, ownerBalance);

        _DexRouter = IDexRouter(DexRouter);
        _PairAddress = IDexFactory(_DexRouter.factory()).createPair(address(this), _DexRouter.WETH());
        isAMM[_PairAddress]=true;
        
        marketingWallet= msg.sender; // address(0xdead)
        devWallet= msg.sender; // msg.sendger

        excludedFromFees[msg.sender]=true;
        excludedFromFees[DexRouter]=true;
        excludedFromFees[address(this)]=true;
        excludedFromLimits[burnWallet] = true;
        excludedFromLimits[address(this)] = true;
    }
    function ChangeMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet=newWallet;
        emit MarketingWalletChange(newWallet);
    }
    function ChangeDevWallet(address newWallet) external onlyOwner{
        devWallet=newWallet;
        emit DevWalletChange(newWallet);
    }
    function SetFeeShares(uint _devFee, uint _marketingFee) external onlyOwner{
        require(_devFee+_marketingFee<=100);
        devFee=_devFee;
        marketingFee=_marketingFee;
        emit SharesUpdated(_devFee, _marketingFee);
    }
    function setRestrictionPercents(uint256 WALpercent, uint256 TXNpercent) external onlyOwner {
        require(WALpercent >= 10, "min 1%"); // 10=1%
        require(WALpercent <= 1000, "max 100%");
        maxWalletBalance = InitialSupply * WALpercent / 1000;
        require(TXNpercent >= 25, "min 0.25%");
        require(TXNpercent <= 10000, "max 100%"); // 100=1%
        maxTransactionAmount = InitialSupply * TXNpercent / 10000;
        emit MaxWalletBalanceUpdated(WALpercent);
        emit MaxTransactionAmountUpdated(TXNpercent);
    }

    function removeAllRestrictions() external onlyOwner {
        maxWalletBalance = InitialSupply;
        maxTransactionAmount = InitialSupply;
        transferDelayEnabled = false;
    }
    function removetransferdelay() external onlyOwner {
        transferDelayEnabled = false;
    }    
    function _transfer(address sender, address recipient, uint amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
         if (transferDelayEnabled){
                    if (recipient != owner() && recipient != DexRouter && recipient != _PairAddress){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
        if(excludedFromFees[sender] || excludedFromFees[recipient])
            _feelessTransfer(sender, recipient, amount);
        else { 
            require(LaunchTimestamp>0,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount);                  
        }
    }
    
    function _taxedTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        bool excludedAccount = excludedFromLimits[sender] || excludedFromLimits[recipient];
        if (isAMM[sender] &&
            !excludedAccount) {
            require(
                amount <= maxTransactionAmount,
                "Transfer amount exceeds the maxTxAmount."
            );
            uint256 contractBalanceRecepient = balanceOf(recipient);
            require(
                contractBalanceRecepient + amount <= maxWalletBalance,
                "Exceeds maximum wallet token amount."
            );
        } else if (
            isAMM[recipient] &&
            !excludedAccount
        ) {
            require(amount <= maxTransactionAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];
        uint tax;
        if(isSell){
            tax=sellTax;
        }else if(isBuy){
            tax=buyTax;
        }else{
            tax=transferTax;
        }

        if((sender!=_PairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        if(!_isSwappingContractModifier && isAMM[recipient] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency){
            autoBurnLPTokens();
        }

        uint contractToken=_calculateFee(amount, tax, Tax+liquidityTax);
        uint taxedAmount=amount-contractToken;

        _balances[sender]-=amount;
        _balances[address(this)] += contractToken;
        _balances[recipient]+=taxedAmount;
        emit Transfer(sender,recipient,taxedAmount);
    }
    function _calculateFee(uint amount, uint tax, uint taxPercent) private pure returns (uint) {
        return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
    }
    function _feelessTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _balances[sender]-=amount;
        _balances[recipient]+=amount;      
        emit Transfer(sender,recipient,amount);
    }
    function setSwapTreshold(uint newSwapTresholdPermille) external onlyOwner{
        require(newSwapTresholdPermille<=10);//MaxTreshold= 1%
        swapTreshold=newSwapTresholdPermille;
        emit SwapThresholdChange(newSwapTresholdPermille);
    }
    function SetOverLiquifiedTreshold(uint newOverLiquifyTresholdPermille) external onlyOwner{
        require(newOverLiquifyTresholdPermille<=1000);
        overLiquifyTreshold=newOverLiquifyTresholdPermille;
        emit OverLiquifiedThresholdChange(newOverLiquifyTresholdPermille);
    }
    function SetTaxes(uint buy, uint sell, uint transfer_, uint tax,uint liquidity) external onlyOwner{
        uint maxTax=400; // 10= 1%
        require(buy<=maxTax&&sell<=maxTax&&transfer_<=maxTax,"Tax exceeds maxTax");
        require(tax+liquidity==TAX_DENOMINATOR,"Taxes don't add up to denominator");
        buyTax=buy;
        sellTax=sell;
        transferTax=transfer_;
        Tax=tax;
        liquidityTax=liquidity;
        emit OnSetTaxes(buy, sell, transfer_, tax, liquidity);
    }
    function isOverLiquified() public view returns(bool){
        return _balances[_PairAddress]>getCirculatingSupply()*overLiquifyTreshold/1000;
    }
    function _swapContractToken(bool ignoreLimits) private lockTheSwap{
        uint contractBalance=_balances[address(this)];
        uint totalTax=liquidityTax+Tax;
        uint tokenToSwap=_balances[_PairAddress]*swapTreshold/1000;
        if(totalTax==0)return;
        if(ignoreLimits)
            tokenToSwap=_balances[address(this)];
        else if(contractBalance<tokenToSwap)
            return;

        uint tokenForLiquidity=
        isOverLiquified()?0
        :(tokenToSwap*liquidityTax)/totalTax;

        uint tokenForProject= tokenToSwap-tokenForLiquidity;

        uint LiqHalf=tokenForLiquidity/2;
        uint swapToken=LiqHalf+tokenForProject;
        uint initialETHBalance=address(this).balance;
        _swapTokenForETH(swapToken);
        uint newETH=(address(this).balance - initialETHBalance);

        if(tokenForLiquidity>0){
            uint liqETH = (newETH*LiqHalf)/swapToken;
            _addLiquidity(LiqHalf, liqETH);
        }
        uint marketbalance=address(this).balance * marketingFee/100;
        uint devbalance=address(this).balance * devFee/100;
        if(marketbalance>0){
        (bool marketing,)=marketingWallet.call{value:marketbalance}("");
        marketing=true;
        }
        if(devbalance>0){
        (bool dev,)=devWallet.call{value:devbalance}("");
        dev=true;
        }
    }
    function _swapTokenForETH(uint amount) private {
        _approve(address(this), address(_DexRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _DexRouter.WETH();

        try _DexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        ){}
        catch{}
    }
    function _addLiquidity(uint tokenamount, uint ethamount) private {
        _approve(address(this), address(_DexRouter), tokenamount);
        _DexRouter.addLiquidityETH{value: ethamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }
    function getBurnedTokens() external view returns(uint){
        return _balances[address(0xdead)];
    }
    function getCirculatingSupply() public view returns(uint){
        return InitialSupply-_balances[address(0xdead)];
    }
    function SetAMM(address AMM, bool Add) external onlyOwner{
        require(AMM!=_PairAddress,"can't change uniswap");
        isAMM[AMM]=Add;
        emit AMMadded(AMM);
    }
    function SwitchManualSwap(bool manual) external onlyOwner{
        manualSwap=manual;
        emit ManualSwapOn(manual);
    }
    function SwapContractToken() external onlyOwner{
        _swapContractToken(true);
        emit ManualSwapPerformed();
    }
    function ExcludeAccountFromFees(address account, bool exclude) external onlyOwner{
        require(account!=address(this),"can't Include the contract");
        excludedFromFees[account]=exclude;
        emit ExcludeAccount(account,exclude);
    }
    function setExcludedAccountFromLimits(address account, bool exclude) external onlyOwner{
        excludedFromLimits[account]=exclude;
        emit ExcludeFromLimits(account,exclude);
    }
    function isExcludedFromLimits(address account) external view returns(bool) {
        return excludedFromLimits[account];
    }
    function EnableTrading() external onlyOwner{
        require(LaunchTimestamp==0,"AlreadyLaunched");
        LaunchTimestamp=block.timestamp;
        maxWalletBalance = InitialSupply * 20 / 1000;// 10=1%  
        maxTransactionAmount = InitialSupply * 150 / 10000;// 100=1%  
        emit OnEnableTrading();
    }
    function ReleaseLP() external onlyOwner {
        IERC20 liquidityToken = IERC20(_PairAddress);
        uint amount = liquidityToken.balanceOf(address(this));
        liquidityToken.transfer(msg.sender, amount);
        emit OnReleaseLP();
    }
    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;
    }
    function autoBurnLPTokens() internal returns (bool){
        lastLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(_PairAddress);
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn/10000;
        if (amountToBurn > 0){
            _balances[_PairAddress]-=amountToBurn;
            _balances[burnWallet]+=amountToBurn;
            emit Transfer(_PairAddress,burnWallet,amountToBurn);
        }
        IDexPair pair = IDexPair(_PairAddress);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLPTokens(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;
        uint256 liquidityPairBalance = this.balanceOf(_PairAddress);
        uint256 amountToBurn = liquidityPairBalance * percent/10000;
        if (amountToBurn > 0){
            _balances[_PairAddress]-=amountToBurn;
            _balances[burnWallet]+=amountToBurn;
            emit Transfer(_PairAddress,burnWallet,amountToBurn);
        }
        IDexPair pair = IDexPair(_PairAddress);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
    
    function getOwner() external view override returns (address) {return owner();}
    function name() external pure override returns (string memory) {return _name;}
    function symbol() external pure override returns (string memory) {return _symbol;}
    function decimals() external pure override returns (uint8) {return _decimals;}
    function totalSupply() external pure override returns (uint) {return InitialSupply;}
    function balanceOf(address account) public view override returns (uint) {return _balances[account];}
    function allowance(address _owner, address spender) external view override returns (uint) {return _allowances[_owner][spender];}
    function transfer(address recipient, uint amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    function approve(address spender, uint amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        uint currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");
        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }
    function increaseAllowance(address spender, uint addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
        uint currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");
        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"AMM","type":"address"}],"name":"AMMadded","type":"event"},{"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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"}],"name":"DevWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"manual","type":"bool"}],"name":"ManualSwapOn","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualSwapPerformed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"}],"name":"MarketingWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxWalletBalanceUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"OnEnableTrading","type":"event"},{"anonymous":false,"inputs":[],"name":"OnReleaseLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"project","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"OnSetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"OverLiquifiedThresholdChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_devShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingShare","type":"uint256"}],"name":"SharesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"SwapThresholdChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"ChangeDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"ChangeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LaunchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ReleaseLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AMM","type":"address"},{"internalType":"bool","name":"Add","type":"bool"}],"name":"SetAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"SetFeeShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"SetOverLiquifiedTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"transfer_","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapContractToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOverLiquified","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":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"manualBurnLPTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","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":"overLiquifyTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"removeAllRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removetransferdelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludedAccountFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"WALpercent","type":"uint256"},{"internalType":"uint256","name":"TXNpercent","type":"uint256"}],"name":"setRestrictionPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"setSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTreshold","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":"pure","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":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff19166001179055603260085561015e6009556000600a818155600b8290556103e8600c55600d556064600e81905560105560115560196014819055610e10601555610708601755805462ff00001916620100001790553480156200006d57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000620000bf6012600a620004ba565b620000cf90633b9aca00620004d2565b336000818152600160205260408082208490555192935090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620001189085815260200190565b60405180910390a360198054767a250d5630b4cf539739df2c5dacb4c659f2488d0000006301000000600160b81b031990911617908190556040805163c45a015560e01b8152905163010000009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c49190620004ec565b6001600160a01b031663c9c6539630601960039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d9190620004ec565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c19190620004ec565b601a80546001600160a01b03929092166001600160a01b031992831681179091556000908152600560209081526040808320805460ff199081166001908117909255601b8054871633908117909155601c805490971681179096559484526004835281842080548616821790557f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d78054861682179055308452818420805486168217905560039092527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c805485168317905590912080549092161790555062000517565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003fc578160001904821115620003e057620003e0620003a5565b80851615620003ee57918102915b93841c9390800290620003c0565b509250929050565b6000826200041557506001620004b4565b816200042457506000620004b4565b81600181146200043d5760028114620004485762000468565b6001915050620004b4565b60ff8411156200045c576200045c620003a5565b50506001821b620004b4565b5060208310610133831016604e8410600b84101617156200048d575081810a620004b4565b620004998383620003bb565b8060001904821115620004b057620004b0620003a5565b0290505b92915050565b6000620004cb60ff84168362000404565b9392505050565b8082028115828204841417620004b457620004b4620003a5565b600060208284031215620004ff57600080fd5b81516001600160a01b0381168114620004cb57600080fd5b6132f380620005276000396000f3fe60806040526004361061035b5760003560e01c80638124f7ac116101bc578063bc43d849116100f2578063d46b6a30116100a0578063e52fb9ec1161006f578063e52fb9ec14610a21578063f2fde38b14610a37578063f7942b6314610a57578063ff90061214610a7757600080fd5b8063d46b6a301461095b578063dbe66ca01461098b578063dd62ed3e146109bb578063e0d2f9eb14610a0157600080fd5b8063bc43d84914610892578063be617fa0146108b2578063c3f4f54f146108c8578063c876d0b9146108f5578063c8c8ebe41461090f578063cc1776d314610925578063cfd1940e1461093b57600080fd5b806398d7e7211161016a578063a9059cbb11610139578063a9059cbb14610826578063b40d09e214610846578063baa88ea91461085c578063bbde77c11461087c57600080fd5b806398d7e721146107ba5780639ec22c0e146107da578063a457c2d7146107f0578063a4c82a001461081057600080fd5b80638124f7ac146106f9578063817d4bff1461070f578063868b01411461072f578063893d20e81461074f5780638da5cb5b1461074f5780638ea5220f1461076d57806395d89b411461078d57600080fd5b806346e35f0311610291578063698e5cfa1161023f578063715018a61161020e578063715018a614610684578063730c18881461069957806375f0a874146106b9578063766febab146106d957600080fd5b8063698e5cfa146106035780636ea405d31461062357806370a08231146106395780637115d00e1461066f57600080fd5b806346e35f03146105365780634f7041a51461054b5780635149f9841461056157806351bc3c85146105815780635cce86cd146105a05780636162c92e146105d9578063679d8b19146105ee57600080fd5b80631d97b7cd116103095780632e82f1a0116102d85780632e82f1a0146104c5578063313ce567146104e5578063395093511461050157806341aec3571461052157600080fd5b80631d97b7cd1461046357806323b872dd1461047a5780632b112e491461049a5780632c3e486c146104af57600080fd5b8063062287491461036757806306fdde0314610393578063095ea7b3146103ce5780630eff4c64146103fe57806318160ddd14610422578063184c16c514610437578063199ffc721461044d57600080fd5b3661036257005b600080fd5b34801561037357600080fd5b5061037d61dead81565b60405161038a9190612d44565b60405180910390f35b34801561039f57600080fd5b506040805180820190915260098152684e69686f6e20496e7560b81b60208201525b60405161038a9190612d58565b3480156103da57600080fd5b506103ee6103e9366004612dbe565b610a97565b604051901515815260200161038a565b34801561040a57600080fd5b50610414600e5481565b60405190815260200161038a565b34801561042e57600080fd5b50610414610aae565b34801561044357600080fd5b5061041460175481565b34801561045957600080fd5b5061041460145481565b34801561046f57600080fd5b50610478610acf565b005b34801561048657600080fd5b506103ee610495366004612dea565b610bee565b3480156104a657600080fd5b50610414610c85565b3480156104bb57600080fd5b5061041460155481565b3480156104d157600080fd5b506019546103ee9062010000900460ff1681565b3480156104f157600080fd5b506040516012815260200161038a565b34801561050d57600080fd5b506103ee61051c366004612dbe565b610cc6565b34801561052d57600080fd5b50610478610cfd565b34801561054257600080fd5b506103ee610d6b565b34801561055757600080fd5b5061041460085481565b34801561056d57600080fd5b5061047861057c366004612e39565b610db0565b34801561058d57600080fd5b506019546103ee90610100900460ff1681565b3480156105ac57600080fd5b506103ee6105bb366004612e72565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156105e557600080fd5b50610478610e9e565b3480156105fa57600080fd5b50610478610f1e565b34801561060f57600080fd5b5061047861061e366004612e96565b610f63565b34801561062f57600080fd5b50610414600c5481565b34801561064557600080fd5b50610414610654366004612e72565b6001600160a01b031660009081526001602052604090205490565b34801561067b57600080fd5b5061047861115a565b34801561069057600080fd5b506104786112ab565b3480156106a557600080fd5b506104786106b4366004612eb8565b61132e565b3480156106c557600080fd5b50601b5461037d906001600160a01b031681565b3480156106e557600080fd5b506104786106f4366004612e96565b61146f565b34801561070557600080fd5b50610414600a5481565b34801561071b57600080fd5b5061047861072a366004612e72565b6114ff565b34801561073b57600080fd5b5061047861074a366004612ef1565b61158e565b34801561075b57600080fd5b506000546001600160a01b031661037d565b34801561077957600080fd5b50601c5461037d906001600160a01b031681565b34801561079957600080fd5b506040805180820190915260048152634e494e5560e01b60208201526103c1565b3480156107c657600080fd5b506103ee6107d5366004612f0e565b611610565b3480156107e657600080fd5b5061041460185481565b3480156107fc57600080fd5b506103ee61080b366004612dbe565b6118d2565b34801561081c57600080fd5b5061041460165481565b34801561083257600080fd5b506103ee610841366004612dbe565b61194e565b34801561085257600080fd5b50610414600f5481565b34801561086857600080fd5b50610478610877366004612f27565b61195b565b34801561088857600080fd5b5061041460125481565b34801561089e57600080fd5b506104786108ad366004612f0e565b611ac8565b3480156108be57600080fd5b50610414600b5481565b3480156108d457600080fd5b5061dead600052600160205260008051602061327e83398151915254610414565b34801561090157600080fd5b506007546103ee9060ff1681565b34801561091b57600080fd5b5061041460135481565b34801561093157600080fd5b5061041460095481565b34801561094757600080fd5b50610478610956366004612f0e565b611b45565b34801561096757600080fd5b506103ee610976366004612e72565b60056020526000908152604090205460ff1681565b34801561099757600080fd5b506103ee6109a6366004612e72565b60046020526000908152604090205460ff1681565b3480156109c757600080fd5b506104146109d6366004612f62565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a0d57600080fd5b50610478610a1c366004612e39565b611bc1565b348015610a2d57600080fd5b50610414600d5481565b348015610a4357600080fd5b50610478610a52366004612e72565b611cae565b348015610a6357600080fd5b50610478610a72366004612e39565b611da7565b348015610a8357600080fd5b50610478610a92366004612e72565b611e3c565b6000610aa4338484611ec0565b5060015b92915050565b6000610abc6012600a61308a565b610aca90633b9aca00613099565b905090565b33610ae26000546001600160a01b031690565b6001600160a01b031614610b115760405162461bcd60e51b8152600401610b08906130b0565b60405180910390fd5b600f5415610b535760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b6044820152606401610b08565b42600f556103e8610b666012600a61308a565b610b7490633b9aca00613099565b610b7f906014613099565b610b8991906130e5565b601290815561271090610b9d90600a61308a565b610bab90633b9aca00613099565b610bb6906096613099565b610bc091906130e5565b6013556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc190600090a1565b6000610bfb848484611fb3565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610c665760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b08565b610c7a8533610c758685613107565b611ec0565b506001949350505050565b61dead6000908152600160205260008051602061327e83398151915254610cae6012600a61308a565b610cbc90633b9aca00613099565b610aca9190613107565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610aa4918590610c7590869061311a565b33610d106000546001600160a01b031690565b6001600160a01b031614610d365760405162461bcd60e51b8152600401610b08906130b0565b610d406001612200565b6040517f50d9f00a1465121b958cf0aef21a53ed0bbe36c5a415abb27350d22b247a258f90600090a1565b60006103e8600e54610d7b610c85565b610d859190613099565b610d8f91906130e5565b601a546001600160a01b031660009081526001602052604090205411919050565b33610dc36000546001600160a01b031690565b6001600160a01b031614610de95760405162461bcd60e51b8152600401610b08906130b0565b601a546001600160a01b0390811690831603610e3e5760405162461bcd60e51b8152602060048201526014602482015273063616e2774206368616e676520756e69737761760641b6044820152606401610b08565b6001600160a01b03821660009081526005602052604090819020805460ff1916831515179055517fa5d0a2d9a2487cd749dbfa34962704a9f4ed5ff3fd9c6586c86d954070b552f090610e92908490612d44565b60405180910390a15050565b33610eb16000546001600160a01b031690565b6001600160a01b031614610ed75760405162461bcd60e51b8152600401610b08906130b0565b610ee36012600a61308a565b610ef190633b9aca00613099565b6012908155610f0190600a61308a565b610f0f90633b9aca00613099565b6013556007805460ff19169055565b33610f316000546001600160a01b031690565b6001600160a01b031614610f575760405162461bcd60e51b8152600401610b08906130b0565b6007805460ff19169055565b33610f766000546001600160a01b031690565b6001600160a01b031614610f9c5760405162461bcd60e51b8152600401610b08906130b0565b600a821015610fd65760405162461bcd60e51b81526020600482015260066024820152656d696e20312560d01b6044820152606401610b08565b6103e88211156110135760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610b08565b6103e8826110236012600a61308a565b61103190633b9aca00613099565b61103b9190613099565b61104591906130e5565b60125560198110156110855760405162461bcd60e51b81526020600482015260096024820152686d696e20302e32352560b81b6044820152606401610b08565b6127108111156110c25760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610b08565b612710816110d26012600a61308a565b6110e090633b9aca00613099565b6110ea9190613099565b6110f491906130e5565b6013556040518281527f9cbd2e55e2abf49d29273c1b9fb343c2828844b2aec156cfe2aec98ae1b72a999060200160405180910390a16040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac90602001610e92565b3361116d6000546001600160a01b031690565b6001600160a01b0316146111935760405162461bcd60e51b8152600401610b08906130b0565b601a546040516370a0823160e01b81526001600160a01b039091169060009082906370a08231906111c8903090600401612d44565b602060405180830381865afa1580156111e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611209919061312d565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127d9190613146565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b336112be6000546001600160a01b031690565b6001600160a01b0316146112e45760405162461bcd60e51b8152600401610b08906130b0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336113416000546001600160a01b031690565b6001600160a01b0316146113675760405162461bcd60e51b8152600401610b08906130b0565b6102588310156113d55760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b08565b6103e882111580156113e5575060015b61144a5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b08565b60159290925560145560198054911515620100000262ff000019909216919091179055565b336114826000546001600160a01b031690565b6001600160a01b0316146114a85760405162461bcd60e51b8152600401610b08906130b0565b60646114b4828461311a565b11156114bf57600080fd5b6010829055601181905560408051838152602081018390527fe5a0c91086f91c001ad2bce018f8c7818182156e1fd1d3b81788aadd4b2b30219101610e92565b336115126000546001600160a01b031690565b6001600160a01b0316146115385760405162461bcd60e51b8152600401610b08906130b0565b601b80546001600160a01b0319166001600160a01b0383161790556040517f9e42de18c651175b949c09ca698a4cf63aa023f4038a9ed83bd882c7d6f8fb6490611583908390612d44565b60405180910390a150565b336115a16000546001600160a01b031690565b6001600160a01b0316146115c75760405162461bcd60e51b8152600401610b08906130b0565b601980548215156101000261ff00199091161790556040517faffc63374f6f6c07a9f4b158efd5668a3684e1711b1c8e9ed9b848e1150708219061158390831515815260200190565b6000336116256000546001600160a01b031690565b6001600160a01b03161461164b5760405162461bcd60e51b8152600401610b08906130b0565b60175460185461165b919061311a565b42116116a95760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610b08565b6103e882111561170e5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b08565b42601855601a546040516370a0823160e01b815260009130916370a0823191611745916001600160a01b0390911690600401612d44565b602060405180830381865afa158015611762573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611786919061312d565b905060006127106117978584613099565b6117a191906130e5565b9050801561183c57601a546001600160a01b0316600090815260016020526040812080548392906117d3908490613107565b909155505061dead6000908152600160205260008051602061327e833981519152805483929061180490849061311a565b9091555050601a5460405182815261dead916001600160a01b03169060008051602061329e8339815191529060200160405180910390a35b601a546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156119355760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b08565b6119443385610c758685613107565b5060019392505050565b6000610aa4338484611fb3565b3361196e6000546001600160a01b031690565b6001600160a01b0316146119945760405162461bcd60e51b8152600401610b08906130b0565b6101908086118015906119a75750808511155b80156119b35750808411155b6119f45760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b6044820152606401610b08565b6103e8611a01838561311a565b14611a585760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b6064820152608401610b08565b60088690556009859055600a849055600c839055600b829055604080518781526020810187905290810185905260608101849052608081018390527f07d167ef63e413076f3e7e19f733b66f7ab5fd83fd7b437428f115315687ef6e9060a00160405180910390a1505050505050565b33611adb6000546001600160a01b031690565b6001600160a01b031614611b015760405162461bcd60e51b8152600401610b08906130b0565b6103e8811115611b1057600080fd5b600e8190556040518181527fa072eee57b8e01913ba01eab29d8a81117cf780e6c8984a3494477ce9cee846d90602001611583565b33611b586000546001600160a01b031690565b6001600160a01b031614611b7e5760405162461bcd60e51b8152600401610b08906130b0565b600a811115611b8c57600080fd5b600d8190556040518181527fc075380b8410207b8cc14f0d254ab8c8a6766469631275e4500db835a1ba02cc90602001611583565b33611bd46000546001600160a01b031690565b6001600160a01b031614611bfa5760405162461bcd60e51b8152600401610b08906130b0565b306001600160a01b03831603611c525760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610b08565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed49101610e92565b33611cc16000546001600160a01b031690565b6001600160a01b031614611ce75760405162461bcd60e51b8152600401610b08906130b0565b6001600160a01b038116611d4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b08565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33611dba6000546001600160a01b031690565b6001600160a01b031614611de05760405162461bcd60e51b8152600401610b08906130b0565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc929101610e92565b33611e4f6000546001600160a01b031690565b6001600160a01b031614611e755760405162461bcd60e51b8152600401610b08906130b0565b601c80546001600160a01b0319166001600160a01b0383161790556040517f1a806adf87d2b694e80e69bda66ee145c65fb0ef3615fec509da7adc260316af90611583908390612d44565b6001600160a01b038316611f0a5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b08565b6001600160a01b038216611f525760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b08565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffe5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b08565b6001600160a01b0382166120475760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b08565b60075460ff1615612155576000546001600160a01b0383811691161480159061208d57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156120a75750601a546001600160a01b03838116911614155b15612155573260009081526006602052604090205443116121425760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b08565b3260009081526006602052604090204390555b6001600160a01b03831660009081526004602052604090205460ff168061219457506001600160a01b03821660009081526004602052604090205460ff165b156121a9576121a4838383612459565b505050565b6000600f54116121f55760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401610b08565b6121a483838361255a565b6019805460ff191660019081179091553060009081526020919091526040812054600c54600b54919291612234919061311a565b600d54601a546001600160a01b0316600090815260016020526040812054929350916103e89161226391613099565b61226d91906130e5565b90508160000361227f5750505061244c565b831561229b5750306000908152600160205260409020546122ab565b808310156122ab5750505061244c565b60006122b5610d6b565b6122d75782600b54836122c89190613099565b6122d291906130e5565b6122da565b60005b905060006122e88284613107565b905060006122f76002846130e5565b90506000612305838361311a565b90504761231182612911565b600061231d8247613107565b9050851561234a576000836123328684613099565b61233c91906130e5565b90506123488582612a8a565b505b600060646011544761235c9190613099565b61236691906130e5565b9050600060646010544761237a9190613099565b61238491906130e5565b905081156123e357601b546040516000916001600160a01b03169084908381818185875af1925050503d80600081146123d9576040519150601f19603f3d011682016040523d82523d6000602084013e6123de565b606091505b505050505b801561244057601c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612436576040519150601f19603f3d011682016040523d82523d6000602084013e61243b565b606091505b505050505b50505050505050505050505b506019805460ff19169055565b6001600160a01b038316600090815260016020526040902054818110156124bd5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b08565b6001600160a01b038416600090815260016020526040812080548492906124e5908490613107565b90915550506001600160a01b0383166000908152600160205260408120805484929061251290849061311a565b92505081905550826001600160a01b0316846001600160a01b031660008051602061329e8339815191528460405161254c91815260200190565b60405180910390a350505050565b6001600160a01b038316600090815260016020526040902054818110156125be5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b08565b6001600160a01b03841660009081526003602052604081205460ff16806125fd57506001600160a01b03841660009081526003602052604090205460ff165b6001600160a01b03861660009081526005602052604090205490915060ff168015612626575080155b156126d35760135483111561264d5760405162461bcd60e51b8152600401610b0890613163565b6001600160a01b038416600090815260016020526040902054601254612673858361311a565b11156126cd5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610b08565b50612720565b6001600160a01b03841660009081526005602052604090205460ff1680156126f9575080155b15612720576013548311156127205760405162461bcd60e51b8152600401610b0890613163565b6001600160a01b0380861660009081526005602052604080822054928716825281205460ff928316921690811561275a575060095461276e565b8215612769575060085461276e565b50600a545b601a546001600160a01b038981169116148015906127945750601954610100900460ff16155b80156127a3575060195460ff16155b156127b2576127b26000612200565b60195460ff161580156127dd57506001600160a01b03871660009081526005602052604090205460ff165b80156127f1575060195462010000900460ff165b801561280c5750601554601654612808919061311a565b4210155b1561281b57612819612b48565b505b60006128378783600b54600c54612832919061311a565b612d0f565b905060006128458289613107565b6001600160a01b038b16600090815260016020526040812080549293508a92909190612872908490613107565b9091555050306000908152600160205260408120805484929061289690849061311a565b90915550506001600160a01b038916600090815260016020526040812080548392906128c390849061311a565b92505081905550886001600160a01b03168a6001600160a01b031660008051602061329e833981519152836040516128fd91815260200190565b60405180910390a350505050505050505050565b601954612930903090630100000090046001600160a01b031683611ec0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612965576129656131ab565b60200260200101906001600160a01b031690816001600160a01b031681525050601960039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fc91906131c1565b81600181518110612a0f57612a0f6131ab565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815263010000009091049091169063791ac94790612a5e9085906000908690309042906004016131de565b600060405180830381600087803b158015612a7857600080fd5b505af19250505080156121a457505050565b601954612aa9903090630100000090046001600160a01b031684611ec0565b60195460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015263010000009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612b1c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b41919061324f565b5050505050565b42601655601a546040516370a0823160e01b8152600091829130916370a0823191612b7f916001600160a01b031690600401612d44565b602060405180830381865afa158015612b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc0919061312d565b9050600061271060145483612bd59190613099565b612bdf91906130e5565b90508015612c7a57601a546001600160a01b031660009081526001602052604081208054839290612c11908490613107565b909155505061dead6000908152600160205260008051602061327e8339815191528054839290612c4290849061311a565b9091555050601a5460405182815261dead916001600160a01b03169060008051602061329e8339815191529060200160405180910390a35b601a546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015612cc457600080fd5b505af1158015612cd8573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6000612d1d6103e880613099565b82612d288587613099565b612d329190613099565b612d3c91906130e5565b949350505050565b6001600160a01b0391909116815260200190565b600060208083528351808285015260005b81811015612d8557858101830151858201604001528201612d69565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612dbb57600080fd5b50565b60008060408385031215612dd157600080fd5b8235612ddc81612da6565b946020939093013593505050565b600080600060608486031215612dff57600080fd5b8335612e0a81612da6565b92506020840135612e1a81612da6565b929592945050506040919091013590565b8015158114612dbb57600080fd5b60008060408385031215612e4c57600080fd5b8235612e5781612da6565b91506020830135612e6781612e2b565b809150509250929050565b600060208284031215612e8457600080fd5b8135612e8f81612da6565b9392505050565b60008060408385031215612ea957600080fd5b50508035926020909101359150565b600080600060608486031215612ecd57600080fd5b83359250602084013591506040840135612ee681612e2b565b809150509250925092565b600060208284031215612f0357600080fd5b8135612e8f81612e2b565b600060208284031215612f2057600080fd5b5035919050565b600080600080600060a08688031215612f3f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612f7557600080fd5b8235612f8081612da6565b91506020830135612e6781612da6565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612fe1578160001904821115612fc757612fc7612f90565b80851615612fd457918102915b93841c9390800290612fab565b509250929050565b600082612ff857506001610aa8565b8161300557506000610aa8565b816001811461301b576002811461302557613041565b6001915050610aa8565b60ff84111561303657613036612f90565b50506001821b610aa8565b5060208310610133831016604e8410600b8410161715613064575081810a610aa8565b61306e8383612fa6565b806000190482111561308257613082612f90565b029392505050565b6000612e8f60ff841683612fe9565b8082028115828204841417610aa857610aa8612f90565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008261310257634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610aa857610aa8612f90565b80820180821115610aa857610aa8612f90565b60006020828403121561313f57600080fd5b5051919050565b60006020828403121561315857600080fd5b8151612e8f81612e2b565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131d357600080fd5b8151612e8f81612da6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561322e5784516001600160a01b031683529383019391830191600101613209565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326457600080fd5b835192506020840151915060408401519050925092509256feb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209ec7ff6d076b5ba0e0f5857d6e808431a23ff749f1309f4d7acfe7dbf89696d964736f6c63430008110033

Deployed Bytecode

0x60806040526004361061035b5760003560e01c80638124f7ac116101bc578063bc43d849116100f2578063d46b6a30116100a0578063e52fb9ec1161006f578063e52fb9ec14610a21578063f2fde38b14610a37578063f7942b6314610a57578063ff90061214610a7757600080fd5b8063d46b6a301461095b578063dbe66ca01461098b578063dd62ed3e146109bb578063e0d2f9eb14610a0157600080fd5b8063bc43d84914610892578063be617fa0146108b2578063c3f4f54f146108c8578063c876d0b9146108f5578063c8c8ebe41461090f578063cc1776d314610925578063cfd1940e1461093b57600080fd5b806398d7e7211161016a578063a9059cbb11610139578063a9059cbb14610826578063b40d09e214610846578063baa88ea91461085c578063bbde77c11461087c57600080fd5b806398d7e721146107ba5780639ec22c0e146107da578063a457c2d7146107f0578063a4c82a001461081057600080fd5b80638124f7ac146106f9578063817d4bff1461070f578063868b01411461072f578063893d20e81461074f5780638da5cb5b1461074f5780638ea5220f1461076d57806395d89b411461078d57600080fd5b806346e35f0311610291578063698e5cfa1161023f578063715018a61161020e578063715018a614610684578063730c18881461069957806375f0a874146106b9578063766febab146106d957600080fd5b8063698e5cfa146106035780636ea405d31461062357806370a08231146106395780637115d00e1461066f57600080fd5b806346e35f03146105365780634f7041a51461054b5780635149f9841461056157806351bc3c85146105815780635cce86cd146105a05780636162c92e146105d9578063679d8b19146105ee57600080fd5b80631d97b7cd116103095780632e82f1a0116102d85780632e82f1a0146104c5578063313ce567146104e5578063395093511461050157806341aec3571461052157600080fd5b80631d97b7cd1461046357806323b872dd1461047a5780632b112e491461049a5780632c3e486c146104af57600080fd5b8063062287491461036757806306fdde0314610393578063095ea7b3146103ce5780630eff4c64146103fe57806318160ddd14610422578063184c16c514610437578063199ffc721461044d57600080fd5b3661036257005b600080fd5b34801561037357600080fd5b5061037d61dead81565b60405161038a9190612d44565b60405180910390f35b34801561039f57600080fd5b506040805180820190915260098152684e69686f6e20496e7560b81b60208201525b60405161038a9190612d58565b3480156103da57600080fd5b506103ee6103e9366004612dbe565b610a97565b604051901515815260200161038a565b34801561040a57600080fd5b50610414600e5481565b60405190815260200161038a565b34801561042e57600080fd5b50610414610aae565b34801561044357600080fd5b5061041460175481565b34801561045957600080fd5b5061041460145481565b34801561046f57600080fd5b50610478610acf565b005b34801561048657600080fd5b506103ee610495366004612dea565b610bee565b3480156104a657600080fd5b50610414610c85565b3480156104bb57600080fd5b5061041460155481565b3480156104d157600080fd5b506019546103ee9062010000900460ff1681565b3480156104f157600080fd5b506040516012815260200161038a565b34801561050d57600080fd5b506103ee61051c366004612dbe565b610cc6565b34801561052d57600080fd5b50610478610cfd565b34801561054257600080fd5b506103ee610d6b565b34801561055757600080fd5b5061041460085481565b34801561056d57600080fd5b5061047861057c366004612e39565b610db0565b34801561058d57600080fd5b506019546103ee90610100900460ff1681565b3480156105ac57600080fd5b506103ee6105bb366004612e72565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156105e557600080fd5b50610478610e9e565b3480156105fa57600080fd5b50610478610f1e565b34801561060f57600080fd5b5061047861061e366004612e96565b610f63565b34801561062f57600080fd5b50610414600c5481565b34801561064557600080fd5b50610414610654366004612e72565b6001600160a01b031660009081526001602052604090205490565b34801561067b57600080fd5b5061047861115a565b34801561069057600080fd5b506104786112ab565b3480156106a557600080fd5b506104786106b4366004612eb8565b61132e565b3480156106c557600080fd5b50601b5461037d906001600160a01b031681565b3480156106e557600080fd5b506104786106f4366004612e96565b61146f565b34801561070557600080fd5b50610414600a5481565b34801561071b57600080fd5b5061047861072a366004612e72565b6114ff565b34801561073b57600080fd5b5061047861074a366004612ef1565b61158e565b34801561075b57600080fd5b506000546001600160a01b031661037d565b34801561077957600080fd5b50601c5461037d906001600160a01b031681565b34801561079957600080fd5b506040805180820190915260048152634e494e5560e01b60208201526103c1565b3480156107c657600080fd5b506103ee6107d5366004612f0e565b611610565b3480156107e657600080fd5b5061041460185481565b3480156107fc57600080fd5b506103ee61080b366004612dbe565b6118d2565b34801561081c57600080fd5b5061041460165481565b34801561083257600080fd5b506103ee610841366004612dbe565b61194e565b34801561085257600080fd5b50610414600f5481565b34801561086857600080fd5b50610478610877366004612f27565b61195b565b34801561088857600080fd5b5061041460125481565b34801561089e57600080fd5b506104786108ad366004612f0e565b611ac8565b3480156108be57600080fd5b50610414600b5481565b3480156108d457600080fd5b5061dead600052600160205260008051602061327e83398151915254610414565b34801561090157600080fd5b506007546103ee9060ff1681565b34801561091b57600080fd5b5061041460135481565b34801561093157600080fd5b5061041460095481565b34801561094757600080fd5b50610478610956366004612f0e565b611b45565b34801561096757600080fd5b506103ee610976366004612e72565b60056020526000908152604090205460ff1681565b34801561099757600080fd5b506103ee6109a6366004612e72565b60046020526000908152604090205460ff1681565b3480156109c757600080fd5b506104146109d6366004612f62565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a0d57600080fd5b50610478610a1c366004612e39565b611bc1565b348015610a2d57600080fd5b50610414600d5481565b348015610a4357600080fd5b50610478610a52366004612e72565b611cae565b348015610a6357600080fd5b50610478610a72366004612e39565b611da7565b348015610a8357600080fd5b50610478610a92366004612e72565b611e3c565b6000610aa4338484611ec0565b5060015b92915050565b6000610abc6012600a61308a565b610aca90633b9aca00613099565b905090565b33610ae26000546001600160a01b031690565b6001600160a01b031614610b115760405162461bcd60e51b8152600401610b08906130b0565b60405180910390fd5b600f5415610b535760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b6044820152606401610b08565b42600f556103e8610b666012600a61308a565b610b7490633b9aca00613099565b610b7f906014613099565b610b8991906130e5565b601290815561271090610b9d90600a61308a565b610bab90633b9aca00613099565b610bb6906096613099565b610bc091906130e5565b6013556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc190600090a1565b6000610bfb848484611fb3565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610c665760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b08565b610c7a8533610c758685613107565b611ec0565b506001949350505050565b61dead6000908152600160205260008051602061327e83398151915254610cae6012600a61308a565b610cbc90633b9aca00613099565b610aca9190613107565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610aa4918590610c7590869061311a565b33610d106000546001600160a01b031690565b6001600160a01b031614610d365760405162461bcd60e51b8152600401610b08906130b0565b610d406001612200565b6040517f50d9f00a1465121b958cf0aef21a53ed0bbe36c5a415abb27350d22b247a258f90600090a1565b60006103e8600e54610d7b610c85565b610d859190613099565b610d8f91906130e5565b601a546001600160a01b031660009081526001602052604090205411919050565b33610dc36000546001600160a01b031690565b6001600160a01b031614610de95760405162461bcd60e51b8152600401610b08906130b0565b601a546001600160a01b0390811690831603610e3e5760405162461bcd60e51b8152602060048201526014602482015273063616e2774206368616e676520756e69737761760641b6044820152606401610b08565b6001600160a01b03821660009081526005602052604090819020805460ff1916831515179055517fa5d0a2d9a2487cd749dbfa34962704a9f4ed5ff3fd9c6586c86d954070b552f090610e92908490612d44565b60405180910390a15050565b33610eb16000546001600160a01b031690565b6001600160a01b031614610ed75760405162461bcd60e51b8152600401610b08906130b0565b610ee36012600a61308a565b610ef190633b9aca00613099565b6012908155610f0190600a61308a565b610f0f90633b9aca00613099565b6013556007805460ff19169055565b33610f316000546001600160a01b031690565b6001600160a01b031614610f575760405162461bcd60e51b8152600401610b08906130b0565b6007805460ff19169055565b33610f766000546001600160a01b031690565b6001600160a01b031614610f9c5760405162461bcd60e51b8152600401610b08906130b0565b600a821015610fd65760405162461bcd60e51b81526020600482015260066024820152656d696e20312560d01b6044820152606401610b08565b6103e88211156110135760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610b08565b6103e8826110236012600a61308a565b61103190633b9aca00613099565b61103b9190613099565b61104591906130e5565b60125560198110156110855760405162461bcd60e51b81526020600482015260096024820152686d696e20302e32352560b81b6044820152606401610b08565b6127108111156110c25760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610b08565b612710816110d26012600a61308a565b6110e090633b9aca00613099565b6110ea9190613099565b6110f491906130e5565b6013556040518281527f9cbd2e55e2abf49d29273c1b9fb343c2828844b2aec156cfe2aec98ae1b72a999060200160405180910390a16040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac90602001610e92565b3361116d6000546001600160a01b031690565b6001600160a01b0316146111935760405162461bcd60e51b8152600401610b08906130b0565b601a546040516370a0823160e01b81526001600160a01b039091169060009082906370a08231906111c8903090600401612d44565b602060405180830381865afa1580156111e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611209919061312d565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127d9190613146565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b336112be6000546001600160a01b031690565b6001600160a01b0316146112e45760405162461bcd60e51b8152600401610b08906130b0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336113416000546001600160a01b031690565b6001600160a01b0316146113675760405162461bcd60e51b8152600401610b08906130b0565b6102588310156113d55760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610b08565b6103e882111580156113e5575060015b61144a5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610b08565b60159290925560145560198054911515620100000262ff000019909216919091179055565b336114826000546001600160a01b031690565b6001600160a01b0316146114a85760405162461bcd60e51b8152600401610b08906130b0565b60646114b4828461311a565b11156114bf57600080fd5b6010829055601181905560408051838152602081018390527fe5a0c91086f91c001ad2bce018f8c7818182156e1fd1d3b81788aadd4b2b30219101610e92565b336115126000546001600160a01b031690565b6001600160a01b0316146115385760405162461bcd60e51b8152600401610b08906130b0565b601b80546001600160a01b0319166001600160a01b0383161790556040517f9e42de18c651175b949c09ca698a4cf63aa023f4038a9ed83bd882c7d6f8fb6490611583908390612d44565b60405180910390a150565b336115a16000546001600160a01b031690565b6001600160a01b0316146115c75760405162461bcd60e51b8152600401610b08906130b0565b601980548215156101000261ff00199091161790556040517faffc63374f6f6c07a9f4b158efd5668a3684e1711b1c8e9ed9b848e1150708219061158390831515815260200190565b6000336116256000546001600160a01b031690565b6001600160a01b03161461164b5760405162461bcd60e51b8152600401610b08906130b0565b60175460185461165b919061311a565b42116116a95760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610b08565b6103e882111561170e5760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b08565b42601855601a546040516370a0823160e01b815260009130916370a0823191611745916001600160a01b0390911690600401612d44565b602060405180830381865afa158015611762573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611786919061312d565b905060006127106117978584613099565b6117a191906130e5565b9050801561183c57601a546001600160a01b0316600090815260016020526040812080548392906117d3908490613107565b909155505061dead6000908152600160205260008051602061327e833981519152805483929061180490849061311a565b9091555050601a5460405182815261dead916001600160a01b03169060008051602061329e8339815191529060200160405180910390a35b601a546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156119355760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b08565b6119443385610c758685613107565b5060019392505050565b6000610aa4338484611fb3565b3361196e6000546001600160a01b031690565b6001600160a01b0316146119945760405162461bcd60e51b8152600401610b08906130b0565b6101908086118015906119a75750808511155b80156119b35750808411155b6119f45760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b6044820152606401610b08565b6103e8611a01838561311a565b14611a585760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b6064820152608401610b08565b60088690556009859055600a849055600c839055600b829055604080518781526020810187905290810185905260608101849052608081018390527f07d167ef63e413076f3e7e19f733b66f7ab5fd83fd7b437428f115315687ef6e9060a00160405180910390a1505050505050565b33611adb6000546001600160a01b031690565b6001600160a01b031614611b015760405162461bcd60e51b8152600401610b08906130b0565b6103e8811115611b1057600080fd5b600e8190556040518181527fa072eee57b8e01913ba01eab29d8a81117cf780e6c8984a3494477ce9cee846d90602001611583565b33611b586000546001600160a01b031690565b6001600160a01b031614611b7e5760405162461bcd60e51b8152600401610b08906130b0565b600a811115611b8c57600080fd5b600d8190556040518181527fc075380b8410207b8cc14f0d254ab8c8a6766469631275e4500db835a1ba02cc90602001611583565b33611bd46000546001600160a01b031690565b6001600160a01b031614611bfa5760405162461bcd60e51b8152600401610b08906130b0565b306001600160a01b03831603611c525760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610b08565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed49101610e92565b33611cc16000546001600160a01b031690565b6001600160a01b031614611ce75760405162461bcd60e51b8152600401610b08906130b0565b6001600160a01b038116611d4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b08565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33611dba6000546001600160a01b031690565b6001600160a01b031614611de05760405162461bcd60e51b8152600401610b08906130b0565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc929101610e92565b33611e4f6000546001600160a01b031690565b6001600160a01b031614611e755760405162461bcd60e51b8152600401610b08906130b0565b601c80546001600160a01b0319166001600160a01b0383161790556040517f1a806adf87d2b694e80e69bda66ee145c65fb0ef3615fec509da7adc260316af90611583908390612d44565b6001600160a01b038316611f0a5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b08565b6001600160a01b038216611f525760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b08565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffe5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b08565b6001600160a01b0382166120475760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b08565b60075460ff1615612155576000546001600160a01b0383811691161480159061208d57506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156120a75750601a546001600160a01b03838116911614155b15612155573260009081526006602052604090205443116121425760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b08565b3260009081526006602052604090204390555b6001600160a01b03831660009081526004602052604090205460ff168061219457506001600160a01b03821660009081526004602052604090205460ff165b156121a9576121a4838383612459565b505050565b6000600f54116121f55760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401610b08565b6121a483838361255a565b6019805460ff191660019081179091553060009081526020919091526040812054600c54600b54919291612234919061311a565b600d54601a546001600160a01b0316600090815260016020526040812054929350916103e89161226391613099565b61226d91906130e5565b90508160000361227f5750505061244c565b831561229b5750306000908152600160205260409020546122ab565b808310156122ab5750505061244c565b60006122b5610d6b565b6122d75782600b54836122c89190613099565b6122d291906130e5565b6122da565b60005b905060006122e88284613107565b905060006122f76002846130e5565b90506000612305838361311a565b90504761231182612911565b600061231d8247613107565b9050851561234a576000836123328684613099565b61233c91906130e5565b90506123488582612a8a565b505b600060646011544761235c9190613099565b61236691906130e5565b9050600060646010544761237a9190613099565b61238491906130e5565b905081156123e357601b546040516000916001600160a01b03169084908381818185875af1925050503d80600081146123d9576040519150601f19603f3d011682016040523d82523d6000602084013e6123de565b606091505b505050505b801561244057601c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612436576040519150601f19603f3d011682016040523d82523d6000602084013e61243b565b606091505b505050505b50505050505050505050505b506019805460ff19169055565b6001600160a01b038316600090815260016020526040902054818110156124bd5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b08565b6001600160a01b038416600090815260016020526040812080548492906124e5908490613107565b90915550506001600160a01b0383166000908152600160205260408120805484929061251290849061311a565b92505081905550826001600160a01b0316846001600160a01b031660008051602061329e8339815191528460405161254c91815260200190565b60405180910390a350505050565b6001600160a01b038316600090815260016020526040902054818110156125be5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b08565b6001600160a01b03841660009081526003602052604081205460ff16806125fd57506001600160a01b03841660009081526003602052604090205460ff165b6001600160a01b03861660009081526005602052604090205490915060ff168015612626575080155b156126d35760135483111561264d5760405162461bcd60e51b8152600401610b0890613163565b6001600160a01b038416600090815260016020526040902054601254612673858361311a565b11156126cd5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610b08565b50612720565b6001600160a01b03841660009081526005602052604090205460ff1680156126f9575080155b15612720576013548311156127205760405162461bcd60e51b8152600401610b0890613163565b6001600160a01b0380861660009081526005602052604080822054928716825281205460ff928316921690811561275a575060095461276e565b8215612769575060085461276e565b50600a545b601a546001600160a01b038981169116148015906127945750601954610100900460ff16155b80156127a3575060195460ff16155b156127b2576127b26000612200565b60195460ff161580156127dd57506001600160a01b03871660009081526005602052604090205460ff165b80156127f1575060195462010000900460ff165b801561280c5750601554601654612808919061311a565b4210155b1561281b57612819612b48565b505b60006128378783600b54600c54612832919061311a565b612d0f565b905060006128458289613107565b6001600160a01b038b16600090815260016020526040812080549293508a92909190612872908490613107565b9091555050306000908152600160205260408120805484929061289690849061311a565b90915550506001600160a01b038916600090815260016020526040812080548392906128c390849061311a565b92505081905550886001600160a01b03168a6001600160a01b031660008051602061329e833981519152836040516128fd91815260200190565b60405180910390a350505050505050505050565b601954612930903090630100000090046001600160a01b031683611ec0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612965576129656131ab565b60200260200101906001600160a01b031690816001600160a01b031681525050601960039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fc91906131c1565b81600181518110612a0f57612a0f6131ab565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815263010000009091049091169063791ac94790612a5e9085906000908690309042906004016131de565b600060405180830381600087803b158015612a7857600080fd5b505af19250505080156121a457505050565b601954612aa9903090630100000090046001600160a01b031684611ec0565b60195460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015263010000009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612b1c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b41919061324f565b5050505050565b42601655601a546040516370a0823160e01b8152600091829130916370a0823191612b7f916001600160a01b031690600401612d44565b602060405180830381865afa158015612b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc0919061312d565b9050600061271060145483612bd59190613099565b612bdf91906130e5565b90508015612c7a57601a546001600160a01b031660009081526001602052604081208054839290612c11908490613107565b909155505061dead6000908152600160205260008051602061327e8339815191528054839290612c4290849061311a565b9091555050601a5460405182815261dead916001600160a01b03169060008051602061329e8339815191529060200160405180910390a35b601a546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015612cc457600080fd5b505af1158015612cd8573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6000612d1d6103e880613099565b82612d288587613099565b612d329190613099565b612d3c91906130e5565b949350505050565b6001600160a01b0391909116815260200190565b600060208083528351808285015260005b81811015612d8557858101830151858201604001528201612d69565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612dbb57600080fd5b50565b60008060408385031215612dd157600080fd5b8235612ddc81612da6565b946020939093013593505050565b600080600060608486031215612dff57600080fd5b8335612e0a81612da6565b92506020840135612e1a81612da6565b929592945050506040919091013590565b8015158114612dbb57600080fd5b60008060408385031215612e4c57600080fd5b8235612e5781612da6565b91506020830135612e6781612e2b565b809150509250929050565b600060208284031215612e8457600080fd5b8135612e8f81612da6565b9392505050565b60008060408385031215612ea957600080fd5b50508035926020909101359150565b600080600060608486031215612ecd57600080fd5b83359250602084013591506040840135612ee681612e2b565b809150509250925092565b600060208284031215612f0357600080fd5b8135612e8f81612e2b565b600060208284031215612f2057600080fd5b5035919050565b600080600080600060a08688031215612f3f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612f7557600080fd5b8235612f8081612da6565b91506020830135612e6781612da6565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612fe1578160001904821115612fc757612fc7612f90565b80851615612fd457918102915b93841c9390800290612fab565b509250929050565b600082612ff857506001610aa8565b8161300557506000610aa8565b816001811461301b576002811461302557613041565b6001915050610aa8565b60ff84111561303657613036612f90565b50506001821b610aa8565b5060208310610133831016604e8410600b8410161715613064575081810a610aa8565b61306e8383612fa6565b806000190482111561308257613082612f90565b029392505050565b6000612e8f60ff841683612fe9565b8082028115828204841417610aa857610aa8612f90565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008261310257634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610aa857610aa8612f90565b80820180821115610aa857610aa8612f90565b60006020828403121561313f57600080fd5b5051919050565b60006020828403121561315857600080fd5b8151612e8f81612e2b565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131d357600080fd5b8151612e8f81612da6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561322e5784516001600160a01b031683529383019391830191600101613209565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326457600080fd5b835192506020840151915060408401519050925092509256feb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209ec7ff6d076b5ba0e0f5857d6e808431a23ff749f1309f4d7acfe7dbf89696d964736f6c63430008110033

Deployed Bytecode Sourcemap

2978:17835:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4827:50;;;;;;;;;;;;4870:6;4827:50;;;;;;;;;:::i;:::-;;;;;;;;18625:78;;;;;;;;;;-1:-1:-1;18696:5:0;;;;;;;;;;;;-1:-1:-1;;;18696:5:0;;;;18625:78;;;;;;;:::i;19381:158::-;;;;;;;;;;-1:-1:-1;19381:158:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;19381:158:0;1231:187:1;3985:35:0;;;;;;;;;;;;;;;;;;;1569:25:1;;;1557:2;1542:18;3985:35:0;1423:177:1;18881:84:0;;;;;;;;;;;;;:::i;4468:47::-;;;;;;;;;;;;;;;;4324:36;;;;;;;;;;;;;;;;16097:319;;;;;;;;;;;;;:::i;:::-;;19845:382;;;;;;;;;;-1:-1:-1;19845:382:0;;;;;:::i;:::-;;:::i;14927:123::-;;;;;;;;;;;;;:::i;4380:45::-;;;;;;;;;;;;;;;;4642:32;;;;;;;;;;-1:-1:-1;4642:32:0;;;;;;;;;;;18797:78;;;;;;;;;;-1:-1:-1;18797:78:0;;3607:2;2208:36:1;;2196:2;2181:18;18797:78:0;2066:184:1;20233:202:0;;;;;;;;;;-1:-1:-1;20233:202:0;;;;;:::i;:::-;;:::i;15376:127::-;;;;;;;;;;;;;:::i;12451:149::-;;;;;;;;;;;;;:::i;3682:23::-;;;;;;;;;;;;;;;;15056:179;;;;;;;;;;-1:-1:-1;15056:179:0;;;;;:::i;:::-;;:::i;4613:22::-;;;;;;;;;;-1:-1:-1;4613:22:0;;;;;;;;;;;15963:128;;;;;;;;;;-1:-1:-1;15963:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;16056:27:0;16032:4;16056:27;;;:18;:27;;;;;;;;;15963:128;7789:189;;;;;;;;;;;;;:::i;7984:97::-;;;;;;;;;;;;;:::i;7230:551::-;;;;;;;;;;-1:-1:-1;7230:551:0;;;;;:::i;:::-;;:::i;3822:21::-;;;;;;;;;;;;;;;;18971:100;;;;;;;;;;-1:-1:-1;18971:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;19051:18:0;19037:4;19051:18;;;:9;:18;;;;;;;18971:100;16422:250;;;;;;;;;;;;;:::i;2561:142::-;;;;;;;;;;;;;:::i;16678:447::-;;;;;;;;;;-1:-1:-1;16678:447:0;;;;;:::i;:::-;;:::i;4758:30::-;;;;;;;;;;-1:-1:-1;4758:30:0;;;;-1:-1:-1;;;;;4758:30:0;;;6981:243;;;;;;;;;;-1:-1:-1;6981:243:0;;;;;:::i;:::-;;:::i;3754:27::-;;;;;;;;;;;;;;;;6667:160;;;;;;;;;;-1:-1:-1;6667:160:0;;;;;:::i;:::-;;:::i;15241:129::-;;;;;;;;;;-1:-1:-1;15241:129:0;;;;;:::i;:::-;;:::i;18541:78::-;;;;;;;;;;-1:-1:-1;18593:7:0;2417:6;-1:-1:-1;;;;;2417:6:0;18541:78;18881:84;4795:24;;;;;;;;;;-1:-1:-1;4795:24:0;;;;-1:-1:-1;;;;;4795:24:0;;;18709:82;;;;;;;;;;-1:-1:-1;18782:7:0;;;;;;;;;;;;-1:-1:-1;;;18782:7:0;;;;18709:82;;17722:807;;;;;;;;;;-1:-1:-1;17722:807:0;;;;;:::i;:::-;;:::i;4522:35::-;;;;;;;;;;;;;;;;20441:334;;;;;;;;;;-1:-1:-1;20441:334:0;;;;;:::i;:::-;;:::i;4432:29::-;;;;;;;;;;;;;;;;19211:164;;;;;;;;;;-1:-1:-1;19211:164:0;;;;;:::i;:::-;;:::i;4027:27::-;;;;;;;;;;;;;;;;11941:504;;;;;;;;;;-1:-1:-1;11941:504:0;;;;;:::i;:::-;;:::i;4244:31::-;;;;;;;;;;;;;;;;11645:290;;;;;;;;;;-1:-1:-1;11645:290:0;;;;;:::i;:::-;;:::i;3788:27::-;;;;;;;;;;;;;;;;14815:106;;;;;;;;;;-1:-1:-1;14905:6:0;14864:4;14887:26;:9;:26;;-1:-1:-1;;;;;;;;;;;14887:26:0;14815:106;;3423:39;;;;;;;;;;-1:-1:-1;3423:39:0;;;;;;;;4282:35;;;;;;;;;;;;;;;;3722:25;;;;;;;;;;;;;;;;11387:252;;;;;;;;;;-1:-1:-1;11387:252:0;;;;;:::i;:::-;;:::i;3258:35::-;;;;;;;;;;-1:-1:-1;3258:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3203:48;;;;;;;;;;-1:-1:-1;3203:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19077:128;;;;;;;;;;-1:-1:-1;19077:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;19175:19:0;;;19161:4;19175:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19077:128;15509:251;;;;;;;;;;-1:-1:-1;15509:251:0;;;;;:::i;:::-;;:::i;3889:27::-;;;;;;;;;;;;;;;;2709:236;;;;;;;;;;-1:-1:-1;2709:236:0;;;;;:::i;:::-;;:::i;15766:191::-;;;;;;;;;;-1:-1:-1;15766:191:0;;;;;:::i;:::-;;:::i;6833:142::-;;;;;;;;;;-1:-1:-1;6833:142:0;;;;;:::i;:::-;;:::i;19381:158::-;19455:4;19472:37;19481:10;19493:7;19502:6;19472:8;:37::i;:::-;-1:-1:-1;19527:4:0;19381:158;;;;;:::o;18881:84::-;18936:4;3662:13;3607:2;3662;:13;:::i;:::-;3654:21;;:5;:21;:::i;:::-;18943:20;;18881:84;:::o;16097:319::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;;;;;;;;;16159:15:::1;::::0;:18;16151:45:::1;;;::::0;-1:-1:-1;;;16151:45:0;;7186:2:1;16151:45:0::1;::::0;::::1;7168:21:1::0;7225:2;7205:18;;;7198:30;-1:-1:-1;;;7244:18:1;;;7237:45;7299:18;;16151:45:0::1;6984:339:1::0;16151:45:0::1;16223:15;16207;:31:::0;16289:4:::1;3662:13;3607:2;3662;:13;:::i;:::-;3654:21;::::0;:5:::1;:21;:::i;:::-;16268:18;::::0;16284:2:::1;16268:18;:::i;:::-;:25;;;;:::i;:::-;16249:16;:44:::0;;;16359:5:::1;::::0;3662:13:::1;::::0;:2:::1;:13;:::i;:::-;3654:21;::::0;:5:::1;:21;:::i;:::-;16337:19;::::0;16353:3:::1;16337:19;:::i;:::-;:27;;;;:::i;:::-;16314:20;:50:::0;16391:17:::1;::::0;::::1;::::0;;;::::1;16097:319::o:0;19845:382::-;19942:4;19959:36;19969:6;19977:9;19988:6;19959:9;:36::i;:::-;-1:-1:-1;;;;;20030:19:0;;20006:21;20030:19;;;:11;:19;;;;;;;;20050:10;20030:31;;;;;;;;20080:26;;;;20072:59;;;;-1:-1:-1;;;20072:59:0;;7752:2:1;20072:59:0;;;7734:21:1;7791:2;7771:18;;;7764:30;-1:-1:-1;;;7810:18:1;;;7803:50;7870:18;;20072:59:0;7550:344:1;20072:59:0;20142:55;20151:6;20159:10;20171:25;20190:6;20171:16;:25;:::i;:::-;20142:8;:55::i;:::-;-1:-1:-1;20215:4:0;;19845:382;-1:-1:-1;;;;19845:382:0:o;14927:123::-;15034:6;14979:4;15016:26;;;:9;:26;;-1:-1:-1;;;;;;;;;;;15016:26:0;3662:13;3607:2;3662;:13;:::i;:::-;3654:21;;:5;:21;:::i;:::-;15002:40;;;;:::i;20233:202::-;20338:10;20312:4;20359:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20359:32:0;;;;;;;;;;20312:4;;20329:76;;20350:7;;20359:45;;20394:10;;20359:45;:::i;15376:127::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;15434:24:::1;15453:4;15434:18;:24::i;:::-;15474:21;::::0;::::1;::::0;;;::::1;15376:127::o:0;12451:149::-;12498:4;12588;12568:19;;12545:22;:20;:22::i;:::-;:42;;;;:::i;:::-;:47;;;;:::i;:::-;12531:12;;-1:-1:-1;;;;;12531:12:0;12521:23;;;;:9;:23;;;;;;:71;;12451:149;-1:-1:-1;12451:149:0:o;15056:179::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;15137:12:::1;::::0;-1:-1:-1;;;;;15137:12:0;;::::1;15132:17:::0;;::::1;::::0;15124:49:::1;;;::::0;-1:-1:-1;;;15124:49:0;;8364:2:1;15124:49:0::1;::::0;::::1;8346:21:1::0;8403:2;8383:18;;;8376:30;-1:-1:-1;;;8422:18:1;;;8415:50;8482:18;;15124:49:0::1;8162:344:1::0;15124:49:0::1;-1:-1:-1::0;;;;;15184:10:0;::::1;;::::0;;;:5:::1;:10;::::0;;;;;;:14;;-1:-1:-1;;15184:14:0::1;::::0;::::1;;;::::0;;15214:13;::::1;::::0;::::1;::::0;15184:10;;15214:13:::1;:::i;:::-;;;;;;;;15056:179:::0;;:::o;7789:189::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;3662:13:::1;3607:2;3662;:13;:::i;:::-;3654:21;::::0;:5:::1;:21;:::i;:::-;7852:16;:32:::0;;;3662:13:::1;::::0;:2:::1;:13;:::i;:::-;3654:21;::::0;:5:::1;:21;:::i;:::-;7895:20;:36:::0;7942:20:::1;:28:::0;;-1:-1:-1;;7942:28:0::1;::::0;;7789:189::o;7984:97::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;8045:20:::1;:28:::0;;-1:-1:-1;;8045:28:0::1;::::0;;7984:97::o;7230:551::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;7354:2:::1;7340:10;:16;;7332:35;;;::::0;-1:-1:-1;;;7332:35:0;;8713:2:1;7332:35:0::1;::::0;::::1;8695:21:1::0;8752:1;8732:18;;;8725:29;-1:-1:-1;;;8770:18:1;;;8763:36;8816:18;;7332:35:0::1;8511:329:1::0;7332:35:0::1;7409:4;7395:10;:18;;7387:39;;;::::0;-1:-1:-1;;;7387:39:0;;9047:2:1;7387:39:0::1;::::0;::::1;9029:21:1::0;9086:1;9066:18;;;9059:29;-1:-1:-1;;;9104:18:1;;;9097:38;9152:18;;7387:39:0::1;8845:331:1::0;7387:39:0::1;7485:4;7472:10:::0;3662:13:::1;3607:2;3662;:13;:::i;:::-;3654:21;::::0;:5:::1;:21;:::i;:::-;7456:26;;;;:::i;:::-;:33;;;;:::i;:::-;7437:16;:52:::0;7522:2:::1;7508:16:::0;::::1;;7500:38;;;::::0;-1:-1:-1;;;7500:38:0;;9383:2:1;7500:38:0::1;::::0;::::1;9365:21:1::0;9422:1;9402:18;;;9395:29;-1:-1:-1;;;9440:18:1;;;9433:39;9489:18;;7500:38:0::1;9181:332:1::0;7500:38:0::1;7571:5;7557:10;:19;;7549:40;;;::::0;-1:-1:-1;;;7549:40:0;;9047:2:1;7549:40:0::1;::::0;::::1;9029:21:1::0;9086:1;9066:18;;;9059:29;-1:-1:-1;;;9104:18:1;;;9097:38;9152:18;;7549:40:0::1;8845:331:1::0;7549:40:0::1;7662:5;7649:10:::0;3662:13:::1;3607:2;3662;:13;:::i;:::-;3654:21;::::0;:5:::1;:21;:::i;:::-;7633:26;;;;:::i;:::-;:34;;;;:::i;:::-;7610:20;:57:::0;7683:35:::1;::::0;1569:25:1;;;7683:35:0::1;::::0;1557:2:1;1542:18;7683:35:0::1;;;;;;;7734:39;::::0;1569:25:1;;;7734:39:0::1;::::0;1557:2:1;1542:18;7734:39:0::1;1423:177:1::0;16422:250:0;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;16504:12:::1;::::0;16542:39:::1;::::0;-1:-1:-1;;;16542:39:0;;-1:-1:-1;;;;;16504:12:0;;::::1;::::0;16473:21:::1;::::0;16504:12;;16542:24:::1;::::0;:39:::1;::::0;16575:4:::1;::::0;16542:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16592:43;::::0;-1:-1:-1;;;16592:43:0;;16616:10:::1;16592:43;::::0;::::1;9881:51:1::0;9948:18;;;9941:34;;;16528:53:0;;-1:-1:-1;;;;;;16592:23:0;::::1;::::0;::::1;::::0;9854:18:1;;16592:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16651:13:0::1;::::0;::::1;::::0;;;::::1;16462:210;;16422:250::o:0;2561:142::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;2662:1:::1;2646:6:::0;;2625:40:::1;::::0;-1:-1:-1;;;;;2646:6:0;;::::1;::::0;2625:40:::1;::::0;2662:1;;2625:40:::1;2693:1;2676:19:::0;;-1:-1:-1;;;;;;2676:19:0::1;::::0;;2561:142::o;16678:447::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;16832:3:::1;16809:19;:26;;16801:90;;;::::0;-1:-1:-1;;;16801:90:0;;10438:2:1;16801:90:0::1;::::0;::::1;10420:21:1::0;10477:2;10457:18;;;10450:30;10516:34;10496:18;;;10489:62;-1:-1:-1;;;10567:18:1;;;10560:49;10626:19;;16801:90:0::1;10236:415:1::0;16801:90:0::1;16922:4;16910:8;:16;;:33;;;;-1:-1:-1::0;16930:13:0;16910:33:::1;16902:94;;;::::0;-1:-1:-1;;;16902:94:0;;10858:2:1;16902:94:0::1;::::0;::::1;10840:21:1::0;10897:2;10877:18;;;10870:30;10936:34;10916:18;;;10909:62;-1:-1:-1;;;10987:18:1;;;10980:46;11043:19;;16902:94:0::1;10656:412:1::0;16902:94:0::1;17007:15;:37:::0;;;;17055:16:::1;:27:::0;17093:13:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;17093:24:0;;::::1;::::0;;;::::1;::::0;;16678:447::o;6981:243::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;7097:3:::1;7074:21;7082:13:::0;7074:7;:21:::1;:::i;:::-;:26;;7066:35;;;::::0;::::1;;7112:6;:14:::0;;;7137:12:::1;:26:::0;;;7179:37:::1;::::0;;11247:25:1;;;11303:2;11288:18;;11281:34;;;7179:37:0::1;::::0;11220:18:1;7179:37:0::1;11073:248:1::0;6667:160:0;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;6746:15:::1;:25:::0;;-1:-1:-1;;;;;;6746:25:0::1;-1:-1:-1::0;;;;;6746:25:0;::::1;;::::0;;6787:32:::1;::::0;::::1;::::0;::::1;::::0;6746:25;;6787:32:::1;:::i;:::-;;;;;;;;6667:160:::0;:::o;15241:129::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;15309:10:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;15309:17:0;;::::1;;::::0;;15342:20:::1;::::0;::::1;::::0;::::1;::::0;15320:6;1396:14:1;1389:22;1371:41;;1359:2;1344:18;;1231:187;17722:807:0;17795:4;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;17860:19:::1;;17837:20;;:42;;;;:::i;:::-;17819:15;:60;17811:106;;;::::0;-1:-1:-1;;;17811:106:0;;11528:2:1;17811:106:0::1;::::0;::::1;11510:21:1::0;;;11547:18;;;11540:30;11606:34;11586:18;;;11579:62;11658:18;;17811:106:0::1;11326:356:1::0;17811:106:0::1;17947:4;17936:7;:15;;17928:70;;;::::0;-1:-1:-1;;;17928:70:0;;11889:2:1;17928:70:0::1;::::0;::::1;11871:21:1::0;11928:2;11908:18;;;11901:30;11967:34;11947:18;;;11940:62;-1:-1:-1;;;12018:18:1;;;12011:40;12068:19;;17928:70:0::1;11687:406:1::0;17928:70:0::1;18032:15;18009:20;:38:::0;18104:12:::1;::::0;18089:28:::1;::::0;-1:-1:-1;;;18089:28:0;;18058::::1;::::0;18089:4:::1;::::0;:14:::1;::::0;:28:::1;::::0;-1:-1:-1;;;;;18104:12:0;;::::1;::::0;18089:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18058:59:::0;-1:-1:-1;18128:20:0::1;18182:5;18151:30;18174:7:::0;18058:59;18151:30:::1;:::i;:::-;:36;;;;:::i;:::-;18128:59:::0;-1:-1:-1;18202:16:0;;18198:201:::1;;18244:12;::::0;-1:-1:-1;;;;;18244:12:0::1;18234:23;::::0;;;:9:::1;:23;::::0;;;;:37;;18259:12;;18234:23;:37:::1;::::0;18259:12;;18234:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;4870:6:0::1;18286:21;::::0;;;:9:::1;:21;::::0;-1:-1:-1;;;;;;;;;;;18286:35:0;;18309:12;;18286:21;:35:::1;::::0;18309:12;;18286:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;18350:12:0::1;::::0;18341:46:::1;::::0;1569:25:1;;;4870:6:0::1;::::0;-1:-1:-1;;;;;18350:12:0::1;::::0;-1:-1:-1;;;;;;;;;;;18341:46:0;1557:2:1;1542:18;18341:46:0::1;;;;;;;18198:201;18434:12;::::0;18458:11:::1;::::0;;-1:-1:-1;;;;;;18458:11:0;;;;-1:-1:-1;;;;;18434:12:0;;::::1;::::0;;;18458:9:::1;::::0;:11:::1;::::0;;::::1;::::0;18409:13:::1;::::0;18458:11;;;;;;;18409:13;18434:12;18458:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18485:14:0::1;::::0;::::1;::::0;-1:-1:-1;18485:14:0;;-1:-1:-1;18485:14:0::1;-1:-1:-1::0;18517:4:0::1;::::0;17722:807;-1:-1:-1;;;;17722:807:0:o;20441:334::-;20578:10;20525:4;20566:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20566:32:0;;;;;;;;;;20617:35;;;;20609:60;;;;-1:-1:-1;;;20609:60:0;;12300:2:1;20609:60:0;;;12282:21:1;12339:2;12319:18;;;12312:30;-1:-1:-1;;;12358:18:1;;;12351:42;12410:18;;20609:60:0;12098:336:1;20609:60:0;20680:65;20689:10;20701:7;20710:34;20729:15;20710:16;:34;:::i;20680:65::-;-1:-1:-1;20763:4:0;;20441:334;-1:-1:-1;;;20441:334:0:o;19211:164::-;19288:4;19305:40;19315:10;19327:9;19338:6;19305:9;:40::i;11941:504::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;12062:3:::1;12094:11:::0;;::::1;::::0;::::1;::::0;:25:::1;;;12113:6;12107:4;:12;;12094:25;:44;;;;;12132:6;12121:9;:17;;12094:44;12086:74;;;::::0;-1:-1:-1;;;12086:74:0;;12641:2:1;12086:74:0::1;::::0;::::1;12623:21:1::0;12680:2;12660:18;;;12653:30;-1:-1:-1;;;12699:18:1;;;12692:48;12757:18;;12086:74:0::1;12439:342:1::0;12086:74:0::1;4190:4;12179:13;12183:9:::0;12179:3;:13:::1;:::i;:::-;:30;12171:75;;;::::0;-1:-1:-1;;;12171:75:0;;12988:2:1;12171:75:0::1;::::0;::::1;12970:21:1::0;13027:2;13007:18;;;13000:30;13066:34;13046:18;;;13039:62;-1:-1:-1;;;13117:18:1;;;13110:31;13158:19;;12171:75:0::1;12786:397:1::0;12171:75:0::1;12257:6;:10:::0;;;12278:7:::1;:12:::0;;;12301:11:::1;:21:::0;;;12333:3:::1;:7:::0;;;12351:12:::1;:22:::0;;;12389:48:::1;::::0;;13447:25:1;;;13503:2;13488:18;;13481:34;;;13531:18;;;13524:34;;;13589:2;13574:18;;13567:34;;;13632:3;13617:19;;13610:35;;;12389:48:0::1;::::0;13434:3:1;13419:19;12389:48:0::1;;;;;;;12039:406;11941:504:::0;;;;;:::o;11645:290::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;11785:4:::1;11753:30;:36;;11745:45;;;::::0;::::1;;11801:19;:50:::0;;;11867:60:::1;::::0;1569:25:1;;;11867:60:0::1;::::0;1557:2:1;1542:18;11867:60:0::1;1423:177:1::0;11387:252:0;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;11504:2:::1;11479:23;:27;;11471:36;;;::::0;::::1;;11535:12;:36:::0;;;11587:44:::1;::::0;1569:25:1;;;11587:44:0::1;::::0;1557:2:1;1542:18;11587:44:0::1;1423:177:1::0;15509:251:0;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;15626:4:::1;-1:-1:-1::0;;;;;15609:22:0;::::1;::::0;15601:60:::1;;;::::0;-1:-1:-1;;;15601:60:0;;13858:2:1;15601:60:0::1;::::0;::::1;13840:21:1::0;13897:2;13877:18;;;13870:30;13936:28;13916:18;;;13909:56;13982:18;;15601:60:0::1;13656:350:1::0;15601:60:0::1;-1:-1:-1::0;;;;;15672:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;15672:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15721:31;;14179:51:1;;;14246:18;;;14239:50;15721:31:0::1;::::0;14152:18:1;15721:31:0::1;14011:284:1::0;2709:236:0;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2790:22:0;::::1;2782:73;;;::::0;-1:-1:-1;;;2782:73:0;;14502:2:1;2782:73:0::1;::::0;::::1;14484:21:1::0;14541:2;14521:18;;;14514:30;14580:34;14560:18;;;14553:62;-1:-1:-1;;;14631:18:1;;;14624:36;14677:19;;2782:73:0::1;14300:402:1::0;2782:73:0::1;2892:6;::::0;;2871:38:::1;::::0;-1:-1:-1;;;;;2871:38:0;;::::1;::::0;2892:6;::::1;::::0;2871:38:::1;::::0;::::1;2920:6;:17:::0;;-1:-1:-1;;;;;;2920:17:0::1;-1:-1:-1::0;;;;;2920:17:0;;;::::1;::::0;;;::::1;::::0;;2709:236::o;15766:191::-;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15864:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;15864:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15915:34;;14179:51:1;;;14246:18;;;14239:50;15915:34:0::1;::::0;14152:18:1;15915:34:0::1;14011:284:1::0;6833:142:0;2488:10;2477:7;2390;2417:6;-1:-1:-1;;;;;2417:6:0;;2352:79;2477:7;-1:-1:-1;;;;;2477:21:0;;2469:66;;;;-1:-1:-1;;;2469:66:0;;;;;;;:::i;:::-;6906:9:::1;:19:::0;;-1:-1:-1;;;;;;6906:19:0::1;-1:-1:-1::0;;;;;6906:19:0;::::1;;::::0;;6941:26:::1;::::0;::::1;::::0;::::1;::::0;6906:19;;6941:26:::1;:::i;19545:294::-:0;-1:-1:-1;;;;;19635:19:0;;19627:49;;;;-1:-1:-1;;;19627:49:0;;14909:2:1;19627:49:0;;;14891:21:1;14948:2;14928:18;;;14921:30;-1:-1:-1;;;14967:18:1;;;14960:47;15024:18;;19627:49:0;14707:341:1;19627:49:0;-1:-1:-1;;;;;19695:21:0;;19687:49;;;;-1:-1:-1;;;19687:49:0;;15255:2:1;19687:49:0;;;15237:21:1;15294:2;15274:18;;;15267:30;-1:-1:-1;;;15313:18:1;;;15306:45;15368:18;;19687:49:0;15053:339:1;19687:49:0;-1:-1:-1;;;;;19747:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19799:32;;1569:25:1;;;19799:32:0;;1542:18:1;19799:32:0;;;;;;;19545:294;;;:::o;8091:931::-;-1:-1:-1;;;;;8184:20:0;;8176:51;;;;-1:-1:-1;;;8176:51:0;;15599:2:1;8176:51:0;;;15581:21:1;15638:2;15618:18;;;15611:30;-1:-1:-1;;;15657:18:1;;;15650:48;15715:18;;8176:51:0;15397:342:1;8176:51:0;-1:-1:-1;;;;;8246:23:0;;8238:52;;;;-1:-1:-1;;;8238:52:0;;15946:2:1;8238:52:0;;;15928:21:1;15985:2;15965:18;;;15958:30;-1:-1:-1;;;16004:18:1;;;15997:46;16060:18;;8238:52:0;15744:340:1;8238:52:0;8306:20;;;;8302:419;;;2390:7;2417:6;-1:-1:-1;;;;;8354:20:0;;;2417:6;;8354:20;;;;:46;;-1:-1:-1;;;;;;8378:22:0;;4920:42;8378:22;;8354:46;:75;;;;-1:-1:-1;8417:12:0;;-1:-1:-1;;;;;8404:25:0;;;8417:12;;8404:25;;8354:75;8350:352;;;8494:9;8465:39;;;;:28;:39;;;;;;8507:12;-1:-1:-1;8457:140:0;;;;-1:-1:-1;;;8457:140:0;;16291:2:1;8457:140:0;;;16273:21:1;16330:2;16310:18;;;16303:30;16369:34;16349:18;;;16342:62;16440:34;16420:18;;;16413:62;-1:-1:-1;;;16491:19:1;;;16484:40;16541:19;;8457:140:0;16089:477:1;8457:140:0;8653:9;8624:39;;;;:28;:39;;;;;8666:12;8624:54;;8350:352;-1:-1:-1;;;;;8734:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;8762:27:0;;;;;;:16;:27;;;;;;;;8734:55;8731:284;;;8804:43;8821:6;8829:9;8840:6;8804:16;:43::i;:::-;8091:931;;;:::o;8731:284::-;8903:1;8887:15;;:17;8879:52;;;;-1:-1:-1;;;8879:52:0;;16773:2:1;8879:52:0;;;16755:21:1;16812:2;16792:18;;;16785:30;-1:-1:-1;;;16831:18:1;;;16824:53;16894:18;;8879:52:0;16571:347:1;8879:52:0;8946:39;8961:6;8968:9;8978:6;8946:14;:39::i;12606:1378::-;5844:27;:34;;-1:-1:-1;;5844:34:0;5874:4;5844:34;;;;;;12722:4:::1;5844:27:::0;12704:24;;;::::1;::::0;;;;;;;;12766:3:::1;::::0;12753:12:::1;::::0;12704:24;;5844:27;12753:16:::1;::::0;12766:3;12753:16:::1;:::i;:::-;12821:12;::::0;12807::::1;::::0;-1:-1:-1;;;;;12807:12:0::1;12780:16;12797:23:::0;;;:9:::1;:23;::::0;;;;;12739:30;;-1:-1:-1;12780:16:0;12834:4:::1;::::0;12797:36:::1;::::0;::::1;:::i;:::-;:41;;;;:::i;:::-;12780:58;;12852:8;12862:1;12852:11:::0;12849:22:::1;;12864:7;;;;;12849:22;12884:12;12881:134;;;-1:-1:-1::0;12941:4:0::1;12923:24;::::0;;;:9:::1;:24;::::0;;;;;12881:134:::1;;;12982:11;12966:15;:27;12963:52;;;13008:7;;;;;12963:52;13027:22;13060:17;:15;:17::i;:::-;:65;;13117:8;13103:12;;13091:11;:24;;;;:::i;:::-;13090:35;;;;:::i;:::-;13060:65;;;13078:1;13060:65;13027:98:::0;-1:-1:-1;13138:20:0::1;13160:29;13027:98:::0;13160:11;:29:::1;:::i;:::-;13138:51:::0;-1:-1:-1;13202:12:0::1;13215:19;13233:1;13215:17:::0;:19:::1;:::i;:::-;13202:32:::0;-1:-1:-1;13245:14:0::1;13260:23;13268:15:::0;13202:32;13260:23:::1;:::i;:::-;13245:38:::0;-1:-1:-1;13317:21:0::1;13349:27;13245:38:::0;13349:16:::1;:27::i;:::-;13387:11;13400:41;13424:17:::0;13400:21:::1;:41;:::i;:::-;13387:55:::0;-1:-1:-1;13458:19:0;;13455:135:::1;;13493:11;13524:9:::0;13508:14:::1;13515:7:::0;13508:6;:14:::1;:::i;:::-;13507:26;;;;:::i;:::-;13493:40;;13548:30;13562:7;13571:6;13548:13;:30::i;:::-;13478:112;13455:135;13600:18;13656:3;13643:12;;13619:21;:36;;;;:::i;:::-;:40;;;;:::i;:::-;13600:59;;13670:15;13717:3;13710:6;;13686:21;:30;;;;:::i;:::-;:34;;;;:::i;:::-;13670:50:::0;-1:-1:-1;13734:15:0;;13731:130:::1;;13779:15;::::0;:45:::1;::::0;13762:14:::1;::::0;-1:-1:-1;;;;;13779:15:0::1;::::0;13806:13;;13762:14;13779:45;13762:14;13779:45;13806:13;13779:15;:45:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;13731:130:0::1;13874:12:::0;;13871:106:::1;;13910:9;::::0;:36:::1;::::0;13899:8:::1;::::0;-1:-1:-1;;;;;13910:9:0::1;::::0;13931:10;;13899:8;13910:36;13899:8;13910:36;13931:10;13910:9;:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;13871:106:0::1;12672:1312;;;;;;;;;;;5889:1;-1:-1:-1::0;5901:27:0;:35;;-1:-1:-1;;5901:35:0;;;12606:1378::o;11042:339::-;-1:-1:-1;;;;;11155:17:0;;11134:18;11155:17;;;:9;:17;;;;;;11191:23;;;;11183:60;;;;-1:-1:-1;;;11183:60:0;;17335:2:1;11183:60:0;;;17317:21:1;17374:2;17354:18;;;17347:30;-1:-1:-1;;;17393:18:1;;;17386:54;17457:18;;11183:60:0;17133:348:1;11183:60:0;-1:-1:-1;;;;;11254:17:0;;;;;;:9;:17;;;;;:25;;11273:6;;11254:17;:25;;11273:6;;11254:25;:::i;:::-;;;;-1:-1:-1;;;;;;;11290:20:0;;;;;;:9;:20;;;;;:28;;11312:6;;11290:20;:28;;11312:6;;11290:28;:::i;:::-;;;;;;;;11356:9;-1:-1:-1;;;;;11340:33:0;11349:6;-1:-1:-1;;;;;11340:33:0;-1:-1:-1;;;;;;;;;;;11366:6:0;11340:33;;;;1569:25:1;;1557:2;1542:18;;1423:177;11340:33:0;;;;;;;;11123:258;11042:339;;;:::o;9034:1820::-;-1:-1:-1;;;;;9145:17:0;;9124:18;9145:17;;;:9;:17;;;;;;9181:23;;;;9173:60;;;;-1:-1:-1;;;9173:60:0;;17335:2:1;9173:60:0;;;17317:21:1;17374:2;17354:18;;;17347:30;-1:-1:-1;;;17393:18:1;;;17386:54;17457:18;;9173:60:0;17133:348:1;9173:60:0;-1:-1:-1;;;;;9267:26:0;;9244:20;9267:26;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;9297:29:0;;;;;;:18;:29;;;;;;;;9267:59;-1:-1:-1;;;;;9341:13:0;;;;;;:5;:13;;;;;;9244:82;;-1:-1:-1;9341:13:0;;:46;;;;;9372:15;9371:16;9341:46;9337:642;;;9440:20;;9430:6;:30;;9404:132;;;;-1:-1:-1;;;9404:132:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19051:18:0;;9551:32;19051:18;;;:9;:18;;;;;;9684:16;;9647:33;9674:6;19051:18;9647:33;:::i;:::-;:53;;9621:151;;;;-1:-1:-1;;;9621:151:0;;18097:2:1;9621:151:0;;;18079:21:1;18136:2;18116:18;;;18109:30;18175:34;18155:18;;;18148:62;-1:-1:-1;;;18226:18:1;;;18219:34;18270:19;;9621:151:0;17895:400:1;9621:151:0;9389:395;9337:642;;;-1:-1:-1;;;;;9808:16:0;;;;;;:5;:16;;;;;;;;:49;;;;;9842:15;9841:16;9808:49;9790:189;;;9902:20;;9892:6;:30;;9884:83;;;;-1:-1:-1;;;9884:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10002:13:0;;;9991:10;10002:13;;;:5;:13;;;;;;;10038:16;;;;;;;;10002:13;;;;;10038:16;;10084:145;;;;-1:-1:-1;10113:7:0;;10084:145;;;10140:5;10137:92;;;-1:-1:-1;10165:6:0;;10137:92;;;-1:-1:-1;10206:11:0;;10137:92;10253:12;;-1:-1:-1;;;;;10245:20:0;;;10253:12;;10245:20;;;;10244:37;;-1:-1:-1;10270:10:0;;;;;;;10269:11;10244:37;:69;;;;-1:-1:-1;10285:27:0;;;;10284:28;10244:69;10241:112;;;10328:25;10347:5;10328:18;:25::i;:::-;10370:27;;;;10369:28;:48;;;;-1:-1:-1;;;;;;10401:16:0;;;;;;:5;:16;;;;;;;;10369:48;:65;;;;-1:-1:-1;10421:13:0;;;;;;;10369:65;:120;;;;;10474:15;;10457:14;;:32;;;;:::i;:::-;10438:15;:51;;10369:120;10366:169;;;10505:18;:16;:18::i;:::-;;10366:169;10547:18;10566:44;10580:6;10588:3;10597:12;;10593:3;;:16;;;;:::i;:::-;10566:13;:44::i;:::-;10547:63;-1:-1:-1;10621:16:0;10638:20;10547:63;10638:6;:20;:::i;:::-;-1:-1:-1;;;;;10671:17:0;;;;;;:9;:17;;;;;:25;;10621:37;;-1:-1:-1;10690:6:0;;10671:17;;;:25;;10690:6;;10671:25;:::i;:::-;;;;-1:-1:-1;;10725:4:0;10707:24;;;;:9;:24;;;;;:41;;10735:13;;10707:24;:41;;10735:13;;10707:41;:::i;:::-;;;;-1:-1:-1;;;;;;;10759:20:0;;;;;;:9;:20;;;;;:33;;10781:11;;10759:20;:33;;10781:11;;10759:33;:::i;:::-;;;;;;;;10824:9;-1:-1:-1;;;;;10808:38:0;10817:6;-1:-1:-1;;;;;10808:38:0;-1:-1:-1;;;;;;;;;;;10834:11:0;10808:38;;;;1569:25:1;;1557:2;1542:18;;1423:177;10808:38:0;;;;;;;;9113:1741;;;;;;;9034:1820;;;:::o;13990:462::-;14080:10;;14048:52;;14065:4;;14080:10;;;-1:-1:-1;;;;;14080:10:0;14093:6;14048:8;:52::i;:::-;14135:16;;;14149:1;14135:16;;;;;;;;14111:21;;14135:16;;;;;;;;;;-1:-1:-1;14135:16:0;14111:40;;14180:4;14162;14167:1;14162:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;14162:23:0;;;-1:-1:-1;;;;;14162:23:0;;;;;14206:10;;;;;;;;;-1:-1:-1;;;;;14206:10:0;-1:-1:-1;;;;;14206:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14196:4;14201:1;14196:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14196:27:0;;;:7;;;;;;;;;:27;14240:10;;:186;;-1:-1:-1;;;14240:186:0;;:10;;;;;;;;:61;;:186;;14316:6;;14337:1;;14353:4;;14380;;14400:15;;14240:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14037:415;13990:462;:::o;14458:351::-;14566:10;;14534:57;;14551:4;;14566:10;;;-1:-1:-1;;;;;14566:10:0;14579:11;14534:8;:57::i;:::-;14602:10;;:199;;-1:-1:-1;;;14602:199:0;;14669:4;14602:199;;;20146:34:1;;;20196:18;;;20189:34;;;14715:1:0;20239:18:1;;;20232:34;;;20282:18;;;20275:34;20325:19;;;20318:44;14775:15:0;20378:19:1;;;20371:35;14602:10:0;;;;-1:-1:-1;;;;;14602:10:0;;:26;;14636:9;;20080:19:1;;14602:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14458:351;;:::o;17131:583::-;17210:15;17193:14;:32;17282:12;;17267:28;;-1:-1:-1;;;17267:28:0;;17177:4;;;;17267;;:14;;:28;;-1:-1:-1;;;;;17282:12:0;;17267:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17236:59;;17306:20;17369:5;17352:16;;17329:20;:39;;;;:::i;:::-;:45;;;;:::i;:::-;17306:68;-1:-1:-1;17389:16:0;;17385:201;;17431:12;;-1:-1:-1;;;;;17431:12:0;17421:23;;;;:9;:23;;;;;:37;;17446:12;;17421:23;:37;;17446:12;;17421:37;:::i;:::-;;;;-1:-1:-1;;4870:6:0;17473:21;;;;:9;:21;;-1:-1:-1;;;;;;;;;;;17473:35:0;;17496:12;;17473:21;:35;;17496:12;;17473:35;:::i;:::-;;;;-1:-1:-1;;17537:12:0;;17528:46;;1569:25:1;;;4870:6:0;;-1:-1:-1;;;;;17537:12:0;;-1:-1:-1;;;;;;;;;;;17528:46:0;1557:2:1;1542:18;17528:46:0;;;;;;;17385:201;17621:12;;17645:11;;;-1:-1:-1;;;;;;17645:11:0;;;;-1:-1:-1;;;;;17621:12:0;;;;;;17645:9;;:11;;;;;17596:13;;17645:11;;;;;;;17596:13;17621:12;17645:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17672:12:0;;;;-1:-1:-1;17672:12:0;;-1:-1:-1;17672:12:0;17702:4;17695:11;;;;;17131:583;:::o;10860:176::-;10945:4;10996:31;4190:4;;10996:31;:::i;:::-;10981:10;10970;10977:3;10970:6;:10;:::i;:::-;:21;;;;:::i;:::-;10969:59;;;;:::i;:::-;10962:66;10860:176;-1:-1:-1;;;;10860:176:0:o;14:203:1:-;-1:-1:-1;;;;;178:32:1;;;;160:51;;148:2;133:18;;14:203::o;222:548::-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;830:70;775:131;:::o;911:315::-;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1605:456::-;1682:6;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;1806:9;1793:23;1825:31;1850:5;1825:31;:::i;:::-;1875:5;-1:-1:-1;1932:2:1;1917:18;;1904:32;1945:33;1904:32;1945:33;:::i;:::-;1605:456;;1997:7;;-1:-1:-1;;;2051:2:1;2036:18;;;;2023:32;;1605:456::o;2255:118::-;2341:5;2334:13;2327:21;2320:5;2317:32;2307:60;;2363:1;2360;2353:12;2378:382;2443:6;2451;2504:2;2492:9;2483:7;2479:23;2475:32;2472:52;;;2520:1;2517;2510:12;2472:52;2559:9;2546:23;2578:31;2603:5;2578:31;:::i;:::-;2628:5;-1:-1:-1;2685:2:1;2670:18;;2657:32;2698:30;2657:32;2698:30;:::i;:::-;2747:7;2737:17;;;2378:382;;;;;:::o;2765:247::-;2824:6;2877:2;2865:9;2856:7;2852:23;2848:32;2845:52;;;2893:1;2890;2883:12;2845:52;2932:9;2919:23;2951:31;2976:5;2951:31;:::i;:::-;3001:5;2765:247;-1:-1:-1;;;2765:247:1:o;3017:248::-;3085:6;3093;3146:2;3134:9;3125:7;3121:23;3117:32;3114:52;;;3162:1;3159;3152:12;3114:52;-1:-1:-1;;3185:23:1;;;3255:2;3240:18;;;3227:32;;-1:-1:-1;3017:248:1:o;3270:377::-;3344:6;3352;3360;3413:2;3401:9;3392:7;3388:23;3384:32;3381:52;;;3429:1;3426;3419:12;3381:52;3465:9;3452:23;3442:33;;3522:2;3511:9;3507:18;3494:32;3484:42;;3576:2;3565:9;3561:18;3548:32;3589:28;3611:5;3589:28;:::i;:::-;3636:5;3626:15;;;3270:377;;;;;:::o;3652:241::-;3708:6;3761:2;3749:9;3740:7;3736:23;3732:32;3729:52;;;3777:1;3774;3767:12;3729:52;3816:9;3803:23;3835:28;3857:5;3835:28;:::i;3898:180::-;3957:6;4010:2;3998:9;3989:7;3985:23;3981:32;3978:52;;;4026:1;4023;4016:12;3978:52;-1:-1:-1;4049:23:1;;3898:180;-1:-1:-1;3898:180:1:o;4083:454::-;4178:6;4186;4194;4202;4210;4263:3;4251:9;4242:7;4238:23;4234:33;4231:53;;;4280:1;4277;4270:12;4231:53;-1:-1:-1;;4303:23:1;;;4373:2;4358:18;;4345:32;;-1:-1:-1;4424:2:1;4409:18;;4396:32;;4475:2;4460:18;;4447:32;;-1:-1:-1;4526:3:1;4511:19;4498:33;;-1:-1:-1;4083:454:1;-1:-1:-1;4083:454:1:o;4542:388::-;4610:6;4618;4671:2;4659:9;4650:7;4646:23;4642:32;4639:52;;;4687:1;4684;4677:12;4639:52;4726:9;4713:23;4745:31;4770:5;4745:31;:::i;:::-;4795:5;-1:-1:-1;4852:2:1;4837:18;;4824:32;4865:33;4824:32;4865:33;:::i;4935:127::-;4996:10;4991:3;4987:20;4984:1;4977:31;5027:4;5024:1;5017:15;5051:4;5048:1;5041:15;5067:422;5156:1;5199:5;5156:1;5213:270;5234:7;5224:8;5221:21;5213:270;;;5293:4;5289:1;5285:6;5281:17;5275:4;5272:27;5269:53;;;5302:18;;:::i;:::-;5352:7;5342:8;5338:22;5335:55;;;5372:16;;;;5335:55;5451:22;;;;5411:15;;;;5213:270;;;5217:3;5067:422;;;;;:::o;5494:806::-;5543:5;5573:8;5563:80;;-1:-1:-1;5614:1:1;5628:5;;5563:80;5662:4;5652:76;;-1:-1:-1;5699:1:1;5713:5;;5652:76;5744:4;5762:1;5757:59;;;;5830:1;5825:130;;;;5737:218;;5757:59;5787:1;5778:10;;5801:5;;;5825:130;5862:3;5852:8;5849:17;5846:43;;;5869:18;;:::i;:::-;-1:-1:-1;;5925:1:1;5911:16;;5940:5;;5737:218;;6039:2;6029:8;6026:16;6020:3;6014:4;6011:13;6007:36;6001:2;5991:8;5988:16;5983:2;5977:4;5974:12;5970:35;5967:77;5964:159;;;-1:-1:-1;6076:19:1;;;6108:5;;5964:159;6155:34;6180:8;6174:4;6155:34;:::i;:::-;6225:6;6221:1;6217:6;6213:19;6204:7;6201:32;6198:58;;;6236:18;;:::i;:::-;6274:20;;5494:806;-1:-1:-1;;;5494:806:1:o;6305:140::-;6363:5;6392:47;6433:4;6423:8;6419:19;6413:4;6392:47;:::i;6450:168::-;6523:9;;;6554;;6571:15;;;6565:22;;6551:37;6541:71;;6592:18;;:::i;6623:356::-;6825:2;6807:21;;;6844:18;;;6837:30;6903:34;6898:2;6883:18;;6876:62;6970:2;6955:18;;6623:356::o;7328:217::-;7368:1;7394;7384:132;;7438:10;7433:3;7429:20;7426:1;7419:31;7473:4;7470:1;7463:15;7501:4;7498:1;7491:15;7384:132;-1:-1:-1;7530:9:1;;7328:217::o;7899:128::-;7966:9;;;7987:11;;;7984:37;;;8001:18;;:::i;8032:125::-;8097:9;;;8118:10;;;8115:36;;;8131:18;;:::i;9518:184::-;9588:6;9641:2;9629:9;9620:7;9616:23;9612:32;9609:52;;;9657:1;9654;9647:12;9609:52;-1:-1:-1;9680:16:1;;9518:184;-1:-1:-1;9518:184:1:o;9986:245::-;10053:6;10106:2;10094:9;10085:7;10081:23;10077:32;10074:52;;;10122:1;10119;10112:12;10074:52;10154:9;10148:16;10173:28;10195:5;10173:28;:::i;17486:404::-;17688:2;17670:21;;;17727:2;17707:18;;;17700:30;17766:34;17761:2;17746:18;;17739:62;-1:-1:-1;;;17832:2:1;17817:18;;17810:38;17880:3;17865:19;;17486:404::o;18432:127::-;18493:10;18488:3;18484:20;18481:1;18474:31;18524:4;18521:1;18514:15;18548:4;18545:1;18538:15;18564:251;18634:6;18687:2;18675:9;18666:7;18662:23;18658:32;18655:52;;;18703:1;18700;18693:12;18655:52;18735:9;18729:16;18754:31;18779:5;18754:31;:::i;18820:980::-;19082:4;19130:3;19119:9;19115:19;19161:6;19150:9;19143:25;19187:2;19225:6;19220:2;19209:9;19205:18;19198:34;19268:3;19263:2;19252:9;19248:18;19241:31;19292:6;19327;19321:13;19358:6;19350;19343:22;19396:3;19385:9;19381:19;19374:26;;19435:2;19427:6;19423:15;19409:29;;19456:1;19466:195;19480:6;19477:1;19474:13;19466:195;;;19545:13;;-1:-1:-1;;;;;19541:39:1;19529:52;;19636:15;;;;19601:12;;;;19577:1;19495:9;19466:195;;;-1:-1:-1;;;;;;;19717:32:1;;;;19712:2;19697:18;;19690:60;-1:-1:-1;;;19781:3:1;19766:19;19759:35;19678:3;18820:980;-1:-1:-1;;;18820:980:1:o;20417:306::-;20505:6;20513;20521;20574:2;20562:9;20553:7;20549:23;20545:32;20542:52;;;20590:1;20587;20580:12;20542:52;20619:9;20613:16;20603:26;;20669:2;20658:9;20654:18;20648:25;20638:35;;20713:2;20702:9;20698:18;20692:25;20682:35;;20417:306;;;;;:::o

Swarm Source

ipfs://9ec7ff6d076b5ba0e0f5857d6e808431a23ff749f1309f4d7acfe7dbf89696d9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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