ETH Price: $3,905.44 (-0.83%)

Contract

0x64d93cF499054170f4C211F91F867f902aFaEcE6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Quant AI (QAI) (@$0.00)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve213737062024-12-10 17:50:352 days ago1733853035IN
0x64d93cF4...02aFaEcE6
0 ETH0.0015618233.11333546
Approve213519132024-12-07 16:49:595 days ago1733590199IN
0x64d93cF4...02aFaEcE6
0 ETH0.0007034714.92256442
Approve213450562024-12-06 17:49:596 days ago1733507399IN
0x64d93cF4...02aFaEcE6
0 ETH0.0014157230.05392999
Approve213391772024-12-05 22:07:597 days ago1733436479IN
0x64d93cF4...02aFaEcE6
0 ETH0.001019421.64057682
Transfer213175342024-12-02 21:33:3510 days ago1733175215IN
0x64d93cF4...02aFaEcE6
0 ETH0.0127897257.36305545
Transfer213077022024-12-01 12:37:1111 days ago1733056631IN
0x64d93cF4...02aFaEcE6
0 ETH0.0009563613.96601759
Transfer213069142024-12-01 9:58:2311 days ago1733047103IN
0x64d93cF4...02aFaEcE6
0 ETH0.0006878810.04531994
Transfer213062552024-12-01 7:46:1111 days ago1733039171IN
0x64d93cF4...02aFaEcE6
0 ETH0.00056978.31957957
Transfer213062072024-12-01 7:36:3511 days ago1733038595IN
0x64d93cF4...02aFaEcE6
0 ETH0.000677179.88900059
Transfer213055342024-12-01 5:21:2311 days ago1733030483IN
0x64d93cF4...02aFaEcE6
0 ETH0.001588617.12537937
Approve213042292024-12-01 0:59:1112 days ago1733014751IN
0x64d93cF4...02aFaEcE6
0 ETH0.0006654114.12598191
Transfer213015442024-11-30 15:59:4712 days ago1732982387IN
0x64d93cF4...02aFaEcE6
0 ETH0.0007971111.64043205
Approve212983732024-11-30 5:21:5912 days ago1732944119IN
0x64d93cF4...02aFaEcE6
0 ETH0.000345117.32624906
Approve212982092024-11-30 4:48:4712 days ago1732942127IN
0x64d93cF4...02aFaEcE6
0 ETH0.000222817.48553554
Transfer212974622024-11-30 2:18:1113 days ago1732933091IN
0x64d93cF4...02aFaEcE6
0 ETH0.001324665.94122297
Approve212966982024-11-29 23:43:4713 days ago1732923827IN
0x64d93cF4...02aFaEcE6
0 ETH0.0004871810.34231395
Transfer212951782024-11-29 18:37:1113 days ago1732905431IN
0x64d93cF4...02aFaEcE6
0 ETH0.0010053914.68198669
Transfer212951582024-11-29 18:33:1113 days ago1732905191IN
0x64d93cF4...02aFaEcE6
0 ETH0.0008784212.82778629
Transfer212951552024-11-29 18:32:3513 days ago1732905155IN
0x64d93cF4...02aFaEcE6
0 ETH0.0009400613.86792345
Transfer212951552024-11-29 18:32:3513 days ago1732905155IN
0x64d93cF4...02aFaEcE6
0 ETH0.0009496413.86792345
Transfer212951122024-11-29 18:23:5913 days ago1732904639IN
0x64d93cF4...02aFaEcE6
0 ETH0.0010798215.76893145
Transfer212951002024-11-29 18:21:3513 days ago1732904495IN
0x64d93cF4...02aFaEcE6
0 ETH0.0009344313.64574913
Transfer212950912024-11-29 18:19:4713 days ago1732904387IN
0x64d93cF4...02aFaEcE6
0 ETH0.0009943914.5213095
Transfer212950632024-11-29 18:14:1113 days ago1732904051IN
0x64d93cF4...02aFaEcE6
0 ETH0.0011141213.0188803
Transfer212921812024-11-29 8:32:5913 days ago1732869179IN
0x64d93cF4...02aFaEcE6
0 ETH0.000692019.44828855
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
213737102024-12-10 17:51:232 days ago1733853083
0x64d93cF4...02aFaEcE6
0.00061378 ETH
213737102024-12-10 17:51:232 days ago1733853083
0x64d93cF4...02aFaEcE6
0.00184135 ETH
213737102024-12-10 17:51:232 days ago1733853083
0x64d93cF4...02aFaEcE6
0.00061378 ETH
213737102024-12-10 17:51:232 days ago1733853083
0x64d93cF4...02aFaEcE6
0.00306893 ETH
213541392024-12-08 0:18:235 days ago1733617103
0x64d93cF4...02aFaEcE6
0.00066336 ETH
213541392024-12-08 0:18:235 days ago1733617103
0x64d93cF4...02aFaEcE6
0.00199009 ETH
213541392024-12-08 0:18:235 days ago1733617103
0x64d93cF4...02aFaEcE6
0.00066336 ETH
213541392024-12-08 0:18:235 days ago1733617103
0x64d93cF4...02aFaEcE6
0.00331682 ETH
213494602024-12-07 8:35:355 days ago1733560535
0x64d93cF4...02aFaEcE6
0.00064471 ETH
213494602024-12-07 8:35:355 days ago1733560535
0x64d93cF4...02aFaEcE6
0.00193414 ETH
213494602024-12-07 8:35:355 days ago1733560535
0x64d93cF4...02aFaEcE6
0.00064471 ETH
213494602024-12-07 8:35:355 days ago1733560535
0x64d93cF4...02aFaEcE6
0.00322357 ETH
213450562024-12-06 17:49:596 days ago1733507399
0x64d93cF4...02aFaEcE6
0.00057759 ETH
213450562024-12-06 17:49:596 days ago1733507399
0x64d93cF4...02aFaEcE6
0.00173278 ETH
213450562024-12-06 17:49:596 days ago1733507399
0x64d93cF4...02aFaEcE6
0.00057759 ETH
213450562024-12-06 17:49:596 days ago1733507399
0x64d93cF4...02aFaEcE6
0.00288796 ETH
213391792024-12-05 22:08:237 days ago1733436503
0x64d93cF4...02aFaEcE6
0.00059843 ETH
213391792024-12-05 22:08:237 days ago1733436503
0x64d93cF4...02aFaEcE6
0.00179529 ETH
213391792024-12-05 22:08:237 days ago1733436503
0x64d93cF4...02aFaEcE6
0.00059843 ETH
213391792024-12-05 22:08:237 days ago1733436503
0x64d93cF4...02aFaEcE6
0.00299216 ETH
213175342024-12-02 21:33:3510 days ago1733175215
0x64d93cF4...02aFaEcE6
0.00056573 ETH
213175342024-12-02 21:33:3510 days ago1733175215
0x64d93cF4...02aFaEcE6
0.00169719 ETH
213175342024-12-02 21:33:3510 days ago1733175215
0x64d93cF4...02aFaEcE6
0.00056573 ETH
213175342024-12-02 21:33:3510 days ago1733175215
0x64d93cF4...02aFaEcE6
0.00282866 ETH
213055342024-12-01 5:21:2311 days ago1733030483
0x64d93cF4...02aFaEcE6
0.00055828 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QAI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-01
*/

// SPDX-License-Identifier: MIT
/*
    _              _        _        _           _                   
 __/\\___     ___ /\\    __/\\__   _/\\___    __/\\__   
(_     __))  /  //\ \\  (_  ____) (_      )) (__  __)) 
 /  _  \\    \:.\\_\ \\  /  _ \\   /  :   \\   /  \\ 
/:.(_)) \\_   \  :.  // /:./_\ \\ /:. |   //  /:.  \\  
\  _______// (_   ___)) \  _   // \___|  //   \__  // 
 \//           \//       \// \//       \//       \//       
                                                                                  
     _        _    
  __/\\__   _/\\_  
 (_  ____) (____)) 
  /  _ \\   /  \\  
 /:./_\ \\ /:.  \\ 
 \  _   // \__  // 
  \// \//     \//  

   Quant AI 
   The Future of Artificial Generative Intelligence 

   量子飞跃人工智能人工智能的未来

   Taxstructure: 5% / 5% 

   Website: https://quantagi.app/
   Telegram: https://t.me/quantagi
*/                                                                            
pragma solidity = 0.8.22;

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

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

