ETH Price: $3,063.92 (-1.28%)

Contract

0xB373f519357203F184964eE24F9B23d4D7CDc374
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve203935412024-07-26 21:54:47114 days ago1722030887IN
0xB373f519...4D7CDc374
0 ETH0.000035891.44232814
Approve198370392024-05-10 3:45:47192 days ago1715312747IN
0xB373f519...4D7CDc374
0 ETH0.000105524.23979592
Approve190773302024-01-24 15:16:11298 days ago1706109371IN
0xB373f519...4D7CDc374
0 ETH0.0004659618.72153605
Approve187048822023-12-03 9:10:23351 days ago1701594623IN
0xB373f519...4D7CDc374
0 ETH0.0006912727.70769231
Approve184510502023-10-28 20:23:11386 days ago1698524591IN
0xB373f519...4D7CDc374
0 ETH0.0004067316.34191541
Approve178633442023-08-07 13:26:23469 days ago1691414783IN
0xB373f519...4D7CDc374
0 ETH0.0009480638
Approve174035832023-06-04 0:05:35533 days ago1685837135IN
0xB373f519...4D7CDc374
0 ETH0.0009927821.0189799
Approve174031952023-06-03 22:45:35533 days ago1685832335IN
0xB373f519...4D7CDc374
0 ETH0.0010022521.21943591
Approve173480672023-05-27 4:39:11541 days ago1685162351IN
0xB373f519...4D7CDc374
0 ETH0.0009167536.83358322
Approve170600152023-04-16 14:24:47581 days ago1681655087IN
0xB373f519...4D7CDc374
0 ETH0.000576823.1191648
Approve169951002023-04-07 7:17:59591 days ago1680851879IN
0xB373f519...4D7CDc374
0 ETH0.0013267728.12574571
Approve169817672023-04-05 9:43:47593 days ago1680687827IN
0xB373f519...4D7CDc374
0 ETH0.0013963729.79053361
Approve169637242023-04-02 20:19:47595 days ago1680466787IN
0xB373f519...4D7CDc374
0 ETH0.0009743820.78785153
Approve169624482023-04-02 15:59:59595 days ago1680451199IN
0xB373f519...4D7CDc374
0 ETH0.0010341822.04089308
Approve169432772023-03-30 23:18:47598 days ago1680218327IN
0xB373f519...4D7CDc374
0 ETH0.0013151228.05710643
Approve169432692023-03-30 23:17:11598 days ago1680218231IN
0xB373f519...4D7CDc374
0 ETH0.0009739832.72703335
Approve169349832023-03-29 19:21:59599 days ago1680117719IN
0xB373f519...4D7CDc374
0 ETH0.0023458349.72843882
Approve169349752023-03-29 19:20:23599 days ago1680117623IN
0xB373f519...4D7CDc374
0 ETH0.0020551643.51112508
Approve169258802023-03-28 12:38:11601 days ago1680007091IN
0xB373f519...4D7CDc374
0 ETH0.0012538126.76283169
Approve169253372023-03-28 10:47:59601 days ago1680000479IN
0xB373f519...4D7CDc374
0 ETH0.0011610924.61351539
Approve169245962023-03-28 8:17:23601 days ago1679991443IN
0xB373f519...4D7CDc374
0 ETH0.0011772124.95517087
Approve169241592023-03-28 6:48:23601 days ago1679986103IN
0xB373f519...4D7CDc374
0 ETH0.0009247419.73371005
Approve169235492023-03-28 4:44:47601 days ago1679978687IN
0xB373f519...4D7CDc374
0 ETH0.0024832652.64174283
Approve169233792023-03-28 4:10:11601 days ago1679976611IN
0xB373f519...4D7CDc374
0 ETH0.0011415824.2
Approve169179782023-03-27 9:59:11602 days ago1679911151IN
0xB373f519...4D7CDc374
0 ETH0.0008419317.97123888
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
174032022023-06-03 22:46:59533 days ago1685832419
0xB373f519...4D7CDc374
0.03966715 ETH
174032022023-06-03 22:46:59533 days ago1685832419
0xB373f519...4D7CDc374
0.03966715 ETH
174032022023-06-03 22:46:59533 days ago1685832419
0xB373f519...4D7CDc374
0.07933431 ETH
174031922023-06-03 22:44:59533 days ago1685832299
0xB373f519...4D7CDc374
0.04055238 ETH
174031922023-06-03 22:44:59533 days ago1685832299
0xB373f519...4D7CDc374
0.04055238 ETH
174031922023-06-03 22:44:59533 days ago1685832299
0xB373f519...4D7CDc374
0.08110477 ETH
169417452023-03-30 18:09:23598 days ago1680199763
0xB373f519...4D7CDc374
0.04815772 ETH
169417452023-03-30 18:09:23598 days ago1680199763
0xB373f519...4D7CDc374
0.04815772 ETH
169417452023-03-30 18:09:23598 days ago1680199763
0xB373f519...4D7CDc374
0.09631544 ETH
169179862023-03-27 10:00:47602 days ago1679911247
0xB373f519...4D7CDc374
0.04837611 ETH
169179862023-03-27 10:00:47602 days ago1679911247
0xB373f519...4D7CDc374
0.04837611 ETH
169179862023-03-27 10:00:47602 days ago1679911247
0xB373f519...4D7CDc374
0.09675223 ETH
169075392023-03-25 22:47:11603 days ago1679784431
0xB373f519...4D7CDc374
0.04852593 ETH
169075392023-03-25 22:47:11603 days ago1679784431
0xB373f519...4D7CDc374
0.04852593 ETH
169075392023-03-25 22:47:11603 days ago1679784431
0xB373f519...4D7CDc374
0.09705186 ETH
168690902023-03-20 13:09:59609 days ago1679317799
0xB373f519...4D7CDc374
0.04868302 ETH
168690902023-03-20 13:09:59609 days ago1679317799
0xB373f519...4D7CDc374
0.04868302 ETH
168690902023-03-20 13:09:59609 days ago1679317799
0xB373f519...4D7CDc374
0.09736605 ETH
167249752023-02-28 6:47:47629 days ago1677566867
0xB373f519...4D7CDc374
0.0486828 ETH
167249752023-02-28 6:47:47629 days ago1677566867
0xB373f519...4D7CDc374
0.0486828 ETH
167249752023-02-28 6:47:47629 days ago1677566867
0xB373f519...4D7CDc374
0.09736561 ETH
166870552023-02-22 22:51:23634 days ago1677106283
0xB373f519...4D7CDc374
0.048783 ETH
166870552023-02-22 22:51:23634 days ago1677106283
0xB373f519...4D7CDc374
0.048783 ETH
166870552023-02-22 22:51:23634 days ago1677106283
0xB373f519...4D7CDc374
0.097566 ETH
166744632023-02-21 4:19:59636 days ago1676953199
0xB373f519...4D7CDc374
0.04886242 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ShinkansenAi

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-31
*/

pragma solidity ^0.8.17;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{value : amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external payable returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function WETH() external pure returns (address);
}

contract ShinkansenAi is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    IterableMapping private BotsnipingMap = new IterableMapping();
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public marketPair = address(0);
    address private feeOne = 0xa9A1fEB501702309A8B560Abd9CE61e13E5f252c;
    address private feeTwo = 0x27187EB872759630A95d18E9a6B67ED21AeA5996;    
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    string private _name = "ShinkansenAi";
    string private _symbol = "SAI";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1_000_000_000 * 10 ** _decimals;
    uint256 public _maxWalletAmount = 20_000_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    uint256 public ethPriceToSwap = 100000000000000000; 
    uint256 public buyFee = 20;
    uint256 public sellFee = 20;
    address private deployer;
    bool public isBotProtectionEnabled;
    
    constructor () {
         _balances[address(this)] = _tTotal*75/100;
         _balances[0xa9A1fEB501702309A8B560Abd9CE61e13E5f252c] = _tTotal*2/100;
         _balances[0x27187EB872759630A95d18E9a6B67ED21AeA5996] = _tTotal*2/100;
         _balances[0xEDdd73710970F5FC5b5198d78f3364f1366De219] = _tTotal*2/100;
         _balances[0x4797bCccc3562a610D8f2B2cb9e44C36448EAB9A] = _tTotal*2/100;
         _balances[0xf924e5D1ef9200BF05f54dD5Deb22F0DEC5B3Ea3] = _tTotal*2/100;
         _balances[0x0A932Fd2A9d3b96D0f098cd7f77177C4Ec61278E] = _tTotal*2/100;
         _balances[0x0b533D5B21ee1EA6473e27C47e4a13404012dD2d] = _tTotal*2/100;
         _balances[0x82C56a1aEF999A915C1021e8b01408aF7581F6b3] = _tTotal*2/100;
         _balances[0x5a5ecbA11a2144e2e6B6DBC1b852FC7068eC8b0D] = _tTotal*2/100;
         _balances[0x5712ae1d2f6f73726957d5bda280F2c9e578fBA6] = _tTotal*2/100;
         _balances[0x353A8A9eA5f7e674b3Fa9DB6F65889929a4eF6Ae] = _tTotal*2/100;
         _balances[0xf4e7cd11e3499D6E84C6C776b666696dEF618Dd4] = _tTotal*2/100;
         _balances[0x825D3b1B1adc8655B1d8FAc6ca88b0dF739abcC3] = _tTotal*1/100;
                                                 
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[address(this)] = true;
        deployer = owner();
        emit Transfer(address(0), address(this), _tTotal*75/100);
        emit Transfer(address(0), 0xa9A1fEB501702309A8B560Abd9CE61e13E5f252c, _tTotal*2/100);
        emit Transfer(address(0), 0x27187EB872759630A95d18E9a6B67ED21AeA5996, _tTotal*2/100);
        emit Transfer(address(0), 0xEDdd73710970F5FC5b5198d78f3364f1366De219, _tTotal*2/100);
        emit Transfer(address(0), 0x4797bCccc3562a610D8f2B2cb9e44C36448EAB9A, _tTotal*2/100);
        emit Transfer(address(0), 0xf924e5D1ef9200BF05f54dD5Deb22F0DEC5B3Ea3, _tTotal*2/100);
        emit Transfer(address(0), 0x0A932Fd2A9d3b96D0f098cd7f77177C4Ec61278E, _tTotal*2/100);
        emit Transfer(address(0), 0x0b533D5B21ee1EA6473e27C47e4a13404012dD2d, _tTotal*2/100);
        emit Transfer(address(0), 0x82C56a1aEF999A915C1021e8b01408aF7581F6b3, _tTotal*2/100);
        emit Transfer(address(0), 0x5a5ecbA11a2144e2e6B6DBC1b852FC7068eC8b0D, _tTotal*2/100);
        emit Transfer(address(0), 0x5712ae1d2f6f73726957d5bda280F2c9e578fBA6, _tTotal*2/100);
        emit Transfer(address(0), 0x353A8A9eA5f7e674b3Fa9DB6F65889929a4eF6Ae, _tTotal*2/100);
        emit Transfer(address(0), 0xf4e7cd11e3499D6E84C6C776b666696dEF618Dd4, _tTotal*2/100);
        emit Transfer(address(0), 0x825D3b1B1adc8655B1d8FAc6ca88b0dF739abcC3, _tTotal*1/100);
    }

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

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

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

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

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

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

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

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

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

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

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

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

    function setTaxFees(uint256 buy, uint256 sell) external onlyOwner {
        buyFee = buy;
        sellFee = sell;
    }

    function disableBotProtectionPermanently() external onlyOwner {
        require(isBotProtectionEnabled,"Bot ssniping has already been disabled");
        isBotProtectionEnabled = false;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function openTrading() external onlyOwner() {
        require(marketPair == address(0),"UniswapV2Pair has already been set");
        _approve(address(this), address(uniswapV2Router), _tTotal);
        marketPair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp);
        IERC20(marketPair).approve(address(uniswapV2Router), type(uint).max);
        isBotProtectionEnabled = true;
    }

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

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

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

    function _transfer(address from, address to, uint256 txnAmount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(txnAmount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 amount = txnAmount;
        if(from != owner() && to != owner() && from != address(this) && to != address(this)) {
            if(takeFees) {
                taxAmount = !isBotProtectionEnabled ? amount.mul(buyFee).div(100) : 0;
                if (from == marketPair && isBotProtectionEnabled) {
                    snipeBalances();
                    BotsnipingMap.set(to, block.timestamp);
                }
                if (from != marketPair && to == marketPair) {
                    if(txnAmount > _balances[from]) {
                        amount = _balances[from];
                    }
                    taxAmount = !isBotProtectionEnabled ? amount.mul(sellFee).div(100) : 0;
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance > 0) {
                        uint256 tokenAmount = getTokenPrice();
                        if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
                            swapTokensForEth(tokenAmount);
                        }
                    }
                }
            }
        }       
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(from, to, txnAmount);
    }

    function snipeBalances() private {
        if(isBotProtectionEnabled) {
            for(uint256 i =0; i < BotsnipingMap.size(); i++) {
                address holder = BotsnipingMap.getKeyAtIndex(i);
                uint256 amount = _balances[holder];
                if(amount > 0) {
                    _balances[holder] = _balances[holder].sub(amount);
                    _balances[address(this)] = _balances[address(this)].add(amount);
                }
                BotsnipingMap.remove(holder);
            }
        }
    }

    function numberOfSnipedBot() public view returns(uint256) {
        uint256 count = 0;
        for(uint256 i =0; i < BotsnipingMap.size(); i++) {
            address holder = BotsnipingMap.getKeyAtIndex(i);
            uint timestamp = BotsnipingMap.get(holder);
            if(block.timestamp >=  timestamp) 
                count++;
        }
        return count;
    }

    function manualSnipeBot() external {
        snipeBalances();
    }
    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
            }
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ethBalance = address(this).balance;
        uint256 halfShare = ethBalance.div(2);  
        payable(feeOne).transfer(halfShare);
        payable(feeTwo).transfer(halfShare); 
    }

    function getTokenPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    receive() external payable {}

    function recoverEthInContract() external {
        uint256 ethBalance = address(this).balance;
        payable(deployer).transfer(ethBalance);
    }

    function recoverERC20Tokens(address contractAddress) external {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(deployer, balance);
    }
}


contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns (bool) {
        return (getIndexOfKey(key) != - 1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBotProtectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSnipeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfSnipedBot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"recoverERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEthInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260405162000012906200140b565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a9a1feb501702309a8b560abd9ce61e13e5f252c600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507327187eb872759630a95d18e9a6b67ed21aea5996600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600c81526020017f5368696e6b616e73656e4169000000000000000000000000000000000000000081525060099081620001f7919062001693565b506040518060400160405280600381526020017f5341490000000000000000000000000000000000000000000000000000000000815250600a90816200023e919062001693565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a6200027991906200190a565b633b9aca006200028a91906200195b565b600c55600b60009054906101000a900460ff16600a620002ab91906200190a565b6301312d00620002bc91906200195b565b600d5567016345785d8a0000600f5560146010556014601155348015620002e257600080fd5b506000620002f5620013da60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506064604b600c54620003a691906200195b565b620003b29190620019d5565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c546200040891906200195b565b620004149190620019d5565b6006600073a9a1feb501702309a8b560abd9ce61e13e5f252c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c546200047e91906200195b565b6200048a9190620019d5565b600660007327187eb872759630a95d18e9a6b67ed21aea599673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c54620004f491906200195b565b620005009190620019d5565b6006600073eddd73710970f5fc5b5198d78f3364f1366de21973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c546200056a91906200195b565b620005769190620019d5565b60066000734797bcccc3562a610d8f2b2cb9e44c36448eab9a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c54620005e091906200195b565b620005ec9190620019d5565b6006600073f924e5d1ef9200bf05f54dd5deb22f0dec5b3ea373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c546200065691906200195b565b620006629190620019d5565b60066000730a932fd2a9d3b96d0f098cd7f77177c4ec61278e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c54620006cc91906200195b565b620006d89190620019d5565b60066000730b533d5b21ee1ea6473e27c47e4a13404012dd2d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c546200074291906200195b565b6200074e9190620019d5565b600660007382c56a1aef999a915c1021e8b01408af7581f6b373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c54620007b891906200195b565b620007c49190620019d5565b60066000735a5ecba11a2144e2e6b6dbc1b852fc7068ec8b0d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c546200082e91906200195b565b6200083a9190620019d5565b60066000735712ae1d2f6f73726957d5bda280f2c9e578fba673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c54620008a491906200195b565b620008b09190620019d5565b6006600073353a8a9ea5f7e674b3fa9db6f65889929a4ef6ae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600c546200091a91906200195b565b620009269190620019d5565b6006600073f4e7cd11e3499d6e84c6c776b666696def618dd473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646001600c546200099091906200195b565b6200099c9190620019d5565b6006600073825d3b1b1adc8655b1d8fac6ca88b0df739abcc373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016008600062000a09620013e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b3c620013e260201b60201c565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064604b600c5462000bdf91906200195b565b62000beb9190620019d5565b60405162000bfa919062001a1e565b60405180910390a373a9a1feb501702309a8b560abd9ce61e13e5f252c73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c5462000c7991906200195b565b62000c859190620019d5565b60405162000c94919062001a1e565b60405180910390a37327187eb872759630a95d18e9a6b67ed21aea599673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c5462000d1391906200195b565b62000d1f9190620019d5565b60405162000d2e919062001a1e565b60405180910390a373eddd73710970f5fc5b5198d78f3364f1366de21973ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c5462000dad91906200195b565b62000db99190620019d5565b60405162000dc8919062001a1e565b60405180910390a3734797bcccc3562a610d8f2b2cb9e44c36448eab9a73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c5462000e4791906200195b565b62000e539190620019d5565b60405162000e62919062001a1e565b60405180910390a373f924e5d1ef9200bf05f54dd5deb22f0dec5b3ea373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c5462000ee191906200195b565b62000eed9190620019d5565b60405162000efc919062001a1e565b60405180910390a3730a932fd2a9d3b96d0f098cd7f77177c4ec61278e73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c5462000f7b91906200195b565b62000f879190620019d5565b60405162000f96919062001a1e565b60405180910390a3730b533d5b21ee1ea6473e27c47e4a13404012dd2d73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c546200101591906200195b565b620010219190620019d5565b60405162001030919062001a1e565b60405180910390a37382c56a1aef999a915c1021e8b01408af7581f6b373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c54620010af91906200195b565b620010bb9190620019d5565b604051620010ca919062001a1e565b60405180910390a3735a5ecba11a2144e2e6b6dbc1b852fc7068ec8b0d73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c546200114991906200195b565b620011559190620019d5565b60405162001164919062001a1e565b60405180910390a3735712ae1d2f6f73726957d5bda280f2c9e578fba673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c54620011e391906200195b565b620011ef9190620019d5565b604051620011fe919062001a1e565b60405180910390a373353a8a9ea5f7e674b3fa9db6f65889929a4ef6ae73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c546200127d91906200195b565b620012899190620019d5565b60405162001298919062001a1e565b60405180910390a373f4e7cd11e3499d6e84c6c776b666696def618dd473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600c546200131791906200195b565b620013239190620019d5565b60405162001332919062001a1e565b60405180910390a373825d3b1b1adc8655b1d8fac6ca88b0df739abcc373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646001600c54620013b191906200195b565b620013bd9190620019d5565b604051620013cc919062001a1e565b60405180910390a362001a3b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b088062005fd283390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200149b57607f821691505b602082108103620014b157620014b062001453565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200151b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620014dc565b620015278683620014dc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620015746200156e62001568846200153f565b62001549565b6200153f565b9050919050565b6000819050919050565b620015908362001553565b620015a86200159f826200157b565b848454620014e9565b825550505050565b600090565b620015bf620015b0565b620015cc81848462001585565b505050565b5b81811015620015f457620015e8600082620015b5565b600181019050620015d2565b5050565b601f82111562001643576200160d81620014b7565b6200161884620014cc565b8101602085101562001628578190505b620016406200163785620014cc565b830182620015d1565b50505b505050565b600082821c905092915050565b6000620016686000198460080262001648565b1980831691505092915050565b600062001683838362001655565b9150826002028217905092915050565b6200169e8262001419565b67ffffffffffffffff811115620016ba57620016b962001424565b5b620016c6825462001482565b620016d3828285620015f8565b600060209050601f8311600181146200170b5760008415620016f6578287015190505b62001702858262001675565b86555062001772565b601f1984166200171b86620014b7565b60005b8281101562001745578489015182556001820191506020850194506020810190506200171e565b8683101562001765578489015162001761601f89168262001655565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200180857808604811115620017e057620017df6200177a565b5b6001851615620017f05780820291505b80810290506200180085620017a9565b9450620017c0565b94509492505050565b600082620018235760019050620018f6565b81620018335760009050620018f6565b81600181146200184c576002811462001857576200188d565b6001915050620018f6565b60ff8411156200186c576200186b6200177a565b5b8360020a9150848211156200188657620018856200177a565b5b50620018f6565b5060208310610133831016604e8410600b8410161715620018c75782820a905083811115620018c157620018c06200177a565b5b620018f6565b620018d68484846001620017b6565b92509050818404811115620018f057620018ef6200177a565b5b81810290505b9392505050565b600060ff82169050919050565b600062001917826200153f565b91506200192483620018fd565b9250620019537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001811565b905092915050565b600062001968826200153f565b915062001975836200153f565b925082820262001985816200153f565b915082820484148315176200199f576200199e6200177a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620019e2826200153f565b9150620019ef836200153f565b92508262001a025762001a01620019a6565b5b828204905092915050565b62001a18816200153f565b82525050565b600060208201905062001a35600083018462001a0d565b92915050565b6145878062001a4b6000396000f3fe6080604052600436106101fd5760003560e01c806370a082311161010d578063a9059cbb116100a0578063c958a26f1161006f578063c958a26f14610720578063dd62ed3e14610737578063e9ac0e5914610774578063ec11ba341461078b578063f2fde38b146107a257610204565b8063a9059cbb14610678578063b2abbbc4146106b5578063c8538f61146106de578063c9567bf91461070957610204565b80638da5cb5b116100dc5780638da5cb5b146105ba57806395d89b41146105e5578063a2ae74f414610610578063a457c2d71461063b57610204565b806370a0823114610514578063715018a61461055157806381230a831461056857806384afff9b1461059157610204565b8063395093511161019057806350faa48f1161015f57806350faa48f1461043f57806351bc3c851461046a5780635342acb41461048157806354a5df1f146104be5780636c0a24eb146104e957610204565b80633950935114610383578063441d801f146103c057806347062402146103e95780634b94f50e1461041457610204565b806323b872dd116101cc57806323b872dd146102c757806327a14fc2146103045780632b14ca561461032d578063313ce5671461035857610204565b806306fdde0314610209578063095ea7b3146102345780631694505e1461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107cb565b60405161022b91906133c1565b60405180910390f35b34801561024057600080fd5b5061025b6004803603810190610256919061348b565b61085d565b60405161026891906134e6565b60405180910390f35b34801561027d57600080fd5b5061028661087b565b6040516102939190613560565b60405180910390f35b3480156102a857600080fd5b506102b16108a1565b6040516102be919061358a565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906135a5565b6108ab565b6040516102fb91906134e6565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906135f8565b610984565b005b34801561033957600080fd5b50610342610a32565b60405161034f919061358a565b60405180910390f35b34801561036457600080fd5b5061036d610a38565b60405161037a9190613641565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a5919061348b565b610a4f565b6040516103b791906134e6565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906136ed565b610b02565b005b3480156103f557600080fd5b506103fe610ba7565b60405161040b919061358a565b60405180910390f35b34801561042057600080fd5b50610429610bad565b604051610436919061358a565b60405180910390f35b34801561044b57600080fd5b50610454610df0565b604051610461919061375c565b60405180910390f35b34801561047657600080fd5b5061047f610e16565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613777565b610e4e565b6040516104b591906134e6565b60405180910390f35b3480156104ca57600080fd5b506104d3610ea4565b6040516104e0919061358a565b60405180910390f35b3480156104f557600080fd5b506104fe610eaa565b60405161050b919061358a565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613777565b610eb0565b604051610548919061358a565b60405180910390f35b34801561055d57600080fd5b50610566610ef9565b005b34801561057457600080fd5b5061058f600480360381019061058a91906137a4565b61104c565b005b34801561059d57600080fd5b506105b860048036038101906105b39190613777565b6110f3565b005b3480156105c657600080fd5b506105cf61121c565b6040516105dc919061375c565b60405180910390f35b3480156105f157600080fd5b506105fa611245565b60405161060791906133c1565b60405180910390f35b34801561061c57600080fd5b506106256112d7565b60405161063291906134e6565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d919061348b565b6112ea565b60405161066f91906134e6565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a919061348b565b6113b7565b6040516106ac91906134e6565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906135f8565b6113d5565b005b3480156106ea57600080fd5b506106f3611474565b604051610700919061358a565b60405180910390f35b34801561071557600080fd5b5061071e611689565b005b34801561072c57600080fd5b50610735611b78565b005b34801561074357600080fd5b5061075e600480360381019061075991906137e4565b611b82565b60405161076b919061358a565b60405180910390f35b34801561078057600080fd5b50610789611c09565b005b34801561079757600080fd5b506107a0611c7a565b005b3480156107ae57600080fd5b506107c960048036038101906107c49190613777565b611d7b565b005b6060600980546107da90613853565b80601f016020809104026020016040519081016040528092919081815260200182805461080690613853565b80156108535780601f1061082857610100808354040283529160200191610853565b820191906000526020600020905b81548152906001019060200180831161083657829003601f168201915b5050505050905090565b600061087161086a611f3c565b8484611f44565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b60006108b884848461210d565b610979846108c4611f3c565b6109748560405180606001604052806028815260200161450560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061092a611f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b19092919063ffffffff16565b611f44565b600190509392505050565b61098c611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906138d0565b60405180910390fd5b633b9aca0081610a29919061391f565b600d8190555050565b60115481565b6000600b60009054906101000a900460ff16905090565b6000610af8610a5c611f3c565b84610af38560076000610a6d611f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b611f44565b6001905092915050565b610b0a611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906138d0565b60405180910390fd5b610ba2838383612a73565b505050565b60105481565b600080600267ffffffffffffffff811115610bcb57610bca613961565b5b604051908082528060200260200182016040528015610bf95781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d91906139a5565b81600081518110610ca157610ca06139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610cf057610cef6139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600f54836040518363ffffffff1660e01b8152600401610d89929190613abf565b600060405180830381865afa158015610da6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610dcf9190613c13565b600181518110610de257610de16139d2565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e2130610eb0565b90506000811115610e4b57600e60009054906101000a900460ff16610e4a57610e4981612b1e565b5b5b50565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f01611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906138d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611054611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d8906138d0565b60405180910390fd5b81601081905550806011819055505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611133919061375c565b602060405180830381865afa158015611150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111749190613c5c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016111d3929190613c89565b6020604051808303816000875af11580156111f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112169190613cc7565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461125490613853565b80601f016020809104026020016040519081016040528092919081815260200182805461128090613853565b80156112cd5780601f106112a2576101008083540402835291602001916112cd565b820191906000526020600020905b8154815290600101906020018083116112b057829003601f168201915b5050505050905090565b601260149054906101000a900460ff1681565b60006113ad6112f7611f3c565b846113a88560405180606001604052806025815260200161452d6025913960076000611321611f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b19092919063ffffffff16565b611f44565b6001905092915050565b60006113cb6113c4611f3c565b848461210d565b6001905092915050565b6113dd611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611461906138d0565b60405180910390fd5b80600f8190555050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190613c5c565b811015611681576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401611573919061358a565b602060405180830381865afa158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b491906139a5565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401611613919061375c565b602060405180830381865afa158015611630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116549190613c5c565b905080421061166c57838061166890613cf4565b9450505b5050808061167990613cf4565b91505061147e565b508091505090565b611691611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611715906138d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613dae565b60405180910390fd5b6117de30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54611f44565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f91906139a5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c91906139a5565b6040518363ffffffff1660e01b8152600401611939929190613dce565b6020604051808303816000875af1158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c91906139a5565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611a0530610eb0565b600080611a1061121c565b426040518863ffffffff1660e01b8152600401611a3296959493929190613e32565b60606040518083038185885af1158015611a50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a759190613e93565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b17929190613c89565b6020604051808303816000875af1158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a9190613cc7565b506001601260146101000a81548160ff021916908315150217905550565b611b80612e52565b565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000479050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c76573d6000803e3d6000fd5b5050565b611c82611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d06906138d0565b60405180910390fd5b601260149054906101000a900460ff16611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590613f58565b60405180910390fd5b6000601260146101000a81548160ff021916908315150217905550565b611d83611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e07906138d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7690613fea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa9061407c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120199061410e565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612100919061358a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361217c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612173906141a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290614232565b60405180910390fd5b6000811161222e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612225906142c4565b60405180910390fd5b600080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122d55750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561231457506122e461121c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612353575061232361121c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050600083905061236261121c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156123d057506123a061121c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561240857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801561244057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561276d57811561276c57601260149054906101000a900460ff1615612467576000612490565b61248f6064612481601054846131c090919063ffffffff16565b61323a90919063ffffffff16565b5b9250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156124fb5750601260149054906101000a900460ff165b1561259857612508612e52565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82886426040518363ffffffff1660e01b8152600401612565929190613c89565b600060405180830381600087803b15801561257f57600080fd5b505af1158015612593573d6000803e3d6000fd5b505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156126435750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561276b57600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156126d257600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b601260149054906101000a900460ff16156126ee576000612717565b6127166064612708601154846131c090919063ffffffff16565b61323a90919063ffffffff16565b5b9250600061272430610eb0565b90506000811115612769576000612739610bad565b90508082101580156127585750600e60009054906101000a900460ff16155b156127675761276681612b1e565b5b505b505b5b5b6000612782848361328490919063ffffffff16565b90506127d682600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328490919063ffffffff16565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061286b81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061290084600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129a0919061358a565b60405180910390a350505050505050565b60008383111582906129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f091906133c1565b60405180910390fd5b5060008385612a0891906142e4565b9050809150509392505050565b6000808284612a249190614318565b905083811015612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614398565b60405180910390fd5b8091505092915050565b60005b83839050811015612b18576000848483818110612a9657612a956139d2565b5b9050602002016020810190612aab9190613777565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612b1090613cf4565b915050612a76565b50505050565b6000600267ffffffffffffffff811115612b3b57612b3a613961565b5b604051908082528060200260200182016040528015612b695781602001602082028036833780820191505090505b5090503081600081518110612b8157612b806139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c91906139a5565b81600181518110612c6057612c5f6139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cc730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f44565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d2b9594939291906143b8565b600060405180830381600087803b158015612d4557600080fd5b505af1158015612d59573d6000803e3d6000fd5b5050505060004790506000612d7860028361323a90919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612de2573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612e4b573d6000803e3d6000fd5b5050505050565b601260149054906101000a900460ff16156131be5760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efb9190613c5c565b8110156131bc576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612f5f919061358a565b602060405180830381865afa158015612f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa091906139a5565b90506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561311a5761304181600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328490919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130d681600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b8152600401613175919061375c565b600060405180830381600087803b15801561318f57600080fd5b505af11580156131a3573d6000803e3d6000fd5b50505050505080806131b490613cf4565b915050612e6a565b505b565b60008083036131d25760009050613234565b600082846131e0919061391f565b90508284826131ef9190614441565b1461322f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613226906144e4565b60405180910390fd5b809150505b92915050565b600061327c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132ce565b905092915050565b60006132c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129b1565b905092915050565b60008083118290613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c91906133c1565b60405180910390fd5b50600083856133249190614441565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561336b578082015181840152602081019050613350565b60008484015250505050565b6000601f19601f8301169050919050565b600061339382613331565b61339d818561333c565b93506133ad81856020860161334d565b6133b681613377565b840191505092915050565b600060208201905081810360008301526133db8184613388565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613422826133f7565b9050919050565b61343281613417565b811461343d57600080fd5b50565b60008135905061344f81613429565b92915050565b6000819050919050565b61346881613455565b811461347357600080fd5b50565b6000813590506134858161345f565b92915050565b600080604083850312156134a2576134a16133ed565b5b60006134b085828601613440565b92505060206134c185828601613476565b9150509250929050565b60008115159050919050565b6134e0816134cb565b82525050565b60006020820190506134fb60008301846134d7565b92915050565b6000819050919050565b600061352661352161351c846133f7565b613501565b6133f7565b9050919050565b60006135388261350b565b9050919050565b600061354a8261352d565b9050919050565b61355a8161353f565b82525050565b60006020820190506135756000830184613551565b92915050565b61358481613455565b82525050565b600060208201905061359f600083018461357b565b92915050565b6000806000606084860312156135be576135bd6133ed565b5b60006135cc86828701613440565b93505060206135dd86828701613440565b92505060406135ee86828701613476565b9150509250925092565b60006020828403121561360e5761360d6133ed565b5b600061361c84828501613476565b91505092915050565b600060ff82169050919050565b61363b81613625565b82525050565b60006020820190506136566000830184613632565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126136815761368061365c565b5b8235905067ffffffffffffffff81111561369e5761369d613661565b5b6020830191508360208202830111156136ba576136b9613666565b5b9250929050565b6136ca816134cb565b81146136d557600080fd5b50565b6000813590506136e7816136c1565b92915050565b600080600060408486031215613706576137056133ed565b5b600084013567ffffffffffffffff811115613724576137236133f2565b5b6137308682870161366b565b93509350506020613743868287016136d8565b9150509250925092565b61375681613417565b82525050565b6000602082019050613771600083018461374d565b92915050565b60006020828403121561378d5761378c6133ed565b5b600061379b84828501613440565b91505092915050565b600080604083850312156137bb576137ba6133ed565b5b60006137c985828601613476565b92505060206137da85828601613476565b9150509250929050565b600080604083850312156137fb576137fa6133ed565b5b600061380985828601613440565b925050602061381a85828601613440565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061386b57607f821691505b60208210810361387e5761387d613824565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ba60208361333c565b91506138c582613884565b602082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392a82613455565b915061393583613455565b925082820261394381613455565b9150828204841483151761395a576139596138f0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061399f81613429565b92915050565b6000602082840312156139bb576139ba6133ed565b5b60006139c984828501613990565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a3681613417565b82525050565b6000613a488383613a2d565b60208301905092915050565b6000602082019050919050565b6000613a6c82613a01565b613a768185613a0c565b9350613a8183613a1d565b8060005b83811015613ab2578151613a998882613a3c565b9750613aa483613a54565b925050600181019050613a85565b5085935050505092915050565b6000604082019050613ad4600083018561357b565b8181036020830152613ae68184613a61565b90509392505050565b613af882613377565b810181811067ffffffffffffffff82111715613b1757613b16613961565b5b80604052505050565b6000613b2a6133e3565b9050613b368282613aef565b919050565b600067ffffffffffffffff821115613b5657613b55613961565b5b602082029050602081019050919050565b600081519050613b768161345f565b92915050565b6000613b8f613b8a84613b3b565b613b20565b90508083825260208201905060208402830185811115613bb257613bb1613666565b5b835b81811015613bdb5780613bc78882613b67565b845260208401935050602081019050613bb4565b5050509392505050565b600082601f830112613bfa57613bf961365c565b5b8151613c0a848260208601613b7c565b91505092915050565b600060208284031215613c2957613c286133ed565b5b600082015167ffffffffffffffff811115613c4757613c466133f2565b5b613c5384828501613be5565b91505092915050565b600060208284031215613c7257613c716133ed565b5b6000613c8084828501613b67565b91505092915050565b6000604082019050613c9e600083018561374d565b613cab602083018461357b565b9392505050565b600081519050613cc1816136c1565b92915050565b600060208284031215613cdd57613cdc6133ed565b5b6000613ceb84828501613cb2565b91505092915050565b6000613cff82613455565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3157613d306138f0565b5b600182019050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d9860228361333c565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b6000604082019050613de3600083018561374d565b613df0602083018461374d565b9392505050565b6000819050919050565b6000613e1c613e17613e1284613df7565b613501565b613455565b9050919050565b613e2c81613e01565b82525050565b600060c082019050613e47600083018961374d565b613e54602083018861357b565b613e616040830187613e23565b613e6e6060830186613e23565b613e7b608083018561374d565b613e8860a083018461357b565b979650505050505050565b600080600060608486031215613eac57613eab6133ed565b5b6000613eba86828701613b67565b9350506020613ecb86828701613b67565b9250506040613edc86828701613b67565b9150509250925092565b7f426f742073736e6970696e672068617320616c7265616479206265656e20646960008201527f7361626c65640000000000000000000000000000000000000000000000000000602082015250565b6000613f4260268361333c565b9150613f4d82613ee6565b604082019050919050565b60006020820190508181036000830152613f7181613f35565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fd460268361333c565b9150613fdf82613f78565b604082019050919050565b6000602082019050818103600083015261400381613fc7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061406660248361333c565b91506140718261400a565b604082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140f860228361333c565b91506141038261409c565b604082019050919050565b60006020820190508181036000830152614127816140eb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061418a60258361333c565b91506141958261412e565b604082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061421c60238361333c565b9150614227826141c0565b604082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006142ae60298361333c565b91506142b982614252565b604082019050919050565b600060208201905081810360008301526142dd816142a1565b9050919050565b60006142ef82613455565b91506142fa83613455565b9250828203905081811115614312576143116138f0565b5b92915050565b600061432382613455565b915061432e83613455565b9250828201905080821115614346576143456138f0565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614382601b8361333c565b915061438d8261434c565b602082019050919050565b600060208201905081810360008301526143b181614375565b9050919050565b600060a0820190506143cd600083018861357b565b6143da6020830187613e23565b81810360408301526143ec8186613a61565b90506143fb606083018561374d565b614408608083018461357b565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061444c82613455565b915061445783613455565b92508261446757614466614412565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144ce60218361333c565b91506144d982614472565b604082019050919050565b600060208201905081810360008301526144fd816144c1565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f031172ac42d802c974aa7fd2bbf1ffc7dbef6e9ca90a78da7c8a3b2dcfe70864736f6c63430008110033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122015495a0d72356abc403c7cb9b757974cbaa6e5201280ca912cb975f72a2e23ab64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c806370a082311161010d578063a9059cbb116100a0578063c958a26f1161006f578063c958a26f14610720578063dd62ed3e14610737578063e9ac0e5914610774578063ec11ba341461078b578063f2fde38b146107a257610204565b8063a9059cbb14610678578063b2abbbc4146106b5578063c8538f61146106de578063c9567bf91461070957610204565b80638da5cb5b116100dc5780638da5cb5b146105ba57806395d89b41146105e5578063a2ae74f414610610578063a457c2d71461063b57610204565b806370a0823114610514578063715018a61461055157806381230a831461056857806384afff9b1461059157610204565b8063395093511161019057806350faa48f1161015f57806350faa48f1461043f57806351bc3c851461046a5780635342acb41461048157806354a5df1f146104be5780636c0a24eb146104e957610204565b80633950935114610383578063441d801f146103c057806347062402146103e95780634b94f50e1461041457610204565b806323b872dd116101cc57806323b872dd146102c757806327a14fc2146103045780632b14ca561461032d578063313ce5671461035857610204565b806306fdde0314610209578063095ea7b3146102345780631694505e1461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107cb565b60405161022b91906133c1565b60405180910390f35b34801561024057600080fd5b5061025b6004803603810190610256919061348b565b61085d565b60405161026891906134e6565b60405180910390f35b34801561027d57600080fd5b5061028661087b565b6040516102939190613560565b60405180910390f35b3480156102a857600080fd5b506102b16108a1565b6040516102be919061358a565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906135a5565b6108ab565b6040516102fb91906134e6565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906135f8565b610984565b005b34801561033957600080fd5b50610342610a32565b60405161034f919061358a565b60405180910390f35b34801561036457600080fd5b5061036d610a38565b60405161037a9190613641565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a5919061348b565b610a4f565b6040516103b791906134e6565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906136ed565b610b02565b005b3480156103f557600080fd5b506103fe610ba7565b60405161040b919061358a565b60405180910390f35b34801561042057600080fd5b50610429610bad565b604051610436919061358a565b60405180910390f35b34801561044b57600080fd5b50610454610df0565b604051610461919061375c565b60405180910390f35b34801561047657600080fd5b5061047f610e16565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613777565b610e4e565b6040516104b591906134e6565b60405180910390f35b3480156104ca57600080fd5b506104d3610ea4565b6040516104e0919061358a565b60405180910390f35b3480156104f557600080fd5b506104fe610eaa565b60405161050b919061358a565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613777565b610eb0565b604051610548919061358a565b60405180910390f35b34801561055d57600080fd5b50610566610ef9565b005b34801561057457600080fd5b5061058f600480360381019061058a91906137a4565b61104c565b005b34801561059d57600080fd5b506105b860048036038101906105b39190613777565b6110f3565b005b3480156105c657600080fd5b506105cf61121c565b6040516105dc919061375c565b60405180910390f35b3480156105f157600080fd5b506105fa611245565b60405161060791906133c1565b60405180910390f35b34801561061c57600080fd5b506106256112d7565b60405161063291906134e6565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d919061348b565b6112ea565b60405161066f91906134e6565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a919061348b565b6113b7565b6040516106ac91906134e6565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906135f8565b6113d5565b005b3480156106ea57600080fd5b506106f3611474565b604051610700919061358a565b60405180910390f35b34801561071557600080fd5b5061071e611689565b005b34801561072c57600080fd5b50610735611b78565b005b34801561074357600080fd5b5061075e600480360381019061075991906137e4565b611b82565b60405161076b919061358a565b60405180910390f35b34801561078057600080fd5b50610789611c09565b005b34801561079757600080fd5b506107a0611c7a565b005b3480156107ae57600080fd5b506107c960048036038101906107c49190613777565b611d7b565b005b6060600980546107da90613853565b80601f016020809104026020016040519081016040528092919081815260200182805461080690613853565b80156108535780601f1061082857610100808354040283529160200191610853565b820191906000526020600020905b81548152906001019060200180831161083657829003601f168201915b5050505050905090565b600061087161086a611f3c565b8484611f44565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b60006108b884848461210d565b610979846108c4611f3c565b6109748560405180606001604052806028815260200161450560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061092a611f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b19092919063ffffffff16565b611f44565b600190509392505050565b61098c611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906138d0565b60405180910390fd5b633b9aca0081610a29919061391f565b600d8190555050565b60115481565b6000600b60009054906101000a900460ff16905090565b6000610af8610a5c611f3c565b84610af38560076000610a6d611f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b611f44565b6001905092915050565b610b0a611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906138d0565b60405180910390fd5b610ba2838383612a73565b505050565b60105481565b600080600267ffffffffffffffff811115610bcb57610bca613961565b5b604051908082528060200260200182016040528015610bf95781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d91906139a5565b81600081518110610ca157610ca06139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610cf057610cef6139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600f54836040518363ffffffff1660e01b8152600401610d89929190613abf565b600060405180830381865afa158015610da6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610dcf9190613c13565b600181518110610de257610de16139d2565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e2130610eb0565b90506000811115610e4b57600e60009054906101000a900460ff16610e4a57610e4981612b1e565b5b5b50565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f01611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906138d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611054611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d8906138d0565b60405180910390fd5b81601081905550806011819055505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611133919061375c565b602060405180830381865afa158015611150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111749190613c5c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016111d3929190613c89565b6020604051808303816000875af11580156111f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112169190613cc7565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461125490613853565b80601f016020809104026020016040519081016040528092919081815260200182805461128090613853565b80156112cd5780601f106112a2576101008083540402835291602001916112cd565b820191906000526020600020905b8154815290600101906020018083116112b057829003601f168201915b5050505050905090565b601260149054906101000a900460ff1681565b60006113ad6112f7611f3c565b846113a88560405180606001604052806025815260200161452d6025913960076000611321611f3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b19092919063ffffffff16565b611f44565b6001905092915050565b60006113cb6113c4611f3c565b848461210d565b6001905092915050565b6113dd611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611461906138d0565b60405180910390fd5b80600f8190555050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190613c5c565b811015611681576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401611573919061358a565b602060405180830381865afa158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b491906139a5565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401611613919061375c565b602060405180830381865afa158015611630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116549190613c5c565b905080421061166c57838061166890613cf4565b9450505b5050808061167990613cf4565b91505061147e565b508091505090565b611691611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611715906138d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613dae565b60405180910390fd5b6117de30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54611f44565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f91906139a5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c91906139a5565b6040518363ffffffff1660e01b8152600401611939929190613dce565b6020604051808303816000875af1158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c91906139a5565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611a0530610eb0565b600080611a1061121c565b426040518863ffffffff1660e01b8152600401611a3296959493929190613e32565b60606040518083038185885af1158015611a50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a759190613e93565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b17929190613c89565b6020604051808303816000875af1158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a9190613cc7565b506001601260146101000a81548160ff021916908315150217905550565b611b80612e52565b565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000479050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c76573d6000803e3d6000fd5b5050565b611c82611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d06906138d0565b60405180910390fd5b601260149054906101000a900460ff16611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590613f58565b60405180910390fd5b6000601260146101000a81548160ff021916908315150217905550565b611d83611f3c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e07906138d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7690613fea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa9061407c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120199061410e565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612100919061358a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361217c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612173906141a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290614232565b60405180910390fd5b6000811161222e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612225906142c4565b60405180910390fd5b600080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122d55750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561231457506122e461121c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612353575061232361121c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050600083905061236261121c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156123d057506123a061121c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561240857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801561244057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561276d57811561276c57601260149054906101000a900460ff1615612467576000612490565b61248f6064612481601054846131c090919063ffffffff16565b61323a90919063ffffffff16565b5b9250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156124fb5750601260149054906101000a900460ff165b1561259857612508612e52565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82886426040518363ffffffff1660e01b8152600401612565929190613c89565b600060405180830381600087803b15801561257f57600080fd5b505af1158015612593573d6000803e3d6000fd5b505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156126435750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561276b57600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156126d257600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b601260149054906101000a900460ff16156126ee576000612717565b6127166064612708601154846131c090919063ffffffff16565b61323a90919063ffffffff16565b5b9250600061272430610eb0565b90506000811115612769576000612739610bad565b90508082101580156127585750600e60009054906101000a900460ff16155b156127675761276681612b1e565b5b505b505b5b5b6000612782848361328490919063ffffffff16565b90506127d682600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328490919063ffffffff16565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061286b81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061290084600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129a0919061358a565b60405180910390a350505050505050565b60008383111582906129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f091906133c1565b60405180910390fd5b5060008385612a0891906142e4565b9050809150509392505050565b6000808284612a249190614318565b905083811015612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614398565b60405180910390fd5b8091505092915050565b60005b83839050811015612b18576000848483818110612a9657612a956139d2565b5b9050602002016020810190612aab9190613777565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612b1090613cf4565b915050612a76565b50505050565b6000600267ffffffffffffffff811115612b3b57612b3a613961565b5b604051908082528060200260200182016040528015612b695781602001602082028036833780820191505090505b5090503081600081518110612b8157612b806139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c91906139a5565b81600181518110612c6057612c5f6139d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cc730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f44565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d2b9594939291906143b8565b600060405180830381600087803b158015612d4557600080fd5b505af1158015612d59573d6000803e3d6000fd5b5050505060004790506000612d7860028361323a90919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612de2573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612e4b573d6000803e3d6000fd5b5050505050565b601260149054906101000a900460ff16156131be5760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efb9190613c5c565b8110156131bc576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612f5f919061358a565b602060405180830381865afa158015612f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa091906139a5565b90506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561311a5761304181600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328490919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130d681600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1590919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b8152600401613175919061375c565b600060405180830381600087803b15801561318f57600080fd5b505af11580156131a3573d6000803e3d6000fd5b50505050505080806131b490613cf4565b915050612e6a565b505b565b60008083036131d25760009050613234565b600082846131e0919061391f565b90508284826131ef9190614441565b1461322f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613226906144e4565b60405180910390fd5b809150505b92915050565b600061327c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132ce565b905092915050565b60006132c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129b1565b905092915050565b60008083118290613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c91906133c1565b60405180910390fd5b50600083856133249190614441565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561336b578082015181840152602081019050613350565b60008484015250505050565b6000601f19601f8301169050919050565b600061339382613331565b61339d818561333c565b93506133ad81856020860161334d565b6133b681613377565b840191505092915050565b600060208201905081810360008301526133db8184613388565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613422826133f7565b9050919050565b61343281613417565b811461343d57600080fd5b50565b60008135905061344f81613429565b92915050565b6000819050919050565b61346881613455565b811461347357600080fd5b50565b6000813590506134858161345f565b92915050565b600080604083850312156134a2576134a16133ed565b5b60006134b085828601613440565b92505060206134c185828601613476565b9150509250929050565b60008115159050919050565b6134e0816134cb565b82525050565b60006020820190506134fb60008301846134d7565b92915050565b6000819050919050565b600061352661352161351c846133f7565b613501565b6133f7565b9050919050565b60006135388261350b565b9050919050565b600061354a8261352d565b9050919050565b61355a8161353f565b82525050565b60006020820190506135756000830184613551565b92915050565b61358481613455565b82525050565b600060208201905061359f600083018461357b565b92915050565b6000806000606084860312156135be576135bd6133ed565b5b60006135cc86828701613440565b93505060206135dd86828701613440565b92505060406135ee86828701613476565b9150509250925092565b60006020828403121561360e5761360d6133ed565b5b600061361c84828501613476565b91505092915050565b600060ff82169050919050565b61363b81613625565b82525050565b60006020820190506136566000830184613632565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126136815761368061365c565b5b8235905067ffffffffffffffff81111561369e5761369d613661565b5b6020830191508360208202830111156136ba576136b9613666565b5b9250929050565b6136ca816134cb565b81146136d557600080fd5b50565b6000813590506136e7816136c1565b92915050565b600080600060408486031215613706576137056133ed565b5b600084013567ffffffffffffffff811115613724576137236133f2565b5b6137308682870161366b565b93509350506020613743868287016136d8565b9150509250925092565b61375681613417565b82525050565b6000602082019050613771600083018461374d565b92915050565b60006020828403121561378d5761378c6133ed565b5b600061379b84828501613440565b91505092915050565b600080604083850312156137bb576137ba6133ed565b5b60006137c985828601613476565b92505060206137da85828601613476565b9150509250929050565b600080604083850312156137fb576137fa6133ed565b5b600061380985828601613440565b925050602061381a85828601613440565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061386b57607f821691505b60208210810361387e5761387d613824565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138ba60208361333c565b91506138c582613884565b602082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392a82613455565b915061393583613455565b925082820261394381613455565b9150828204841483151761395a576139596138f0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061399f81613429565b92915050565b6000602082840312156139bb576139ba6133ed565b5b60006139c984828501613990565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a3681613417565b82525050565b6000613a488383613a2d565b60208301905092915050565b6000602082019050919050565b6000613a6c82613a01565b613a768185613a0c565b9350613a8183613a1d565b8060005b83811015613ab2578151613a998882613a3c565b9750613aa483613a54565b925050600181019050613a85565b5085935050505092915050565b6000604082019050613ad4600083018561357b565b8181036020830152613ae68184613a61565b90509392505050565b613af882613377565b810181811067ffffffffffffffff82111715613b1757613b16613961565b5b80604052505050565b6000613b2a6133e3565b9050613b368282613aef565b919050565b600067ffffffffffffffff821115613b5657613b55613961565b5b602082029050602081019050919050565b600081519050613b768161345f565b92915050565b6000613b8f613b8a84613b3b565b613b20565b90508083825260208201905060208402830185811115613bb257613bb1613666565b5b835b81811015613bdb5780613bc78882613b67565b845260208401935050602081019050613bb4565b5050509392505050565b600082601f830112613bfa57613bf961365c565b5b8151613c0a848260208601613b7c565b91505092915050565b600060208284031215613c2957613c286133ed565b5b600082015167ffffffffffffffff811115613c4757613c466133f2565b5b613c5384828501613be5565b91505092915050565b600060208284031215613c7257613c716133ed565b5b6000613c8084828501613b67565b91505092915050565b6000604082019050613c9e600083018561374d565b613cab602083018461357b565b9392505050565b600081519050613cc1816136c1565b92915050565b600060208284031215613cdd57613cdc6133ed565b5b6000613ceb84828501613cb2565b91505092915050565b6000613cff82613455565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d3157613d306138f0565b5b600182019050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d9860228361333c565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b6000604082019050613de3600083018561374d565b613df0602083018461374d565b9392505050565b6000819050919050565b6000613e1c613e17613e1284613df7565b613501565b613455565b9050919050565b613e2c81613e01565b82525050565b600060c082019050613e47600083018961374d565b613e54602083018861357b565b613e616040830187613e23565b613e6e6060830186613e23565b613e7b608083018561374d565b613e8860a083018461357b565b979650505050505050565b600080600060608486031215613eac57613eab6133ed565b5b6000613eba86828701613b67565b9350506020613ecb86828701613b67565b9250506040613edc86828701613b67565b9150509250925092565b7f426f742073736e6970696e672068617320616c7265616479206265656e20646960008201527f7361626c65640000000000000000000000000000000000000000000000000000602082015250565b6000613f4260268361333c565b9150613f4d82613ee6565b604082019050919050565b60006020820190508181036000830152613f7181613f35565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fd460268361333c565b9150613fdf82613f78565b604082019050919050565b6000602082019050818103600083015261400381613fc7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061406660248361333c565b91506140718261400a565b604082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140f860228361333c565b91506141038261409c565b604082019050919050565b60006020820190508181036000830152614127816140eb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061418a60258361333c565b91506141958261412e565b604082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061421c60238361333c565b9150614227826141c0565b604082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006142ae60298361333c565b91506142b982614252565b604082019050919050565b600060208201905081810360008301526142dd816142a1565b9050919050565b60006142ef82613455565b91506142fa83613455565b9250828203905081811115614312576143116138f0565b5b92915050565b600061432382613455565b915061432e83613455565b9250828201905080821115614346576143456138f0565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614382601b8361333c565b915061438d8261434c565b602082019050919050565b600060208201905081810360008301526143b181614375565b9050919050565b600060a0820190506143cd600083018861357b565b6143da6020830187613e23565b81810360408301526143ec8186613a61565b90506143fb606083018561374d565b614408608083018461357b565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061444c82613455565b915061445783613455565b92508261446757614466614412565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144ce60218361333c565b91506144d982614472565b604082019050919050565b600060208201905081810360008301526144fd816144c1565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f031172ac42d802c974aa7fd2bbf1ffc7dbef6e9ca90a78da7c8a3b2dcfe70864736f6c63430008110033

Deployed Bytecode Sourcemap

8508:12619:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12466:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13444:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8816:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12888:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13613:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12557:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9677:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12797:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13934:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14769:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9644:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20289:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8929:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19277:267;;;;;;;;;;;;;:::i;:::-;;15853:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9586:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9489:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12991:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6506:148;;;;;;;;;;;;;:::i;:::-;;14437:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20887:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6292:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12702:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9742:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14160:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13118:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20561:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18813:381;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15182:663;;;;;;;;;;;;;:::i;:::-;;19202:69;;;;;;;;;;;;;:::i;:::-;;13293:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20728:151;;;;;;;;;;;;;:::i;:::-;;14567:194;;;;;;;;;;;;;:::i;:::-;;6662:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12466:83;12503:13;12536:5;12529:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12466:83;:::o;13444:161::-;13519:4;13536:39;13545:12;:10;:12::i;:::-;13559:7;13568:6;13536:8;:39::i;:::-;13593:4;13586:11;;13444:161;;;;:::o;8816:106::-;;;;;;;;;;;;;:::o;12888:95::-;12941:7;12968;;12961:14;;12888:95;:::o;13613:313::-;13711:4;13728:36;13738:6;13746:9;13757:6;13728:9;:36::i;:::-;13775:121;13784:6;13792:12;:10;:12::i;:::-;13806:89;13844:6;13806:89;;;;;;;;;;;;;;;;;:11;:19;13818:6;13806:19;;;;;;;;;;;;;;;:33;13826:12;:10;:12::i;:::-;13806:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;13775:8;:121::i;:::-;13914:4;13907:11;;13613:313;;;;;:::o;12557:137::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12679:7:::1;12661:15;:25;;;;:::i;:::-;12642:16;:44;;;;12557:137:::0;:::o;9677:27::-;;;;:::o;12797:83::-;12838:5;12863:9;;;;;;;;;;;12856:16;;12797:83;:::o;13934:218::-;14022:4;14039:83;14048:12;:10;:12::i;:::-;14062:7;14071:50;14110:10;14071:11;:25;14083:12;:10;:12::i;:::-;14071:25;;;;;;;;;;;;;;;:34;14097:7;14071:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;14039:8;:83::i;:::-;14140:4;14133:11;;13934:218;;;;:::o;14769:161::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14881:41:::1;14894:9;;14905:16;14881:12;:41::i;:::-;14769:161:::0;;;:::o;9644:26::-;;;;:::o;20289:264::-;20335:7;20356:21;20394:1;20380:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20356:40;;20417:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20407:4;20412:1;20407:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;20468:4;20450;20455:1;20450:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20491:15;;;;;;;;;;;:29;;;20521:14;;20537:4;20491:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20543:1;20491:54;;;;;;;;:::i;:::-;;;;;;;;20484:61;;;20289:264;:::o;8929:38::-;;;;;;;;;;;;;:::o;19277:267::-;19319:28;19350:24;19368:4;19350:9;:24::i;:::-;19319:55;;19412:1;19389:20;:24;19385:152;;;19435:16;;;;;;;;;;;19430:96;;19472:38;19489:20;19472:16;:38::i;:::-;19430:96;19385:152;19308:236;19277:267::o;15853:124::-;15918:4;15942:18;:27;15961:7;15942:27;;;;;;;;;;;;;;;;;;;;;;;;;15935:34;;15853:124;;;:::o;9586:50::-;;;;:::o;9489:62::-;;;;:::o;12991:119::-;13057:7;13084:9;:18;13094:7;13084:18;;;;;;;;;;;;;;;;13077:25;;12991:119;;;:::o;6506:148::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6613:1:::1;6576:40;;6597:6;::::0;::::1;;;;;;;;6576:40;;;;;;;;;;;;6644:1;6627:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6506:148::o:0;14437:122::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14523:3:::1;14514:6;:12;;;;14547:4;14537:7;:14;;;;14437:122:::0;;:::o;20887:237::-;20960:17;20987:15;20960:43;;21014:15;21032:10;:20;;;21061:4;21032:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21014:53;;21078:10;:19;;;21098:8;;;;;;;;;;;21108:7;21078:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20949:175;;20887:237;:::o;6292:79::-;6330:7;6357:6;;;;;;;;;;;6350:13;;6292:79;:::o;12702:87::-;12741:13;12774:7;12767:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12702:87;:::o;9742:34::-;;;;;;;;;;;;;:::o;14160:269::-;14253:4;14270:129;14279:12;:10;:12::i;:::-;14293:7;14302:96;14341:15;14302:96;;;;;;;;;;;;;;;;;:11;:25;14314:12;:10;:12::i;:::-;14302:25;;;;;;;;;;;;;;;:34;14328:7;14302:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14270:8;:129::i;:::-;14417:4;14410:11;;14160:269;;;;:::o;13118:167::-;13196:4;13213:42;13223:12;:10;:12::i;:::-;13237:9;13248:6;13213:9;:42::i;:::-;13273:4;13266:11;;13118:167;;;;:::o;20561:122::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20660:15:::1;20643:14;:32;;;;20561:122:::0;:::o;18813:381::-;18862:7;18882:13;18898:1;18882:17;;18914:9;18910:254;18932:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18928:1;:24;18910:254;;;18974:14;18991:13;;;;;;;;;;;:27;;;19019:1;18991:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18974:47;;19036:14;19053:13;;;;;;;;;;;:17;;;19071:6;19053:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19036:42;;19116:9;19096:15;:29;19093:59;;19145:7;;;;;:::i;:::-;;;;19093:59;18959:205;;18954:3;;;;;:::i;:::-;;;;18910:254;;;;19181:5;19174:12;;;18813:381;:::o;15182:663::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15267:1:::1;15245:24;;:10;;;;;;;;;;;:24;;;15237:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15318:58;15335:4;15350:15;;;;;;;;;;;15368:7;;15318:8;:58::i;:::-;15418:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15400:55;;;15464:4;15471:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15400:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15387:10;;:107;;;;;;;;;;;;;;;;;;15505:15;;;;;;;;;;;:31;;;15544:21;15589:4;15609:24;15627:4;15609:9;:24::i;:::-;15648:1;15664::::0;15680:7:::1;:5;:7::i;:::-;15702:15;15505:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15736:10;;;;;;;;;;;15729:26;;;15764:15;;;;;;;;;;;15782:14;15729:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15833:4;15808:22;;:29;;;;;;;;;;;;;;;;;;15182:663::o:0;19202:69::-;19248:15;:13;:15::i;:::-;19202:69::o;13293:143::-;13374:7;13401:11;:18;13413:5;13401:18;;;;;;;;;;;;;;;:27;13420:7;13401:27;;;;;;;;;;;;;;;;13394:34;;13293:143;;;;:::o;20728:151::-;20780:18;20801:21;20780:42;;20841:8;;;;;;;;;;;20833:26;;:38;20860:10;20833:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20769:110;20728:151::o;14567:194::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14648:22:::1;;;;;;;;;;;14640:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14748:5;14723:22;;:30;;;;;;;;;;;;;;;;;;14567:194::o:0;6662:244::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6771:1:::1;6751:22;;:8;:22;;::::0;6743:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6861:8;6832:38;;6853:6;::::0;::::1;;;;;;;;6832:38;;;;;;;;;;;;6890:8;6881:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6662:244:::0;:::o;2634:98::-;2687:7;2714:10;2707:17;;2634:98;:::o;15985:337::-;16095:1;16078:19;;:5;:19;;;16070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16176:1;16157:21;;:7;:21;;;16149:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16260:6;16230:11;:18;16242:5;16230:18;;;;;;;;;;;;;;;:27;16249:7;16230:27;;;;;;;;;;;;;;;:36;;;;16298:7;16282:32;;16291:5;16282:32;;;16307:6;16282:32;;;;;;:::i;:::-;;;;;;;;15985:337;;;:::o;16330:1921::-;16437:1;16421:18;;:4;:18;;;16413:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16514:1;16500:16;;:2;:16;;;16492:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16587:1;16575:9;:13;16567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16645:17;16677:13;16694:18;:24;16713:4;16694:24;;;;;;;;;;;;;;;;;;;;;;;;;16693:25;:52;;;;;16723:18;:22;16742:2;16723:22;;;;;;;;;;;;;;;;;;;;;;;;;16722:23;16693:52;:71;;;;;16757:7;:5;:7::i;:::-;16749:15;;:4;:15;;;;16693:71;:88;;;;;16774:7;:5;:7::i;:::-;16768:13;;:2;:13;;;;16693:88;16677:104;;16792:14;16809:9;16792:26;;16840:7;:5;:7::i;:::-;16832:15;;:4;:15;;;;:32;;;;;16857:7;:5;:7::i;:::-;16851:13;;:2;:13;;;;16832:32;:57;;;;;16884:4;16868:21;;:4;:21;;;;16832:57;:80;;;;;16907:4;16893:19;;:2;:19;;;;16832:80;16829:1113;;;16932:8;16929:1002;;;16974:22;;;;;;;;;;;16973:23;:57;;17029:1;16973:57;;;16999:27;17022:3;16999:18;17010:6;;16999;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;16973:57;16961:69;;17061:10;;;;;;;;;;;17053:18;;:4;:18;;;:44;;;;;17075:22;;;;;;;;;;;17053:44;17049:169;;;17122:15;:13;:15::i;:::-;17160:13;;;;;;;;;;;:17;;;17178:2;17182:15;17160:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17049:169;17248:10;;;;;;;;;;;17240:18;;:4;:18;;;;:38;;;;;17268:10;;;;;;;;;;;17262:16;;:2;:16;;;17240:38;17236:680;;;17318:9;:15;17328:4;17318:15;;;;;;;;;;;;;;;;17306:9;:27;17303:107;;;17371:9;:15;17381:4;17371:15;;;;;;;;;;;;;;;;17362:24;;17303:107;17445:22;;;;;;;;;;;17444:23;:58;;17501:1;17444:58;;;17470:28;17494:3;17470:19;17481:7;;17470:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;17444:58;17432:70;;17525:28;17556:24;17574:4;17556:9;:24::i;:::-;17525:55;;17630:1;17607:20;:24;17603:294;;;17660:19;17682:15;:13;:15::i;:::-;17660:37;;17752:11;17728:20;:35;;:56;;;;;17768:16;;;;;;;;;;;17767:17;17728:56;17724:150;;;17817:29;17834:11;17817:16;:29::i;:::-;17724:150;17633:264;17603:294;17280:636;17236:680;16929:1002;16829:1113;17959:22;17984:21;17995:9;17984:6;:10;;:21;;;;:::i;:::-;17959:46;;18034:27;18054:6;18034:9;:15;18044:4;18034:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;18016:9;:15;18026:4;18016:15;;;;;;;;;;;;;;;:45;;;;18088:33;18106:14;18088:9;:13;18098:2;18088:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;18072:9;:13;18082:2;18072:13;;;;;;;;;;;;;;;:49;;;;18159:39;18188:9;18159;:24;18177:4;18159:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;18132:9;:24;18150:4;18132:24;;;;;;;;;;;;;;;:66;;;;18229:2;18214:29;;18223:4;18214:29;;;18233:9;18214:29;;;;;;:::i;:::-;;;;;;;;16402:1849;;;;16330:1921;;;:::o;1106:192::-;1192:7;1225:1;1220;:6;;1228:12;1212:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1252:9;1268:1;1264;:5;;;;:::i;:::-;1252:17;;1289:1;1282:8;;;1106:192;;;;;:::o;773:181::-;831:7;851:9;867:1;863;:5;;;;:::i;:::-;851:17;;892:1;887;:6;;879:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;945:1;938:8;;;773:181;;;;:::o;14938:236::-;15025:9;15020:147;15044:9;;:16;;15040:1;:20;15020:147;;;15082:12;15097:9;;15107:1;15097:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15082:27;;15151:4;15124:18;:24;15143:4;15124:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;15067:100;15062:3;;;;;:::i;:::-;;;;15020:147;;;;14938:236;;;:::o;19552:729::-;19678:21;19716:1;19702:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19678:40;;19747:4;19729;19734:1;19729:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19773:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19763:4;19768:1;19763:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;19806:62;19823:4;19838:15;;;;;;;;;;;19856:11;19806:8;:62::i;:::-;19879:15;;;;;;;;;;;:66;;;19960:11;19986:1;20002:4;20029;20049:15;19879:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20088:18;20109:21;20088:42;;20141:17;20161;20176:1;20161:10;:14;;:17;;;;:::i;:::-;20141:37;;20199:6;;;;;;;;;;;20191:24;;:35;20216:9;20191:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20245:6;;;;;;;;;;;20237:24;;:35;20262:9;20237:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19607:674;;;19552:729;:::o;18259:546::-;18306:22;;;;;;;;;;;18303:495;;;18349:9;18345:442;18367:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18363:1;:24;18345:442;;;18413:14;18430:13;;;;;;;;;;;:27;;;18458:1;18430:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18413:47;;18479:14;18496:9;:17;18506:6;18496:17;;;;;;;;;;;;;;;;18479:34;;18544:1;18535:6;:10;18532:193;;;18590:29;18612:6;18590:9;:17;18600:6;18590:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;18570:9;:17;18580:6;18570:17;;;;;;;;;;;;;;;:49;;;;18669:36;18698:6;18669:9;:24;18687:4;18669:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;18642:9;:24;18660:4;18642:24;;;;;;;;;;;;;;;:63;;;;18532:193;18743:13;;;;;;;;;;;:20;;;18764:6;18743:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18394:393;;18389:3;;;;;:::i;:::-;;;;18345:442;;;;18303:495;18259:546::o;1306:471::-;1364:7;1614:1;1609;:6;1605:47;;1639:1;1632:8;;;;1605:47;1664:9;1680:1;1676;:5;;;;:::i;:::-;1664:17;;1709:1;1704;1700;:5;;;;:::i;:::-;:10;1692:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1768:1;1761:8;;;1306:471;;;;;:::o;1785:132::-;1843:7;1870:39;1874:1;1877;1870:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1863:46;;1785:132;;;;:::o;962:136::-;1020:7;1047:43;1051:1;1054;1047:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1040:50;;962:136;;;;:::o;1925:278::-;2011:7;2043:1;2039;:5;2046:12;2031:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2070:9;2086:1;2082;:5;;;;:::i;:::-;2070:17;;2194:1;2187:8;;;1925:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:329::-;5455:6;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5630:1;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5601:117;5396:329;;;;:::o;5731:86::-;5766:7;5806:4;5799:5;5795:16;5784:27;;5731:86;;;:::o;5823:112::-;5906:22;5922:5;5906:22;:::i;:::-;5901:3;5894:35;5823:112;;:::o;5941:214::-;6030:4;6068:2;6057:9;6053:18;6045:26;;6081:67;6145:1;6134:9;6130:17;6121:6;6081:67;:::i;:::-;5941:214;;;;:::o;6161:117::-;6270:1;6267;6260:12;6284:117;6393:1;6390;6383:12;6407:117;6516:1;6513;6506:12;6547:568;6620:8;6630:6;6680:3;6673:4;6665:6;6661:17;6657:27;6647:122;;6688:79;;:::i;:::-;6647:122;6801:6;6788:20;6778:30;;6831:18;6823:6;6820:30;6817:117;;;6853:79;;:::i;:::-;6817:117;6967:4;6959:6;6955:17;6943:29;;7021:3;7013:4;7005:6;7001:17;6991:8;6987:32;6984:41;6981:128;;;7028:79;;:::i;:::-;6981:128;6547:568;;;;;:::o;7121:116::-;7191:21;7206:5;7191:21;:::i;:::-;7184:5;7181:32;7171:60;;7227:1;7224;7217:12;7171:60;7121:116;:::o;7243:133::-;7286:5;7324:6;7311:20;7302:29;;7340:30;7364:5;7340:30;:::i;:::-;7243:133;;;;:::o;7382:698::-;7474:6;7482;7490;7539:2;7527:9;7518:7;7514:23;7510:32;7507:119;;;7545:79;;:::i;:::-;7507:119;7693:1;7682:9;7678:17;7665:31;7723:18;7715:6;7712:30;7709:117;;;7745:79;;:::i;:::-;7709:117;7858:80;7930:7;7921:6;7910:9;7906:22;7858:80;:::i;:::-;7840:98;;;;7636:312;7987:2;8013:50;8055:7;8046:6;8035:9;8031:22;8013:50;:::i;:::-;8003:60;;7958:115;7382:698;;;;;:::o;8086:118::-;8173:24;8191:5;8173:24;:::i;:::-;8168:3;8161:37;8086:118;;:::o;8210:222::-;8303:4;8341:2;8330:9;8326:18;8318:26;;8354:71;8422:1;8411:9;8407:17;8398:6;8354:71;:::i;:::-;8210:222;;;;:::o;8438:329::-;8497:6;8546:2;8534:9;8525:7;8521:23;8517:32;8514:119;;;8552:79;;:::i;:::-;8514:119;8672:1;8697:53;8742:7;8733:6;8722:9;8718:22;8697:53;:::i;:::-;8687:63;;8643:117;8438:329;;;;:::o;8773:474::-;8841:6;8849;8898:2;8886:9;8877:7;8873:23;8869:32;8866:119;;;8904:79;;:::i;:::-;8866:119;9024:1;9049:53;9094:7;9085:6;9074:9;9070:22;9049:53;:::i;:::-;9039:63;;8995:117;9151:2;9177:53;9222:7;9213:6;9202:9;9198:22;9177:53;:::i;:::-;9167:63;;9122:118;8773:474;;;;;:::o;9253:::-;9321:6;9329;9378:2;9366:9;9357:7;9353:23;9349:32;9346:119;;;9384:79;;:::i;:::-;9346:119;9504:1;9529:53;9574:7;9565:6;9554:9;9550:22;9529:53;:::i;:::-;9519:63;;9475:117;9631:2;9657:53;9702:7;9693:6;9682:9;9678:22;9657:53;:::i;:::-;9647:63;;9602:118;9253:474;;;;;:::o;9733:180::-;9781:77;9778:1;9771:88;9878:4;9875:1;9868:15;9902:4;9899:1;9892:15;9919:320;9963:6;10000:1;9994:4;9990:12;9980:22;;10047:1;10041:4;10037:12;10068:18;10058:81;;10124:4;10116:6;10112:17;10102:27;;10058:81;10186:2;10178:6;10175:14;10155:18;10152:38;10149:84;;10205:18;;:::i;:::-;10149:84;9970:269;9919:320;;;:::o;10245:182::-;10385:34;10381:1;10373:6;10369:14;10362:58;10245:182;:::o;10433:366::-;10575:3;10596:67;10660:2;10655:3;10596:67;:::i;:::-;10589:74;;10672:93;10761:3;10672:93;:::i;:::-;10790:2;10785:3;10781:12;10774:19;;10433:366;;;:::o;10805:419::-;10971:4;11009:2;10998:9;10994:18;10986:26;;11058:9;11052:4;11048:20;11044:1;11033:9;11029:17;11022:47;11086:131;11212:4;11086:131;:::i;:::-;11078:139;;10805:419;;;:::o;11230:180::-;11278:77;11275:1;11268:88;11375:4;11372:1;11365:15;11399:4;11396:1;11389:15;11416:410;11456:7;11479:20;11497:1;11479:20;:::i;:::-;11474:25;;11513:20;11531:1;11513:20;:::i;:::-;11508:25;;11568:1;11565;11561:9;11590:30;11608:11;11590:30;:::i;:::-;11579:41;;11769:1;11760:7;11756:15;11753:1;11750:22;11730:1;11723:9;11703:83;11680:139;;11799:18;;:::i;:::-;11680:139;11464:362;11416:410;;;;:::o;11832:180::-;11880:77;11877:1;11870:88;11977:4;11974:1;11967:15;12001:4;11998:1;11991:15;12018:143;12075:5;12106:6;12100:13;12091:22;;12122:33;12149:5;12122:33;:::i;:::-;12018:143;;;;:::o;12167:351::-;12237:6;12286:2;12274:9;12265:7;12261:23;12257:32;12254:119;;;12292:79;;:::i;:::-;12254:119;12412:1;12437:64;12493:7;12484:6;12473:9;12469:22;12437:64;:::i;:::-;12427:74;;12383:128;12167:351;;;;:::o;12524:180::-;12572:77;12569:1;12562:88;12669:4;12666:1;12659:15;12693:4;12690:1;12683:15;12710:114;12777:6;12811:5;12805:12;12795:22;;12710:114;;;:::o;12830:184::-;12929:11;12963:6;12958:3;12951:19;13003:4;12998:3;12994:14;12979:29;;12830:184;;;;:::o;13020:132::-;13087:4;13110:3;13102:11;;13140:4;13135:3;13131:14;13123:22;;13020:132;;;:::o;13158:108::-;13235:24;13253:5;13235:24;:::i;:::-;13230:3;13223:37;13158:108;;:::o;13272:179::-;13341:10;13362:46;13404:3;13396:6;13362:46;:::i;:::-;13440:4;13435:3;13431:14;13417:28;;13272:179;;;;:::o;13457:113::-;13527:4;13559;13554:3;13550:14;13542:22;;13457:113;;;:::o;13606:732::-;13725:3;13754:54;13802:5;13754:54;:::i;:::-;13824:86;13903:6;13898:3;13824:86;:::i;:::-;13817:93;;13934:56;13984:5;13934:56;:::i;:::-;14013:7;14044:1;14029:284;14054:6;14051:1;14048:13;14029:284;;;14130:6;14124:13;14157:63;14216:3;14201:13;14157:63;:::i;:::-;14150:70;;14243:60;14296:6;14243:60;:::i;:::-;14233:70;;14089:224;14076:1;14073;14069:9;14064:14;;14029:284;;;14033:14;14329:3;14322:10;;13730:608;;;13606:732;;;;:::o;14344:483::-;14515:4;14553:2;14542:9;14538:18;14530:26;;14566:71;14634:1;14623:9;14619:17;14610:6;14566:71;:::i;:::-;14684:9;14678:4;14674:20;14669:2;14658:9;14654:18;14647:48;14712:108;14815:4;14806:6;14712:108;:::i;:::-;14704:116;;14344:483;;;;;:::o;14833:281::-;14916:27;14938:4;14916:27;:::i;:::-;14908:6;14904:40;15046:6;15034:10;15031:22;15010:18;14998:10;14995:34;14992:62;14989:88;;;15057:18;;:::i;:::-;14989:88;15097:10;15093:2;15086:22;14876:238;14833:281;;:::o;15120:129::-;15154:6;15181:20;;:::i;:::-;15171:30;;15210:33;15238:4;15230:6;15210:33;:::i;:::-;15120:129;;;:::o;15255:311::-;15332:4;15422:18;15414:6;15411:30;15408:56;;;15444:18;;:::i;:::-;15408:56;15494:4;15486:6;15482:17;15474:25;;15554:4;15548;15544:15;15536:23;;15255:311;;;:::o;15572:143::-;15629:5;15660:6;15654:13;15645:22;;15676:33;15703:5;15676:33;:::i;:::-;15572:143;;;;:::o;15738:732::-;15845:5;15870:81;15886:64;15943:6;15886:64;:::i;:::-;15870:81;:::i;:::-;15861:90;;15971:5;16000:6;15993:5;15986:21;16034:4;16027:5;16023:16;16016:23;;16087:4;16079:6;16075:17;16067:6;16063:30;16116:3;16108:6;16105:15;16102:122;;;16135:79;;:::i;:::-;16102:122;16250:6;16233:231;16267:6;16262:3;16259:15;16233:231;;;16342:3;16371:48;16415:3;16403:10;16371:48;:::i;:::-;16366:3;16359:61;16449:4;16444:3;16440:14;16433:21;;16309:155;16293:4;16288:3;16284:14;16277:21;;16233:231;;;16237:21;15851:619;;15738:732;;;;;:::o;16493:385::-;16575:5;16624:3;16617:4;16609:6;16605:17;16601:27;16591:122;;16632:79;;:::i;:::-;16591:122;16742:6;16736:13;16767:105;16868:3;16860:6;16853:4;16845:6;16841:17;16767:105;:::i;:::-;16758:114;;16581:297;16493:385;;;;:::o;16884:554::-;16979:6;17028:2;17016:9;17007:7;17003:23;16999:32;16996:119;;;17034:79;;:::i;:::-;16996:119;17175:1;17164:9;17160:17;17154:24;17205:18;17197:6;17194:30;17191:117;;;17227:79;;:::i;:::-;17191:117;17332:89;17413:7;17404:6;17393:9;17389:22;17332:89;:::i;:::-;17322:99;;17125:306;16884:554;;;;:::o;17444:351::-;17514:6;17563:2;17551:9;17542:7;17538:23;17534:32;17531:119;;;17569:79;;:::i;:::-;17531:119;17689:1;17714:64;17770:7;17761:6;17750:9;17746:22;17714:64;:::i;:::-;17704:74;;17660:128;17444:351;;;;:::o;17801:332::-;17922:4;17960:2;17949:9;17945:18;17937:26;;17973:71;18041:1;18030:9;18026:17;18017:6;17973:71;:::i;:::-;18054:72;18122:2;18111:9;18107:18;18098:6;18054:72;:::i;:::-;17801:332;;;;;:::o;18139:137::-;18193:5;18224:6;18218:13;18209:22;;18240:30;18264:5;18240:30;:::i;:::-;18139:137;;;;:::o;18282:345::-;18349:6;18398:2;18386:9;18377:7;18373:23;18369:32;18366:119;;;18404:79;;:::i;:::-;18366:119;18524:1;18549:61;18602:7;18593:6;18582:9;18578:22;18549:61;:::i;:::-;18539:71;;18495:125;18282:345;;;;:::o;18633:233::-;18672:3;18695:24;18713:5;18695:24;:::i;:::-;18686:33;;18741:66;18734:5;18731:77;18728:103;;18811:18;;:::i;:::-;18728:103;18858:1;18851:5;18847:13;18840:20;;18633:233;;;:::o;18872:221::-;19012:34;19008:1;19000:6;18996:14;18989:58;19081:4;19076:2;19068:6;19064:15;19057:29;18872:221;:::o;19099:366::-;19241:3;19262:67;19326:2;19321:3;19262:67;:::i;:::-;19255:74;;19338:93;19427:3;19338:93;:::i;:::-;19456:2;19451:3;19447:12;19440:19;;19099:366;;;:::o;19471:419::-;19637:4;19675:2;19664:9;19660:18;19652:26;;19724:9;19718:4;19714:20;19710:1;19699:9;19695:17;19688:47;19752:131;19878:4;19752:131;:::i;:::-;19744:139;;19471:419;;;:::o;19896:332::-;20017:4;20055:2;20044:9;20040:18;20032:26;;20068:71;20136:1;20125:9;20121:17;20112:6;20068:71;:::i;:::-;20149:72;20217:2;20206:9;20202:18;20193:6;20149:72;:::i;:::-;19896:332;;;;;:::o;20234:85::-;20279:7;20308:5;20297:16;;20234:85;;;:::o;20325:158::-;20383:9;20416:61;20434:42;20443:32;20469:5;20443:32;:::i;:::-;20434:42;:::i;:::-;20416:61;:::i;:::-;20403:74;;20325:158;;;:::o;20489:147::-;20584:45;20623:5;20584:45;:::i;:::-;20579:3;20572:58;20489:147;;:::o;20642:807::-;20891:4;20929:3;20918:9;20914:19;20906:27;;20943:71;21011:1;21000:9;20996:17;20987:6;20943:71;:::i;:::-;21024:72;21092:2;21081:9;21077:18;21068:6;21024:72;:::i;:::-;21106:80;21182:2;21171:9;21167:18;21158:6;21106:80;:::i;:::-;21196;21272:2;21261:9;21257:18;21248:6;21196:80;:::i;:::-;21286:73;21354:3;21343:9;21339:19;21330:6;21286:73;:::i;:::-;21369;21437:3;21426:9;21422:19;21413:6;21369:73;:::i;:::-;20642:807;;;;;;;;;:::o;21455:663::-;21543:6;21551;21559;21608:2;21596:9;21587:7;21583:23;21579:32;21576:119;;;21614:79;;:::i;:::-;21576:119;21734:1;21759:64;21815:7;21806:6;21795:9;21791:22;21759:64;:::i;:::-;21749:74;;21705:128;21872:2;21898:64;21954:7;21945:6;21934:9;21930:22;21898:64;:::i;:::-;21888:74;;21843:129;22011:2;22037:64;22093:7;22084:6;22073:9;22069:22;22037:64;:::i;:::-;22027:74;;21982:129;21455:663;;;;;:::o;22124:225::-;22264:34;22260:1;22252:6;22248:14;22241:58;22333:8;22328:2;22320:6;22316:15;22309:33;22124:225;:::o;22355:366::-;22497:3;22518:67;22582:2;22577:3;22518:67;:::i;:::-;22511:74;;22594:93;22683:3;22594:93;:::i;:::-;22712:2;22707:3;22703:12;22696:19;;22355:366;;;:::o;22727:419::-;22893:4;22931:2;22920:9;22916:18;22908:26;;22980:9;22974:4;22970:20;22966:1;22955:9;22951:17;22944:47;23008:131;23134:4;23008:131;:::i;:::-;23000:139;;22727:419;;;:::o;23152:225::-;23292:34;23288:1;23280:6;23276:14;23269:58;23361:8;23356:2;23348:6;23344:15;23337:33;23152:225;:::o;23383:366::-;23525:3;23546:67;23610:2;23605:3;23546:67;:::i;:::-;23539:74;;23622:93;23711:3;23622:93;:::i;:::-;23740:2;23735:3;23731:12;23724:19;;23383:366;;;:::o;23755:419::-;23921:4;23959:2;23948:9;23944:18;23936:26;;24008:9;24002:4;23998:20;23994:1;23983:9;23979:17;23972:47;24036:131;24162:4;24036:131;:::i;:::-;24028:139;;23755:419;;;:::o;24180:223::-;24320:34;24316:1;24308:6;24304:14;24297:58;24389:6;24384:2;24376:6;24372:15;24365:31;24180:223;:::o;24409:366::-;24551:3;24572:67;24636:2;24631:3;24572:67;:::i;:::-;24565:74;;24648:93;24737:3;24648:93;:::i;:::-;24766:2;24761:3;24757:12;24750:19;;24409:366;;;:::o;24781:419::-;24947:4;24985:2;24974:9;24970:18;24962:26;;25034:9;25028:4;25024:20;25020:1;25009:9;25005:17;24998:47;25062:131;25188:4;25062:131;:::i;:::-;25054:139;;24781:419;;;:::o;25206:221::-;25346:34;25342:1;25334:6;25330:14;25323:58;25415:4;25410:2;25402:6;25398:15;25391:29;25206:221;:::o;25433:366::-;25575:3;25596:67;25660:2;25655:3;25596:67;:::i;:::-;25589:74;;25672:93;25761:3;25672:93;:::i;:::-;25790:2;25785:3;25781:12;25774:19;;25433:366;;;:::o;25805:419::-;25971:4;26009:2;25998:9;25994:18;25986:26;;26058:9;26052:4;26048:20;26044:1;26033:9;26029:17;26022:47;26086:131;26212:4;26086:131;:::i;:::-;26078:139;;25805:419;;;:::o;26230:224::-;26370:34;26366:1;26358:6;26354:14;26347:58;26439:7;26434:2;26426:6;26422:15;26415:32;26230:224;:::o;26460:366::-;26602:3;26623:67;26687:2;26682:3;26623:67;:::i;:::-;26616:74;;26699:93;26788:3;26699:93;:::i;:::-;26817:2;26812:3;26808:12;26801:19;;26460:366;;;:::o;26832:419::-;26998:4;27036:2;27025:9;27021:18;27013:26;;27085:9;27079:4;27075:20;27071:1;27060:9;27056:17;27049:47;27113:131;27239:4;27113:131;:::i;:::-;27105:139;;26832:419;;;:::o;27257:222::-;27397:34;27393:1;27385:6;27381:14;27374:58;27466:5;27461:2;27453:6;27449:15;27442:30;27257:222;:::o;27485:366::-;27627:3;27648:67;27712:2;27707:3;27648:67;:::i;:::-;27641:74;;27724:93;27813:3;27724:93;:::i;:::-;27842:2;27837:3;27833:12;27826:19;;27485:366;;;:::o;27857:419::-;28023:4;28061:2;28050:9;28046:18;28038:26;;28110:9;28104:4;28100:20;28096:1;28085:9;28081:17;28074:47;28138:131;28264:4;28138:131;:::i;:::-;28130:139;;27857:419;;;:::o;28282:228::-;28422:34;28418:1;28410:6;28406:14;28399:58;28491:11;28486:2;28478:6;28474:15;28467:36;28282:228;:::o;28516:366::-;28658:3;28679:67;28743:2;28738:3;28679:67;:::i;:::-;28672:74;;28755:93;28844:3;28755:93;:::i;:::-;28873:2;28868:3;28864:12;28857:19;;28516:366;;;:::o;28888:419::-;29054:4;29092:2;29081:9;29077:18;29069:26;;29141:9;29135:4;29131:20;29127:1;29116:9;29112:17;29105:47;29169:131;29295:4;29169:131;:::i;:::-;29161:139;;28888:419;;;:::o;29313:194::-;29353:4;29373:20;29391:1;29373:20;:::i;:::-;29368:25;;29407:20;29425:1;29407:20;:::i;:::-;29402:25;;29451:1;29448;29444:9;29436:17;;29475:1;29469:4;29466:11;29463:37;;;29480:18;;:::i;:::-;29463:37;29313:194;;;;:::o;29513:191::-;29553:3;29572:20;29590:1;29572:20;:::i;:::-;29567:25;;29606:20;29624:1;29606:20;:::i;:::-;29601:25;;29649:1;29646;29642:9;29635:16;;29670:3;29667:1;29664:10;29661:36;;;29677:18;;:::i;:::-;29661:36;29513:191;;;;:::o;29710:177::-;29850:29;29846:1;29838:6;29834:14;29827:53;29710:177;:::o;29893:366::-;30035:3;30056:67;30120:2;30115:3;30056:67;:::i;:::-;30049:74;;30132:93;30221:3;30132:93;:::i;:::-;30250:2;30245:3;30241:12;30234:19;;29893:366;;;:::o;30265:419::-;30431:4;30469:2;30458:9;30454:18;30446:26;;30518:9;30512:4;30508:20;30504:1;30493:9;30489:17;30482:47;30546:131;30672:4;30546:131;:::i;:::-;30538:139;;30265:419;;;:::o;30690:831::-;30953:4;30991:3;30980:9;30976:19;30968:27;;31005:71;31073:1;31062:9;31058:17;31049:6;31005:71;:::i;:::-;31086:80;31162:2;31151:9;31147:18;31138:6;31086:80;:::i;:::-;31213:9;31207:4;31203:20;31198:2;31187:9;31183:18;31176:48;31241:108;31344:4;31335:6;31241:108;:::i;:::-;31233:116;;31359:72;31427:2;31416:9;31412:18;31403:6;31359:72;:::i;:::-;31441:73;31509:3;31498:9;31494:19;31485:6;31441:73;:::i;:::-;30690:831;;;;;;;;:::o;31527:180::-;31575:77;31572:1;31565:88;31672:4;31669:1;31662:15;31696:4;31693:1;31686:15;31713:185;31753:1;31770:20;31788:1;31770:20;:::i;:::-;31765:25;;31804:20;31822:1;31804:20;:::i;:::-;31799:25;;31843:1;31833:35;;31848:18;;:::i;:::-;31833:35;31890:1;31887;31883:9;31878:14;;31713:185;;;;:::o;31904:220::-;32044:34;32040:1;32032:6;32028:14;32021:58;32113:3;32108:2;32100:6;32096:15;32089:28;31904:220;:::o;32130:366::-;32272:3;32293:67;32357:2;32352:3;32293:67;:::i;:::-;32286:74;;32369:93;32458:3;32369:93;:::i;:::-;32487:2;32482:3;32478:12;32471:19;;32130:366;;;:::o;32502:419::-;32668:4;32706:2;32695:9;32691:18;32683:26;;32755:9;32749:4;32745:20;32741:1;32730:9;32726:17;32719:47;32783:131;32909:4;32783:131;:::i;:::-;32775:139;;32502:419;;;:::o

Swarm Source

ipfs://15495a0d72356abc403c7cb9b757974cbaa6e5201280ca912cb975f72a2e23ab

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.