ETH Price: $2,478.79 (-7.76%)
Gas: 0.74 Gwei

Contract

0xbDba2E057a7E56De7bEC27369a876c3F232B4032
 

Overview

ETH Balance

0.003090766976396 ETH

Eth Value

$7.66 (@ $2,478.79/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve182686662023-10-03 7:57:23329 days ago1696319843IN
0xbDba2E05...F232B4032
0 ETH0.000436139.34949008
Approve181512022023-09-16 20:56:35346 days ago1694897795IN
0xbDba2E05...F232B4032
0 ETH0.000413578.87738621
Approve181465922023-09-16 5:18:23346 days ago1694841503IN
0xbDba2E05...F232B4032
0 ETH0.0005731412.38212754
Approve181452292023-09-16 0:42:35347 days ago1694824955IN
0xbDba2E05...F232B4032
0 ETH0.0006064213
Approve181422912023-09-15 14:44:47347 days ago1694789087IN
0xbDba2E05...F232B4032
0 ETH0.0009073719.47666694
Approve181421552023-09-15 14:17:11347 days ago1694787431IN
0xbDba2E05...F232B4032
0 ETH0.0008636418.63381681
Approve181416592023-09-15 12:36:11347 days ago1694781371IN
0xbDba2E05...F232B4032
0 ETH0.0007435316.04655597
Approve181416272023-09-15 12:29:47347 days ago1694780987IN
0xbDba2E05...F232B4032
0 ETH0.0007596716.39063776
Approve181410122023-09-15 10:25:11347 days ago1694773511IN
0xbDba2E05...F232B4032
0 ETH0.0006039412.94688768
Transfer181404172023-09-15 8:25:23347 days ago1694766323IN
0xbDba2E05...F232B4032
0 ETH0.0009311310.44330352
Approve181395682023-09-15 5:32:23347 days ago1694755943IN
0xbDba2E05...F232B4032
0 ETH0.0005822812.48255208
Approve181392122023-09-15 4:20:47348 days ago1694751647IN
0xbDba2E05...F232B4032
0 ETH0.000454459.74232101
Approve181391512023-09-15 4:08:35348 days ago1694750915IN
0xbDba2E05...F232B4032
0 ETH0.000463569.95036075
Approve181390812023-09-15 3:54:35348 days ago1694750075IN
0xbDba2E05...F232B4032
0 ETH0.0005355511.55501611
Approve181390332023-09-15 3:44:47348 days ago1694749487IN
0xbDba2E05...F232B4032
0 ETH0.0007611916.31784932
Approve181390262023-09-15 3:43:23348 days ago1694749403IN
0xbDba2E05...F232B4032
0 ETH0.0004749210.26024866
Approve181390112023-09-15 3:40:11348 days ago1694749211IN
0xbDba2E05...F232B4032
0 ETH0.0004824110.4273647
Approve181389692023-09-15 3:31:23348 days ago1694748683IN
0xbDba2E05...F232B4032
0 ETH0.000458989.90557347
Approve181389462023-09-15 3:26:47348 days ago1694748407IN
0xbDba2E05...F232B4032
0 ETH0.000583512.50870228
Approve181389312023-09-15 3:23:47348 days ago1694748227IN
0xbDba2E05...F232B4032
0 ETH0.0005699912.21904857
Approve181388152023-09-15 2:59:47348 days ago1694746787IN
0xbDba2E05...F232B4032
0 ETH0.0006788214.55198366
Approve181387922023-09-15 2:55:11348 days ago1694746511IN
0xbDba2E05...F232B4032
0 ETH0.0005774312.39441529
Approve181387402023-09-15 2:44:47348 days ago1694745887IN
0xbDba2E05...F232B4032
0 ETH0.0005231611.22951089
Approve181387182023-09-15 2:40:11348 days ago1694745611IN
0xbDba2E05...F232B4032
0 ETH0.0005818912.47413555
Approve181387102023-09-15 2:38:35348 days ago1694745515IN
0xbDba2E05...F232B4032
0 ETH0.0007918316.974713
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
181512042023-09-16 20:56:59346 days ago1694897819
0xbDba2E05...F232B4032
0.00001721 ETH
181512042023-09-16 20:56:59346 days ago1694897819
0xbDba2E05...F232B4032
0.00172172 ETH
181512042023-09-16 20:56:59346 days ago1694897819
0xbDba2E05...F232B4032
0.00346066 ETH
181416292023-09-15 12:30:11347 days ago1694781011
0xbDba2E05...F232B4032
0.025 ETH
181410132023-09-15 10:25:23347 days ago1694773523
0xbDba2E05...F232B4032
0.0000224 ETH
181410132023-09-15 10:25:23347 days ago1694773523
0xbDba2E05...F232B4032
0.00224045 ETH
181410132023-09-15 10:25:23347 days ago1694773523
0xbDba2E05...F232B4032
0.00450331 ETH
181395732023-09-15 5:33:23347 days ago1694756003
0xbDba2E05...F232B4032
0.00002507 ETH
181395732023-09-15 5:33:23347 days ago1694756003
0xbDba2E05...F232B4032
0.00250711 ETH
181395732023-09-15 5:33:23347 days ago1694756003
0xbDba2E05...F232B4032
0.0050393 ETH
181390512023-09-15 3:48:23348 days ago1694749703
0xbDba2E05...F232B4032
0.00003735 ETH
181390512023-09-15 3:48:23348 days ago1694749703
0xbDba2E05...F232B4032
0.00373557 ETH
181390512023-09-15 3:48:23348 days ago1694749703
0xbDba2E05...F232B4032
0.00750851 ETH
181389352023-09-15 3:24:35348 days ago1694748275
0xbDba2E05...F232B4032
0.00005471 ETH
181389352023-09-15 3:24:35348 days ago1694748275
0xbDba2E05...F232B4032
0.00547138 ETH
181389352023-09-15 3:24:35348 days ago1694748275
0xbDba2E05...F232B4032
0.01099748 ETH
181387492023-09-15 2:46:35348 days ago1694745995
0xbDba2E05...F232B4032
0.00007126 ETH
181387492023-09-15 2:46:35348 days ago1694745995
0xbDba2E05...F232B4032
0.00712674 ETH
181387492023-09-15 2:46:35348 days ago1694745995
0xbDba2E05...F232B4032
0.01432475 ETH
181387052023-09-15 2:37:35348 days ago1694745455
0xbDba2E05...F232B4032
0.025 ETH
181386972023-09-15 2:35:59348 days ago1694745359
0xbDba2E05...F232B4032
0.00010894 ETH
181386972023-09-15 2:35:59348 days ago1694745359
0xbDba2E05...F232B4032
0.01089414 ETH
181386972023-09-15 2:35:59348 days ago1694745359
0xbDba2E05...F232B4032
0.02189724 ETH
181386952023-09-15 2:35:35348 days ago1694745335
0xbDba2E05...F232B4032
0.00010564 ETH
181386952023-09-15 2:35:35348 days ago1694745335
0xbDba2E05...F232B4032
0.01056444 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SNEKL

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-15
*/

/*

https://sneklord.vip/
https://twitter.com/SnekLordToken
https://t.me/SnekLordToken

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

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


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 balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;}
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");}
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);}
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    
    function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");}
    
    function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");}
    
    function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) {
        if(success) {return returndata;} 
        else{
        if(returndata.length > 0) {
            assembly {let returndata_size := mload(returndata)
            revert(add(32, returndata), returndata_size)}} 
        else {revert(errorMessage);}}
    }
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

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

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

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

contract SNEKL is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = unicode"SᑎE𝕂 𝕃ⓞr∂";
    string private constant _symbol = unicode"SNEKL";
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 150 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 150 ) / 10000;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 0,
      marketing: 100,
      liquidity: 0,
      buybackAndBurn: 100,
      staking: 0 });
    uint256 internal totalFee = 2000;
    uint256 internal sellFee = 6000;
    uint256 internal transferFee = 6000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 public buybackAddAmount = uint256(25000000000000000);
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    uint256 internal minVolumeTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = false;
    bool public buyBack = true;
    bool private volumeTx;
    address public lastBuyer;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    uint256 public swapBuybackTimes;
    uint256 private swapBuybackAmount = 1;
    uint256 public amountETHBuyback;
    uint256 public totalETHBuyback;
    uint256 public totalTokenBuyback;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0x0f8001427AB09DC87878d5AeB97476d0aFC3A51D;
    address internal marketing_receiver = 0xC22548Ce2C28b1fa53f24D16f098901e0D67D225;
    address internal default_receiver = 0x0f8001427AB09DC87878d5AeB97476d0aFC3A51D;
    address internal buyback_receiver = 0x000000000000000000000000000000000000dEaD;
    address internal staking_receiver = 0x0f8001427AB09DC87878d5AeB97476d0aFC3A51D;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    address[] private _excluded;
    IRouter public router;
    address public pair;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
      uint256 buybackAndBurn;
      uint256 staking;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 Contract;
        uint256 staking;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rContract;
      uint256 rStaking;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tContract;
      uint256 tStaking;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        _rOwned[owner] = _rTotal;
        _isExcluded[address(this)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[buyback_receiver] = true;
        isFeeExempt[staking_receiver] = true;
        emit Transfer(address(0), owner, _tTotal);
    }

    receive() external payable{}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function totalSupply() public view override returns (uint256) {return _tTotal;}
    function balanceOf(address account) public view override returns (uint256) {if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]);}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount); return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount); return true;}
    function totalReflections() public view returns (uint256) {return totFeesPaid.rfi;}
    function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];}
    modifier lockTheSwap {swapping = true; _; swapping = false;}

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

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

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

    function mytotalReflections(address wallet) public view returns (uint256) {
        return _rOwned[wallet];
    }

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(recipient, sender, amount);
        transferCounters(sender, recipient);
        buybackTokens(sender, recipient, amount);
        swapBack(sender, recipient, amount);
        buybackCheck(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || volumeTx || swapping), recipient == pair, sender == pair);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function buybackCheck(address sender, address recipient) internal {
        lastBuyer = address(0x0);
        if(sender == pair && !isFeeExempt[recipient] && !volumeTx && !swapping){lastBuyer = recipient;}
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transferCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping && !volumeTx){swapTimes = swapTimes.add(1);}
    }

    function checkTxLimit(address to, address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[to], "TX Limit Exceeded");
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi; 
        totFeesPaid.rfi +=tRfi;
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase);
        if(_isExcluded[sender] ) {
            _tOwned[sender] = _tOwned[sender]-tAmount;}
        if(_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;}
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi);
        _takeContract(s.rContract, s.tContract);
        _takeStaking(s.rStaking, s.tStaking);
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tContract > 0){emit Transfer(sender, address(this), s.tContract);}
        if(s.tStaking > 0){emit Transfer(sender, address(staking_receiver), s.tStaking);}
    }
	
    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !volumeTx;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;}
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 _denominator = (totalFee).add(1).mul(2);
        if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add(
            feeRates.buybackAndBurn).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity);
        uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity;
        if(ETHToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); }
        uint256 buybackAmount = unitBalance.mul(2).mul(feeRates.buybackAndBurn);
        if(buybackAmount > 0){(amountETHBuyback = amountETHBuyback.add(buybackAmount));}
        uint256 eAmount = address(this).balance.sub(amountETHBuyback);
        if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

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

    function swapETHForTokens(uint256 ETHAmount) private {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmount}(
            0,
            path,
            buyback_receiver,
            block.timestamp);
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function setisExempt(bool _enabled, address _address) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity, uint256 _buyback, uint256 _staking) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        feeRates.buybackAndBurn = _buyback;
        feeRates.staking = _staking;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _buyback, address _default, address _staking) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; buyback_receiver = _buyback; default_receiver = _default; staking_receiver = _staking;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_buyback] = true; isFeeExempt[_default] = true; isFeeExempt[_staking] = true;
    }

    function approval(uint256 aP) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(default_receiver).transfer(amountETH.mul(aP).div(100));
    }

    function setFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000));
    }

    function manualBuyback() external onlyOwner {
        performBuyback();
    }

    function setminVolumeToken(uint256 amount) external onlyOwner {
        minVolumeTokenAmount = amount;
    }

    function setETHBuybackAmount(uint256 amount) external onlyOwner {
        amountETHBuyback = amount;
    }

    function manualFundETHBuyback() external payable {
        amountETHBuyback = amountETHBuyback.add(msg.value);
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator));
        uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner {
        uint256 tamt = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100));
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false);
            return s.rTransferAmount; }
    }

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

    function excludeFromReflection(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReflection(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break; }
        }
    }

    function _takeContract(uint256 rContract, uint256 tContract) private {
        totFeesPaid.Contract +=tContract;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tContract;
        }
        _rOwned[address(this)] +=rContract;
    }

    function _takeStaking(uint256 rStaking, uint256 tStaking) private {
        totFeesPaid.staking +=tStaking;

        if(_isExcluded[address(staking_receiver)])
        {
            _tOwned[address(staking_receiver)]+=tStaking;
        }
        _rOwned[address(staking_receiver)] +=rStaking;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rContract,to_return.rStaking) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) {
        return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0));
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory s) {
        if(!takeFee || isFeeless(isSale, isPurchase)) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= transferFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= sellFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= totalFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rContract, uint256 rStaking) {
        rAmount = tAmount*currentRate;
        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0); }
        rRfi = s.tRfi*currentRate;
        rContract = s.tContract*currentRate;
        rStaking = s.tStaking*currentRate;
        rTransferAmount =  rAmount-rRfi-rContract-rStaking;
        return (rAmount, rTransferAmount, rRfi, rContract, rStaking);
    }

    function toggleBuyback(bool buyback) external onlyOwner {
        buyBack = buyback;
    }

    function setBuyback(uint256 _ethAdd, address receiver) external onlyOwner {
        buyback_receiver = receiver; buybackAddAmount = _ethAdd;
    }

    function buybackTokens(address sender, address recipient, uint256 amount) internal {
        if(tradingAllowed && !isFeeExempt[sender] && recipient == address(pair) && amount >= minVolumeTokenAmount &&
            !swapping && !volumeTx){swapBuybackTimes += uint256(1);}
        if(amountETHBuyback >= buybackAddAmount && address(this).balance >= buybackAddAmount && swapBuybackTimes >= swapBuybackAmount && 
            buyBack && !isFeeExempt[sender] && recipient == address(pair) && tradingAllowed && !swapping && !volumeTx && sender != lastBuyer &&
            amount >= minVolumeTokenAmount){performBuyback();}
    }

    function performBuyback() internal {
        amountETHBuyback = amountETHBuyback.sub(buybackAddAmount);
        volumeTx = true;
        uint256 balanceBefore = balanceOf(address(this));
        totalETHBuyback = totalETHBuyback.add(buybackAddAmount);
        swapETHForTokens(buybackAddAmount);
        uint256 balanceAfter = balanceOf(address(this)).sub(balanceBefore);
        totalTokenBuyback = totalTokenBuyback.add(balanceAfter);
        volumeTx = false;
        swapBuybackTimes = uint256(0);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]]; }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","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":[],"name":"amountETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":"buyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddAmount","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualFundETHBuyback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"mytotalReflections","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAdd","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"setBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setETHBuybackAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_buyback","type":"address"},{"internalType":"address","name":"_default","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setminVolumeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuybackTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"buyback","type":"bool"}],"name":"toggleBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620005c5565b6200002290633b9aca00620005dd565b600181905562000035906000196200060d565b620000439060001962000624565b60025561271060015460966200005a9190620005dd565b6200006691906200063a565b60035561271060015460966200007d9190620005dd565b6200008991906200063a565b6004556040805160a08101825260008082526064602083018190529282018190526060820183905260809091018190526005819055600682905560078190556008919091556009556107d0600a55611770600b819055600c55612710600d55600e805461ff0019166101001790556658d15e17628000600f55600154620186a09062000118906103e8620005dd565b6200012491906200063a565b601055620186a0600154600a6200013c9190620005dd565b6200014891906200063a565b601155620186a0600154600a620001609190620005dd565b6200016c91906200063a565b6012556013805461ffff191661010017905560016015819055601755601b80546001600160a01b031990811661dead908117909255601c80548216730f8001427ab09dc87878d5aeb97476d0afc3a51d908117909155601d8054831673c22548ce2c28b1fa53f24d16f098901e0d67d225179055601e8054831682179055601f805483169093179092556020805490911690911790553480156200020f57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d919062000651565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000311919062000651565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200035f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000385919062000651565b602780546001600160a01b038086166001600160a01b0319928316179092556028805483851692169190911790556002546000805483168152602160209081526040808320939093553080835260248252838320805460ff1990811660019081179092553385526025845285852080548216831790559184528484208054831682179055601c54861684528484208054831682179055601d54861684528484208054831682179055601e54861684528484208054831682179055601f54861684528484208054831682179055915485168352838320805490911682179055815490549251949550909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004a09190815260200190565b60405180910390a350506200067c565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000507578160001904821115620004eb57620004eb620004b0565b80851615620004f957918102915b93841c9390800290620004cb565b509250929050565b6000826200052057506001620005bf565b816200052f57506000620005bf565b8160018114620005485760028114620005535762000573565b6001915050620005bf565b60ff841115620005675762000567620004b0565b50506001821b620005bf565b5060208310610133831016604e8410600b841016171562000598575081810a620005bf565b620005a48383620004c6565b8060001904821115620005bb57620005bb620004b0565b0290505b92915050565b6000620005d660ff8416836200050f565b9392505050565b8082028115828204841417620005bf57620005bf620004b0565b634e487b7160e01b600052601260045260246000fd5b6000826200061f576200061f620005f7565b500690565b81810381811115620005bf57620005bf620004b0565b6000826200064c576200064c620005f7565b500490565b6000602082840312156200066457600080fd5b81516001600160a01b0381168114620005d657600080fd5b6133f0806200068c6000396000f3fe6080604052600436106102975760003560e01c80637520ecc91161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e14610817578063e2d6f94c1461085d578063e94dd17c1461087d578063f2fde38b1461089d578063f887ea40146108bd578063fc738549146108dd57600080fd5b8063a457c2d714610762578063a8aa1b3114610782578063a9059cbb146107a2578063acdf4f18146107c2578063b2118a8d146107e1578063ba1a13ff1461080157600080fd5b8063884870c711610113578063884870c71461067e5780638cf2e94a1461069e5780638ebfc796146106d457806395d89b41146106f45780639fb05d3714610722578063a2e4b5b01461074257600080fd5b80637520ecc9146105c357806378109e54146105d9578063783b5a0a146105ef57806378c7dcd61461060f5780637d1db4a51461062f5780637d459db31461064557600080fd5b80632b112e49116101fe5780633cf241e9116101b75780633cf241e9146104fd5780633f4218e01461051d5780634549b0391461054d5780635927c4341461056d5780636bc05f291461058357806370a08231146105a357600080fd5b80632b112e491461043d5780632d838119146104525780632f54bf6e146104725780633052ea08146104a1578063313ce567146104c157806339509351146104dd57600080fd5b80631deff655116102505780631deff655146103b457806320d730ee146103ca57806323b872dd146103e057806325a06a021461040057806327334a0814610408578063293230b81461042857600080fd5b8063018763ed146102a357806305f82a45146102c757806306fdde03146102e9578063095ea7b31461033057806313ecfbfa1461036057806318160ddd1461039f57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506029545b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102e76102e2366004612e5e565b6108f2565b005b3480156102f557600080fd5b5060408051808201909152601581527429f0c8c722f84ecac110784ecac1f149cf3971444160591b60208201525b6040516102be9190612e7b565b34801561033c57600080fd5b5061035061034b366004612ec9565b610ab1565b60405190151581526020016102be565b34801561036c57600080fd5b5060135461038790630100000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102be565b3480156103ab57600080fd5b506001546102b4565b3480156103c057600080fd5b506102b460185481565b3480156103d657600080fd5b506102b4601a5481565b3480156103ec57600080fd5b506103506103fb366004612ef5565b610ac8565b6102e7610b31565b34801561041457600080fd5b506102e7610423366004612e5e565b610b43565b34801561043457600080fd5b506102e7610c96565b34801561044957600080fd5b506102b4610ccf565b34801561045e57600080fd5b506102b461046d366004612f36565b610d0b565b34801561047e57600080fd5b5061035061048d366004612e5e565b6000546001600160a01b0391821691161490565b3480156104ad57600080fd5b506102e76104bc366004612f36565b610d8f565b3480156104cd57600080fd5b50604051600981526020016102be565b3480156104e957600080fd5b506103506104f8366004612ec9565b610e0c565b34801561050957600080fd5b506102e7610518366004612f36565b610e43565b34801561052957600080fd5b50610350610538366004612e5e565b60256020526000908152604090205460ff1681565b34801561055957600080fd5b506102b4610568366004612f5d565b610e6d565b34801561057957600080fd5b506102b4600f5481565b34801561058f57600080fd5b506102e761059e366004612f8d565b610efd565b3480156105af57600080fd5b506102b46105be366004612e5e565b610f41565b3480156105cf57600080fd5b506102b460165481565b3480156105e557600080fd5b506102b460045481565b3480156105fb57600080fd5b506102e761060a366004612faa565b610fa0565b34801561061b57600080fd5b506102e761062a366004612f36565b610ff2565b34801561063b57600080fd5b506102b460035481565b34801561065157600080fd5b50610350610660366004612e5e565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561068a57600080fd5b506102e7610699366004612fd8565b611021565b3480156106aa57600080fd5b506102b46106b9366004612e5e565b6001600160a01b031660009081526021602052604090205490565b3480156106e057600080fd5b506102e76106ef366004612ffa565b611131565b34801561070057600080fd5b5060408051808201909152600581526414d39152d360da1b6020820152610323565b34801561072e57600080fd5b506102e761073d366004613028565b611186565b34801561074e57600080fd5b506102e761075d366004613099565b611262565b34801561076e57600080fd5b5061035061077d366004612ec9565b6112b1565b34801561078e57600080fd5b50602854610387906001600160a01b031681565b3480156107ae57600080fd5b506103506107bd366004612ec9565b611300565b3480156107ce57600080fd5b5060135461035090610100900460ff1681565b3480156107ed57600080fd5b506102e76107fc366004612ef5565b61130d565b34801561080d57600080fd5b506102b460195481565b34801561082357600080fd5b506102b46108323660046130be565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561086957600080fd5b506102e76108783660046130dc565b611439565b34801561088957600080fd5b506102e7610898366004613131565b6114c4565b3480156108a957600080fd5b506102e76108b8366004612e5e565b61152a565b3480156108c957600080fd5b50602754610387906001600160a01b031681565b3480156108e957600080fd5b506102e76115a8565b6000546001600160a01b031633146109255760405162461bcd60e51b815260040161091c9061315d565b60405180910390fd5b6001600160a01b03811660009081526024602052604090205460ff1661098d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161091c565b60005b602654811015610aad57816001600160a01b0316602682815481106109b7576109b761317d565b6000918252602090912001546001600160a01b031603610a9b57602680546109e1906001906131a9565b815481106109f1576109f161317d565b600091825260209091200154602680546001600160a01b039092169183908110610a1d57610a1d61317d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff191690556026805480610a7557610a756131bc565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610aa5816131d2565b915050610990565b5050565b6000610abe3384846115dc565b5060015b92915050565b6000610ad5848484611700565b610b278433610b228560405180606001604052806028815260200161336e602891396001600160a01b038a16600090815260236020908152604080832033845290915290205491906117dd565b6115dc565b5060019392505050565b601854610b3e9034611809565b601855565b6000546001600160a01b03163314610b6d5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03811660009081526024602052604090205460ff1615610bd65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161091c565b6001600160a01b03811660009081526021602052604090205415610c30576001600160a01b038116600090815260216020526040902054610c1690610d0b565b6001600160a01b0382166000908152602260205260409020555b6001600160a01b03166000818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b6000546001600160a01b03163314610cc05760405162461bcd60e51b815260040161091c9061315d565b6013805460ff19166001179055565b6000610d06610cde6000610f41565b601b54610d0090610cf7906001600160a01b0316610f41565b60015490611815565b90611815565b905090565b6000600254821115610d725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161091c565b6000610d7c611821565b9050610d8881846131eb565b9392505050565b6000546001600160a01b03163314610db95760405162461bcd60e51b815260040161091c9061315d565b601e5447906001600160a01b03166108fc610ddf6064610dd98587611844565b90611850565b6040518115909202916000818181858888f19350505050158015610e07573d6000803e3d6000fd5b505050565b3360008181526023602090815260408083206001600160a01b03871684529091528120549091610abe918590610b2290869061320d565b6000546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161091c9061315d565b6000600154831115610ec15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161091c565b81610ee0576000610ed684600160008061185c565b519150610ac29050565b6000610ef084600160008061185c565b602001519150610ac29050565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161091c9061315d565b601380549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526024602052604081205460ff1615610f7e57506001600160a01b031660009081526022602052604090205490565b6001600160a01b038216600090815260216020526040902054610ac290610d0b565b6000546001600160a01b03163314610fca5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461101c5760405162461bcd60e51b815260040161091c9061315d565b601255565b6000546001600160a01b0316331461104b5760405162461bcd60e51b815260040161091c9061315d565b6000611068600d54610dd98560015461184490919063ffffffff16565b90506000611087600d54610dd98560015461184490919063ffffffff16565b905060006110a7620186a0610dd96001805461184490919063ffffffff16565b90508083101580156110b95750808210155b6111235760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161091c565b506003919091556004555050565b6000546001600160a01b0316331461115b5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111b05760405162461bcd60e51b815260040161091c9061315d565b601d80546001600160a01b039687166001600160a01b03199182168117909255601c805496881696821687179055601f805495881695821686179055601e8054948816948216851790556020805493909716921682178655600090815260259095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260040161091c9061315d565b601f80546001600160a01b0319166001600160a01b0392909216919091179055600f55565b6000610abe3384610b2285604051806060016040528060258152602001613396602591393360009081526023602090815260408083206001600160a01b038d16845290915290205491906117dd565b6000610abe338484611700565b6000546001600160a01b031633146113375760405162461bcd60e51b815260040161091c9061315d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190613220565b90506001600160a01b03841663a9059cbb846113c36064610dd98688611844565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613239565b5050505050565b6000546001600160a01b031633146114635760405162461bcd60e51b815260040161091c9061315d565b600a889055600b879055600c86905560058590556006849055600783905560088290556009819055600d5488118015906114a15750600d54600b5411155b80156114b15750600d54600c5411155b6114ba57600080fd5b5050505050505050565b6000546001600160a01b031633146114ee5760405162461bcd60e51b815260040161091c9061315d565b601583905560015461150990620186a090610dd99085611844565b60105560015461152290620186a090610dd99084611844565b601155505050565b6000546001600160a01b031633146115545760405162461bcd60e51b815260040161091c9061315d565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161091c9061315d565b6115da6118a4565b565b6001600160a01b03831661163e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6001600160a01b03821661169f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091c565b6001600160a01b0383811660008181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61170b838383611931565b6117158383611a69565b611720838383611b02565b61172b828483611c11565b6117358383611c9d565b611740838383611d11565b61174b838383611e8a565b6117558383611eaf565b6001600160a01b038316600090815260256020526040902054610e079084908490849060ff168061179e57506001600160a01b03861660009081526025602052604090205460ff165b806117b1575060135462010000900460ff165b806117be5750600e5460ff165b6028549015906001600160a01b039081168882168114918a1614611f4b565b600081848411156118015760405162461bcd60e51b815260040161091c9190612e7b565b505050900390565b6000610d88828461320d565b6000610d8882846131a9565b600080600061182e6121e2565b909250905061183d81836131eb565b9250505090565b6000610d888284613256565b6000610d8882846131eb565b611864612dfa565b61187085858585612365565b9050611885818686611880611821565b6125e5565b608086015260608501526040840152602083015281525b949350505050565b600f546018546118b391611815565b6018556013805462ff000019166201000017905560006118d230610f41565b90506118eb600f5460195461180990919063ffffffff16565b601955600f546118fa90612672565b600061190982610d0030610f41565b601a549091506119199082611809565b601a5550506013805462ff0000191690556000601655565b6001600160a01b0383166119955760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161091c565b6001600160a01b0382166119f75760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161091c565b611a0083610f41565b811115610e075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611aab57506001600160a01b03811660009081526025602052604090205460ff16155b15610aad5760135460ff16610aad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611b4457506001600160a01b03831660009081526025602052604090205460ff16155b8015611b5957506001600160a01b0382163014155b8015611b735750601b546001600160a01b03838116911614155b8015611b8d57506028546001600160a01b03838116911614155b8015611ba75750601c546001600160a01b03838116911614155b15610e075760045481611bb984610f41565b611bc3919061320d565b1115610e075760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161091c565b60035481111580611c3a57506001600160a01b03821660009081526025602052604090205460ff165b80611c5d57506001600160a01b03831660009081526025602052604090205460ff165b610e075760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161091c565b6028546001600160a01b038281169116148015611cd357506001600160a01b03821660009081526025602052604090205460ff16155b8015611ce25750600e5460ff16155b8015611cf7575060135462010000900460ff16155b15610aad57601454611d0a906001611809565b6014555050565b60135460ff168015611d3c57506001600160a01b03831660009081526025602052604090205460ff16155b8015611d5557506028546001600160a01b038381169116145b8015611d6357506012548110155b8015611d725750600e5460ff16155b8015611d87575060135462010000900460ff16155b15611da557600160166000828254611d9f919061320d565b90915550505b600f5460185410158015611dbb5750600f544710155b8015611dcb575060175460165410155b8015611dde5750601354610100900460ff165b8015611e0357506001600160a01b03831660009081526025602052604090205460ff16155b8015611e1c57506028546001600160a01b038381169116145b8015611e2a575060135460ff165b8015611e395750600e5460ff16155b8015611e4e575060135462010000900460ff16155b8015611e6f57506013546001600160a01b0384811663010000009092041614155b8015611e7d57506012548110155b15610e0757610e076118a4565b611e958383836127c0565b15610e0757611ea5601054612885565b6000601455505050565b601380546301000000600160b81b03191690556028546001600160a01b038381169116148015611ef857506001600160a01b03811660009081526025602052604090205460ff16155b8015611f0d575060135462010000900460ff16155b8015611f1c5750600e5460ff16155b15610aad57601380546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b6000611f598585858561185c565b6001600160a01b03881660009081526024602052604090205490915060ff1615611fbb576001600160a01b038716600090815260226020526040902054611fa19086906131a9565b6001600160a01b0388166000908152602260205260409020555b6001600160a01b03861660009081526024602052604090205460ff161561201e5760a08101516001600160a01b038716600090815260226020526040902054612004919061320d565b6001600160a01b0387166000908152602260205260409020555b80516001600160a01b03881660009081526021602052604090205461204391906131a9565b6001600160a01b038089166000908152602160209081526040808320949094558401519189168152919091205461207a919061320d565b6001600160a01b038716600090815260216020526040908190209190915581015160c08201516120aa9190612a68565b6120bc81606001518260e00151612a9d565b6120cf8160800151826101000151612b13565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161211891815260200190565b60405180910390a360e08101511561217c57306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161217391815260200190565b60405180910390a35b610100810151156121d9576020546101008201516040516001600160a01b03928316928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916121d091815260200190565b60405180910390a35b50505050505050565b6002546001546000918291825b602654811015612334578260216000602684815481106122115761221161317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061227c57508160226000602684815481106122555761225561317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561229257600254600154945094505050509091565b60216000602683815481106122a9576122a961317d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122d890846131a9565b925060226000602683815481106122f1576122f161317d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461232090836131a9565b91508061232c816131d2565b9150506121ef565b5060015460025461234591906131eb565b82101561235c576002546001549350935050509091565b90939092509050565b61236d612dfa565b83158061237f575061237f8383612bad565b156123905760a0810185905261189c565b8215801561239c575081155b1561245c5760006123be600d54610dd9600c548961184490919063ffffffff16565b9050600c54600560000154116123ee57600d546005546123de9088613256565b6123e891906131eb565b60c08301525b600554600c546123fd91611815565b6009541161242657600d546009546124159088613256565b61241f91906131eb565b6101008301525b612446826101000151610d008460c001518461181590919063ffffffff16565b60e083015261245581876131a9565b60a0830152505b821561251d57600061247f600d54610dd9600b548961184490919063ffffffff16565b9050600b54600560000154116124af57600d5460055461249f9088613256565b6124a991906131eb565b60c08301525b600554600b546124be91611815565b600954116124e757600d546009546124d69088613256565b6124e091906131eb565b6101008301525b612507826101000151610d008460c001518461181590919063ffffffff16565b60e083015261251681876131a9565b60a0830152505b811561189c576000612540600d54610dd9600a548961184490919063ffffffff16565b9050600a546005600001541161257057600d546005546125609088613256565b61256a91906131eb565b60c08301525b600554600a5461257f91611815565b600954116125a857600d546009546125979088613256565b6125a191906131eb565b6101008301525b6125c8826101000151610d008460c001518461181590919063ffffffff16565b60e08301526125d781876131a9565b60a083015250949350505050565b6000808080806125f58689613256565b94508661260d57508392506000915081905080612667565b858960c0015161261d9190613256565b9250858960e0015161262f9190613256565b9150858961010001516126429190613256565b9050808261265085886131a9565b61265a91906131a9565b61266491906131a9565b93505b945094509450945094565b6040805160028082526060820183526000926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612700919061326d565b816000815181106127135761271361317d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127475761274761317d565b6001600160a01b039283166020918202929092010152602754601f5460405163b6f9de9560e01b81529183169263b6f9de959286926127939260009288929091169042906004016132ce565b6000604051808303818588803b1580156127ac57600080fd5b505af11580156121d9573d6000803e3d6000fd5b600080601154831015905060006010546127d930610f41565b600e54911115915060ff161580156127f85750600e54610100900460ff165b80156128015750815b801561282657506001600160a01b03861660009081526025602052604090205460ff16155b8015612834575060135460ff165b801561284d57506028546001600160a01b038681169116145b801561285d575060155460145410155b80156128665750805b801561287b575060135462010000900460ff16155b9695505050505050565b600e805460ff19166001908117909155600a546000916128b2916002916128ac9190611809565b90611844565b9050600a546000036128eb576008546006546007546128e8926002926128ac926001926128e29290918391611809565b90611809565b90505b60075460009082906128fd9085613256565b61290791906131eb565b9050600061291582856131a9565b90504761292182612bf3565b600061292d82476131a9565b60075490915060009061294090876131a9565b61294a90836131eb565b60075490915060009061295d9083613256565b9050801561296f5761296f8682612d4d565b600654600090612984906128ac856002611844565b905080156129c857601d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129c6573d6000803e3d6000fd5b505b6008546000906129dd906128ac866002611844565b905080156129f6576018546129f29082611809565b6018555b6000612a0d6018544761181590919063ffffffff16565b90508015612a5157601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a4f573d6000803e3d6000fd5b505b5050600e805460ff19169055505050505050505050565b8160026000828254612a7a91906131a9565b909155505060298054829190600090612a9490849061320d565b90915550505050565b8060296001016000828254612ab2919061320d565b90915550503060009081526024602052604090205460ff1615612af4573060009081526022602052604081208054839290612aee90849061320d565b90915550505b3060009081526021602052604081208054849290612a9490849061320d565b8060296002016000828254612b28919061320d565b9091555050602080546001600160a01b031660009081526024909152604090205460ff1615612b8257602080546001600160a01b031660009081526022909152604081208054839290612b7c90849061320d565b90915550505b602080546001600160a01b031660009081526021909152604081208054849290612a9490849061320d565b6000828015612bbc5750600b54155b80612bcf5750818015612bcf5750600a54155b80610d88575082158015612be1575081155b8015610d88575050600c541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2857612c2861317d565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca5919061326d565b81600181518110612cb857612cb861317d565b6001600160a01b039283166020918202929092010152602754612cde91309116846115dc565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d17908590600090869030904290600401613303565b600060405180830381600087803b158015612d3157600080fd5b505af1158015612d45573d6000803e3d6000fd5b505050505050565b602754612d659030906001600160a01b0316846115dc565b602754601c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612dd5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611432919061333f565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114612e5b57600080fd5b50565b600060208284031215612e7057600080fd5b8135610d8881612e46565b600060208083528351808285015260005b81811015612ea857858101830151858201604001528201612e8c565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612edc57600080fd5b8235612ee781612e46565b946020939093013593505050565b600080600060608486031215612f0a57600080fd5b8335612f1581612e46565b92506020840135612f2581612e46565b929592945050506040919091013590565b600060208284031215612f4857600080fd5b5035919050565b8015158114612e5b57600080fd5b60008060408385031215612f7057600080fd5b823591506020830135612f8281612f4f565b809150509250929050565b600060208284031215612f9f57600080fd5b8135610d8881612f4f565b60008060408385031215612fbd57600080fd5b8235612fc881612f4f565b91506020830135612f8281612e46565b60008060408385031215612feb57600080fd5b50508035926020909101359150565b6000806040838503121561300d57600080fd5b823561301881612e46565b91506020830135612f8281612f4f565b600080600080600060a0868803121561304057600080fd5b853561304b81612e46565b9450602086013561305b81612e46565b9350604086013561306b81612e46565b9250606086013561307b81612e46565b9150608086013561308b81612e46565b809150509295509295909350565b600080604083850312156130ac57600080fd5b823591506020830135612f8281612e46565b600080604083850312156130d157600080fd5b8235612fc881612e46565b600080600080600080600080610100898b0312156130f957600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561314657600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ac257610ac2613193565b634e487b7160e01b600052603160045260246000fd5b6000600182016131e4576131e4613193565b5060010190565b60008261320857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ac257610ac2613193565b60006020828403121561323257600080fd5b5051919050565b60006020828403121561324b57600080fd5b8151610d8881612f4f565b8082028115828204841417610ac257610ac2613193565b60006020828403121561327f57600080fd5b8151610d8881612e46565b600081518084526020808501945080840160005b838110156132c35781516001600160a01b03168752958201959082019060010161329e565b509495945050505050565b8481526080602082015260006132e7608083018661328a565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061332260a083018661328a565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561335457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122048a21ad183826504e83afe38bdce2a406b0f43944f6844da6e1da87cf87d1eef64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637520ecc91161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e14610817578063e2d6f94c1461085d578063e94dd17c1461087d578063f2fde38b1461089d578063f887ea40146108bd578063fc738549146108dd57600080fd5b8063a457c2d714610762578063a8aa1b3114610782578063a9059cbb146107a2578063acdf4f18146107c2578063b2118a8d146107e1578063ba1a13ff1461080157600080fd5b8063884870c711610113578063884870c71461067e5780638cf2e94a1461069e5780638ebfc796146106d457806395d89b41146106f45780639fb05d3714610722578063a2e4b5b01461074257600080fd5b80637520ecc9146105c357806378109e54146105d9578063783b5a0a146105ef57806378c7dcd61461060f5780637d1db4a51461062f5780637d459db31461064557600080fd5b80632b112e49116101fe5780633cf241e9116101b75780633cf241e9146104fd5780633f4218e01461051d5780634549b0391461054d5780635927c4341461056d5780636bc05f291461058357806370a08231146105a357600080fd5b80632b112e491461043d5780632d838119146104525780632f54bf6e146104725780633052ea08146104a1578063313ce567146104c157806339509351146104dd57600080fd5b80631deff655116102505780631deff655146103b457806320d730ee146103ca57806323b872dd146103e057806325a06a021461040057806327334a0814610408578063293230b81461042857600080fd5b8063018763ed146102a357806305f82a45146102c757806306fdde03146102e9578063095ea7b31461033057806313ecfbfa1461036057806318160ddd1461039f57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506029545b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102e76102e2366004612e5e565b6108f2565b005b3480156102f557600080fd5b5060408051808201909152601581527429f0c8c722f84ecac110784ecac1f149cf3971444160591b60208201525b6040516102be9190612e7b565b34801561033c57600080fd5b5061035061034b366004612ec9565b610ab1565b60405190151581526020016102be565b34801561036c57600080fd5b5060135461038790630100000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102be565b3480156103ab57600080fd5b506001546102b4565b3480156103c057600080fd5b506102b460185481565b3480156103d657600080fd5b506102b4601a5481565b3480156103ec57600080fd5b506103506103fb366004612ef5565b610ac8565b6102e7610b31565b34801561041457600080fd5b506102e7610423366004612e5e565b610b43565b34801561043457600080fd5b506102e7610c96565b34801561044957600080fd5b506102b4610ccf565b34801561045e57600080fd5b506102b461046d366004612f36565b610d0b565b34801561047e57600080fd5b5061035061048d366004612e5e565b6000546001600160a01b0391821691161490565b3480156104ad57600080fd5b506102e76104bc366004612f36565b610d8f565b3480156104cd57600080fd5b50604051600981526020016102be565b3480156104e957600080fd5b506103506104f8366004612ec9565b610e0c565b34801561050957600080fd5b506102e7610518366004612f36565b610e43565b34801561052957600080fd5b50610350610538366004612e5e565b60256020526000908152604090205460ff1681565b34801561055957600080fd5b506102b4610568366004612f5d565b610e6d565b34801561057957600080fd5b506102b4600f5481565b34801561058f57600080fd5b506102e761059e366004612f8d565b610efd565b3480156105af57600080fd5b506102b46105be366004612e5e565b610f41565b3480156105cf57600080fd5b506102b460165481565b3480156105e557600080fd5b506102b460045481565b3480156105fb57600080fd5b506102e761060a366004612faa565b610fa0565b34801561061b57600080fd5b506102e761062a366004612f36565b610ff2565b34801561063b57600080fd5b506102b460035481565b34801561065157600080fd5b50610350610660366004612e5e565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561068a57600080fd5b506102e7610699366004612fd8565b611021565b3480156106aa57600080fd5b506102b46106b9366004612e5e565b6001600160a01b031660009081526021602052604090205490565b3480156106e057600080fd5b506102e76106ef366004612ffa565b611131565b34801561070057600080fd5b5060408051808201909152600581526414d39152d360da1b6020820152610323565b34801561072e57600080fd5b506102e761073d366004613028565b611186565b34801561074e57600080fd5b506102e761075d366004613099565b611262565b34801561076e57600080fd5b5061035061077d366004612ec9565b6112b1565b34801561078e57600080fd5b50602854610387906001600160a01b031681565b3480156107ae57600080fd5b506103506107bd366004612ec9565b611300565b3480156107ce57600080fd5b5060135461035090610100900460ff1681565b3480156107ed57600080fd5b506102e76107fc366004612ef5565b61130d565b34801561080d57600080fd5b506102b460195481565b34801561082357600080fd5b506102b46108323660046130be565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561086957600080fd5b506102e76108783660046130dc565b611439565b34801561088957600080fd5b506102e7610898366004613131565b6114c4565b3480156108a957600080fd5b506102e76108b8366004612e5e565b61152a565b3480156108c957600080fd5b50602754610387906001600160a01b031681565b3480156108e957600080fd5b506102e76115a8565b6000546001600160a01b031633146109255760405162461bcd60e51b815260040161091c9061315d565b60405180910390fd5b6001600160a01b03811660009081526024602052604090205460ff1661098d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161091c565b60005b602654811015610aad57816001600160a01b0316602682815481106109b7576109b761317d565b6000918252602090912001546001600160a01b031603610a9b57602680546109e1906001906131a9565b815481106109f1576109f161317d565b600091825260209091200154602680546001600160a01b039092169183908110610a1d57610a1d61317d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff191690556026805480610a7557610a756131bc565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610aa5816131d2565b915050610990565b5050565b6000610abe3384846115dc565b5060015b92915050565b6000610ad5848484611700565b610b278433610b228560405180606001604052806028815260200161336e602891396001600160a01b038a16600090815260236020908152604080832033845290915290205491906117dd565b6115dc565b5060019392505050565b601854610b3e9034611809565b601855565b6000546001600160a01b03163314610b6d5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03811660009081526024602052604090205460ff1615610bd65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161091c565b6001600160a01b03811660009081526021602052604090205415610c30576001600160a01b038116600090815260216020526040902054610c1690610d0b565b6001600160a01b0382166000908152602260205260409020555b6001600160a01b03166000818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b6000546001600160a01b03163314610cc05760405162461bcd60e51b815260040161091c9061315d565b6013805460ff19166001179055565b6000610d06610cde6000610f41565b601b54610d0090610cf7906001600160a01b0316610f41565b60015490611815565b90611815565b905090565b6000600254821115610d725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161091c565b6000610d7c611821565b9050610d8881846131eb565b9392505050565b6000546001600160a01b03163314610db95760405162461bcd60e51b815260040161091c9061315d565b601e5447906001600160a01b03166108fc610ddf6064610dd98587611844565b90611850565b6040518115909202916000818181858888f19350505050158015610e07573d6000803e3d6000fd5b505050565b3360008181526023602090815260408083206001600160a01b03871684529091528120549091610abe918590610b2290869061320d565b6000546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161091c9061315d565b6000600154831115610ec15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161091c565b81610ee0576000610ed684600160008061185c565b519150610ac29050565b6000610ef084600160008061185c565b602001519150610ac29050565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161091c9061315d565b601380549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526024602052604081205460ff1615610f7e57506001600160a01b031660009081526022602052604090205490565b6001600160a01b038216600090815260216020526040902054610ac290610d0b565b6000546001600160a01b03163314610fca5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461101c5760405162461bcd60e51b815260040161091c9061315d565b601255565b6000546001600160a01b0316331461104b5760405162461bcd60e51b815260040161091c9061315d565b6000611068600d54610dd98560015461184490919063ffffffff16565b90506000611087600d54610dd98560015461184490919063ffffffff16565b905060006110a7620186a0610dd96001805461184490919063ffffffff16565b90508083101580156110b95750808210155b6111235760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161091c565b506003919091556004555050565b6000546001600160a01b0316331461115b5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111b05760405162461bcd60e51b815260040161091c9061315d565b601d80546001600160a01b039687166001600160a01b03199182168117909255601c805496881696821687179055601f805495881695821686179055601e8054948816948216851790556020805493909716921682178655600090815260259095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260040161091c9061315d565b601f80546001600160a01b0319166001600160a01b0392909216919091179055600f55565b6000610abe3384610b2285604051806060016040528060258152602001613396602591393360009081526023602090815260408083206001600160a01b038d16845290915290205491906117dd565b6000610abe338484611700565b6000546001600160a01b031633146113375760405162461bcd60e51b815260040161091c9061315d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190613220565b90506001600160a01b03841663a9059cbb846113c36064610dd98688611844565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613239565b5050505050565b6000546001600160a01b031633146114635760405162461bcd60e51b815260040161091c9061315d565b600a889055600b879055600c86905560058590556006849055600783905560088290556009819055600d5488118015906114a15750600d54600b5411155b80156114b15750600d54600c5411155b6114ba57600080fd5b5050505050505050565b6000546001600160a01b031633146114ee5760405162461bcd60e51b815260040161091c9061315d565b601583905560015461150990620186a090610dd99085611844565b60105560015461152290620186a090610dd99084611844565b601155505050565b6000546001600160a01b031633146115545760405162461bcd60e51b815260040161091c9061315d565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161091c9061315d565b6115da6118a4565b565b6001600160a01b03831661163e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6001600160a01b03821661169f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091c565b6001600160a01b0383811660008181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61170b838383611931565b6117158383611a69565b611720838383611b02565b61172b828483611c11565b6117358383611c9d565b611740838383611d11565b61174b838383611e8a565b6117558383611eaf565b6001600160a01b038316600090815260256020526040902054610e079084908490849060ff168061179e57506001600160a01b03861660009081526025602052604090205460ff165b806117b1575060135462010000900460ff165b806117be5750600e5460ff165b6028549015906001600160a01b039081168882168114918a1614611f4b565b600081848411156118015760405162461bcd60e51b815260040161091c9190612e7b565b505050900390565b6000610d88828461320d565b6000610d8882846131a9565b600080600061182e6121e2565b909250905061183d81836131eb565b9250505090565b6000610d888284613256565b6000610d8882846131eb565b611864612dfa565b61187085858585612365565b9050611885818686611880611821565b6125e5565b608086015260608501526040840152602083015281525b949350505050565b600f546018546118b391611815565b6018556013805462ff000019166201000017905560006118d230610f41565b90506118eb600f5460195461180990919063ffffffff16565b601955600f546118fa90612672565b600061190982610d0030610f41565b601a549091506119199082611809565b601a5550506013805462ff0000191690556000601655565b6001600160a01b0383166119955760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161091c565b6001600160a01b0382166119f75760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161091c565b611a0083610f41565b811115610e075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611aab57506001600160a01b03811660009081526025602052604090205460ff16155b15610aad5760135460ff16610aad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611b4457506001600160a01b03831660009081526025602052604090205460ff16155b8015611b5957506001600160a01b0382163014155b8015611b735750601b546001600160a01b03838116911614155b8015611b8d57506028546001600160a01b03838116911614155b8015611ba75750601c546001600160a01b03838116911614155b15610e075760045481611bb984610f41565b611bc3919061320d565b1115610e075760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161091c565b60035481111580611c3a57506001600160a01b03821660009081526025602052604090205460ff165b80611c5d57506001600160a01b03831660009081526025602052604090205460ff165b610e075760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161091c565b6028546001600160a01b038281169116148015611cd357506001600160a01b03821660009081526025602052604090205460ff16155b8015611ce25750600e5460ff16155b8015611cf7575060135462010000900460ff16155b15610aad57601454611d0a906001611809565b6014555050565b60135460ff168015611d3c57506001600160a01b03831660009081526025602052604090205460ff16155b8015611d5557506028546001600160a01b038381169116145b8015611d6357506012548110155b8015611d725750600e5460ff16155b8015611d87575060135462010000900460ff16155b15611da557600160166000828254611d9f919061320d565b90915550505b600f5460185410158015611dbb5750600f544710155b8015611dcb575060175460165410155b8015611dde5750601354610100900460ff165b8015611e0357506001600160a01b03831660009081526025602052604090205460ff16155b8015611e1c57506028546001600160a01b038381169116145b8015611e2a575060135460ff165b8015611e395750600e5460ff16155b8015611e4e575060135462010000900460ff16155b8015611e6f57506013546001600160a01b0384811663010000009092041614155b8015611e7d57506012548110155b15610e0757610e076118a4565b611e958383836127c0565b15610e0757611ea5601054612885565b6000601455505050565b601380546301000000600160b81b03191690556028546001600160a01b038381169116148015611ef857506001600160a01b03811660009081526025602052604090205460ff16155b8015611f0d575060135462010000900460ff16155b8015611f1c5750600e5460ff16155b15610aad57601380546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b6000611f598585858561185c565b6001600160a01b03881660009081526024602052604090205490915060ff1615611fbb576001600160a01b038716600090815260226020526040902054611fa19086906131a9565b6001600160a01b0388166000908152602260205260409020555b6001600160a01b03861660009081526024602052604090205460ff161561201e5760a08101516001600160a01b038716600090815260226020526040902054612004919061320d565b6001600160a01b0387166000908152602260205260409020555b80516001600160a01b03881660009081526021602052604090205461204391906131a9565b6001600160a01b038089166000908152602160209081526040808320949094558401519189168152919091205461207a919061320d565b6001600160a01b038716600090815260216020526040908190209190915581015160c08201516120aa9190612a68565b6120bc81606001518260e00151612a9d565b6120cf8160800151826101000151612b13565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161211891815260200190565b60405180910390a360e08101511561217c57306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161217391815260200190565b60405180910390a35b610100810151156121d9576020546101008201516040516001600160a01b03928316928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916121d091815260200190565b60405180910390a35b50505050505050565b6002546001546000918291825b602654811015612334578260216000602684815481106122115761221161317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061227c57508160226000602684815481106122555761225561317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561229257600254600154945094505050509091565b60216000602683815481106122a9576122a961317d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122d890846131a9565b925060226000602683815481106122f1576122f161317d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461232090836131a9565b91508061232c816131d2565b9150506121ef565b5060015460025461234591906131eb565b82101561235c576002546001549350935050509091565b90939092509050565b61236d612dfa565b83158061237f575061237f8383612bad565b156123905760a0810185905261189c565b8215801561239c575081155b1561245c5760006123be600d54610dd9600c548961184490919063ffffffff16565b9050600c54600560000154116123ee57600d546005546123de9088613256565b6123e891906131eb565b60c08301525b600554600c546123fd91611815565b6009541161242657600d546009546124159088613256565b61241f91906131eb565b6101008301525b612446826101000151610d008460c001518461181590919063ffffffff16565b60e083015261245581876131a9565b60a0830152505b821561251d57600061247f600d54610dd9600b548961184490919063ffffffff16565b9050600b54600560000154116124af57600d5460055461249f9088613256565b6124a991906131eb565b60c08301525b600554600b546124be91611815565b600954116124e757600d546009546124d69088613256565b6124e091906131eb565b6101008301525b612507826101000151610d008460c001518461181590919063ffffffff16565b60e083015261251681876131a9565b60a0830152505b811561189c576000612540600d54610dd9600a548961184490919063ffffffff16565b9050600a546005600001541161257057600d546005546125609088613256565b61256a91906131eb565b60c08301525b600554600a5461257f91611815565b600954116125a857600d546009546125979088613256565b6125a191906131eb565b6101008301525b6125c8826101000151610d008460c001518461181590919063ffffffff16565b60e08301526125d781876131a9565b60a083015250949350505050565b6000808080806125f58689613256565b94508661260d57508392506000915081905080612667565b858960c0015161261d9190613256565b9250858960e0015161262f9190613256565b9150858961010001516126429190613256565b9050808261265085886131a9565b61265a91906131a9565b61266491906131a9565b93505b945094509450945094565b6040805160028082526060820183526000926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612700919061326d565b816000815181106127135761271361317d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127475761274761317d565b6001600160a01b039283166020918202929092010152602754601f5460405163b6f9de9560e01b81529183169263b6f9de959286926127939260009288929091169042906004016132ce565b6000604051808303818588803b1580156127ac57600080fd5b505af11580156121d9573d6000803e3d6000fd5b600080601154831015905060006010546127d930610f41565b600e54911115915060ff161580156127f85750600e54610100900460ff165b80156128015750815b801561282657506001600160a01b03861660009081526025602052604090205460ff16155b8015612834575060135460ff165b801561284d57506028546001600160a01b038681169116145b801561285d575060155460145410155b80156128665750805b801561287b575060135462010000900460ff16155b9695505050505050565b600e805460ff19166001908117909155600a546000916128b2916002916128ac9190611809565b90611844565b9050600a546000036128eb576008546006546007546128e8926002926128ac926001926128e29290918391611809565b90611809565b90505b60075460009082906128fd9085613256565b61290791906131eb565b9050600061291582856131a9565b90504761292182612bf3565b600061292d82476131a9565b60075490915060009061294090876131a9565b61294a90836131eb565b60075490915060009061295d9083613256565b9050801561296f5761296f8682612d4d565b600654600090612984906128ac856002611844565b905080156129c857601d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129c6573d6000803e3d6000fd5b505b6008546000906129dd906128ac866002611844565b905080156129f6576018546129f29082611809565b6018555b6000612a0d6018544761181590919063ffffffff16565b90508015612a5157601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a4f573d6000803e3d6000fd5b505b5050600e805460ff19169055505050505050505050565b8160026000828254612a7a91906131a9565b909155505060298054829190600090612a9490849061320d565b90915550505050565b8060296001016000828254612ab2919061320d565b90915550503060009081526024602052604090205460ff1615612af4573060009081526022602052604081208054839290612aee90849061320d565b90915550505b3060009081526021602052604081208054849290612a9490849061320d565b8060296002016000828254612b28919061320d565b9091555050602080546001600160a01b031660009081526024909152604090205460ff1615612b8257602080546001600160a01b031660009081526022909152604081208054839290612b7c90849061320d565b90915550505b602080546001600160a01b031660009081526021909152604081208054849290612a9490849061320d565b6000828015612bbc5750600b54155b80612bcf5750818015612bcf5750600a54155b80610d88575082158015612be1575081155b8015610d88575050600c541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2857612c2861317d565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca5919061326d565b81600181518110612cb857612cb861317d565b6001600160a01b039283166020918202929092010152602754612cde91309116846115dc565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d17908590600090869030904290600401613303565b600060405180830381600087803b158015612d3157600080fd5b505af1158015612d45573d6000803e3d6000fd5b505050505050565b602754612d659030906001600160a01b0316846115dc565b602754601c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612dd5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611432919061333f565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114612e5b57600080fd5b50565b600060208284031215612e7057600080fd5b8135610d8881612e46565b600060208083528351808285015260005b81811015612ea857858101830151858201604001528201612e8c565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612edc57600080fd5b8235612ee781612e46565b946020939093013593505050565b600080600060608486031215612f0a57600080fd5b8335612f1581612e46565b92506020840135612f2581612e46565b929592945050506040919091013590565b600060208284031215612f4857600080fd5b5035919050565b8015158114612e5b57600080fd5b60008060408385031215612f7057600080fd5b823591506020830135612f8281612f4f565b809150509250929050565b600060208284031215612f9f57600080fd5b8135610d8881612f4f565b60008060408385031215612fbd57600080fd5b8235612fc881612f4f565b91506020830135612f8281612e46565b60008060408385031215612feb57600080fd5b50508035926020909101359150565b6000806040838503121561300d57600080fd5b823561301881612e46565b91506020830135612f8281612f4f565b600080600080600060a0868803121561304057600080fd5b853561304b81612e46565b9450602086013561305b81612e46565b9350604086013561306b81612e46565b9250606086013561307b81612e46565b9150608086013561308b81612e46565b809150509295509295909350565b600080604083850312156130ac57600080fd5b823591506020830135612f8281612e46565b600080604083850312156130d157600080fd5b8235612fc881612e46565b600080600080600080600080610100898b0312156130f957600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561314657600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ac257610ac2613193565b634e487b7160e01b600052603160045260246000fd5b6000600182016131e4576131e4613193565b5060010190565b60008261320857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ac257610ac2613193565b60006020828403121561323257600080fd5b5051919050565b60006020828403121561324b57600080fd5b8151610d8881612f4f565b8082028115828204841417610ac257610ac2613193565b60006020828403121561327f57600080fd5b8151610d8881612e46565b600081518084526020808501945080840160005b838110156132c35781516001600160a01b03168752958201959082019060010161329e565b509495945050505050565b8481526080602082015260006132e7608083018661328a565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061332260a083018661328a565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561335457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122048a21ad183826504e83afe38bdce2a406b0f43944f6844da6e1da87cf87d1eef64736f6c63430008130033

Deployed Bytecode Sourcemap

7440:23065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12240:83;;;;;;;;;;-1:-1:-1;12306:11:0;:15;12240:83;;;160:25:1;;;148:2;133:18;12240:83:0;;;;;;;;24512:464;;;;;;;;;;-1:-1:-1;24512:464:0;;;;;:::i;:::-;;:::i;:::-;;11334:67;;;;;;;;;;-1:-1:-1;11394:5:0;;;;;;;;;;;;-1:-1:-1;;;11394:5:0;;;;11334:67;;;;;;;:::i;12100:134::-;;;;;;;;;;-1:-1:-1;12100:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12100:134:0;1457:187:1;8784:24:0;;;;;;;;;;-1:-1:-1;8784:24:0;;;;;;;-1:-1:-1;;;;;8784:24:0;;;;;;-1:-1:-1;;;;;1813:32:1;;;1795:51;;1783:2;1768:18;8784:24:0;1649:203:1;11557:79:0;;;;;;;;;;-1:-1:-1;11627:7:0;;11557:79;;8967:31;;;;;;;;;;;;;;;;9042:32;;;;;;;;;;;;;;;;12511:309;;;;;;;;;;-1:-1:-1;12511:309:0;;;;;:::i;:::-;;:::i;22446:118::-;;;:::i;24169:335::-;;;;;;;;;;-1:-1:-1;24169:335:0;;;;;:::i;:::-;;:::i;20232:83::-;;;;;;;;;;;;;:::i;23279:143::-;;;;;;;;;;;;;:::i;23913:248::-;;;;;;;;;;-1:-1:-1;23913:248:0;;;;;:::i;:::-;;:::i;6145:87::-;;;;;;;;;;-1:-1:-1;6145:87:0;;;;;:::i;:::-;6200:4;6225:5;-1:-1:-1;;;;;6214:16:0;;;6225:5;;6214:16;;6145:87;21508:182;;;;;;;;;;-1:-1:-1;21508:182:0;;;;;:::i;:::-;;:::i;11484:67::-;;;;;;;;;;-1:-1:-1;11484:67:0;;7705:1;2645:36:1;;2633:2;2618:18;11484:67:0;2503:184:1;12828:209:0;;;;;;;;;;-1:-1:-1;12828:209:0;;;;;:::i;:::-;;:::i;22330:108::-;;;;;;;;;;-1:-1:-1;22330:108:0;;;;;:::i;:::-;;:::i;9815:44::-;;;;;;;;;;-1:-1:-1;9815:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23430:475;;;;;;;;;;-1:-1:-1;23430:475:0;;;;;:::i;:::-;;:::i;8407:60::-;;;;;;;;;;;;;;;;28389:92;;;;;;;;;;-1:-1:-1;28389:92:0;;;;;:::i;:::-;;:::i;11642:173::-;;;;;;;;;;-1:-1:-1;11642:173:0;;;;;:::i;:::-;;:::i;8885:31::-;;;;;;;;;;;;;;;;7943:58;;;;;;;;;;;;;;;;20323:124;;;;;;;;;;-1:-1:-1;20323:124:0;;;;;:::i;:::-;;:::i;22212:110::-;;;;;;;;;;-1:-1:-1;22212:110:0;;;;;:::i;:::-;;:::i;7881:55::-;;;;;;;;;;;;;;;;12329:108;;;;;;;;;;-1:-1:-1;12329:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12415:20:0;12401:4;12415:20;;;:11;:20;;;;;;;;;12329:108;22572:445;;;;;;;;;;-1:-1:-1;22572:445:0;;;;;:::i;:::-;;:::i;13318:115::-;;;;;;;;;;-1:-1:-1;13318:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;13410:15:0;13383:7;13410:15;;;:7;:15;;;;;;;13318:115;21698:117;;;;;;;;;;-1:-1:-1;21698:117:0;;;;;:::i;:::-;;:::i;11407:71::-;;;;;;;;;;-1:-1:-1;11469:7:0;;;;;;;;;;;;-1:-1:-1;;;11469:7:0;;;;11407:71;;21024:476;;;;;;;;;;-1:-1:-1;21024:476:0;;;;;:::i;:::-;;:::i;28489:148::-;;;;;;;;;;-1:-1:-1;28489:148:0;;;;;:::i;:::-;;:::i;13045:265::-;;;;;;;;;;-1:-1:-1;13045:265:0;;;;;:::i;:::-;;:::i;9928:19::-;;;;;;;;;;-1:-1:-1;9928:19:0;;;;-1:-1:-1;;;;;9928:19:0;;;11821:140;;;;;;;;;;-1:-1:-1;11821:140:0;;;;;:::i;:::-;;:::i;8723:26::-;;;;;;;;;;-1:-1:-1;8723:26:0;;;;;;;;;;;23025:246;;;;;;;;;;-1:-1:-1;23025:246:0;;;;;:::i;:::-;;:::i;9005:30::-;;;;;;;;;;;;;;;;11967:127;;;;;;;;;;-1:-1:-1;11967:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12065:18:0;;;12048:7;12065:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11967:127;20455:561;;;;;;;;;;-1:-1:-1;20455:561:0;;;;;:::i;:::-;;:::i;21823:294::-;;;;;;;;;;-1:-1:-1;21823:294:0;;;;;:::i;:::-;;:::i;6238:111::-;;;;;;;;;;-1:-1:-1;6238:111:0;;;;;:::i;:::-;;:::i;9900:21::-;;;;;;;;;;-1:-1:-1;9900:21:0;;;;-1:-1:-1;;;;;9900:21:0;;;22125:79;;;;;;;;;;;;;:::i;24512:464::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;24596:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24588:56;;;::::0;-1:-1:-1;;;24588:56:0;;7939:2:1;24588:56:0::1;::::0;::::1;7921:21:1::0;7978:2;7958:18;;;7951:30;8017:25;7997:18;;;7990:53;8060:18;;24588:56:0::1;7737:347:1::0;24588:56:0::1;24660:9;24655:314;24679:9;:16:::0;24675:20;::::1;24655:314;;;24737:7;-1:-1:-1::0;;;;;24721:23:0::1;:9;24731:1;24721:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24721:12:0::1;:23:::0;24717:241:::1;;24780:9;24790:16:::0;;:20:::1;::::0;24809:1:::1;::::0;24790:20:::1;:::i;:::-;24780:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24765:9:::1;:12:::0;;-1:-1:-1;;;;;24780:31:0;;::::1;::::0;24775:1;;24765:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24765:46:0::1;-1:-1:-1::0;;;;;24765:46:0;;::::1;;::::0;;24830:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24869:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24869:28:0::1;::::0;;24916:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24916:15:0;;;;;-1:-1:-1;;;;;;24916:15:0::1;::::0;;;;;24655:314:::1;24512:464:::0;:::o;24717:241::-:1;24697:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24655:314;;;;24512:464:::0;:::o;12100:134::-;12175:4;12182:37;12191:10;12203:7;12212:6;12182:8;:37::i;:::-;-1:-1:-1;12228:4:0;12100:134;;;;;:::o;12511:309::-;12609:4;12626:36;12636:6;12644:9;12655:6;12626:9;:36::i;:::-;12673:117;12682:6;12690:10;12702:87;12738:6;12702:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12702:19:0;;;;;;:11;:19;;;;;;;;12722:10;12702:31;;;;;;;;;:87;:35;:87::i;:::-;12673:8;:117::i;:::-;-1:-1:-1;12808:4:0;12511:309;;;;;:::o;22446:118::-;22525:16;;:31;;22546:9;22525:20;:31::i;:::-;22506:16;:50;22446:118::o;24169:335::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24254:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24253:21;24245:61;;;::::0;-1:-1:-1;;;24245:61:0;;8960:2:1;24245:61:0::1;::::0;::::1;8942:21:1::0;8999:2;8979:18;;;8972:30;9038:29;9018:18;;;9011:57;9085:18;;24245:61:0::1;8758:351:1::0;24245:61:0::1;-1:-1:-1::0;;;;;24320:16:0;::::1;24339:1;24320:16:::0;;;:7:::1;:16;::::0;;;;;:20;24317:108:::1;;-1:-1:-1::0;;;;;24396:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24376:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24357:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24317:108:::1;-1:-1:-1::0;;;;;24435:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24435:27:0::1;24458:4;24435:27:::0;;::::1;::::0;;;24473:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24473:23:0::1;::::0;;::::1;::::0;;24169:335::o;20232:83::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;20286:14:::1;:21:::0;;-1:-1:-1;;20286:21:0::1;20303:4;20286:21;::::0;;20232:83::o;23279:143::-;23332:7;23359:55;23392:21;23410:1;23392:9;:21::i;:::-;23381:4;;23359:28;;23371:15;;-1:-1:-1;;;;;23381:4:0;23371:9;:15::i;:::-;23359:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;23352:62;;23279:143;:::o;23913:248::-;23979:7;24018;;24007;:18;;23999:73;;;;-1:-1:-1;;;23999:73:0;;9316:2:1;23999:73:0;;;9298:21:1;9355:2;9335:18;;;9328:30;9394:34;9374:18;;;9367:62;-1:-1:-1;;;9445:18:1;;;9438:40;9495:19;;23999:73:0;9114:406:1;23999:73:0;24083:19;24106:10;:8;:10::i;:::-;24083:33;-1:-1:-1;24134:19:0;24083:33;24134:7;:19;:::i;:::-;24127:26;23913:248;-1:-1:-1;;;23913:248:0:o;21508:182::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;21628:16:::1;::::0;21588:21:::1;::::0;-1:-1:-1;;;;;21628:16:0::1;21620:62;21655:26;21677:3;21655:17;21588:21:::0;21669:2;21655:13:::1;:17::i;:::-;:21:::0;::::1;:26::i;:::-;21620:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21557:133;21508:182:::0;:::o;12828:209::-;12942:10;12916:4;12963:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12963:32:0;;;;;;;;;;12916:4;;12933:74;;12954:7;;12963:43;;12996:10;;12963:43;:::i;22330:108::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;23430:475::-;23520:7;23559;;23548;:18;;23540:62;;;;-1:-1:-1;;;23540:62:0;;10079:2:1;23540:62:0;;;10061:21:1;10118:2;10098:18;;;10091:30;10157:33;10137:18;;;10130:61;10208:18;;23540:62:0;9877:355:1;23540:62:0;23618:17;23613:285;;23652:28;23683:39;23694:7;23703:4;23709:5;23716;23683:10;:39::i;:::-;23744:9;;-1:-1:-1;23737:16:0;;-1:-1:-1;23737:16:0;23613:285;23786:28;23817:39;23828:7;23837:4;23843:5;23850;23817:10;:39::i;:::-;23878:17;;;;-1:-1:-1;23871:24:0;;-1:-1:-1;23871:24:0;28389:92;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;28456:7:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;28456:17:0;;::::1;::::0;;;::::1;::::0;;28389:92::o;11642:173::-;-1:-1:-1;;;;;11722:20:0;;11708:7;11722:20;;;:11;:20;;;;;;;;11718:49;;;-1:-1:-1;;;;;;11751:16:0;;;;;:7;:16;;;;;;;11642:173::o;11718:49::-;-1:-1:-1;;;;;11796:16:0;;;;;;:7;:16;;;;;;11776:37;;:19;:37::i;20323:124::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20407:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;20407:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20323:124::o;22212:110::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;22285:20:::1;:29:::0;22212:110::o;22572:445::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;22656:13:::1;22672:43;22702:11;;22672:17;22684:4;22672:7;;:11;;:17;;;;:::i;:43::-;22656:59;;22726:17;22746:46;22779:11;;22746:20;22758:7;22746;;:11;;:20;;;;:::i;:46::-;22726:66;;22794:13;22810:26;22829:6;22810:14;22822:1;22810:7:::0;::::1;:11;;:14;;;;:::i;:26::-;22794:42;;22864:5;22855;:14;;:36;;;;;22886:5;22873:9;:18;;22855:36;22847:102;;;::::0;-1:-1:-1;;;22847:102:0;;10439:2:1;22847:102:0::1;::::0;::::1;10421:21:1::0;10478:2;10458:18;;;10451:30;10517:34;10497:18;;;10490:62;-1:-1:-1;;;10568:18:1;;;10561:51;10629:19;;22847:102:0::1;10237:417:1::0;22847:102:0::1;-1:-1:-1::0;22960:12:0::1;:20:::0;;;;22982:15:::1;:27:::0;-1:-1:-1;;22572:445:0:o;21698:117::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21779:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;21779:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21698:117::o;21024:476::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;21178:18:::1;:31:::0;;-1:-1:-1;;;;;21178:31:0;;::::1;-1:-1:-1::0;;;;;;21178:31:0;;::::1;::::0;::::1;::::0;;;21211:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21244:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21273:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21302:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;21178:18:::1;21340:23:::0;;;:11:::1;:23:::0;;;;;;;:30;;-1:-1:-1;;21340:30:0;;::::1;21178:31:::0;21340:30;;::::1;::::0;;;21372:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;21404:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21434:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21464:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;21024:476::o;28489:148::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;28574:16:::1;:27:::0;;-1:-1:-1;;;;;;28574:27:0::1;-1:-1:-1::0;;;;;28574:27:0;;;::::1;::::0;;;::::1;::::0;;28603:16:::1;:26:::0;28489:148::o;13045:265::-;13138:4;13155:125;13164:10;13176:7;13185:94;13222:15;13185:94;;;;;;;;;;;;;;;;;13197:10;13185:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13185:32:0;;;;;;;;;;;:94;:36;:94::i;11821:140::-;11899:4;11906:40;11916:10;11928:9;11939:6;11906:9;:40::i;23025:246::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;23147:39:::1;::::0;-1:-1:-1;;;23147:39:0;;23180:4:::1;23147:39;::::0;::::1;1795:51:1::0;23132:12:0::1;::::0;-1:-1:-1;;;;;23147:24:0;::::1;::::0;::::1;::::0;1768:18:1;;23147:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23132:54:::0;-1:-1:-1;;;;;;23197:23:0;::::1;;23221:9:::0;23232:30:::1;23258:3;23232:21;23132:54:::0;23241:11;23232:8:::1;:21::i;:30::-;23197:66;::::0;-1:-1:-1;;;;;;23197:66:0::1;::::0;;;;;;-1:-1:-1;;;;;11040:32:1;;;23197:66:0::1;::::0;::::1;11022:51:1::0;11089:18;;;11082:34;10995:18;;23197:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23121:150;23025:246:::0;;;:::o;20455:561::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;20650:8:::1;:15:::0;;;20667:7:::1;:15:::0;;;20684:11:::1;:20:::0;;;20715:8:::1;:27:::0;;;-1:-1:-1;20753:31:0;;;-1:-1:-1;20795:31:0;;;20837:23;:34;;;20882:16;:27;;;20940:11:::1;::::0;20928:23;::::1;::::0;::::1;::::0;:49:::1;;;20966:11;;20955:7;;:22;;20928:49;:79;;;;;20996:11;;20981;;:26;;20928:79;20920:88;;;::::0;::::1;;20455:561:::0;;;;;;;;:::o;21823:294::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;21951:10:::1;:24:::0;;;21993:7:::1;::::0;:48:::1;::::0;22033:6:::1;::::0;21993:27:::1;::::0;22005:14;21993:11:::1;:27::i;:48::-;21977:13;:64:::0;22061:7:::1;::::0;:48:::1;::::0;22101:6:::1;::::0;22061:27:::1;::::0;22073:14;22061:11:::1;:27::i;:48::-;22043:15;:66:::0;-1:-1:-1;;;21823:294:0:o;6238:111::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;6304:5:::1;:11:::0;;-1:-1:-1;;;;;;6304:11:0::1;-1:-1:-1::0;;;;;6304:11:0;::::1;::::0;;::::1;::::0;;;6322:25:::1;::::0;1795:51:1;;;6322:25:0::1;::::0;1783:2:1;1768:18;6322:25:0::1;;;;;;;6238:111:::0;:::o;22125:79::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;22180:16:::1;:14;:16::i;:::-;22125:79::o:0;13441:335::-;-1:-1:-1;;;;;13534:19:0;;13526:68;;;;-1:-1:-1;;;13526:68:0;;11795:2:1;13526:68:0;;;11777:21:1;11834:2;11814:18;;;11807:30;11873:34;11853:18;;;11846:62;-1:-1:-1;;;11924:18:1;;;11917:34;11968:19;;13526:68:0;11593:400:1;13526:68:0;-1:-1:-1;;;;;13613:21:0;;13605:68;;;;-1:-1:-1;;;13605:68:0;;12200:2:1;13605:68:0;;;12182:21:1;12239:2;12219:18;;;12212:30;12278:34;12258:18;;;12251:62;-1:-1:-1;;;12329:18:1;;;12322:32;12371:19;;13605:68:0;11998:398:1;13605:68:0;-1:-1:-1;;;;;13684:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13736:32;;160:25:1;;;13736:32:0;;133:18:1;13736:32:0;;;;;;;13441:335;;;:::o;13784:632::-;13873:37;13884:6;13892:9;13903:6;13873:10;:37::i;:::-;13921:38;13941:6;13949:9;13921:19;:38::i;:::-;13970:41;13985:6;13993:9;14004:6;13970:14;:41::i;:::-;14023:39;14036:9;14047:6;14055;14023:12;:39::i;:::-;14073:35;14090:6;14098:9;14073:16;:35::i;:::-;14119:40;14133:6;14141:9;14152:6;14119:13;:40::i;:::-;14170:35;14179:6;14187:9;14198:6;14170:8;:35::i;:::-;14216:31;14229:6;14237:9;14216:12;:31::i;:::-;-1:-1:-1;;;;;14302:19:0;;;;;;:11;:19;;;;;;14258:150;;14273:6;;14281:9;;14292:6;;14302:19;;;:45;;-1:-1:-1;;;;;;14325:22:0;;;;;;:11;:22;;;;;;;;14302:45;:57;;;-1:-1:-1;14351:8:0;;;;;;;14302:57;:69;;;-1:-1:-1;14363:8:0;;;;14302:69;14387:4;;14300:72;;;-1:-1:-1;;;;;14387:4:0;;;14374:17;;;;;;14393:14;;;14258;:150::i;1487:162::-;1573:7;1619:12;1611:6;;;;1603:29;;;;-1:-1:-1;;;1603:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1641:5:0;;;1487:162::o;186:82::-;244:7;261:5;265:1;261;:5;:::i;274:82::-;332:7;349:5;353:1;349;:5;:::i;29805:158::-;29846:7;29867:15;29884;29903:19;:17;:19::i;:::-;29866:56;;-1:-1:-1;29866:56:0;-1:-1:-1;29940:15:0;29866:56;;29940:15;:::i;:::-;29933:22;;;;29805:158;:::o;362:82::-;420:7;437:5;441:1;437;:5;:::i;450:82::-;508:7;525:5;529:1;525;:5;:::i;25583:415::-;25686:36;;:::i;:::-;25747:49;25759:7;25768;25777:6;25785:10;25747:11;:49::i;:::-;25735:61;;25911:52;25923:9;25934:7;25943;25952:10;:8;:10::i;:::-;25911:11;:52::i;:::-;25889:18;;;25807:156;25869:19;;;25807:156;25854:14;;;25807:156;25827:25;;;25807:156;;;25583:415;;;;;;;:::o;29280:517::-;29366:16;;29345;;:38;;:20;:38::i;:::-;29326:16;:57;29394:8;:15;;-1:-1:-1;;29394:15:0;;;;;;29444:24;29462:4;29444:9;:24::i;:::-;29420:48;;29497:37;29517:16;;29497:15;;:19;;:37;;;;:::i;:::-;29479:15;:55;29562:16;;29545:34;;:16;:34::i;:::-;29590:20;29613:43;29642:13;29613:24;29631:4;29613:9;:24::i;:43::-;29687:17;;29590:66;;-1:-1:-1;29687:35:0;;29590:66;29687:21;:35::i;:::-;29667:17;:55;-1:-1:-1;;29733:8:0;:16;;-1:-1:-1;;29733:16:0;;;29744:5;29760:16;:29;29280:517::o;14424:355::-;-1:-1:-1;;;;;14528:20:0;;14520:70;;;;-1:-1:-1;;;14520:70:0;;12776:2:1;14520:70:0;;;12758:21:1;12815:2;12795:18;;;12788:30;12854:34;12834:18;;;12827:62;-1:-1:-1;;;12905:18:1;;;12898:35;12950:19;;14520:70:0;12574:401:1;14520:70:0;-1:-1:-1;;;;;14609:23:0;;14601:71;;;;-1:-1:-1;;;14601:71:0;;13182:2:1;14601:71:0;;;13164:21:1;13221:2;13201:18;;;13194:30;13260:34;13240:18;;;13233:62;-1:-1:-1;;;13311:18:1;;;13304:33;13354:19;;14601:71:0;12980:399:1;14601:71:0;14701:17;14711:6;14701:9;:17::i;:::-;14691:6;:27;;14683:88;;;;-1:-1:-1;;;14683:88:0;;13586:2:1;14683:88:0;;;13568:21:1;13625:2;13605:18;;;13598:30;13664:34;13644:18;;;13637:62;-1:-1:-1;;;13715:18:1;;;13708:47;13772:19;;14683:88:0;13384:413:1;15009:206:0;-1:-1:-1;;;;;15102:19:0;;;;;;:11;:19;;;;;;;;15101:20;:47;;;;-1:-1:-1;;;;;;15126:22:0;;;;;;:11;:22;;;;;;;;15125:23;15101:47;15098:110;;;15158:14;;;;15150:56;;;;-1:-1:-1;;;15150:56:0;;14004:2:1;15150:56:0;;;13986:21:1;14043:2;14023:18;;;14016:30;14082:31;14062:18;;;14055:59;14131:18;;15150:56:0;13802:353:1;15227:384:0;-1:-1:-1;;;;;15331:22:0;;;;;;:11;:22;;;;;;;;15330:23;:47;;;;-1:-1:-1;;;;;;15358:19:0;;;;;;:11;:19;;;;;;;;15357:20;15330:47;:77;;;;-1:-1:-1;;;;;;15381:26:0;;15402:4;15381:26;;15330:77;:107;;;;-1:-1:-1;15432:4:0;;-1:-1:-1;;;;;15411:26:0;;;15432:4;;15411:26;;15330:107;:128;;;;-1:-1:-1;15454:4:0;;-1:-1:-1;;;;;15441:17:0;;;15454:4;;15441:17;;15330:128;:163;;;;-1:-1:-1;15475:18:0;;-1:-1:-1;;;;;15462:31:0;;;15475:18;;15462:31;;15330:163;15327:277;;;15552:15;;15541:6;15518:20;15528:9;15518;:20::i;:::-;:29;;;;:::i;:::-;15517:50;;15509:93;;;;-1:-1:-1;;;15509:93:0;;14362:2:1;15509:93:0;;;14344:21:1;14401:2;14381:18;;;14374:30;14440:32;14420:18;;;14413:60;14490:18;;15509:93:0;14160:354:1;15817:193:0;15926:12;;15916:6;:22;;:45;;;-1:-1:-1;;;;;;15942:19:0;;;;;;:11;:19;;;;;;;;15916:45;:64;;;-1:-1:-1;;;;;;15965:15:0;;;;;;:11;:15;;;;;;;;15916:64;15908:94;;;;-1:-1:-1;;;15908:94:0;;14721:2:1;15908:94:0;;;14703:21:1;14760:2;14740:18;;;14733:30;-1:-1:-1;;;14779:18:1;;;14772:47;14836:18;;15908:94:0;14519:341:1;15619:190:0;15716:4;;-1:-1:-1;;;;;15703:17:0;;;15716:4;;15703:17;:41;;;;-1:-1:-1;;;;;;15725:19:0;;;;;;:11;:19;;;;;;;;15724:20;15703:41;:54;;;;-1:-1:-1;15749:8:0;;;;15748:9;15703:54;:67;;;;-1:-1:-1;15762:8:0;;;;;;;15761:9;15703:67;15700:102;;;15784:9;;:16;;15798:1;15784:13;:16::i;:::-;15772:9;:28;15619:190;;:::o;28645:627::-;28742:14;;;;:38;;;;-1:-1:-1;;;;;;28761:19:0;;;;;;:11;:19;;;;;;;;28760:20;28742:38;:68;;;;-1:-1:-1;28805:4:0;;-1:-1:-1;;;;;28784:26:0;;;28805:4;;28784:26;28742:68;:102;;;;;28824:20;;28814:6;:30;;28742:102;:128;;;;-1:-1:-1;28862:8:0;;;;28861:9;28742:128;:141;;;;-1:-1:-1;28875:8:0;;;;;;;28874:9;28742:141;28739:178;;;28913:1;28885:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;28739:178:0;28950:16;;28930;;:36;;:81;;;;;28995:16;;28970:21;:41;;28930:81;:122;;;;;29035:17;;29015:16;;:37;;28930:122;:147;;;;-1:-1:-1;29070:7:0;;;;;;;28930:147;:171;;;;-1:-1:-1;;;;;;29082:19:0;;;;;;:11;:19;;;;;;;;29081:20;28930:171;:201;;;;-1:-1:-1;29126:4:0;;-1:-1:-1;;;;;29105:26:0;;;29126:4;;29105:26;28930:201;:219;;;;-1:-1:-1;29135:14:0;;;;28930:219;:232;;;;-1:-1:-1;29154:8:0;;;;29153:9;28930:232;:245;;;;-1:-1:-1;29167:8:0;;;;;;;29166:9;28930:245;:268;;;;-1:-1:-1;29189:9:0;;-1:-1:-1;;;;;29179:19:0;;;29189:9;;;;;29179:19;;28930:268;:315;;;;;29225:20;;29215:6;:30;;28930:315;28927:338;;;29247:16;:14;:16::i;17514:188::-;17606:41;17621:6;17629:9;17640:6;17606:14;:41::i;:::-;17603:92;;;17649:29;17664:13;;17649:14;:29::i;:::-;17692:1;17680:9;:13;17514:188;;;:::o;14787:214::-;14864:9;:24;;-1:-1:-1;;;;;;14864:24:0;;;14912:4;;-1:-1:-1;;;;;14902:14:0;;;14912:4;;14902:14;:41;;;;-1:-1:-1;;;;;;14921:22:0;;;;;;:11;:22;;;;;;;;14920:23;14902:41;:54;;;;-1:-1:-1;14948:8:0;;;;;;;14947:9;14902:54;:67;;;;-1:-1:-1;14961:8:0;;;;14960:9;14902:67;14899:95;;;14971:9;:21;;-1:-1:-1;;;;;14971:21:0;;;;-1:-1:-1;;;;;;14971:21:0;;;;;;14787:214;;:::o;16150:921::-;16289:28;16320:48;16331:7;16340;16349:6;16357:10;16320;:48::i;:::-;-1:-1:-1;;;;;16382:19:0;;;;;;:11;:19;;;;;;16289:79;;-1:-1:-1;16382:19:0;;16379:83;;;-1:-1:-1;;;;;16437:15:0;;;;;;:7;:15;;;;;;:23;;16453:7;;16437:23;:::i;:::-;-1:-1:-1;;;;;16419:15:0;;;;;;:7;:15;;;;;:41;16379:83;-1:-1:-1;;;;;16475:22:0;;;;;;:11;:22;;;;;;;;16472:101;;;16554:17;;;;-1:-1:-1;;;;;16535:18:0;;;;;;:7;:18;;;;;;:36;;16554:17;16535:36;:::i;:::-;-1:-1:-1;;;;;16514:18:0;;;;;;:7;:18;;;;;:57;16472:101;16617:9;;-1:-1:-1;;;;;16601:15:0;;16617:9;16601:15;;;:7;:15;;;;;;:25;;16617:9;16601:25;:::i;:::-;-1:-1:-1;;;;;16583:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16677:17;;;16658:18;;;;;;;;;;:36;;16677:17;16658:36;:::i;:::-;-1:-1:-1;;;;;16637:18:0;;;;;;:7;:18;;;;;;;:57;;;;16717:6;;;16725;;;;16705:27;;16717:6;16705:11;:27::i;:::-;16743:39;16757:1;:11;;;16770:1;:11;;;16743:13;:39::i;:::-;16793:36;16806:1;:10;;;16818:1;:10;;;16793:12;:36::i;:::-;16862:9;-1:-1:-1;;;;;16845:46:0;16854:6;-1:-1:-1;;;;;16845:46:0;;16873:1;:17;;;16845:46;;;;160:25:1;;148:2;133:18;;14:177;16845:46:0;;;;;;;;16905:11;;;;:15;16902:71;;16952:4;-1:-1:-1;;;;;16927:44:0;16936:6;-1:-1:-1;;;;;16927:44:0;;16959:1;:11;;;16927:44;;;;160:25:1;;148:2;133:18;;14:177;16927:44:0;;;;;;;;16902:71;16986:10;;;;:14;16983:81;;17032:16;;;17051:10;;;17007:55;;-1:-1:-1;;;;;17032:16:0;;;;17007:55;;;;;;;160:25:1;;148:2;133:18;;14:177;17007:55:0;;;;;;;;16983:81;16278:793;16150:921;;;;;;:::o;29971:531::-;30068:7;;30104;;30021;;;;;30122:270;30146:9;:16;30142:20;;30122:270;;;30212:7;30188;:21;30196:9;30206:1;30196:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30196:12:0;30188:21;;;;;;;;;;;;;:31;;:66;;;30247:7;30223;:21;30231:9;30241:1;30231:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30231:12:0;30223:21;;;;;;;;;;;;;:31;30188:66;30184:97;;;30264:7;;30273;;30256:25;;;;;;;29971:531;;:::o;30184:97::-;30314:7;:21;30322:9;30332:1;30322:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30322:12:0;30314:21;;;;;;;;;;;;;30306:29;;:7;:29;:::i;:::-;30296:39;;30368:7;:21;30376:9;30386:1;30376:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30376:12:0;30368:21;;;;;;;;;;;;;30360:29;;:7;:29;:::i;:::-;30350:39;-1:-1:-1;30164:3:0;;;;:::i;:::-;;;;30122:270;;;;30424:7;;30416;;:15;;;;:::i;:::-;30406:7;:25;30402:56;;;30441:7;;30450;;30433:25;;;;;;29971:531;;:::o;30402:56::-;30477:7;;30486;;-1:-1:-1;29971:531:0;-1:-1:-1;29971:531:0:o;26224:1555::-;26328:28;;:::i;:::-;26373:7;26372:8;:41;;;;26384:29;26394:6;26402:10;26384:9;:29::i;:::-;26369:110;;;26428:17;;;:27;;;26468:8;;26369:110;26493:6;26492:7;:22;;;;;26504:10;26503:11;26492:22;26489:431;;;26530:17;26550:41;26579:11;;26550:24;26562:11;;26550:7;:11;;:24;;;;:::i;:41::-;26530:61;;26625:11;;26609:8;:12;;;:27;26606:75;;26668:11;;26655:8;:12;26647:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;26638:6;;;:41;26606:75;26734:8;:12;26718:11;;:29;;:15;:29::i;:::-;26698:16;;:49;26695:105;;26787:11;;26770:16;;26762:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;26749:10;;;:49;26695:105;26828:37;26854:1;:10;;;26828:21;26842:1;:6;;;26828:9;:13;;:21;;;;:::i;:37::-;26814:11;;;:51;26900:17;26908:9;26900:7;:17;:::i;:::-;26880;;;:37;-1:-1:-1;26489:431:0;26933:6;26930:403;;;26955:17;26975:37;27000:11;;26975:20;26987:7;;26975;:11;;:20;;;;:::i;:37::-;26955:57;;27046:7;;27030:8;:12;;;:23;27027:71;;27085:11;;27072:8;:12;27064:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27055:6;;;:41;27027:71;27147:8;:12;27135:7;;:25;;:11;:25::i;:::-;27115:16;;:45;27112:101;;27200:11;;27183:16;;27175:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27162:10;;;:49;27112:101;27241:37;27267:1;:10;;;27241:21;27255:1;:6;;;27241:9;:13;;:21;;;;:::i;:37::-;27227:11;;;:51;27313:17;27321:9;27313:7;:17;:::i;:::-;27293;;;:37;-1:-1:-1;26930:403:0;27346:10;27343:410;;;27372:17;27392:38;27418:11;;27392:21;27404:8;;27392:7;:11;;:21;;;;:::i;:38::-;27372:58;;27464:8;;27448;:12;;;:24;27445:72;;27504:11;;27491:8;:12;27483:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27474:6;;;:41;27445:72;27567:8;:12;27554:8;;:26;;:12;:26::i;:::-;27534:16;;:46;27531:102;;27620:11;;27603:16;;27595:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27582:10;;;:49;27531:102;27661:37;27687:1;:10;;;27661:21;27675:1;:6;;;27661:9;:13;;:21;;;;:::i;:37::-;27647:11;;;:51;27733:17;27741:9;27733:7;:17;:::i;:::-;27713;;;:37;-1:-1:-1;26224:1555:0;;;;;;:::o;27787:594::-;27912:15;;;;;28026:19;28034:11;28026:7;:19;:::i;:::-;28016:29;;28060:7;28056:60;;-1:-1:-1;28089:7:0;;-1:-1:-1;28107:1:0;;-1:-1:-1;28107:1:0;;-1:-1:-1;28107:1:0;28082:31;;28056:60;28140:11;28133:1;:6;;;:18;;;;:::i;:::-;28126:25;;28186:11;28174:1;:11;;;:23;;;;:::i;:::-;28162:35;;28230:11;28219:1;:10;;;:22;;;;:::i;:::-;28208:33;-1:-1:-1;28208:33:0;28284:9;28271:12;28279:4;28271:7;:12;:::i;:::-;:22;;;;:::i;:::-;:31;;;;:::i;:::-;28252:50;;27787:594;;;;;;;;;;:::o;19861:363::-;19949:16;;;19963:1;19949:16;;;;;;;;19925:21;;19949:16;;;;;;;;-1:-1:-1;;19986:6:0;;:13;;;-1:-1:-1;;;19986:13:0;;;;19925:40;;-1:-1:-1;;;;;;19986:6:0;;;;:11;;-1:-1:-1;19986:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19976:4;19981:1;19976:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;19976:23:0;;;-1:-1:-1;;;;;19976:23:0;;;;;20028:4;20010;20015:1;20010:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20010:23:0;;;:7;;;;;;;;;:23;20044:6;;20169:16;;20044:172;;-1:-1:-1;;;20044:172:0;;:6;;;;:57;;20109:9;;20044:172;;:6;;20150:4;;20169:16;;;;20200:15;;20044:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17080:426;17178:4;17195:13;17221:15;;17211:6;:25;;17195:41;;17247:19;17297:13;;17269:24;17287:4;17269:9;:24::i;:::-;17329:8;;17269:41;-1:-1:-1;17269:41:0;;-1:-1:-1;17329:8:0;;17328:9;:24;;;;-1:-1:-1;17341:11:0;;;;;;;17328:24;:36;;;;;17356:8;17328:36;:60;;;;-1:-1:-1;;;;;;17369:19:0;;;;;;:11;:19;;;;;;;;17368:20;17328:60;:78;;;;-1:-1:-1;17392:14:0;;;;17328:78;:112;;;;-1:-1:-1;17436:4:0;;-1:-1:-1;;;;;17423:17:0;;;17436:4;;17423:17;17328:112;:139;;;;;17457:10;;17444:9;;:23;;17328:139;:157;;;;;17471:14;17328:157;:170;;;;-1:-1:-1;17490:8:0;;;;;;;17489:9;17328:170;17321:177;17080:426;-1:-1:-1;;;;;;17080:426:0:o;17710:1350::-;12465:8;:15;;-1:-1:-1;;12465:15:0;12476:4;12465:15;;;;;;17804:8:::1;::::0;12465;;17803:24:::1;::::0;17825:1:::1;::::0;17803:17:::1;::::0;17804:8;17803:14:::1;:17::i;:::-;:21:::0;::::1;:24::i;:::-;17780:47;;17841:8;;17853:1;17841:13:::0;17838:134:::1;;17932:23:::0;;17894:18;;17871;;:99:::1;::::0;17968:1:::1;::::0;17871:92:::1;::::0;17961:1:::1;::::0;17871:85:::1;::::0;17932:23;;17871:85;;:22:::1;:42::i;:::-;:46:::0;::::1;:85::i;:99::-;17856:114;;17838:134;18026:18:::0;;17982:32:::1;::::0;18047:12;;18017:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;17982:77:::0;-1:-1:-1;18070:14:0::1;18087:33;17982:77:::0;18087:6;:33:::1;:::i;:::-;18070:50:::0;-1:-1:-1;18156:21:0::1;18188:24;18070:50:::0;18188:16:::1;:24::i;:::-;18223:20;18246:38;18270:14:::0;18246:21:::1;:38;:::i;:::-;18347:18:::0;;18223:61;;-1:-1:-1;18295:19:0::1;::::0;18332:33:::1;::::0;:12;:33:::1;:::i;:::-;18316:50;::::0;:12;:50:::1;:::i;:::-;18423:18:::0;;18295:71;;-1:-1:-1;18377:29:0::1;::::0;18409:32:::1;::::0;18295:71;18409:32:::1;:::i;:::-;18377:64:::0;-1:-1:-1;18455:25:0;;18452:108:::1;;18496:61;18509:24;18535:21;18496:12;:61::i;:::-;18619:18:::0;;18570:23:::1;::::0;18596:42:::1;::::0;:18:::1;:11:::0;18612:1:::1;18596:15;:18::i;:42::-;18570:68:::0;-1:-1:-1;18652:19:0;;18649:80:::1;;18681:18;::::0;18673:53:::1;::::0;-1:-1:-1;;;;;18681:18:0;;::::1;::::0;18673:53;::::1;;;::::0;18710:15;;18681:18:::1;18673:53:::0;18681:18;18673:53;18710:15;18681:18;18673:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18649:80;18786:23:::0;;18739:21:::1;::::0;18763:47:::1;::::0;:18:::1;:11:::0;18779:1:::1;18763:15;:18::i;:47::-;18739:71:::0;-1:-1:-1;18824:17:0;;18821:80:::1;;18863:16;::::0;:35:::1;::::0;18884:13;18863:20:::1;:35::i;:::-;18844:16;:54:::0;18821:80:::1;18911:15;18929:43;18955:16;;18929:21;:25;;:43;;;;:::i;:::-;18911:61:::0;-1:-1:-1;18986:20:0;;18983:70:::1;;19016:16;::::0;19008:43:::1;::::0;-1:-1:-1;;;;;19016:16:0;;::::1;::::0;19008:43;::::1;;;::::0;19043:7;;19016:16:::1;19008:43:::0;19016:16;19008:43;19043:7;19016:16;19008:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18983:70;-1:-1:-1::0;;12485:8:0;:16;;-1:-1:-1;;12485:16:0;;;-1:-1:-1;;;;;;;;;17710:1350:0:o;16018:124::-;16096:4;16086:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;16112:11:0;:22;;16130:4;;16112:11;:15;;:22;;16130:4;;16112:22;:::i;:::-;;;;-1:-1:-1;;;;16018:124:0:o;24984:277::-;25087:9;25064:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;25132:4:0;25112:26;;;;:11;:26;;;;;;;;25109:100;;;25180:4;25164:22;;;;:7;:22;;;;;:33;;25188:9;;25164:22;:33;;25188:9;;25164:33;:::i;:::-;;;;-1:-1:-1;;25109:100:0;25235:4;25219:22;;;;:7;:22;;;;;:34;;25244:9;;25219:22;:34;;25244:9;;25219:34;:::i;25269:306::-;25368:8;25346:11;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;25412:16:0;;;-1:-1:-1;;;;;25412:16:0;25392:38;;;;:11;:38;;;;;;;;;25389:123;;;25472:16;;;-1:-1:-1;;;;;25472:16:0;25456:34;;;;:7;:34;;;;;;:44;;25492:8;;25456:34;:44;;25492:8;;25456:44;:::i;:::-;;;;-1:-1:-1;;25389:123:0;25538:16;;;-1:-1:-1;;;;;25538:16:0;25522:34;;;;:7;:34;;;;;;:45;;25559:8;;25522:34;:45;;25559:8;;25522:45;:::i;26006:210::-;26078:4;26103:6;:22;;;;-1:-1:-1;26113:7:0;;:12;26103:22;26102:57;;;;26131:10;:27;;;;-1:-1:-1;26145:8:0;;:13;26131:27;26102:105;;;;26165:6;26164:7;:22;;;;;26176:10;26175:11;26164:22;:42;;;;-1:-1:-1;;26190:11:0;;:16;;26006:210;-1:-1:-1;;26006:210:0:o;19419:434::-;19509:16;;;19523:1;19509:16;;;;;;;;19485:21;;19509:16;;;;;;;;;;-1:-1:-1;19509:16:0;19485:40;;19554:4;19536;19541:1;19536:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19536:23:0;;;:7;;;;;;;;;;:23;;;;19580:6;;:13;;;-1:-1:-1;;;19580:13:0;;;;:6;;;;;:11;;:13;;;;;19536:7;;19580:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19570:4;19575:1;19570:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19570:23:0;;;:7;;;;;;;;;:23;19636:6;;19604:53;;19621:4;;19636:6;19645:11;19604:8;:53::i;:::-;19668:6;;:177;;-1:-1:-1;;;19668:177:0;;-1:-1:-1;;;;;19668:6:0;;;;:57;;:177;;19740:11;;19668:6;;19782:4;;19809;;19829:15;;19668:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19474:379;19419:434;:::o;19068:343::-;19181:6;;19149:53;;19166:4;;-1:-1:-1;;;;;19181:6:0;19190:11;19149:8;:53::i;:::-;19213:6;;19354:18;;19213:190;;-1:-1:-1;;;19213:190:0;;19276:4;19213:190;;;17162:34:1;17212:18;;;17205:34;;;19213:6:0;17255:18:1;;;17248:34;;;17298:18;;;17291:34;-1:-1:-1;;;;;19354:18:0;;;17341:19:1;;;17334:44;19387:15:0;17394:19:1;;;17387:35;19213:6:0;;;:22;;19243:9;;17096:19:1;;19213:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;332:247::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1857:456::-;1934:6;1942;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;:::-;2127:5;-1:-1:-1;2184:2:1;2169:18;;2156:32;2197:33;2156:32;2197:33;:::i;:::-;1857:456;;2249:7;;-1:-1:-1;;;2303:2:1;2288:18;;;;2275:32;;1857:456::o;2318:180::-;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;-1:-1:-1;2469:23:1;;2318:180;-1:-1:-1;2318:180:1:o;2692:118::-;2778:5;2771:13;2764:21;2757:5;2754:32;2744:60;;2800:1;2797;2790:12;2815:309;2880:6;2888;2941:2;2929:9;2920:7;2916:23;2912:32;2909:52;;;2957:1;2954;2947:12;2909:52;2993:9;2980:23;2970:33;;3053:2;3042:9;3038:18;3025:32;3066:28;3088:5;3066:28;:::i;:::-;3113:5;3103:15;;;2815:309;;;;;:::o;3129:241::-;3185:6;3238:2;3226:9;3217:7;3213:23;3209:32;3206:52;;;3254:1;3251;3244:12;3206:52;3293:9;3280:23;3312:28;3334:5;3312:28;:::i;3375:382::-;3440:6;3448;3501:2;3489:9;3480:7;3476:23;3472:32;3469:52;;;3517:1;3514;3507:12;3469:52;3556:9;3543:23;3575:28;3597:5;3575:28;:::i;:::-;3622:5;-1:-1:-1;3679:2:1;3664:18;;3651:32;3692:33;3651:32;3692:33;:::i;3762:248::-;3830:6;3838;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;-1:-1:-1;;3930:23:1;;;4000:2;3985:18;;;3972:32;;-1:-1:-1;3762:248:1:o;4015:382::-;4080:6;4088;4141:2;4129:9;4120:7;4116:23;4112:32;4109:52;;;4157:1;4154;4147:12;4109:52;4196:9;4183:23;4215:31;4240:5;4215:31;:::i;:::-;4265:5;-1:-1:-1;4322:2:1;4307:18;;4294:32;4335:30;4294:32;4335:30;:::i;4402:813::-;4497:6;4505;4513;4521;4529;4582:3;4570:9;4561:7;4557:23;4553:33;4550:53;;;4599:1;4596;4589:12;4550:53;4638:9;4625:23;4657:31;4682:5;4657:31;:::i;:::-;4707:5;-1:-1:-1;4764:2:1;4749:18;;4736:32;4777:33;4736:32;4777:33;:::i;:::-;4829:7;-1:-1:-1;4888:2:1;4873:18;;4860:32;4901:33;4860:32;4901:33;:::i;:::-;4953:7;-1:-1:-1;5012:2:1;4997:18;;4984:32;5025:33;4984:32;5025:33;:::i;:::-;5077:7;-1:-1:-1;5136:3:1;5121:19;;5108:33;5150;5108;5150;:::i;:::-;5202:7;5192:17;;;4402:813;;;;;;;;:::o;5220:315::-;5288:6;5296;5349:2;5337:9;5328:7;5324:23;5320:32;5317:52;;;5365:1;5362;5355:12;5317:52;5401:9;5388:23;5378:33;;5461:2;5450:9;5446:18;5433:32;5474:31;5499:5;5474:31;:::i;5540:388::-;5608:6;5616;5669:2;5657:9;5648:7;5644:23;5640:32;5637:52;;;5685:1;5682;5675:12;5637:52;5724:9;5711:23;5743:31;5768:5;5743:31;:::i;5933:661::-;6055:6;6063;6071;6079;6087;6095;6103;6111;6164:3;6152:9;6143:7;6139:23;6135:33;6132:53;;;6181:1;6178;6171:12;6132:53;-1:-1:-1;;6204:23:1;;;6274:2;6259:18;;6246:32;;-1:-1:-1;6325:2:1;6310:18;;6297:32;;6376:2;6361:18;;6348:32;;-1:-1:-1;6427:3:1;6412:19;;6399:33;;-1:-1:-1;6479:3:1;6464:19;;6451:33;;-1:-1:-1;6531:3:1;6516:19;;6503:33;;-1:-1:-1;6583:3:1;6568:19;6555:33;;-1:-1:-1;5933:661:1;-1:-1:-1;5933:661:1:o;6599:316::-;6676:6;6684;6692;6745:2;6733:9;6724:7;6720:23;6716:32;6713:52;;;6761:1;6758;6751:12;6713:52;-1:-1:-1;;6784:23:1;;;6854:2;6839:18;;6826:32;;-1:-1:-1;6905:2:1;6890:18;;;6877:32;;6599:316;-1:-1:-1;6599:316:1:o;7403:329::-;7605:2;7587:21;;;7644:1;7624:18;;;7617:29;-1:-1:-1;;;7677:2:1;7662:18;;7655:36;7723:2;7708:18;;7403:329::o;8089:127::-;8150:10;8145:3;8141:20;8138:1;8131:31;8181:4;8178:1;8171:15;8205:4;8202:1;8195:15;8221:127;8282:10;8277:3;8273:20;8270:1;8263:31;8313:4;8310:1;8303:15;8337:4;8334:1;8327:15;8353:128;8420:9;;;8441:11;;;8438:37;;;8455:18;;:::i;8486:127::-;8547:10;8542:3;8538:20;8535:1;8528:31;8578:4;8575:1;8568:15;8602:4;8599:1;8592:15;8618:135;8657:3;8678:17;;;8675:43;;8698:18;;:::i;:::-;-1:-1:-1;8745:1:1;8734:13;;8618:135::o;9525:217::-;9565:1;9591;9581:132;;9635:10;9630:3;9626:20;9623:1;9616:31;9670:4;9667:1;9660:15;9698:4;9695:1;9688:15;9581:132;-1:-1:-1;9727:9:1;;9525:217::o;9747:125::-;9812:9;;;9833:10;;;9830:36;;;9846:18;;:::i;10659:184::-;10729:6;10782:2;10770:9;10761:7;10757:23;10753:32;10750:52;;;10798:1;10795;10788:12;10750:52;-1:-1:-1;10821:16:1;;10659:184;-1:-1:-1;10659:184:1:o;11127:245::-;11194:6;11247:2;11235:9;11226:7;11222:23;11218:32;11215:52;;;11263:1;11260;11253:12;11215:52;11295:9;11289:16;11314:28;11336:5;11314:28;:::i;12401:168::-;12474:9;;;12505;;12522:15;;;12516:22;;12502:37;12492:71;;12543:18;;:::i;14997:251::-;15067:6;15120:2;15108:9;15099:7;15095:23;15091:32;15088:52;;;15136:1;15133;15126:12;15088:52;15168:9;15162:16;15187:31;15212:5;15187:31;:::i;15253:461::-;15306:3;15344:5;15338:12;15371:6;15366:3;15359:19;15397:4;15426:2;15421:3;15417:12;15410:19;;15463:2;15456:5;15452:14;15484:1;15494:195;15508:6;15505:1;15502:13;15494:195;;;15573:13;;-1:-1:-1;;;;;15569:39:1;15557:52;;15629:12;;;;15664:15;;;;15605:1;15523:9;15494:195;;;-1:-1:-1;15705:3:1;;15253:461;-1:-1:-1;;;;;15253:461:1:o;15719:510::-;15990:6;15979:9;15972:25;16033:3;16028:2;16017:9;16013:18;16006:31;15953:4;16054:57;16106:3;16095:9;16091:19;16083:6;16054:57;:::i;:::-;-1:-1:-1;;;;;16147:32:1;;;;16142:2;16127:18;;16120:60;-1:-1:-1;16211:2:1;16196:18;16189:34;16046:65;15719:510;-1:-1:-1;;15719:510:1:o;16234:582::-;16533:6;16522:9;16515:25;16576:6;16571:2;16560:9;16556:18;16549:34;16619:3;16614:2;16603:9;16599:18;16592:31;16496:4;16640:57;16692:3;16681:9;16677:19;16669:6;16640:57;:::i;:::-;-1:-1:-1;;;;;16733:32:1;;;;16728:2;16713:18;;16706:60;-1:-1:-1;16797:3:1;16782:19;16775:35;16632:65;16234:582;-1:-1:-1;;;16234:582:1:o;17433:306::-;17521:6;17529;17537;17590:2;17578:9;17569:7;17565:23;17561:32;17558:52;;;17606:1;17603;17596:12;17558:52;17635:9;17629:16;17619:26;;17685:2;17674:9;17670:18;17664:25;17654:35;;17729:2;17718:9;17714:18;17708:25;17698:35;;17433:306;;;;;:::o

Swarm Source

ipfs://48a21ad183826504e83afe38bdce2a406b0f43944f6844da6e1da87cf87d1eef

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.