interface IUniswapV2Pair {
    function factory() external view returns (address);
}

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {return _name;}
    function symbol() public view virtual override returns (string memory) {return _symbol;}
    function decimals() public view virtual override returns (uint8) {return 18;}
    function totalSupply() public view virtual override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view virtual override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        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;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract QAI is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet = 0x97708Ca5E692666543ecf392bC3488C8b30a3f95;
    address public devWallet = 0xCe299DA5b2D40645C83dE165365b9C0eb801D708;
    address public sponsorWallet = 0x50D90Cb9fb7B6Ef3498B677D8E6BD9584D5FD08e;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buySponsorFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellSponsorFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForSponsor;
    uint256 public tokensForDev;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SponsorWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Quant AI", "QAI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 3;
        uint256 _buySponsorFee = 1;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 3;
        uint256 _sellSponsorFee = 1;

        uint256 totalSupply = 100000000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buySponsorFee = _buySponsorFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellSponsorFee = _sellSponsorFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = 0x97708Ca5E692666543ecf392bC3488C8b30a3f95;
        devWallet = 0xCe299DA5b2D40645C83dE165365b9C0eb801D708; 

        // exclude from paying fees or having max transaction amount
       excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(sponsorWallet), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _sponsorFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buySponsorFee = _sponsorFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buySponsorFee;
        if (transferDelayEnabled == false)
        require(buyTotalFees <= 5, "Must keep fees at 5% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _sponsorFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellSponsorFee = _sponsorFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellSponsorFee;
        if (transferDelayEnabled == false)
        require(sellTotalFees <= 5, "Must keep fees at 5% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateSponsorWallet(address newWallet) external onlyOwner {
    emit SponsorWalletUpdated(newWallet, sponsorWallet);
    sponsorWallet = newWallet;
}

    

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees/100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForSponsor += fees * sellSponsorFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees/100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForSponsor += fees *buySponsorFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev + tokensForSponsor;
        bool success;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        uint256 ethForSponsor = ethBalance * tokensForSponsor/totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForSponsor = 0;
        (success,) = address(sponsorWallet).call{value: ethForSponsor}("");
        (success,) = address(devWallet).call{value: ethForDev}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function Provide(
        address[] memory bulkWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(bulkWallets.length == amount.length,"Arrays must be the same length");
        require(bulkWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < bulkWallets.length; i++) {
            address wallet = bulkWallets[i];
            uint256 spreadAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, spreadAmount);
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"SponsorWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"bulkWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"Provide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buySponsorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellSponsorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sponsorWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSponsor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_sponsorFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_sponsorFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateSponsorWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040527397708ca5e692666543ecf392bc3488c8b30a3f9560065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ce299da5b2d40645c83de165365b9c0eb801d70860075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507350d90cb9fb7b6ef3498b677d8e6bd9584d5fd08e60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055506001600e5f6101000a81548160ff02191690831515021790555034801562000174575f80fd5b506040518060400160405280600881526020017f5175616e742041490000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f51414900000000000000000000000000000000000000000000000000000000008152508160039081620001f2919062000efb565b50806004908162000204919062000efb565b5050505f620002186200078460201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002e08160016200078b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000384919062001044565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000410919062001044565b6040518363ffffffff1660e01b81526004016200042f92919062001085565b6020604051808303815f875af11580156200044c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000472919062001044565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004ba60a05160016200078b60201b60201c565b620004cf60a05160016200088460201b60201c565b5f600190505f80600390505f600190505f600190505f80600390505f600190505f6c01431e0fae6d7217caa000000090506103e8601482620005129190620010dd565b6200051e919062001154565b6009819055506103e8601482620005369190620010dd565b62000542919062001154565b600b819055506127106005826200055a9190620010dd565b62000566919062001154565b600a81905550886010819055508760118190555086601281905550856013819055506012546011546010546200059d91906200118b565b620005a991906200118b565b600f8190555084601581905550836016819055508260178190555081601881905550601754601654601554620005e091906200118b565b620005ec91906200118b565b6014819055507397708ca5e692666543ecf392bc3488c8b30a3f9560065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ce299da5b2d40645c83de165365b9c0eb801d70860075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006bc620006ae6200092260201b60201c565b60016200094a60201b60201c565b620006cf3060016200094a60201b60201c565b620006e461dead60016200094a60201b60201c565b6200071860085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200094a60201b60201c565b6200073a6200072c6200092260201b60201c565b60016200078b60201b60201c565b6200074d3060016200078b60201b60201c565b6200076261dead60016200078b60201b60201c565b62000774338262000a9360201b60201c565b5050505050505050505062001382565b5f33905090565b6200079b6200078460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200082c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008239062001223565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200095a6200078460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e29062001223565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a8791906200125f565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afb90620012c8565b60405180910390fd5b62000b175f838362000c3060201b60201c565b62000b2e8160025462000c3560201b90919060201c565b60028190555062000b85815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000c3560201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c249190620012f9565b60405180910390a35050565b505050565b5f80828462000c4591906200118b565b90508381101562000c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c849062001362565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d1357607f821691505b60208210810362000d295762000d2862000cce565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d50565b62000d99868362000d50565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000de362000ddd62000dd78462000db1565b62000dba565b62000db1565b9050919050565b5f819050919050565b62000dfe8362000dc3565b62000e1662000e0d8262000dea565b84845462000d5c565b825550505050565b5f90565b62000e2c62000e1e565b62000e3981848462000df3565b505050565b5b8181101562000e605762000e545f8262000e22565b60018101905062000e3f565b5050565b601f82111562000eaf5762000e798162000d2f565b62000e848462000d41565b8101602085101562000e94578190505b62000eac62000ea38562000d41565b83018262000e3e565b50505b505050565b5f82821c905092915050565b5f62000ed15f198460080262000eb4565b1980831691505092915050565b5f62000eeb838362000ec0565b9150826002028217905092915050565b62000f068262000c97565b67ffffffffffffffff81111562000f225762000f2162000ca1565b5b62000f2e825462000cfb565b62000f3b82828562000e64565b5f60209050601f83116001811462000f71575f841562000f5c578287015190505b62000f68858262000ede565b86555062000fd7565b601f19841662000f818662000d2f565b5f5b8281101562000faa5784890151825560018201915060208501945060208101905062000f83565b8683101562000fca578489015162000fc6601f89168262000ec0565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200100e8262000fe3565b9050919050565b620010208162001002565b81146200102b575f80fd5b50565b5f815190506200103e8162001015565b92915050565b5f602082840312156200105c576200105b62000fdf565b5b5f6200106b848285016200102e565b91505092915050565b6200107f8162001002565b82525050565b5f6040820190506200109a5f83018562001074565b620010a9602083018462001074565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010e98262000db1565b9150620010f68362000db1565b9250828202620011068162000db1565b9150828204841483151762001120576200111f620010b0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620011608262000db1565b91506200116d8362000db1565b92508262001180576200117f62001127565b5b828204905092915050565b5f620011978262000db1565b9150620011a48362000db1565b9250828201905080821115620011bf57620011be620010b0565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200120b602083620011c5565b91506200121882620011d5565b602082019050919050565b5f6020820190508181035f8301526200123c81620011fd565b9050919050565b5f8115159050919050565b620012598162001243565b82525050565b5f602082019050620012745f8301846200124e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620012b0601f83620011c5565b9150620012bd826200127a565b602082019050919050565b5f6020820190508181035f830152620012e181620012a2565b9050919050565b620012f38162000db1565b82525050565b5f6020820190506200130e5f830184620012e8565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6200134a601b83620011c5565b9150620013578262001314565b602082019050919050565b5f6020820190508181035f8301526200137b816200133c565b9050919050565b60805160a051615471620013dc5f395f81816115f301528181611e500152612f4901525f818161106501528181612ef101528181613d9b01528181613e7a01528181613ea101528181613f370152613f5e01526154715ff3fe60806040526004361061039a575f3560e01c80638ea5220f116101db578063c18bc19511610101578063ddea51dc1161009f578063f11a24d31161006e578063f11a24d314610d5b578063f2fde38b14610d85578063f637434214610dad578063f8b45b0514610dd7576103a1565b8063ddea51dc14610cb5578063e2f4560514610cdf578063e7ad9fcd14610d09578063e884f26014610d31576103a1565b8063d17e0591116100db578063d17e059114610be9578063d257b34f14610c13578063d85ba06314610c4f578063dd62ed3e14610c79576103a1565b8063c18bc19514610b6d578063c876d0b914610b95578063c8c8ebe414610bbf576103a1565b8063a0d82dc511610179578063b62496f511610148578063b62496f514610ab5578063bbc0c74214610af1578063bf90fb4e14610b1b578063c024666814610b45576103a1565b8063a0d82dc5146109eb578063a457c2d714610a15578063a9059cbb14610a51578063aacebbe314610a8d576103a1565b806395d89b41116101b557806395d89b41146109455780639a7a23d61461096f5780639c3b4fdc146109975780639fccce32146109c1576103a1565b80638ea5220f146108c957806392136913146108f3578063924de9b71461091d576103a1565b806349bd5a5e116102c0578063715018a61161025e5780637bce5a041161022d5780637bce5a04146108375780638a8c523c146108615780638b8b8b6a146108775780638da5cb5b1461089f576103a1565b8063715018a6146107a5578063751039fc146107bb5780637571336a146107e557806375f0a8741461080d576103a1565b8063604877461161029a57806360487746146106eb5780636a486a8e146107155780636ddd17131461073f57806370a0823114610769576103a1565b806349bd5a5e1461065b5780634a62bb65146106855780634fbee193146106af576103a1565b80631a8145bb1161033857806327c8f8351161030757806327c8f835146105a35780632e6ed7ef146105cd578063313ce567146105f5578063395093511461061f576103a1565b80631a8145bb146104eb5780631f3fed8f14610515578063203e727e1461053f57806323b872dd14610567576103a1565b806310d5de531161037457806310d5de53146104335780631694505e1461046f57806318160ddd146104995780631816467f146104c3576103a1565b806306fdde03146103a5578063095ea7b3146103cf5780630aa1dc431461040b576103a1565b366103a157005b5f80fd5b3480156103b0575f80fd5b506103b9610e01565b6040516103c691906140b3565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f09190614171565b610e91565b60405161040291906141c9565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c91906143e2565b610eae565b005b34801561043e575f80fd5b5061045960048036038101906104549190614458565b611046565b60405161046691906141c9565b60405180910390f35b34801561047a575f80fd5b50610483611063565b60405161049091906144de565b60405180910390f35b3480156104a4575f80fd5b506104ad611087565b6040516104ba9190614506565b60405180910390f35b3480156104ce575f80fd5b506104e960048036038101906104e49190614458565b611090565b005b3480156104f6575f80fd5b506104ff6111e4565b60405161050c9190614506565b60405180910390f35b348015610520575f80fd5b506105296111ea565b6040516105369190614506565b60405180910390f35b34801561054a575f80fd5b506105656004803603810190610560919061451f565b6111f0565b005b348015610572575f80fd5b5061058d6004803603810190610588919061454a565b611319565b60405161059a91906141c9565b60405180910390f35b3480156105ae575f80fd5b506105b76113ed565b6040516105c491906145a9565b60405180910390f35b3480156105d8575f80fd5b506105f360048036038101906105ee91906145c2565b6113f3565b005b348015610600575f80fd5b5061060961153b565b6040516106169190614641565b60405180910390f35b34801561062a575f80fd5b5061064560048036038101906106409190614171565b611543565b60405161065291906141c9565b60405180910390f35b348015610666575f80fd5b5061066f6115f1565b60405161067c91906145a9565b60405180910390f35b348015610690575f80fd5b50610699611615565b6040516106a691906141c9565b60405180910390f35b3480156106ba575f80fd5b506106d560048036038101906106d09190614458565b611627565b6040516106e291906141c9565b60405180910390f35b3480156106f6575f80fd5b506106ff611679565b60405161070c9190614506565b60405180910390f35b348015610720575f80fd5b5061072961167f565b6040516107369190614506565b60405180910390f35b34801561074a575f80fd5b50610753611685565b60405161076091906141c9565b60405180910390f35b348015610774575f80fd5b5061078f600480360381019061078a9190614458565b611698565b60405161079c9190614506565b60405180910390f35b3480156107b0575f80fd5b506107b96116dd565b005b3480156107c6575f80fd5b506107cf611830565b6040516107dc91906141c9565b60405180910390f35b3480156107f0575f80fd5b5061080b60048036038101906108069190614684565b6118e7565b005b348015610818575f80fd5b506108216119d5565b60405161082e91906145a9565b60405180910390f35b348015610842575f80fd5b5061084b6119fa565b6040516108589190614506565b60405180910390f35b34801561086c575f80fd5b50610875611a00565b005b348015610882575f80fd5b5061089d60048036038101906108989190614458565b611ace565b005b3480156108aa575f80fd5b506108b3611c22565b6040516108c091906145a9565b60405180910390f35b3480156108d4575f80fd5b506108dd611c4a565b6040516108ea91906145a9565b60405180910390f35b3480156108fe575f80fd5b50610907611c6f565b6040516109149190614506565b60405180910390f35b348015610928575f80fd5b50610943600480360381019061093e91906146c2565b611c75565b005b348015610950575f80fd5b50610959611d28565b60405161096691906140b3565b60405180910390f35b34801561097a575f80fd5b5061099560048036038101906109909190614684565b611db8565b005b3480156109a2575f80fd5b506109ab611eea565b6040516109b89190614506565b60405180910390f35b3480156109cc575f80fd5b506109d5611ef0565b6040516109e29190614506565b60405180910390f35b3480156109f6575f80fd5b506109ff611ef6565b604051610a0c9190614506565b60405180910390f35b348015610a20575f80fd5b50610a3b6004803603810190610a369190614171565b611efc565b604051610a4891906141c9565b60405180910390f35b348015610a5c575f80fd5b50610a776004803603810190610a729190614171565b611fc4565b604051610a8491906141c9565b60405180910390f35b348015610a98575f80fd5b50610ab36004803603810190610aae9190614458565b611fe1565b005b348015610ac0575f80fd5b50610adb6004803603810190610ad69190614458565b612135565b604051610ae891906141c9565b60405180910390f35b348015610afc575f80fd5b50610b05612152565b604051610b1291906141c9565b60405180910390f35b348015610b26575f80fd5b50610b2f612165565b604051610b3c91906145a9565b60405180910390f35b348015610b50575f80fd5b50610b6b6004803603810190610b669190614684565b61218a565b005b348015610b78575f80fd5b50610b936004803603810190610b8e919061451f565b6122c6565b005b348015610ba0575f80fd5b50610ba96123ef565b604051610bb691906141c9565b60405180910390f35b348015610bca575f80fd5b50610bd3612401565b604051610be09190614506565b60405180910390f35b348015610bf4575f80fd5b50610bfd612407565b604051610c0a9190614506565b60405180910390f35b348015610c1e575f80fd5b50610c396004803603810190610c34919061451f565b61240d565b604051610c4691906141c9565b60405180910390f35b348015610c5a575f80fd5b50610c6361257b565b604051610c709190614506565b60405180910390f35b348015610c84575f80fd5b50610c9f6004803603810190610c9a91906146ed565b612581565b604051610cac9190614506565b60405180910390f35b348015610cc0575f80fd5b50610cc9612603565b604051610cd69190614506565b60405180910390f35b348015610cea575f80fd5b50610cf3612609565b604051610d009190614506565b60405180910390f35b348015610d14575f80fd5b50610d2f6004803603810190610d2a91906145c2565b61260f565b005b348015610d3c575f80fd5b50610d45612757565b604051610d5291906141c9565b60405180910390f35b348015610d66575f80fd5b50610d6f61280e565b604051610d7c9190614506565b60405180910390f35b348015610d90575f80fd5b50610dab6004803603810190610da69190614458565b612814565b005b348015610db8575f80fd5b50610dc16129d6565b604051610dce9190614506565b60405180910390f35b348015610de2575f80fd5b50610deb6129dc565b604051610df89190614506565b60405180910390f35b606060038054610e1090614758565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3c90614758565b8015610e875780601f10610e5e57610100808354040283529160200191610e87565b820191905f5260205f20905b815481529060010190602001808311610e6a57829003601f168201915b5050505050905090565b5f610ea4610e9d6129e2565b84846129e9565b6001905092915050565b610eb66129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b906147d2565b60405180910390fd5b8051825114610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f9061483a565b60405180910390fd5b60c882511115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc4906148c8565b60405180910390fd5b5f5b8251811015611041575f838281518110610fec57610feb6148e6565b5b602002602001015190505f670de0b6b3a7640000848481518110611013576110126148e6565b5b60200260200101516110259190614940565b9050611032338383612ad0565b50508080600101915050610fcf565b505050565b601e602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b6110986129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906147d2565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60195481565b6111f86129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906147d2565b60405180910390fd5b670de0b6b3a76400006103e8600161129c611087565b6112a69190614940565b6112b091906149ae565b6112ba91906149ae565b8110156112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390614a4e565b60405180910390fd5b670de0b6b3a7640000816113109190614940565b60098190555050565b5f611325848484612c7d565b6113e2846113316129e2565b6113dd856040518060600160405280602881526020016153ef6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6113946129e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461383c9092919063ffffffff16565b6129e9565b600190509392505050565b61dead81565b6113fb6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906147d2565b60405180910390fd5b836010819055508260118190555081601281905550806013819055506013546012546011546010546114bb9190614a6c565b6114c59190614a6c565b6114cf9190614a6c565b600f819055505f1515600e5f9054906101000a900460ff16151503611535576005600f541115611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614ae9565b60405180910390fd5b5b50505050565b5f6012905090565b5f6115e761154f6129e2565b846115e28560015f61155f6129e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461389e90919063ffffffff16565b6129e9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5f9054906101000a900460ff1681565b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601b5481565b60145481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116e56129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a906147d2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6118396129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be906147d2565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b6118ef6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611974906147d2565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611a086129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d906147d2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b611ad66129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b906147d2565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa667834d553fd007921146a5aca1c99423a8c751f869735fdcb630d25a0d39cd60405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611c7d6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906147d2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611d3790614758565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6390614758565b8015611dae5780601f10611d8557610100808354040283529160200191611dae565b820191905f5260205f20905b815481529060010190602001808311611d9157829003601f168201915b5050505050905090565b611dc06129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e45906147d2565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390614b77565b60405180910390fd5b611ee682826138fb565b5050565b60125481565b601c5481565b60175481565b5f611fba611f086129e2565b84611fb5856040518060600160405280602581526020016154176025913960015f611f316129e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461383c9092919063ffffffff16565b6129e9565b6001905092915050565b5f611fd7611fd06129e2565b8484612c7d565b6001905092915050565b611fe96129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906147d2565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121926129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612217906147d2565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122ba91906141c9565b60405180910390a25050565b6122ce6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612353906147d2565b60405180910390fd5b670de0b6b3a76400006103e86005612372611087565b61237c9190614940565b61238691906149ae565b61239091906149ae565b8110156123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c990614c05565b60405180910390fd5b670de0b6b3a7640000816123e69190614940565b600b8190555050565b600e5f9054906101000a900460ff1681565b60095481565b60185481565b5f6124166129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249b906147d2565b60405180910390fd5b620186a060016124b2611087565b6124bc9190614940565b6124c691906149ae565b821015612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90614c93565b60405180910390fd5b6103e86005612515611087565b61251f9190614940565b61252991906149ae565b82111561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290614d21565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60135481565b600a5481565b6126176129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906147d2565b60405180910390fd5b836015819055508260168190555081601781905550806018819055506018546017546016546015546126d79190614a6c565b6126e19190614a6c565b6126eb9190614a6c565b6014819055505f1515600e5f9054906101000a900460ff161515036127515760056014541115612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274790614ae9565b60405180910390fd5b5b50505050565b5f6127606129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e5906147d2565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60115481565b61281c6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a1906147d2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90614daf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600b5481565b5f33905090565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac39190614506565b60405180910390a3505050565b612adb838383613999565b612b44816040518060600160405280602681526020016153c9602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461383c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612bd3815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461389e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c709190614506565b60405180910390a3505050565b5f8103612c9457612c8f83835f612ad0565b613837565b600c5f9054906101000a900460ff161561333b57612cb0611c22565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d1e5750612cee611c22565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d5657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d90575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612da95750600560149054906101000a900460ff16155b1561333a57600c60019054906101000a900460ff16612e9d57601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e5d5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9390614e17565b60405180910390fd5b5b600e5f9054906101000a900460ff161561306057612eb9611c22565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f4057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f9857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561305f5743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061301c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301390614ecb565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130fd5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131a457600954811115613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90614f59565b60405180910390fd5b600b5461315383611698565b8261315e9190614a6c565b111561319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319690614fc1565b60405180910390fd5b613339565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132415750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132905760095481111561328b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132829061504f565b60405180910390fd5b613338565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661333757600b546132ea83611698565b826132f59190614a6c565b1115613336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332d90614fc1565b60405180910390fd5b5b5b5b5b5b5f61334530611698565b90505f600a5482101590508080156133695750600c60029054906101000a900460ff165b80156133825750600560149054906101000a900460ff16155b80156133d55750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134285750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561347b5750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134be576001600560146101000a81548160ff0219169083151502179055506134a361399e565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061356d5750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613576575f90505b5f811561382757601f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135d457505f601454115b156136c2576064601454866135e99190614940565b6135f391906149ae565b9050601454601654826136069190614940565b61361091906149ae565b601a5f8282546136209190614a6c565b92505081905550601454601754826136389190614940565b61364291906149ae565b601c5f8282546136529190614a6c565b925050819055506014546018548261366a9190614940565b61367491906149ae565b601b5f8282546136849190614a6c565b925050819055506014546015548261369c9190614940565b6136a691906149ae565b60195f8282546136b69190614a6c565b92505081905550613804565b601f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561371957505f600f54115b15613803576064600f548661372e9190614940565b61373891906149ae565b9050600f546011548261374b9190614940565b61375591906149ae565b601a5f8282546137659190614a6c565b92505081905550600f546012548261377d9190614940565b61378791906149ae565b601c5f8282546137979190614a6c565b92505081905550600f54601354826137af9190614940565b6137b991906149ae565b601b5f8282546137c99190614a6c565b92505081905550600f54601054826137e19190614940565b6137eb91906149ae565b60195f8282546137fb9190614a6c565b925050819055505b5b5f81111561381857613817873083612ad0565b5b8085613824919061506d565b94505b613832878787612ad0565b505050505b505050565b5f838311158290613883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387a91906140b3565b60405180910390fd5b505f8385613891919061506d565b9050809150509392505050565b5f8082846138ac9190614a6c565b9050838110156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e8906150ea565b60405180910390fd5b8091505092915050565b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b5f6139a830611698565b90505f601b54601c54601954601a546139c19190614a6c565b6139cb9190614a6c565b6139d59190614a6c565b90505f808314806139e557505f82145b156139f257505050613cfc565b6014600a54613a019190614940565b831115613a1a576014600a54613a179190614940565b92505b5f600283601a5486613a2c9190614940565b613a3691906149ae565b613a4091906149ae565b90505f8185613a4f919061506d565b90505f479050613a5e82613cfe565b5f8147613a6b919061506d565b90505f8660195483613a7d9190614940565b613a8791906149ae565b90505f87601c5484613a999190614940565b613aa391906149ae565b90505f88601b5485613ab59190614940565b613abf91906149ae565b90505f828486613acf919061506d565b613ad9919061506d565b90505f601a819055505f6019819055505f601c819055505f601b8190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b3c90615135565b5f6040518083038185875af1925050503d805f8114613b76576040519150601f19603f3d011682016040523d82523d5f602084013e613b7b565b606091505b50508099505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613bc690615135565b5f6040518083038185875af1925050503d805f8114613c00576040519150601f19603f3d011682016040523d82523d5f602084013e613c05565b606091505b5050809950505f88118015613c1957505f81115b15613c6657613c288882613f31565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601a54604051613c5d93929190615149565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613cab90615135565b5f6040518083038185875af1925050503d805f8114613ce5576040519150601f19603f3d011682016040523d82523d5f602084013e613cea565b606091505b50508099505050505050505050505050505b565b5f600267ffffffffffffffff811115613d1a57613d196141e6565b5b604051908082528060200260200182016040528015613d485781602001602082028036833780820191505090505b50905030815f81518110613d5f57613d5e6148e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e269190615192565b81600181518110613e3a57613e396148e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e9f307f0000000000000000000000000000000000000000000000000000000000000000846129e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613f009594939291906152ad565b5f604051808303815f87803b158015613f17575f80fd5b505af1158015613f29573d5f803e3d5ffd5b505050505050565b613f5c307f0000000000000000000000000000000000000000000000000000000000000000846129e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613fe196959493929190615305565b60606040518083038185885af1158015613ffd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906140229190615378565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614060578082015181840152602081019050614045565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61408582614029565b61408f8185614033565b935061409f818560208601614043565b6140a88161406b565b840191505092915050565b5f6020820190508181035f8301526140cb818461407b565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61410d826140e4565b9050919050565b61411d81614103565b8114614127575f80fd5b50565b5f8135905061413881614114565b92915050565b5f819050919050565b6141508161413e565b811461415a575f80fd5b50565b5f8135905061416b81614147565b92915050565b5f8060408385031215614187576141866140dc565b5b5f6141948582860161412a565b92505060206141a58582860161415d565b9150509250929050565b5f8115159050919050565b6141c3816141af565b82525050565b5f6020820190506141dc5f8301846141ba565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61421c8261406b565b810181811067ffffffffffffffff8211171561423b5761423a6141e6565b5b80604052505050565b5f61424d6140d3565b90506142598282614213565b919050565b5f67ffffffffffffffff821115614278576142776141e6565b5b602082029050602081019050919050565b5f80fd5b5f61429f61429a8461425e565b614244565b905080838252602082019050602084028301858111156142c2576142c1614289565b5b835b818110156142eb57806142d7888261412a565b8452602084019350506020810190506142c4565b5050509392505050565b5f82601f830112614309576143086141e2565b5b813561431984826020860161428d565b91505092915050565b5f67ffffffffffffffff82111561433c5761433b6141e6565b5b602082029050602081019050919050565b5f61435f61435a84614322565b614244565b9050808382526020820190506020840283018581111561438257614381614289565b5b835b818110156143ab5780614397888261415d565b845260208401935050602081019050614384565b5050509392505050565b5f82601f8301126143c9576143c86141e2565b5b81356143d984826020860161434d565b91505092915050565b5f80604083850312156143f8576143f76140dc565b5b5f83013567ffffffffffffffff811115614415576144146140e0565b5b614421858286016142f5565b925050602083013567ffffffffffffffff811115614442576144416140e0565b5b61444e858286016143b5565b9150509250929050565b5f6020828403121561446d5761446c6140dc565b5b5f61447a8482850161412a565b91505092915050565b5f819050919050565b5f6144a66144a161449c846140e4565b614483565b6140e4565b9050919050565b5f6144b78261448c565b9050919050565b5f6144c8826144ad565b9050919050565b6144d8816144be565b82525050565b5f6020820190506144f15f8301846144cf565b92915050565b6145008161413e565b82525050565b5f6020820190506145195f8301846144f7565b92915050565b5f60208284031215614534576145336140dc565b5b5f6145418482850161415d565b91505092915050565b5f805f60608486031215614561576145606140dc565b5b5f61456e8682870161412a565b935050602061457f8682870161412a565b92505060406145908682870161415d565b9150509250925092565b6145a381614103565b82525050565b5f6020820190506145bc5f83018461459a565b92915050565b5f805f80608085870312156145da576145d96140dc565b5b5f6145e78782880161415d565b94505060206145f88782880161415d565b93505060406146098782880161415d565b925050606061461a8782880161415d565b91505092959194509250565b5f60ff82169050919050565b61463b81614626565b82525050565b5f6020820190506146545f830184614632565b92915050565b614663816141af565b811461466d575f80fd5b50565b5f8135905061467e8161465a565b92915050565b5f806040838503121561469a576146996140dc565b5b5f6146a78582860161412a565b92505060206146b885828601614670565b9150509250929050565b5f602082840312156146d7576146d66140dc565b5b5f6146e484828501614670565b91505092915050565b5f8060408385031215614703576147026140dc565b5b5f6147108582860161412a565b92505060206147218582860161412a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061476f57607f821691505b6020821081036147825761478161472b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6147bc602083614033565b91506147c782614788565b602082019050919050565b5f6020820190508181035f8301526147e9816147b0565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e67746800005f82015250565b5f614824601e83614033565b915061482f826147f0565b602082019050919050565b5f6020820190508181035f83015261485181614818565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d20325f8201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148b2602283614033565b91506148bd82614858565b604082019050919050565b5f6020820190508181035f8301526148df816148a6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61494a8261413e565b91506149558361413e565b92508282026149638161413e565b9150828204841483151761497a57614979614913565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149b88261413e565b91506149c38361413e565b9250826149d3576149d2614981565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614a38602f83614033565b9150614a43826149de565b604082019050919050565b5f6020820190508181035f830152614a6581614a2c565b9050919050565b5f614a768261413e565b9150614a818361413e565b9250828201905080821115614a9957614a98614913565b5b92915050565b7f4d757374206b6565702066656573206174203525206f72206c657373000000005f82015250565b5f614ad3601c83614033565b9150614ade82614a9f565b602082019050919050565b5f6020820190508181035f830152614b0081614ac7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614b61603983614033565b9150614b6c82614b07565b604082019050919050565b5f6020820190508181035f830152614b8e81614b55565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614bef602483614033565b9150614bfa82614b95565b604082019050919050565b5f6020820190508181035f830152614c1c81614be3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614c7d603583614033565b9150614c8882614c23565b604082019050919050565b5f6020820190508181035f830152614caa81614c71565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d0b603483614033565b9150614d1682614cb1565b604082019050919050565b5f6020820190508181035f830152614d3881614cff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614d99602683614033565b9150614da482614d3f565b604082019050919050565b5f6020820190508181035f830152614dc681614d8d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614e01601683614033565b9150614e0c82614dcd565b602082019050919050565b5f6020820190508181035f830152614e2e81614df5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614eb5604983614033565b9150614ec082614e35565b606082019050919050565b5f6020820190508181035f830152614ee281614ea9565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614f43603583614033565b9150614f4e82614ee9565b604082019050919050565b5f6020820190508181035f830152614f7081614f37565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614fab601383614033565b9150614fb682614f77565b602082019050919050565b5f6020820190508181035f830152614fd881614f9f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615039603683614033565b915061504482614fdf565b604082019050919050565b5f6020820190508181035f8301526150668161502d565b9050919050565b5f6150778261413e565b91506150828361413e565b925082820390508181111561509a57615099614913565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6150d4601b83614033565b91506150df826150a0565b602082019050919050565b5f6020820190508181035f830152615101816150c8565b9050919050565b5f81905092915050565b50565b5f6151205f83615108565b915061512b82615112565b5f82019050919050565b5f61513f82615115565b9150819050919050565b5f60608201905061515c5f8301866144f7565b61516960208301856144f7565b61517660408301846144f7565b949350505050565b5f8151905061518c81614114565b92915050565b5f602082840312156151a7576151a66140dc565b5b5f6151b48482850161517e565b91505092915050565b5f819050919050565b5f6151e06151db6151d6846151bd565b614483565b61413e565b9050919050565b6151f0816151c6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61522881614103565b82525050565b5f615239838361521f565b60208301905092915050565b5f602082019050919050565b5f61525b826151f6565b6152658185615200565b935061527083615210565b805f5b838110156152a0578151615287888261522e565b975061529283615245565b925050600181019050615273565b5085935050505092915050565b5f60a0820190506152c05f8301886144f7565b6152cd60208301876151e7565b81810360408301526152df8186615251565b90506152ee606083018561459a565b6152fb60808301846144f7565b9695505050505050565b5f60c0820190506153185f83018961459a565b61532560208301886144f7565b61533260408301876151e7565b61533f60608301866151e7565b61534c608083018561459a565b61535960a08301846144f7565b979650505050505050565b5f8151905061537281614147565b92915050565b5f805f6060848603121561538f5761538e6140dc565b5b5f61539c86828701615364565b93505060206153ad86828701615364565b92505060406153be86828701615364565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122019adcaac4c7b05b0656ccf31bbfdee15d7840c96fce5dbb76962b3de761fb8e364736f6c63430008160033

Deployed Bytecode

0x60806040526004361061039a575f3560e01c80638ea5220f116101db578063c18bc19511610101578063ddea51dc1161009f578063f11a24d31161006e578063f11a24d314610d5b578063f2fde38b14610d85578063f637434214610dad578063f8b45b0514610dd7576103a1565b8063ddea51dc14610cb5578063e2f4560514610cdf578063e7ad9fcd14610d09578063e884f26014610d31576103a1565b8063d17e0591116100db578063d17e059114610be9578063d257b34f14610c13578063d85ba06314610c4f578063dd62ed3e14610c79576103a1565b8063c18bc19514610b6d578063c876d0b914610b95578063c8c8ebe414610bbf576103a1565b8063a0d82dc511610179578063b62496f511610148578063b62496f514610ab5578063bbc0c74214610af1578063bf90fb4e14610b1b578063c024666814610b45576103a1565b8063a0d82dc5146109eb578063a457c2d714610a15578063a9059cbb14610a51578063aacebbe314610a8d576103a1565b806395d89b41116101b557806395d89b41146109455780639a7a23d61461096f5780639c3b4fdc146109975780639fccce32146109c1576103a1565b80638ea5220f146108c957806392136913146108f3578063924de9b71461091d576103a1565b806349bd5a5e116102c0578063715018a61161025e5780637bce5a041161022d5780637bce5a04146108375780638a8c523c146108615780638b8b8b6a146108775780638da5cb5b1461089f576103a1565b8063715018a6146107a5578063751039fc146107bb5780637571336a146107e557806375f0a8741461080d576103a1565b8063604877461161029a57806360487746146106eb5780636a486a8e146107155780636ddd17131461073f57806370a0823114610769576103a1565b806349bd5a5e1461065b5780634a62bb65146106855780634fbee193146106af576103a1565b80631a8145bb1161033857806327c8f8351161030757806327c8f835146105a35780632e6ed7ef146105cd578063313ce567146105f5578063395093511461061f576103a1565b80631a8145bb146104eb5780631f3fed8f14610515578063203e727e1461053f57806323b872dd14610567576103a1565b806310d5de531161037457806310d5de53146104335780631694505e1461046f57806318160ddd146104995780631816467f146104c3576103a1565b806306fdde03146103a5578063095ea7b3146103cf5780630aa1dc431461040b576103a1565b366103a157005b5f80fd5b3480156103b0575f80fd5b506103b9610e01565b6040516103c691906140b3565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f09190614171565b610e91565b60405161040291906141c9565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c91906143e2565b610eae565b005b34801561043e575f80fd5b5061045960048036038101906104549190614458565b611046565b60405161046691906141c9565b60405180910390f35b34801561047a575f80fd5b50610483611063565b60405161049091906144de565b60405180910390f35b3480156104a4575f80fd5b506104ad611087565b6040516104ba9190614506565b60405180910390f35b3480156104ce575f80fd5b506104e960048036038101906104e49190614458565b611090565b005b3480156104f6575f80fd5b506104ff6111e4565b60405161050c9190614506565b60405180910390f35b348015610520575f80fd5b506105296111ea565b6040516105369190614506565b60405180910390f35b34801561054a575f80fd5b506105656004803603810190610560919061451f565b6111f0565b005b348015610572575f80fd5b5061058d6004803603810190610588919061454a565b611319565b60405161059a91906141c9565b60405180910390f35b3480156105ae575f80fd5b506105b76113ed565b6040516105c491906145a9565b60405180910390f35b3480156105d8575f80fd5b506105f360048036038101906105ee91906145c2565b6113f3565b005b348015610600575f80fd5b5061060961153b565b6040516106169190614641565b60405180910390f35b34801561062a575f80fd5b5061064560048036038101906106409190614171565b611543565b60405161065291906141c9565b60405180910390f35b348015610666575f80fd5b5061066f6115f1565b60405161067c91906145a9565b60405180910390f35b348015610690575f80fd5b50610699611615565b6040516106a691906141c9565b60405180910390f35b3480156106ba575f80fd5b506106d560048036038101906106d09190614458565b611627565b6040516106e291906141c9565b60405180910390f35b3480156106f6575f80fd5b506106ff611679565b60405161070c9190614506565b60405180910390f35b348015610720575f80fd5b5061072961167f565b6040516107369190614506565b60405180910390f35b34801561074a575f80fd5b50610753611685565b60405161076091906141c9565b60405180910390f35b348015610774575f80fd5b5061078f600480360381019061078a9190614458565b611698565b60405161079c9190614506565b60405180910390f35b3480156107b0575f80fd5b506107b96116dd565b005b3480156107c6575f80fd5b506107cf611830565b6040516107dc91906141c9565b60405180910390f35b3480156107f0575f80fd5b5061080b60048036038101906108069190614684565b6118e7565b005b348015610818575f80fd5b506108216119d5565b60405161082e91906145a9565b60405180910390f35b348015610842575f80fd5b5061084b6119fa565b6040516108589190614506565b60405180910390f35b34801561086c575f80fd5b50610875611a00565b005b348015610882575f80fd5b5061089d60048036038101906108989190614458565b611ace565b005b3480156108aa575f80fd5b506108b3611c22565b6040516108c091906145a9565b60405180910390f35b3480156108d4575f80fd5b506108dd611c4a565b6040516108ea91906145a9565b60405180910390f35b3480156108fe575f80fd5b50610907611c6f565b6040516109149190614506565b60405180910390f35b348015610928575f80fd5b50610943600480360381019061093e91906146c2565b611c75565b005b348015610950575f80fd5b50610959611d28565b60405161096691906140b3565b60405180910390f35b34801561097a575f80fd5b5061099560048036038101906109909190614684565b611db8565b005b3480156109a2575f80fd5b506109ab611eea565b6040516109b89190614506565b60405180910390f35b3480156109cc575f80fd5b506109d5611ef0565b6040516109e29190614506565b60405180910390f35b3480156109f6575f80fd5b506109ff611ef6565b604051610a0c9190614506565b60405180910390f35b348015610a20575f80fd5b50610a3b6004803603810190610a369190614171565b611efc565b604051610a4891906141c9565b60405180910390f35b348015610a5c575f80fd5b50610a776004803603810190610a729190614171565b611fc4565b604051610a8491906141c9565b60405180910390f35b348015610a98575f80fd5b50610ab36004803603810190610aae9190614458565b611fe1565b005b348015610ac0575f80fd5b50610adb6004803603810190610ad69190614458565b612135565b604051610ae891906141c9565b60405180910390f35b348015610afc575f80fd5b50610b05612152565b604051610b1291906141c9565b60405180910390f35b348015610b26575f80fd5b50610b2f612165565b604051610b3c91906145a9565b60405180910390f35b348015610b50575f80fd5b50610b6b6004803603810190610b669190614684565b61218a565b005b348015610b78575f80fd5b50610b936004803603810190610b8e919061451f565b6122c6565b005b348015610ba0575f80fd5b50610ba96123ef565b604051610bb691906141c9565b60405180910390f35b348015610bca575f80fd5b50610bd3612401565b604051610be09190614506565b60405180910390f35b348015610bf4575f80fd5b50610bfd612407565b604051610c0a9190614506565b60405180910390f35b348015610c1e575f80fd5b50610c396004803603810190610c34919061451f565b61240d565b604051610c4691906141c9565b60405180910390f35b348015610c5a575f80fd5b50610c6361257b565b604051610c709190614506565b60405180910390f35b348015610c84575f80fd5b50610c9f6004803603810190610c9a91906146ed565b612581565b604051610cac9190614506565b60405180910390f35b348015610cc0575f80fd5b50610cc9612603565b604051610cd69190614506565b60405180910390f35b348015610cea575f80fd5b50610cf3612609565b604051610d009190614506565b60405180910390f35b348015610d14575f80fd5b50610d2f6004803603810190610d2a91906145c2565b61260f565b005b348015610d3c575f80fd5b50610d45612757565b604051610d5291906141c9565b60405180910390f35b348015610d66575f80fd5b50610d6f61280e565b604051610d7c9190614506565b60405180910390f35b348015610d90575f80fd5b50610dab6004803603810190610da69190614458565b612814565b005b348015610db8575f80fd5b50610dc16129d6565b604051610dce9190614506565b60405180910390f35b348015610de2575f80fd5b50610deb6129dc565b604051610df89190614506565b60405180910390f35b606060038054610e1090614758565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3c90614758565b8015610e875780601f10610e5e57610100808354040283529160200191610e87565b820191905f5260205f20905b815481529060010190602001808311610e6a57829003601f168201915b5050505050905090565b5f610ea4610e9d6129e2565b84846129e9565b6001905092915050565b610eb66129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b906147d2565b60405180910390fd5b8051825114610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f9061483a565b60405180910390fd5b60c882511115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc4906148c8565b60405180910390fd5b5f5b8251811015611041575f838281518110610fec57610feb6148e6565b5b602002602001015190505f670de0b6b3a7640000848481518110611013576110126148e6565b5b60200260200101516110259190614940565b9050611032338383612ad0565b50508080600101915050610fcf565b505050565b601e602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b6110986129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906147d2565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60195481565b6111f86129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906147d2565b60405180910390fd5b670de0b6b3a76400006103e8600161129c611087565b6112a69190614940565b6112b091906149ae565b6112ba91906149ae565b8110156112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390614a4e565b60405180910390fd5b670de0b6b3a7640000816113109190614940565b60098190555050565b5f611325848484612c7d565b6113e2846113316129e2565b6113dd856040518060600160405280602881526020016153ef6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6113946129e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461383c9092919063ffffffff16565b6129e9565b600190509392505050565b61dead81565b6113fb6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906147d2565b60405180910390fd5b836010819055508260118190555081601281905550806013819055506013546012546011546010546114bb9190614a6c565b6114c59190614a6c565b6114cf9190614a6c565b600f819055505f1515600e5f9054906101000a900460ff16151503611535576005600f541115611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614ae9565b60405180910390fd5b5b50505050565b5f6012905090565b5f6115e761154f6129e2565b846115e28560015f61155f6129e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461389e90919063ffffffff16565b6129e9565b6001905092915050565b7f000000000000000000000000b906b406906fd75aad26deba8b3402c6244861b681565b600c5f9054906101000a900460ff1681565b5f601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601b5481565b60145481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116e56129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a906147d2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f6118396129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be906147d2565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b6118ef6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611974906147d2565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611a086129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d906147d2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b611ad66129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b906147d2565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa667834d553fd007921146a5aca1c99423a8c751f869735fdcb630d25a0d39cd60405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611c7d6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906147d2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611d3790614758565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6390614758565b8015611dae5780601f10611d8557610100808354040283529160200191611dae565b820191905f5260205f20905b815481529060010190602001808311611d9157829003601f168201915b5050505050905090565b611dc06129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e45906147d2565b60405180910390fd5b7f000000000000000000000000b906b406906fd75aad26deba8b3402c6244861b673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390614b77565b60405180910390fd5b611ee682826138fb565b5050565b60125481565b601c5481565b60175481565b5f611fba611f086129e2565b84611fb5856040518060600160405280602581526020016154176025913960015f611f316129e2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461383c9092919063ffffffff16565b6129e9565b6001905092915050565b5f611fd7611fd06129e2565b8484612c7d565b6001905092915050565b611fe96129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906147d2565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121926129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612217906147d2565b60405180910390fd5b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122ba91906141c9565b60405180910390a25050565b6122ce6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612353906147d2565b60405180910390fd5b670de0b6b3a76400006103e86005612372611087565b61237c9190614940565b61238691906149ae565b61239091906149ae565b8110156123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c990614c05565b60405180910390fd5b670de0b6b3a7640000816123e69190614940565b600b8190555050565b600e5f9054906101000a900460ff1681565b60095481565b60185481565b5f6124166129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249b906147d2565b60405180910390fd5b620186a060016124b2611087565b6124bc9190614940565b6124c691906149ae565b821015612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90614c93565b60405180910390fd5b6103e86005612515611087565b61251f9190614940565b61252991906149ae565b82111561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290614d21565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60135481565b600a5481565b6126176129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906147d2565b60405180910390fd5b836015819055508260168190555081601781905550806018819055506018546017546016546015546126d79190614a6c565b6126e19190614a6c565b6126eb9190614a6c565b6014819055505f1515600e5f9054906101000a900460ff161515036127515760056014541115612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274790614ae9565b60405180910390fd5b5b50505050565b5f6127606129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e5906147d2565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60115481565b61281c6129e2565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a1906147d2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90614daf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600b5481565b5f33905090565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac39190614506565b60405180910390a3505050565b612adb838383613999565b612b44816040518060600160405280602681526020016153c9602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461383c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612bd3815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461389e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c709190614506565b60405180910390a3505050565b5f8103612c9457612c8f83835f612ad0565b613837565b600c5f9054906101000a900460ff161561333b57612cb0611c22565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d1e5750612cee611c22565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d5657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d90575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612da95750600560149054906101000a900460ff16155b1561333a57600c60019054906101000a900460ff16612e9d57601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e5d5750601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9390614e17565b60405180910390fd5b5b600e5f9054906101000a900460ff161561306057612eb9611c22565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f4057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f9857507f000000000000000000000000b906b406906fd75aad26deba8b3402c6244861b673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561305f5743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061301c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301390614ecb565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130fd5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131a457600954811115613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90614f59565b60405180910390fd5b600b5461315383611698565b8261315e9190614a6c565b111561319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319690614fc1565b60405180910390fd5b613339565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132415750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132905760095481111561328b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132829061504f565b60405180910390fd5b613338565b601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661333757600b546132ea83611698565b826132f59190614a6c565b1115613336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332d90614fc1565b60405180910390fd5b5b5b5b5b5b5f61334530611698565b90505f600a5482101590508080156133695750600c60029054906101000a900460ff165b80156133825750600560149054906101000a900460ff16155b80156133d55750601f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134285750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561347b5750601d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134be576001600560146101000a81548160ff0219169083151502179055506134a361399e565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061356d5750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613576575f90505b5f811561382757601f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135d457505f601454115b156136c2576064601454866135e99190614940565b6135f391906149ae565b9050601454601654826136069190614940565b61361091906149ae565b601a5f8282546136209190614a6c565b92505081905550601454601754826136389190614940565b61364291906149ae565b601c5f8282546136529190614a6c565b925050819055506014546018548261366a9190614940565b61367491906149ae565b601b5f8282546136849190614a6c565b925050819055506014546015548261369c9190614940565b6136a691906149ae565b60195f8282546136b69190614a6c565b92505081905550613804565b601f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561371957505f600f54115b15613803576064600f548661372e9190614940565b61373891906149ae565b9050600f546011548261374b9190614940565b61375591906149ae565b601a5f8282546137659190614a6c565b92505081905550600f546012548261377d9190614940565b61378791906149ae565b601c5f8282546137979190614a6c565b92505081905550600f54601354826137af9190614940565b6137b991906149ae565b601b5f8282546137c99190614a6c565b92505081905550600f54601054826137e19190614940565b6137eb91906149ae565b60195f8282546137fb9190614a6c565b925050819055505b5b5f81111561381857613817873083612ad0565b5b8085613824919061506d565b94505b613832878787612ad0565b505050505b505050565b5f838311158290613883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387a91906140b3565b60405180910390fd5b505f8385613891919061506d565b9050809150509392505050565b5f8082846138ac9190614a6c565b9050838110156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e8906150ea565b60405180910390fd5b8091505092915050565b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b5f6139a830611698565b90505f601b54601c54601954601a546139c19190614a6c565b6139cb9190614a6c565b6139d59190614a6c565b90505f808314806139e557505f82145b156139f257505050613cfc565b6014600a54613a019190614940565b831115613a1a576014600a54613a179190614940565b92505b5f600283601a5486613a2c9190614940565b613a3691906149ae565b613a4091906149ae565b90505f8185613a4f919061506d565b90505f479050613a5e82613cfe565b5f8147613a6b919061506d565b90505f8660195483613a7d9190614940565b613a8791906149ae565b90505f87601c5484613a999190614940565b613aa391906149ae565b90505f88601b5485613ab59190614940565b613abf91906149ae565b90505f828486613acf919061506d565b613ad9919061506d565b90505f601a819055505f6019819055505f601c819055505f601b8190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b3c90615135565b5f6040518083038185875af1925050503d805f8114613b76576040519150601f19603f3d011682016040523d82523d5f602084013e613b7b565b606091505b50508099505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613bc690615135565b5f6040518083038185875af1925050503d805f8114613c00576040519150601f19603f3d011682016040523d82523d5f602084013e613c05565b606091505b5050809950505f88118015613c1957505f81115b15613c6657613c288882613f31565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601a54604051613c5d93929190615149565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613cab90615135565b5f6040518083038185875af1925050503d805f8114613ce5576040519150601f19603f3d011682016040523d82523d5f602084013e613cea565b606091505b50508099505050505050505050505050505b565b5f600267ffffffffffffffff811115613d1a57613d196141e6565b5b604051908082528060200260200182016040528015613d485781602001602082028036833780820191505090505b50905030815f81518110613d5f57613d5e6148e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e269190615192565b81600181518110613e3a57613e396148e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e9f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129e9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613f009594939291906152ad565b5f604051808303815f87803b158015613f17575f80fd5b505af1158015613f29573d5f803e3d5ffd5b505050505050565b613f5c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129e9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613fe196959493929190615305565b60606040518083038185885af1158015613ffd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906140229190615378565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614060578082015181840152602081019050614045565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61408582614029565b61408f8185614033565b935061409f818560208601614043565b6140a88161406b565b840191505092915050565b5f6020820190508181035f8301526140cb818461407b565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61410d826140e4565b9050919050565b61411d81614103565b8114614127575f80fd5b50565b5f8135905061413881614114565b92915050565b5f819050919050565b6141508161413e565b811461415a575f80fd5b50565b5f8135905061416b81614147565b92915050565b5f8060408385031215614187576141866140dc565b5b5f6141948582860161412a565b92505060206141a58582860161415d565b9150509250929050565b5f8115159050919050565b6141c3816141af565b82525050565b5f6020820190506141dc5f8301846141ba565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61421c8261406b565b810181811067ffffffffffffffff8211171561423b5761423a6141e6565b5b80604052505050565b5f61424d6140d3565b90506142598282614213565b919050565b5f67ffffffffffffffff821115614278576142776141e6565b5b602082029050602081019050919050565b5f80fd5b5f61429f61429a8461425e565b614244565b905080838252602082019050602084028301858111156142c2576142c1614289565b5b835b818110156142eb57806142d7888261412a565b8452602084019350506020810190506142c4565b5050509392505050565b5f82601f830112614309576143086141e2565b5b813561431984826020860161428d565b91505092915050565b5f67ffffffffffffffff82111561433c5761433b6141e6565b5b602082029050602081019050919050565b5f61435f61435a84614322565b614244565b9050808382526020820190506020840283018581111561438257614381614289565b5b835b818110156143ab5780614397888261415d565b845260208401935050602081019050614384565b5050509392505050565b5f82601f8301126143c9576143c86141e2565b5b81356143d984826020860161434d565b91505092915050565b5f80604083850312156143f8576143f76140dc565b5b5f83013567ffffffffffffffff811115614415576144146140e0565b5b614421858286016142f5565b925050602083013567ffffffffffffffff811115614442576144416140e0565b5b61444e858286016143b5565b9150509250929050565b5f6020828403121561446d5761446c6140dc565b5b5f61447a8482850161412a565b91505092915050565b5f819050919050565b5f6144a66144a161449c846140e4565b614483565b6140e4565b9050919050565b5f6144b78261448c565b9050919050565b5f6144c8826144ad565b9050919050565b6144d8816144be565b82525050565b5f6020820190506144f15f8301846144cf565b92915050565b6145008161413e565b82525050565b5f6020820190506145195f8301846144f7565b92915050565b5f60208284031215614534576145336140dc565b5b5f6145418482850161415d565b91505092915050565b5f805f60608486031215614561576145606140dc565b5b5f61456e8682870161412a565b935050602061457f8682870161412a565b92505060406145908682870161415d565b9150509250925092565b6145a381614103565b82525050565b5f6020820190506145bc5f83018461459a565b92915050565b5f805f80608085870312156145da576145d96140dc565b5b5f6145e78782880161415d565b94505060206145f88782880161415d565b93505060406146098782880161415d565b925050606061461a8782880161415d565b91505092959194509250565b5f60ff82169050919050565b61463b81614626565b82525050565b5f6020820190506146545f830184614632565b92915050565b614663816141af565b811461466d575f80fd5b50565b5f8135905061467e8161465a565b92915050565b5f806040838503121561469a576146996140dc565b5b5f6146a78582860161412a565b92505060206146b885828601614670565b9150509250929050565b5f602082840312156146d7576146d66140dc565b5b5f6146e484828501614670565b91505092915050565b5f8060408385031215614703576147026140dc565b5b5f6147108582860161412a565b92505060206147218582860161412a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061476f57607f821691505b6020821081036147825761478161472b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6147bc602083614033565b91506147c782614788565b602082019050919050565b5f6020820190508181035f8301526147e9816147b0565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e67746800005f82015250565b5f614824601e83614033565b915061482f826147f0565b602082019050919050565b5f6020820190508181035f83015261485181614818565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d20325f8201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148b2602283614033565b91506148bd82614858565b604082019050919050565b5f6020820190508181035f8301526148df816148a6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61494a8261413e565b91506149558361413e565b92508282026149638161413e565b9150828204841483151761497a57614979614913565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149b88261413e565b91506149c38361413e565b9250826149d3576149d2614981565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614a38602f83614033565b9150614a43826149de565b604082019050919050565b5f6020820190508181035f830152614a6581614a2c565b9050919050565b5f614a768261413e565b9150614a818361413e565b9250828201905080821115614a9957614a98614913565b5b92915050565b7f4d757374206b6565702066656573206174203525206f72206c657373000000005f82015250565b5f614ad3601c83614033565b9150614ade82614a9f565b602082019050919050565b5f6020820190508181035f830152614b0081614ac7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614b61603983614033565b9150614b6c82614b07565b604082019050919050565b5f6020820190508181035f830152614b8e81614b55565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614bef602483614033565b9150614bfa82614b95565b604082019050919050565b5f6020820190508181035f830152614c1c81614be3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614c7d603583614033565b9150614c8882614c23565b604082019050919050565b5f6020820190508181035f830152614caa81614c71565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d0b603483614033565b9150614d1682614cb1565b604082019050919050565b5f6020820190508181035f830152614d3881614cff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614d99602683614033565b9150614da482614d3f565b604082019050919050565b5f6020820190508181035f830152614dc681614d8d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614e01601683614033565b9150614e0c82614dcd565b602082019050919050565b5f6020820190508181035f830152614e2e81614df5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614eb5604983614033565b9150614ec082614e35565b606082019050919050565b5f6020820190508181035f830152614ee281614ea9565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614f43603583614033565b9150614f4e82614ee9565b604082019050919050565b5f6020820190508181035f830152614f7081614f37565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614fab601383614033565b9150614fb682614f77565b602082019050919050565b5f6020820190508181035f830152614fd881614f9f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615039603683614033565b915061504482614fdf565b604082019050919050565b5f6020820190508181035f8301526150668161502d565b9050919050565b5f6150778261413e565b91506150828361413e565b925082820390508181111561509a57615099614913565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6150d4601b83614033565b91506150df826150a0565b602082019050919050565b5f6020820190508181035f830152615101816150c8565b9050919050565b5f81905092915050565b50565b5f6151205f83615108565b915061512b82615112565b5f82019050919050565b5f61513f82615115565b9150819050919050565b5f60608201905061515c5f8301866144f7565b61516960208301856144f7565b61517660408301846144f7565b949350505050565b5f8151905061518c81614114565b92915050565b5f602082840312156151a7576151a66140dc565b5b5f6151b48482850161517e565b91505092915050565b5f819050919050565b5f6151e06151db6151d6846151bd565b614483565b61413e565b9050919050565b6151f0816151c6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61522881614103565b82525050565b5f615239838361521f565b60208301905092915050565b5f602082019050919050565b5f61525b826151f6565b6152658185615200565b935061527083615210565b805f5b838110156152a0578151615287888261522e565b975061529283615245565b925050600181019050615273565b5085935050505092915050565b5f60a0820190506152c05f8301886144f7565b6152cd60208301876151e7565b81810360408301526152df8186615251565b90506152ee606083018561459a565b6152fb60808301846144f7565b9695505050505050565b5f60c0820190506153185f83018961459a565b61532560208301886144f7565b61533260408301876151e7565b61533f60608301866151e7565b61534c608083018561459a565b61535960a08301846144f7565b979650505050505050565b5f8151905061537281614147565b92915050565b5f805f6060848603121561538f5761538e6140dc565b5b5f61539c86828701615364565b93505060206153ad86828701615364565b92505060406153be86828701615364565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122019adcaac4c7b05b0656ccf31bbfdee15d7840c96fce5dbb76962b3de761fb8e364736f6c63430008160033

Deployed Bytecode Sourcemap

10798:16600:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2976:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3796:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26859:534;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12351:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10838:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3243:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19453:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12092:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12052;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16766:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3971:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10941:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17592:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3160:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4332:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10896:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11392:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19795:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12132:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11867:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11472:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3341:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8350:148;;;;;;;;;;;;;:::i;:::-;;15979:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17235:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11033:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11721:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15811:112;;;;;;;;;;;;;:::i;:::-;;19618:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8156:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11115:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11902:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17479:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3066:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18785:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11795:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12170:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11978:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4556:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3458:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19233:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12573:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11432:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11191:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18595:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17008:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11639:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11277:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12010:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16373:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11687:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3639:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11826:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11319:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18090:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16164:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11758:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8504:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11940:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11359:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2976:84;3030:13;3053:5;3046:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2976:84;:::o;3796:169::-;3879:4;3896:39;3905:12;:10;:12::i;:::-;3919:7;3928:6;3896:8;:39::i;:::-;3953:4;3946:11;;3796:169;;;;:::o;26859:534::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27016:6:::1;:13;26994:11;:18;:35;26986:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;27104:3;27082:11;:18;:25;;27074:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;27162:9;27157:229;27181:11;:18;27177:1;:22;27157:229;;;27221:14;27238:11;27250:1;27238:14;;;;;;;;:::i;:::-;;;;;;;;27221:31;;27267:20;27303:6;27290;27297:1;27290:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;27267:43;;27325:49;27341:10;27353:6;27361:12;27325:15;:49::i;:::-;27206:180;;27201:3;;;;;;;27157:229;;;;26859:534:::0;;:::o;12351:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;10838:51::-;;;:::o;3243:92::-;3304:7;3321:12;;3314:19;;3243:92;:::o;19453:157::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19560:9:::1;;;;;;;;;;;19532:38;;19549:9;19532:38;;;;;;;;;;;;19593:9;19581;;:21;;;;;;;;;;;;;;;;;;19453:157:::0;:::o;12092:33::-;;;;:::o;12052:::-;;;;:::o;16766:234::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16885:4:::1;16879;16875:1;16859:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16858:31;;;;:::i;:::-;16848:6;:41;;16840:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;16985:6;16975;:17;;;;:::i;:::-;16952:20;:40;;;;16766:234:::0;:::o;3971:355::-;4111:4;4128:36;4138:6;4146:9;4157:6;4128:9;:36::i;:::-;4175:121;4184:6;4192:12;:10;:12::i;:::-;4206:89;4244:6;4206:89;;;;;;;;;;;;;;;;;:11;:19;4218:6;4206:19;;;;;;;;;;;;;;;:33;4226:12;:10;:12::i;:::-;4206:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;4175:8;:121::i;:::-;4314:4;4307:11;;3971:355;;;;;:::o;10941:53::-;10987:6;10941:53;:::o;17592:486::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17747:13:::1;17729:15;:31;;;;17789:13;17771:15;:31;;;;17825:7;17813:9;:19;;;;17859:11;17843:13;:27;;;;17944:13;;17932:9;;17914:15;;17896;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;17881:12;:76;;;;17996:5;17972:29;;:20;;;;;;;;;;;:29;;::::0;17968:102:::1;;18036:1;18020:12;;:17;;18012:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;17968:102;17592:486:::0;;;;:::o;3160:77::-;3218:5;3233:2;3226:9;;3160:77;:::o;4332:218::-;4420:4;4437:83;4446:12;:10;:12::i;:::-;4460:7;4469:50;4508:10;4469:11;:25;4481:12;:10;:12::i;:::-;4469:25;;;;;;;;;;;;;;;:34;4495:7;4469:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4437:8;:83::i;:::-;4538:4;4531:11;;4332:218;;;;:::o;10896:38::-;;;:::o;11392:33::-;;;;;;;;;;;;;:::o;19795:125::-;19860:4;19884:19;:28;19904:7;19884:28;;;;;;;;;;;;;;;;;;;;;;;;;19877:35;;19795:125;;;:::o;12132:31::-;;;;:::o;11867:28::-;;;;:::o;11472:31::-;;;;;;;;;;;;;:::o;3341:111::-;3415:7;3432:9;:18;3442:7;3432:18;;;;;;;;;;;;;;;;3425:25;;3341:111;;;:::o;8350:148::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8457:1:::1;8420:40;;8441:6;;;;;;;;;;;8420:40;;;;;;;;;;;;8488:1;8471:6;;:19;;;;;;;;;;;;;;;;;;8350:148::o:0;15979:120::-;16031:4;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16064:5:::1;16047:14;;:22;;;;;;;;;;;;;;;;;;16087:4;16080:11;;15979:120:::0;:::o;17235:144::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17367:4:::1;17325:31;:39;17357:6;17325:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;17235:144:::0;;:::o;11033:75::-;;;;;;;;;;;;;:::o;11721:30::-;;;;:::o;15811:112::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15882:4:::1;15866:13;;:20;;;;;;;;;;;;;;;;;;15911:4;15897:11;;:18;;;;;;;;;;;;;;;;;;15811:112::o:0;19618:161::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19729:13:::1;;;;;;;;;;;19697:46;;19718:9;19697:46;;;;;;;;;;;;19766:9;19750:13;;:25;;;;;;;;;;;;;;;;;;19618:161:::0;:::o;8156:63::-;8194:7;8211:6;;;;;;;;;;;8204:13;;8156:63;:::o;11115:69::-;;;;;;;;;;;;;:::o;11902:31::-;;;;:::o;17479:101::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17565:7:::1;17551:11;;:21;;;;;;;;;;;;;;;;;;17479:101:::0;:::o;3066:88::-;3122:13;3145:7;3138:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3066:88;:::o;18785:244::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18892:13:::1;18884:21;;:4;:21;;::::0;18876:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18980:41;19009:4;19015:5;18980:28;:41::i;:::-;18785:244:::0;;:::o;11795:24::-;;;;:::o;12170:27::-;;;;:::o;11978:25::-;;;;:::o;4556:269::-;4649:4;4666:129;4675:12;:10;:12::i;:::-;4689:7;4698:96;4737:15;4698:96;;;;;;;;;;;;;;;;;:11;:25;4710:12;:10;:12::i;:::-;4698:25;;;;;;;;;;;;;;;:34;4724:7;4698:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;4666:8;:129::i;:::-;4813:4;4806:11;;4556:269;;;;:::o;3458:175::-;3544:4;3561:42;3571:12;:10;:12::i;:::-;3585:9;3596:6;3561:9;:42::i;:::-;3621:4;3614:11;;3458:175;;;;:::o;19233:208::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19370:15:::1;;;;;;;;;;;19327:59;;19350:18;19327:59;;;;;;;;;;;;19415:18;19397:15;;:36;;;;;;;;;;;;;;;;;;19233:208:::0;:::o;12573:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;11432:33::-;;;;;;;;;;;;;:::o;11191:73::-;;;;;;;;;;;;;:::o;18595:182::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18711:8:::1;18680:19;:28;18700:7;18680:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18751:7;18735:34;;;18760:8;18735:34;;;;;;:::i;:::-;;;;;;;;18595:182:::0;;:::o;17008:215::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17130:4:::1;17124;17120:1;17104:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;17103:31;;;;:::i;:::-;17093:6;:41;;17085:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;17208:6;17198;:17;;;;:::i;:::-;17186:9;:29;;;;17008:215:::0;:::o;11639:39::-;;;;;;;;;;;;;:::o;11277:35::-;;;;:::o;12010:29::-;;;;:::o;16373:381::-;16454:4;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16510:6:::1;16506:1;16490:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;16477:9;:39;;16469:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;16625:4;16621:1;16605:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16592:9;:37;;16584:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;16717:9;16696:18;:30;;;;16743:4;16736:11;;16373:381:::0;;;:::o;11687:27::-;;;;:::o;3639:151::-;3728:7;3755:11;:18;3767:5;3755:18;;;;;;;;;;;;;;;:27;3774:7;3755:27;;;;;;;;;;;;;;;;3748:34;;3639:151;;;;:::o;11826:28::-;;;;:::o;11319:33::-;;;;:::o;18090:497::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18247:13:::1;18228:16;:32;;;;18290:13;18271:16;:32;;;;18327:7;18314:10;:20;;;;18362:11;18345:14;:28;;;;18451:14;;18438:10;;18419:16;;18400;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;18384:13;:81;;;;18504:5;18480:29;;:20;;;;;;;;;;;:29;;::::0;18476:103:::1;;18545:1;18528:13;;:18;;18520:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;18476:103;18090:497:::0;;;;:::o;16164:134::-;16224:4;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16263:5:::1;16240:20;;:28;;;;;;;;;;;;;;;;;;16286:4;16279:11;;16164:134:::0;:::o;11758:30::-;;;;:::o;8504:244::-;8275:12;:10;:12::i;:::-;8265:22;;:6;;;;;;;;;;;:22;;;8257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8613:1:::1;8593:22;;:8;:22;;::::0;8585:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8703:8;8674:38;;8695:6;;;;;;;;;;;8674:38;;;;;;;;;;;;8732:8;8723:6;;:17;;;;;;;;;;;;;;;;;;8504:244:::0;:::o;11940:31::-;;;;:::o;11359:24::-;;;;:::o;1049:98::-;1102:7;1129:10;1122:17;;1049:98;:::o;6043:220::-;6201:6;6171:11;:18;6183:5;6171:18;;;;;;;;;;;;;;;:27;6190:7;6171:27;;;;;;;;;;;;;;;:36;;;;6239:7;6223:32;;6232:5;6223:32;;;6248:6;6223:32;;;;;;:::i;:::-;;;;;;;;6043:220;;;:::o;4831:406::-;4963:47;4984:6;4992:9;5003:6;4963:20;:47::i;:::-;5041:71;5063:6;5041:71;;;;;;;;;;;;;;;;;:9;:17;5051:6;5041:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;5021:9;:17;5031:6;5021:17;;;;;;;;;;;;;;;:91;;;;5146:32;5171:6;5146:9;:20;5156:9;5146:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5123:9;:20;5133:9;5123:20;;;;;;;;;;;;;;;:55;;;;5211:9;5194:35;;5203:6;5194:35;;;5222:6;5194:35;;;;;;:::i;:::-;;;;;;;;4831:406;;;:::o;19928:4091::-;20074:1;20064:6;:11;20061:92;;20092:28;20108:4;20114:2;20118:1;20092:15;:28::i;:::-;20135:7;;20061:92;20176:14;;;;;;;;;;;20173:1841;;;20236:7;:5;:7::i;:::-;20228:15;;:4;:15;;;;:49;;;;;20270:7;:5;:7::i;:::-;20264:13;;:2;:13;;;;20228:49;:86;;;;;20312:1;20298:16;;:2;:16;;;;20228:86;:128;;;;;20349:6;20335:21;;:2;:21;;;;20228:128;:158;;;;;20378:8;;;;;;;;;;;20377:9;20228:158;20206:1797;;;20424:13;;;;;;;;;;;20420:148;;20469:19;:25;20489:4;20469:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20498:19;:23;20518:2;20498:23;;;;;;;;;;;;;;;;;;;;;;;;;20469:52;20461:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;20420:148;20726:20;;;;;;;;;;;20722:423;;;20780:7;:5;:7::i;:::-;20774:13;;:2;:13;;;;:47;;;;;20805:15;20791:30;;:2;:30;;;;20774:47;:79;;;;;20839:13;20825:28;;:2;:28;;;;20774:79;20770:356;;;20931:12;20889:28;:39;20918:9;20889:39;;;;;;;;;;;;;;;;:54;20881:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21090:12;21048:28;:39;21077:9;21048:39;;;;;;;;;;;;;;;:54;;;;20770:356;20722:423;21214:25;:31;21240:4;21214:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;21250:31;:35;21282:2;21250:35;;;;;;;;;;;;;;;;;;;;;;;;;21249:36;21214:71;21210:778;;;21332:20;;21322:6;:30;;21314:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21471:9;;21454:13;21464:2;21454:9;:13::i;:::-;21445:6;:22;;;;:::i;:::-;:35;;21437:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21210:778;;;21598:25;:29;21624:2;21598:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;21632:31;:37;21664:4;21632:37;;;;;;;;;;;;;;;;;;;;;;;;;21631:38;21598:71;21594:394;;;21716:20;;21706:6;:30;;21698:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;21594:394;;;21842:31;:35;21874:2;21842:35;;;;;;;;;;;;;;;;;;;;;;;;;21838:150;;21935:9;;21918:13;21928:2;21918:9;:13::i;:::-;21909:6;:22;;;;:::i;:::-;:35;;21901:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21838:150;21594:394;21210:778;20206:1797;20173:1841;22028:28;22059:24;22077:4;22059:9;:24::i;:::-;22028:55;;22104:12;22143:18;;22119:20;:42;;22104:57;;22192:7;:35;;;;;22216:11;;;;;;;;;;;22192:35;:61;;;;;22245:8;;;;;;;;;;;22244:9;22192:61;:110;;;;;22271:25;:31;22297:4;22271:31;;;;;;;;;;;;;;;;;;;;;;;;;22270:32;22192:110;:153;;;;;22320:19;:25;22340:4;22320:25;;;;;;;;;;;;;;;;;;;;;;;;;22319:26;22192:153;:194;;;;;22363:19;:23;22383:2;22363:23;;;;;;;;;;;;;;;;;;;;;;;;;22362:24;22192:194;22174:338;;;22424:4;22413:8;;:15;;;;;;;;;;;;;;;;;;22457:10;:8;:10::i;:::-;22495:5;22484:8;;:16;;;;;;;;;;;;;;;;;;22174:338;22524:12;22540:8;;;;;;;;;;;22539:9;22524:24;;22649:19;:25;22669:4;22649:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22678:19;:23;22698:2;22678:23;;;;;;;;;;;;;;;;;;;;;;;;;22649:52;22646:99;;;22728:5;22718:15;;22646:99;22765:12;22869:7;22866:1100;;;22920:25;:29;22946:2;22920:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;22969:1;22953:13;;:17;22920:50;22916:881;;;23020:3;23006:13;;22997:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;22990:33;;23090:13;;23071:16;;23064:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23042:18;;:61;;;;;;;:::i;:::-;;;;;;;;23158:13;;23145:10;;23138:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;23122:12;;:49;;;;;;;:::i;:::-;;;;;;;;23234:13;;23217:14;;23210:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;23190:16;;:57;;;;;;;:::i;:::-;;;;;;;;23314:13;;23295:16;;23288:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23266:18;;:61;;;;;;;:::i;:::-;;;;;;;;22916:881;;;23388:25;:31;23414:4;23388:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;23438:1;23423:12;;:16;23388:51;23385:412;;;23486:3;23473:12;;23464:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;23457:32;;23552:12;;23534:15;;23527:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23505:18;;:59;;;;;;;:::i;:::-;;;;;;;;23618:12;;23606:9;;23599:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;23583:12;;:47;;;;;;;:::i;:::-;;;;;;;;23691:12;;23675:13;;23669:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;23649:16;;:54;;;;;;;:::i;:::-;;;;;;;;23769:12;;23751:15;;23744:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23722:18;;:59;;;;;;;:::i;:::-;;;;;;;;23385:412;22916:881;23835:1;23828:4;:8;23825:93;;;23860:42;23876:4;23890;23897;23860:15;:42::i;:::-;23825:93;23950:4;23940:14;;;;;:::i;:::-;;;22866:1100;23978:33;23994:4;24000:2;24004:6;23978:15;:33::i;:::-;20041:3978;;;;19928:4091;;;;:::o;6752:190::-;6838:7;6871:1;6866;:6;;6874:12;6858:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6898:9;6914:1;6910;:5;;;;:::i;:::-;6898:17;;6933:1;6926:8;;;6752:190;;;;;:::o;6425:179::-;6483:7;6503:9;6519:1;6515;:5;;;;:::i;:::-;6503:17;;6544:1;6539;:6;;6531:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6595:1;6588:8;;;6425:179;;;;:::o;19037:188::-;19154:5;19120:25;:31;19146:4;19120:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19211:5;19177:40;;19205:4;19177:40;;;;;;;;;;;;19037:188;;:::o;6269:125::-;;;;:::o;25175:1672::-;25214:23;25240:24;25258:4;25240:9;:24::i;:::-;25214:50;;25275:25;25360:16;;25345:12;;25324:18;;25303;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;:73;;;;:::i;:::-;25275:101;;25387:12;25434:1;25415:15;:20;:46;;;;25460:1;25439:17;:22;25415:46;25412:60;;;25464:7;;;;;25412:60;25524:2;25503:18;;:23;;;;:::i;:::-;25485:15;:41;25482:111;;;25579:2;25558:18;;:23;;;;:::i;:::-;25540:41;;25482:111;25603:23;25688:1;25668:17;25647:18;;25629:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;25603:86;;25700:26;25747:15;25729;:33;;;;:::i;:::-;25700:62;;25773:25;25801:21;25773:49;;25833:36;25850:18;25833:16;:36::i;:::-;25881:18;25926:17;25902:21;:41;;;;:::i;:::-;25881:62;;25954:23;26012:17;25993:18;;25980:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;25954:75;;26040:17;26086;26073:12;;26060:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;26040:63;;26114:21;26168:17;26151:16;;26138:10;:29;;;;:::i;:::-;:47;;;;:::i;:::-;26114:71;;26196:23;26253:9;26235:15;26222:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;26196:66;;26294:1;26273:18;:22;;;;26327:1;26306:18;:22;;;;26354:1;26339:12;:16;;;;26385:1;26366:16;:20;;;;26418:13;;;;;;;;;;;26410:27;;26445:13;26410:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26397:66;;;;;26495:9;;;;;;;;;;;26487:23;;26518:9;26487:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26474:58;;;;;26564:1;26546:15;:19;:42;;;;;26587:1;26569:15;:19;26546:42;26543:210;;;26604:46;26617:15;26634;26604:12;:46::i;:::-;26670:71;26685:18;26705:15;26722:18;;26670:71;;;;;;;;:::i;:::-;;;;;;;;26543:210;26784:15;;;;;;;;;;;26776:29;;26813:21;26776:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26763:76;;;;;25203:1644;;;;;;;;;;;25175:1672;:::o;24027:601::-;24155:21;24193:1;24179:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24155:40;;24224:4;24206;24211:1;24206:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24250:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24240:4;24245:1;24240:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24285:62;24302:4;24317:15;24335:11;24285:8;:62::i;:::-;24386:15;:66;;;24467:11;24493:1;24537:4;24564;24584:15;24386:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24082:546;24027:601;:::o;24652:515::-;24800:62;24817:4;24832:15;24850:11;24800:8;:62::i;:::-;24905:15;:31;;;24944:9;24977:4;24997:11;25023:1;25066;25109:9;;;;;;;;;;;25133:15;24905:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24652:515;;:::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:117::-;3555:1;3552;3545:12;3569:180;3617:77;3614:1;3607:88;3714:4;3711:1;3704:15;3738:4;3735:1;3728:15;3755:281;3838:27;3860:4;3838:27;:::i;:::-;3830:6;3826:40;3968:6;3956:10;3953:22;3932:18;3920:10;3917:34;3914:62;3911:88;;;3979:18;;:::i;:::-;3911:88;4019:10;4015:2;4008:22;3798:238;3755:281;;:::o;4042:129::-;4076:6;4103:20;;:::i;:::-;4093:30;;4132:33;4160:4;4152:6;4132:33;:::i;:::-;4042:129;;;:::o;4177:311::-;4254:4;4344:18;4336:6;4333:30;4330:56;;;4366:18;;:::i;:::-;4330:56;4416:4;4408:6;4404:17;4396:25;;4476:4;4470;4466:15;4458:23;;4177:311;;;:::o;4494:117::-;4603:1;4600;4593:12;4634:710;4730:5;4755:81;4771:64;4828:6;4771:64;:::i;:::-;4755:81;:::i;:::-;4746:90;;4856:5;4885:6;4878:5;4871:21;4919:4;4912:5;4908:16;4901:23;;4972:4;4964:6;4960:17;4952:6;4948:30;5001:3;4993:6;4990:15;4987:122;;;5020:79;;:::i;:::-;4987:122;5135:6;5118:220;5152:6;5147:3;5144:15;5118:220;;;5227:3;5256:37;5289:3;5277:10;5256:37;:::i;:::-;5251:3;5244:50;5323:4;5318:3;5314:14;5307:21;;5194:144;5178:4;5173:3;5169:14;5162:21;;5118:220;;;5122:21;4736:608;;4634:710;;;;;:::o;5367:370::-;5438:5;5487:3;5480:4;5472:6;5468:17;5464:27;5454:122;;5495:79;;:::i;:::-;5454:122;5612:6;5599:20;5637:94;5727:3;5719:6;5712:4;5704:6;5700:17;5637:94;:::i;:::-;5628:103;;5444:293;5367:370;;;;:::o;5743:311::-;5820:4;5910:18;5902:6;5899:30;5896:56;;;5932:18;;:::i;:::-;5896:56;5982:4;5974:6;5970:17;5962:25;;6042:4;6036;6032:15;6024:23;;5743:311;;;:::o;6077:710::-;6173:5;6198:81;6214:64;6271:6;6214:64;:::i;:::-;6198:81;:::i;:::-;6189:90;;6299:5;6328:6;6321:5;6314:21;6362:4;6355:5;6351:16;6344:23;;6415:4;6407:6;6403:17;6395:6;6391:30;6444:3;6436:6;6433:15;6430:122;;;6463:79;;:::i;:::-;6430:122;6578:6;6561:220;6595:6;6590:3;6587:15;6561:220;;;6670:3;6699:37;6732:3;6720:10;6699:37;:::i;:::-;6694:3;6687:50;6766:4;6761:3;6757:14;6750:21;;6637:144;6621:4;6616:3;6612:14;6605:21;;6561:220;;;6565:21;6179:608;;6077:710;;;;;:::o;6810:370::-;6881:5;6930:3;6923:4;6915:6;6911:17;6907:27;6897:122;;6938:79;;:::i;:::-;6897:122;7055:6;7042:20;7080:94;7170:3;7162:6;7155:4;7147:6;7143:17;7080:94;:::i;:::-;7071:103;;6887:293;6810:370;;;;:::o;7186:894::-;7304:6;7312;7361:2;7349:9;7340:7;7336:23;7332:32;7329:119;;;7367:79;;:::i;:::-;7329:119;7515:1;7504:9;7500:17;7487:31;7545:18;7537:6;7534:30;7531:117;;;7567:79;;:::i;:::-;7531:117;7672:78;7742:7;7733:6;7722:9;7718:22;7672:78;:::i;:::-;7662:88;;7458:302;7827:2;7816:9;7812:18;7799:32;7858:18;7850:6;7847:30;7844:117;;;7880:79;;:::i;:::-;7844:117;7985:78;8055:7;8046:6;8035:9;8031:22;7985:78;:::i;:::-;7975:88;;7770:303;7186:894;;;;;:::o;8086:329::-;8145:6;8194:2;8182:9;8173:7;8169:23;8165:32;8162:119;;;8200:79;;:::i;:::-;8162:119;8320:1;8345:53;8390:7;8381:6;8370:9;8366:22;8345:53;:::i;:::-;8335:63;;8291:117;8086:329;;;;:::o;8421:60::-;8449:3;8470:5;8463:12;;8421:60;;;:::o;8487:142::-;8537:9;8570:53;8588:34;8597:24;8615:5;8597:24;:::i;:::-;8588:34;:::i;:::-;8570:53;:::i;:::-;8557:66;;8487:142;;;:::o;8635:126::-;8685:9;8718:37;8749:5;8718:37;:::i;:::-;8705:50;;8635:126;;;:::o;8767:153::-;8844:9;8877:37;8908:5;8877:37;:::i;:::-;8864:50;;8767:153;;;:::o;8926:185::-;9040:64;9098:5;9040:64;:::i;:::-;9035:3;9028:77;8926:185;;:::o;9117:276::-;9237:4;9275:2;9264:9;9260:18;9252:26;;9288:98;9383:1;9372:9;9368:17;9359:6;9288:98;:::i;:::-;9117:276;;;;:::o;9399:118::-;9486:24;9504:5;9486:24;:::i;:::-;9481:3;9474:37;9399:118;;:::o;9523:222::-;9616:4;9654:2;9643:9;9639:18;9631:26;;9667:71;9735:1;9724:9;9720:17;9711:6;9667:71;:::i;:::-;9523:222;;;;:::o;9751:329::-;9810:6;9859:2;9847:9;9838:7;9834:23;9830:32;9827:119;;;9865:79;;:::i;:::-;9827:119;9985:1;10010:53;10055:7;10046:6;10035:9;10031:22;10010:53;:::i;:::-;10000:63;;9956:117;9751:329;;;;:::o;10086:619::-;10163:6;10171;10179;10228:2;10216:9;10207:7;10203:23;10199:32;10196:119;;;10234:79;;:::i;:::-;10196:119;10354:1;10379:53;10424:7;10415:6;10404:9;10400:22;10379:53;:::i;:::-;10369:63;;10325:117;10481:2;10507:53;10552:7;10543:6;10532:9;10528:22;10507:53;:::i;:::-;10497:63;;10452:118;10609:2;10635:53;10680:7;10671:6;10660:9;10656:22;10635:53;:::i;:::-;10625:63;;10580:118;10086:619;;;;;:::o;10711:118::-;10798:24;10816:5;10798:24;:::i;:::-;10793:3;10786:37;10711:118;;:::o;10835:222::-;10928:4;10966:2;10955:9;10951:18;10943:26;;10979:71;11047:1;11036:9;11032:17;11023:6;10979:71;:::i;:::-;10835:222;;;;:::o;11063:765::-;11149:6;11157;11165;11173;11222:3;11210:9;11201:7;11197:23;11193:33;11190:120;;;11229:79;;:::i;:::-;11190:120;11349:1;11374:53;11419:7;11410:6;11399:9;11395:22;11374:53;:::i;:::-;11364:63;;11320:117;11476:2;11502:53;11547:7;11538:6;11527:9;11523:22;11502:53;:::i;:::-;11492:63;;11447:118;11604:2;11630:53;11675:7;11666:6;11655:9;11651:22;11630:53;:::i;:::-;11620:63;;11575:118;11732:2;11758:53;11803:7;11794:6;11783:9;11779:22;11758:53;:::i;:::-;11748:63;;11703:118;11063:765;;;;;;;:::o;11834:86::-;11869:7;11909:4;11902:5;11898:16;11887:27;;11834:86;;;:::o;11926:112::-;12009:22;12025:5;12009:22;:::i;:::-;12004:3;11997:35;11926:112;;:::o;12044:214::-;12133:4;12171:2;12160:9;12156:18;12148:26;;12184:67;12248:1;12237:9;12233:17;12224:6;12184:67;:::i;:::-;12044:214;;;;:::o;12264:116::-;12334:21;12349:5;12334:21;:::i;:::-;12327:5;12324:32;12314:60;;12370:1;12367;12360:12;12314:60;12264:116;:::o;12386:133::-;12429:5;12467:6;12454:20;12445:29;;12483:30;12507:5;12483:30;:::i;:::-;12386:133;;;;:::o;12525:468::-;12590:6;12598;12647:2;12635:9;12626:7;12622:23;12618:32;12615:119;;;12653:79;;:::i;:::-;12615:119;12773:1;12798:53;12843:7;12834:6;12823:9;12819:22;12798:53;:::i;:::-;12788:63;;12744:117;12900:2;12926:50;12968:7;12959:6;12948:9;12944:22;12926:50;:::i;:::-;12916:60;;12871:115;12525:468;;;;;:::o;12999:323::-;13055:6;13104:2;13092:9;13083:7;13079:23;13075:32;13072:119;;;13110:79;;:::i;:::-;13072:119;13230:1;13255:50;13297:7;13288:6;13277:9;13273:22;13255:50;:::i;:::-;13245:60;;13201:114;12999:323;;;;:::o;13328:474::-;13396:6;13404;13453:2;13441:9;13432:7;13428:23;13424:32;13421:119;;;13459:79;;:::i;:::-;13421:119;13579:1;13604:53;13649:7;13640:6;13629:9;13625:22;13604:53;:::i;:::-;13594:63;;13550:117;13706:2;13732:53;13777:7;13768:6;13757:9;13753:22;13732:53;:::i;:::-;13722:63;;13677:118;13328:474;;;;;:::o;13808:180::-;13856:77;13853:1;13846:88;13953:4;13950:1;13943:15;13977:4;13974:1;13967:15;13994:320;14038:6;14075:1;14069:4;14065:12;14055:22;;14122:1;14116:4;14112:12;14143:18;14133:81;;14199:4;14191:6;14187:17;14177:27;;14133:81;14261:2;14253:6;14250:14;14230:18;14227:38;14224:84;;14280:18;;:::i;:::-;14224:84;14045:269;13994:320;;;:::o;14320:182::-;14460:34;14456:1;14448:6;14444:14;14437:58;14320:182;:::o;14508:366::-;14650:3;14671:67;14735:2;14730:3;14671:67;:::i;:::-;14664:74;;14747:93;14836:3;14747:93;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14508:366;;;:::o;14880:419::-;15046:4;15084:2;15073:9;15069:18;15061:26;;15133:9;15127:4;15123:20;15119:1;15108:9;15104:17;15097:47;15161:131;15287:4;15161:131;:::i;:::-;15153:139;;14880:419;;;:::o;15305:180::-;15445:32;15441:1;15433:6;15429:14;15422:56;15305:180;:::o;15491:366::-;15633:3;15654:67;15718:2;15713:3;15654:67;:::i;:::-;15647:74;;15730:93;15819:3;15730:93;:::i;:::-;15848:2;15843:3;15839:12;15832:19;;15491:366;;;:::o;15863:419::-;16029:4;16067:2;16056:9;16052:18;16044:26;;16116:9;16110:4;16106:20;16102:1;16091:9;16087:17;16080:47;16144:131;16270:4;16144:131;:::i;:::-;16136:139;;15863:419;;;:::o;16288:221::-;16428:34;16424:1;16416:6;16412:14;16405:58;16497:4;16492:2;16484:6;16480:15;16473:29;16288:221;:::o;16515:366::-;16657:3;16678:67;16742:2;16737:3;16678:67;:::i;:::-;16671:74;;16754:93;16843:3;16754:93;:::i;:::-;16872:2;16867:3;16863:12;16856:19;;16515:366;;;:::o;16887:419::-;17053:4;17091:2;17080:9;17076:18;17068:26;;17140:9;17134:4;17130:20;17126:1;17115:9;17111:17;17104:47;17168:131;17294:4;17168:131;:::i;:::-;17160:139;;16887:419;;;:::o;17312:180::-;17360:77;17357:1;17350:88;17457:4;17454:1;17447:15;17481:4;17478:1;17471:15;17498:180;17546:77;17543:1;17536:88;17643:4;17640:1;17633:15;17667:4;17664:1;17657:15;17684:410;17724:7;17747:20;17765:1;17747:20;:::i;:::-;17742:25;;17781:20;17799:1;17781:20;:::i;:::-;17776:25;;17836:1;17833;17829:9;17858:30;17876:11;17858:30;:::i;:::-;17847:41;;18037:1;18028:7;18024:15;18021:1;18018:22;17998:1;17991:9;17971:83;17948:139;;18067:18;;:::i;:::-;17948:139;17732:362;17684:410;;;;:::o;18100:180::-;18148:77;18145:1;18138:88;18245:4;18242:1;18235:15;18269:4;18266:1;18259:15;18286:185;18326:1;18343:20;18361:1;18343:20;:::i;:::-;18338:25;;18377:20;18395:1;18377:20;:::i;:::-;18372:25;;18416:1;18406:35;;18421:18;;:::i;:::-;18406:35;18463:1;18460;18456:9;18451:14;;18286:185;;;;:::o;18477:234::-;18617:34;18613:1;18605:6;18601:14;18594:58;18686:17;18681:2;18673:6;18669:15;18662:42;18477:234;:::o;18717:366::-;18859:3;18880:67;18944:2;18939:3;18880:67;:::i;:::-;18873:74;;18956:93;19045:3;18956:93;:::i;:::-;19074:2;19069:3;19065:12;19058:19;;18717:366;;;:::o;19089:419::-;19255:4;19293:2;19282:9;19278:18;19270:26;;19342:9;19336:4;19332:20;19328:1;19317:9;19313:17;19306:47;19370:131;19496:4;19370:131;:::i;:::-;19362:139;;19089:419;;;:::o;19514:191::-;19554:3;19573:20;19591:1;19573:20;:::i;:::-;19568:25;;19607:20;19625:1;19607:20;:::i;:::-;19602:25;;19650:1;19647;19643:9;19636:16;;19671:3;19668:1;19665:10;19662:36;;;19678:18;;:::i;:::-;19662:36;19514:191;;;;:::o;19711:178::-;19851:30;19847:1;19839:6;19835:14;19828:54;19711:178;:::o;19895:366::-;20037:3;20058:67;20122:2;20117:3;20058:67;:::i;:::-;20051:74;;20134:93;20223:3;20134:93;:::i;:::-;20252:2;20247:3;20243:12;20236:19;;19895:366;;;:::o;20267:419::-;20433:4;20471:2;20460:9;20456:18;20448:26;;20520:9;20514:4;20510:20;20506:1;20495:9;20491:17;20484:47;20548:131;20674:4;20548:131;:::i;:::-;20540:139;;20267:419;;;:::o;20692:244::-;20832:34;20828:1;20820:6;20816:14;20809:58;20901:27;20896:2;20888:6;20884:15;20877:52;20692:244;:::o;20942:366::-;21084:3;21105:67;21169:2;21164:3;21105:67;:::i;:::-;21098:74;;21181:93;21270:3;21181:93;:::i;:::-;21299:2;21294:3;21290:12;21283:19;;20942:366;;;:::o;21314:419::-;21480:4;21518:2;21507:9;21503:18;21495:26;;21567:9;21561:4;21557:20;21553:1;21542:9;21538:17;21531:47;21595:131;21721:4;21595:131;:::i;:::-;21587:139;;21314:419;;;:::o;21739:223::-;21879:34;21875:1;21867:6;21863:14;21856:58;21948:6;21943:2;21935:6;21931:15;21924:31;21739:223;:::o;21968:366::-;22110:3;22131:67;22195:2;22190:3;22131:67;:::i;:::-;22124:74;;22207:93;22296:3;22207:93;:::i;:::-;22325:2;22320:3;22316:12;22309:19;;21968:366;;;:::o;22340:419::-;22506:4;22544:2;22533:9;22529:18;22521:26;;22593:9;22587:4;22583:20;22579:1;22568:9;22564:17;22557:47;22621:131;22747:4;22621:131;:::i;:::-;22613:139;;22340:419;;;:::o;22765:240::-;22905:34;22901:1;22893:6;22889:14;22882:58;22974:23;22969:2;22961:6;22957:15;22950:48;22765:240;:::o;23011:366::-;23153:3;23174:67;23238:2;23233:3;23174:67;:::i;:::-;23167:74;;23250:93;23339:3;23250:93;:::i;:::-;23368:2;23363:3;23359:12;23352:19;;23011:366;;;:::o;23383:419::-;23549:4;23587:2;23576:9;23572:18;23564:26;;23636:9;23630:4;23626:20;23622:1;23611:9;23607:17;23600:47;23664:131;23790:4;23664:131;:::i;:::-;23656:139;;23383:419;;;:::o;23808:239::-;23948:34;23944:1;23936:6;23932:14;23925:58;24017:22;24012:2;24004:6;24000:15;23993:47;23808:239;:::o;24053:366::-;24195:3;24216:67;24280:2;24275:3;24216:67;:::i;:::-;24209:74;;24292:93;24381:3;24292:93;:::i;:::-;24410:2;24405:3;24401:12;24394:19;;24053:366;;;:::o;24425:419::-;24591:4;24629:2;24618:9;24614:18;24606:26;;24678:9;24672:4;24668:20;24664:1;24653:9;24649:17;24642:47;24706:131;24832:4;24706:131;:::i;:::-;24698:139;;24425:419;;;:::o;24850:225::-;24990:34;24986:1;24978:6;24974:14;24967:58;25059:8;25054:2;25046:6;25042:15;25035:33;24850:225;:::o;25081:366::-;25223:3;25244:67;25308:2;25303:3;25244:67;:::i;:::-;25237:74;;25320:93;25409:3;25320:93;:::i;:::-;25438:2;25433:3;25429:12;25422:19;;25081:366;;;:::o;25453:419::-;25619:4;25657:2;25646:9;25642:18;25634:26;;25706:9;25700:4;25696:20;25692:1;25681:9;25677:17;25670:47;25734:131;25860:4;25734:131;:::i;:::-;25726:139;;25453:419;;;:::o;25878:172::-;26018:24;26014:1;26006:6;26002:14;25995:48;25878:172;:::o;26056:366::-;26198:3;26219:67;26283:2;26278:3;26219:67;:::i;:::-;26212:74;;26295:93;26384:3;26295:93;:::i;:::-;26413:2;26408:3;26404:12;26397:19;;26056:366;;;:::o;26428:419::-;26594:4;26632:2;26621:9;26617:18;26609:26;;26681:9;26675:4;26671:20;26667:1;26656:9;26652:17;26645:47;26709:131;26835:4;26709:131;:::i;:::-;26701:139;;26428:419;;;:::o;26853:297::-;26993:34;26989:1;26981:6;26977:14;26970:58;27062:34;27057:2;27049:6;27045:15;27038:59;27131:11;27126:2;27118:6;27114:15;27107:36;26853:297;:::o;27156:366::-;27298:3;27319:67;27383:2;27378:3;27319:67;:::i;:::-;27312:74;;27395:93;27484:3;27395:93;:::i;:::-;27513:2;27508:3;27504:12;27497:19;;27156:366;;;:::o;27528:419::-;27694:4;27732:2;27721:9;27717:18;27709:26;;27781:9;27775:4;27771:20;27767:1;27756:9;27752:17;27745:47;27809:131;27935:4;27809:131;:::i;:::-;27801:139;;27528:419;;;:::o;27953:240::-;28093:34;28089:1;28081:6;28077:14;28070:58;28162:23;28157:2;28149:6;28145:15;28138:48;27953:240;:::o;28199:366::-;28341:3;28362:67;28426:2;28421:3;28362:67;:::i;:::-;28355:74;;28438:93;28527:3;28438:93;:::i;:::-;28556:2;28551:3;28547:12;28540:19;;28199:366;;;:::o;28571:419::-;28737:4;28775:2;28764:9;28760:18;28752:26;;28824:9;28818:4;28814:20;28810:1;28799:9;28795:17;28788:47;28852:131;28978:4;28852:131;:::i;:::-;28844:139;;28571:419;;;:::o;28996:169::-;29136:21;29132:1;29124:6;29120:14;29113:45;28996:169;:::o;29171:366::-;29313:3;29334:67;29398:2;29393:3;29334:67;:::i;:::-;29327:74;;29410:93;29499:3;29410:93;:::i;:::-;29528:2;29523:3;29519:12;29512:19;;29171:366;;;:::o;29543:419::-;29709:4;29747:2;29736:9;29732:18;29724:26;;29796:9;29790:4;29786:20;29782:1;29771:9;29767:17;29760:47;29824:131;29950:4;29824:131;:::i;:::-;29816:139;;29543:419;;;:::o;29968:241::-;30108:34;30104:1;30096:6;30092:14;30085:58;30177:24;30172:2;30164:6;30160:15;30153:49;29968:241;:::o;30215:366::-;30357:3;30378:67;30442:2;30437:3;30378:67;:::i;:::-;30371:74;;30454:93;30543:3;30454:93;:::i;:::-;30572:2;30567:3;30563:12;30556:19;;30215:366;;;:::o;30587:419::-;30753:4;30791:2;30780:9;30776:18;30768:26;;30840:9;30834:4;30830:20;30826:1;30815:9;30811:17;30804:47;30868:131;30994:4;30868:131;:::i;:::-;30860:139;;30587:419;;;:::o;31012:194::-;31052:4;31072:20;31090:1;31072:20;:::i;:::-;31067:25;;31106:20;31124:1;31106:20;:::i;:::-;31101:25;;31150:1;31147;31143:9;31135:17;;31174:1;31168:4;31165:11;31162:37;;;31179:18;;:::i;:::-;31162:37;31012:194;;;;:::o;31212:177::-;31352:29;31348:1;31340:6;31336:14;31329:53;31212:177;:::o;31395:366::-;31537:3;31558:67;31622:2;31617:3;31558:67;:::i;:::-;31551:74;;31634:93;31723:3;31634:93;:::i;:::-;31752:2;31747:3;31743:12;31736:19;;31395:366;;;:::o;31767:419::-;31933:4;31971:2;31960:9;31956:18;31948:26;;32020:9;32014:4;32010:20;32006:1;31995:9;31991:17;31984:47;32048:131;32174:4;32048:131;:::i;:::-;32040:139;;31767:419;;;:::o;32192:147::-;32293:11;32330:3;32315:18;;32192:147;;;;:::o;32345:114::-;;:::o;32465:398::-;32624:3;32645:83;32726:1;32721:3;32645:83;:::i;:::-;32638:90;;32737:93;32826:3;32737:93;:::i;:::-;32855:1;32850:3;32846:11;32839:18;;32465:398;;;:::o;32869:379::-;33053:3;33075:147;33218:3;33075:147;:::i;:::-;33068:154;;33239:3;33232:10;;32869:379;;;:::o;33254:442::-;33403:4;33441:2;33430:9;33426:18;33418:26;;33454:71;33522:1;33511:9;33507:17;33498:6;33454:71;:::i;:::-;33535:72;33603:2;33592:9;33588:18;33579:6;33535:72;:::i;:::-;33617;33685:2;33674:9;33670:18;33661:6;33617:72;:::i;:::-;33254:442;;;;;;:::o;33702:143::-;33759:5;33790:6;33784:13;33775:22;;33806:33;33833:5;33806:33;:::i;:::-;33702:143;;;;:::o;33851:351::-;33921:6;33970:2;33958:9;33949:7;33945:23;33941:32;33938:119;;;33976:79;;:::i;:::-;33938:119;34096:1;34121:64;34177:7;34168:6;34157:9;34153:22;34121:64;:::i;:::-;34111:74;;34067:128;33851:351;;;;:::o;34208:85::-;34253:7;34282:5;34271:16;;34208:85;;;:::o;34299:158::-;34357:9;34390:61;34408:42;34417:32;34443:5;34417:32;:::i;:::-;34408:42;:::i;:::-;34390:61;:::i;:::-;34377:74;;34299:158;;;:::o;34463:147::-;34558:45;34597:5;34558:45;:::i;:::-;34553:3;34546:58;34463:147;;:::o;34616:114::-;34683:6;34717:5;34711:12;34701:22;;34616:114;;;:::o;34736:184::-;34835:11;34869:6;34864:3;34857:19;34909:4;34904:3;34900:14;34885:29;;34736:184;;;;:::o;34926:132::-;34993:4;35016:3;35008:11;;35046:4;35041:3;35037:14;35029:22;;34926:132;;;:::o;35064:108::-;35141:24;35159:5;35141:24;:::i;:::-;35136:3;35129:37;35064:108;;:::o;35178:179::-;35247:10;35268:46;35310:3;35302:6;35268:46;:::i;:::-;35346:4;35341:3;35337:14;35323:28;;35178:179;;;;:::o;35363:113::-;35433:4;35465;35460:3;35456:14;35448:22;;35363:113;;;:::o;35512:732::-;35631:3;35660:54;35708:5;35660:54;:::i;:::-;35730:86;35809:6;35804:3;35730:86;:::i;:::-;35723:93;;35840:56;35890:5;35840:56;:::i;:::-;35919:7;35950:1;35935:284;35960:6;35957:1;35954:13;35935:284;;;36036:6;36030:13;36063:63;36122:3;36107:13;36063:63;:::i;:::-;36056:70;;36149:60;36202:6;36149:60;:::i;:::-;36139:70;;35995:224;35982:1;35979;35975:9;35970:14;;35935:284;;;35939:14;36235:3;36228:10;;35636:608;;;35512:732;;;;:::o;36250:831::-;36513:4;36551:3;36540:9;36536:19;36528:27;;36565:71;36633:1;36622:9;36618:17;36609:6;36565:71;:::i;:::-;36646:80;36722:2;36711:9;36707:18;36698:6;36646:80;:::i;:::-;36773:9;36767:4;36763:20;36758:2;36747:9;36743:18;36736:48;36801:108;36904:4;36895:6;36801:108;:::i;:::-;36793:116;;36919:72;36987:2;36976:9;36972:18;36963:6;36919:72;:::i;:::-;37001:73;37069:3;37058:9;37054:19;37045:6;37001:73;:::i;:::-;36250:831;;;;;;;;:::o;37087:807::-;37336:4;37374:3;37363:9;37359:19;37351:27;;37388:71;37456:1;37445:9;37441:17;37432:6;37388:71;:::i;:::-;37469:72;37537:2;37526:9;37522:18;37513:6;37469:72;:::i;:::-;37551:80;37627:2;37616:9;37612:18;37603:6;37551:80;:::i;:::-;37641;37717:2;37706:9;37702:18;37693:6;37641:80;:::i;:::-;37731:73;37799:3;37788:9;37784:19;37775:6;37731:73;:::i;:::-;37814;37882:3;37871:9;37867:19;37858:6;37814:73;:::i;:::-;37087:807;;;;;;;;;:::o;37900:143::-;37957:5;37988:6;37982:13;37973:22;;38004:33;38031:5;38004:33;:::i;:::-;37900:143;;;;:::o;38049:663::-;38137:6;38145;38153;38202:2;38190:9;38181:7;38177:23;38173:32;38170:119;;;38208:79;;:::i;:::-;38170:119;38328:1;38353:64;38409:7;38400:6;38389:9;38385:22;38353:64;:::i;:::-;38343:74;;38299:128;38466:2;38492:64;38548:7;38539:6;38528:9;38524:22;38492:64;:::i;:::-;38482:74;;38437:129;38605:2;38631:64;38687:7;38678:6;38667:9;38663:22;38631:64;:::i;:::-;38621:74;;38576:129;38049:663;;;;;:::o

Swarm Source

ipfs://19adcaac4c7b05b0656ccf31bbfdee15d7840c96fce5dbb76962b3de761fb8e3

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.