ETH Price: $1,951.03 (-1.81%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve182118272023-09-25 9:12:35881 days ago1695633155IN
0x5Fa3efcd...D9ffcad53
0 ETH0.0010879823.05104757
Renounce Ownersh...182117902023-09-25 9:05:11881 days ago1695632711IN
0x5Fa3efcd...D9ffcad53
0 ETH0.000201228.59136386
Approve182117902023-09-25 9:05:11881 days ago1695632711IN
0x5Fa3efcd...D9ffcad53
0 ETH0.0005425111.49136386
Set Enable Max T...182117882023-09-25 9:04:47881 days ago1695632687IN
0x5Fa3efcd...D9ffcad53
0 ETH0.000233829.09042352
Set Enable Max W...182117872023-09-25 9:04:35881 days ago1695632675IN
0x5Fa3efcd...D9ffcad53
0 ETH0.000239199.33092877
Approve182117662023-09-25 9:00:11881 days ago1695632411IN
0x5Fa3efcd...D9ffcad53
0 ETH0.0005895612.49113222
Enable Trading182117642023-09-25 8:59:47881 days ago1695632387IN
0x5Fa3efcd...D9ffcad53
0 ETH0.000397427.79910002
Approve182117262023-09-25 8:52:11881 days ago1695631931IN
0x5Fa3efcd...D9ffcad53
0 ETH0.00041438.82718951
Set Max Wallet A...182117142023-09-25 8:49:47881 days ago1695631787IN
0x5Fa3efcd...D9ffcad53
0 ETH0.000334889.83580077
Set Max Transact...182117122023-09-25 8:49:23881 days ago1695631763IN
0x5Fa3efcd...D9ffcad53
0 ETH0.000334579.84904947
Approve182117012023-09-25 8:47:11881 days ago1695631631IN
0x5Fa3efcd...D9ffcad53
0 ETH0.0006520813.8155724

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer182118382023-09-25 9:14:47881 days ago1695633287
0x5Fa3efcd...D9ffcad53
0.00448232 ETH
Transfer182118382023-09-25 9:14:47881 days ago1695633287
0x5Fa3efcd...D9ffcad53
0.00448232 ETH
Transfer182118292023-09-25 9:12:59881 days ago1695633179
0x5Fa3efcd...D9ffcad53
0.00737397 ETH
Transfer182118292023-09-25 9:12:59881 days ago1695633179
0x5Fa3efcd...D9ffcad53
0.00737397 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LIPEPE

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-09-25
*/

/*

Telegram: https://t.me/LIPEPEPortal
X: https://twitter.com/Lipepe_ERC
Web: https://www.lipepe.com

LiPepe is a whimsical fusion that merges the cool, calm, and electrifying properties of lithium with the cheeky, meme-worthy charm of Pepe the Frog. This extraordinary imaginary creation embodies the essence of two seemingly unrelated worlds – the chemical elements and internet culture – in a unique and captivating way.

===========================------::::::...... ......:::::-----=======+++++++++++++++======
---========================-------:::::......  .....:::::----========+++++++++++++++======
-----=======================------:::::......  .....::::-----=======+++++++++++++========-
------=======================------::::...... .....::::-----======++++++++++++++=========-
-------=+**#+=================-----:::::.....  ....::::----======++++++++++++====++*===---
::-----=---**==================-----::::..... .....:::----======+++++++++++========+=-----
::::-----=*#+===================----::::..... .....:::----=====+++++++++++========++=----:
:::::::----+%=-==================----::::.... ....:::----=====++++++++++========--------::
:::::::--:-=#----================-----:::.... ....:::---=====++++++++++=======----+=-:::::
...::::=+===-------================---:::.... ....::---====++++++++++======-------==:::::.
.......::::::::-------=============----:::... ...:::--=====++++++++======------:::--:::...
.........::::::::-------============----::... ...::---===++++++++======-----::::::::......
.............:::::::------===========---::... ...::--===+++++++=====-----:::::::..........
    .............::::::-----=====++===---::.. ..::--===++++++=====----::::::............. 
       :-=++++++==:.::::::----==#%%#===--::.. ..::-===+++++====----::::::...........      
          =###=.........::::----+**+====--::. ..:--==+++++===----::::...........          
. .       :###:    ........::::---=======--:...::-==++++===---::::........              . 
..........:###:        .......::::--======-:. .:-==+++==---:::........          ..........
..........:###:...          ..:-+*#+--=====-...:==++==--:::.... .       ..................
..........-###:............  .::*##=.::--==-:.:-=+=--::.....     .........................
::::::::::-###-:................=##= ...::-=-.-==-:...   ................:::::::::::::::::
::::::::::-%%%-:::::::::::::::::+##+.:.....:-:-:.......:::::::::::::::::::::::::::::::::::
-:--------=%%%=-----------------+%%*--=====-:=:-========---=-----------------------------:
----------=%%%=-------=====*====*%%*====--..:+-..:-====+=+++******+++****++====-----------
------====+%%%+==========+%+====*%%*=--:...:=+=:. .:--===+****#######*******+============-
=-========*%%%#*+++++***#%*=====#%%*::.. .:-=++-:. ..:-=****###*****#########+===========-
=======+******************===-+++====- ..:-=+++=-:....+********#########*******+++========
==========================----:::....  .::-=+++==-:.:*******#############**#%%%%#*++======
======================-----::::....  ...:-==++++=---*******###*=%#%##--####%%%#+#*+++++++=
==================------:::::....   ...:--==++++===***********##%#%**  -%#+@%##:=*++===+==
===============-------::::.....   ....::-==++++++=*************##########*#####%*=========
==========---=----=-:::-......   ....::--==++++++*********###******####*****#****#========
=======+#----=-==-#--:.-.:......:.::::--===++++++*********#%%%#####*************#%+=======
=-=----=*----*-=+:#-==:*.+.:=.*:+=:*:--===++++++***********##%%%%%%%%%%%#######%%+=======-
-------+*=-=:*-=+:#:==.*.=--+:*.+=:*---===++++++***************##%%%##%%%%%%%%%%#=------=-
--------:::::::.........  .......:::--====++++++#*******************#########%##+---------
----:::::::::.:......  .   .....:::---====++++++#*************************##****=---------
-::::::-=-:..=:--.:+. -= ......:::---====+++++++#*********************####%##*##**+-:::--:
:::::::*-=-..--===-+: :=......::::---====+++++++***********************##*%****##***=:::::
::::::.---:-..::   -. :-.....::::---=====++++++++***********************#***####*###*+::::
::::..........        ......::::----====++++++++++++****#############**+=*#**#######*#-:::
:............       .......::::----=====++++++++++++========---:::::......:=+++++++=-:::..
...........        .......:::::----=====++++++++++++=====----:::::........................



*/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

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

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

abstract 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;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    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) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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

contract LIPEPE is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public tradingActiveTime;

    uint256 private buyFee;
    uint256 private sellFee;
    
    address public marketingWallet;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    bool    public tradingEnabled;

    uint256 public swapTokensAtAmount;
    bool    public swapWithLimit;
    bool    private swapping;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitAmountChanged(uint256 maxWalletLimitRate);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransferRate);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    event SwapAndSend(uint256 tokensSwapped, uint256 valueReceived);
    event SwapWithLimitUpdated(bool swapWithLimit);

    constructor () ERC20("Lithium Pepe", "LIPEPE") 
    {   
        address newOwner = 0x896fa8E8C3Ee9B015885F0FfDe6cF4bef4254f9c;
        transferOwnership(newOwner);
        
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH UniswapV2 Router
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
              
        marketingWallet = 0xfB823D707A7de5170973609B6ED009Ff458eea04;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(0)] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[DEAD] = true;
        
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(0)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[DEAD] = true;

        _init(owner(), 1e9 ether);
        swapTokensAtAmount = totalSupply() / 5000;

        maxTransactionAmount  = totalSupply() / 100;        
        maxWalletAmount       = totalSupply() / 100;

    }

    receive() external payable {

  	}

    function enableTrading() public onlyOwner{
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        tradingActiveTime = block.timestamp;
    }  

    function claimStuckTokens(address token) external onlyOwner {
        if (token == address(0x0)) {
            (bool success,) = msg.sender.call{value: address(this).balance}("");
            require(success, "Claim failed");
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function getBuyFee() public view returns (uint256) {
        
        uint256 _buyFee;

        if (block.timestamp - tradingActiveTime < 15 minutes) {
            _buyFee =  5;

        }else if (block.timestamp - tradingActiveTime >= 15 minutes && block.timestamp - tradingActiveTime < 25 minutes) {
            _buyFee =  1;

        }else if (block.timestamp - tradingActiveTime >= 25 minutes) {
            _buyFee =  1;
        }
        
        return _buyFee;
    }

    function getSellFee() public view returns (uint256) {

        uint256 _sellFee;

        if (block.timestamp - tradingActiveTime < 5 minutes) {
            _sellFee =  15;

        }else if (block.timestamp - tradingActiveTime >= 5 minutes && block.timestamp - tradingActiveTime < 10 minutes) {
            _sellFee =  10;

        }else if (block.timestamp - tradingActiveTime >= 10 minutes && block.timestamp - tradingActiveTime < 15 minutes) {
            _sellFee =  5;

        }else if (block.timestamp - tradingActiveTime >= 15 minutes && block.timestamp - tradingActiveTime < 25 minutes) {
            _sellFee =  1;

        }else if (block.timestamp - tradingActiveTime >= 25 minutes) {
            _sellFee =  1;
        }

        return _sellFee;
    }       

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;
    }
    
    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not enabled yet");
            
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                _isExcludedFromMaxTxLimit[from] == false && 
                _isExcludedFromMaxTxLimit[to]   == false) 
            {
                require(amount <= maxTransactionAmount, "AntiWhale: Transfer amount exceeds the maxTransactionAmount");                
            }
        }
    
		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair
        ) {
            swapping = true;

            if (swapWithLimit) {
                contractTokenBalance = swapTokensAtAmount;
            }

            swap(contractTokenBalance);        

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;

        }else if (from == uniswapV2Pair) {
            _totalFees =  getBuyFee();

        }else if (to == uniswapV2Pair) {             
            _totalFees = getSellFee();
        
        }else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) {
            if (_isExcludedFromMaxWalletLimit[from]  == false && 
                _isExcludedFromMaxWalletLimit[to]    == false &&
                to != uniswapV2Pair
            ) {
                uint balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

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

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1000000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function setSwapWithLimit(bool _swapWithLimit) external onlyOwner{
        swapWithLimit = _swapWithLimit;
        emit SwapWithLimitUpdated(swapWithLimit);
    }

    function swap(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        bool success = payable(marketingWallet).send(newBalance);
        if (success) {
            emit SwapAndSend(tokenAmount, newBalance);
        }
    }

    
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled = true;
    uint256 public maxWalletAmount;

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(
            enable != maxWalletLimitEnabled, 
            "Max wallet limit is already set to that state"
        );
        maxWalletLimitEnabled = enable;
        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(
            _maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, 
            "Max wallet percentage cannot be lower than 1%"
        );
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());
        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function setExcludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxWalletLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxWalletLimit[account] = exclude;
        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }


    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled = true;
    uint256 public  maxTransactionAmount;

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner  {
        require(
            enable != maxTransactionLimitEnabled, 
            "Max transaction limit is already set to that state"
        );
        maxTransactionLimitEnabled = enable;
        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmount(uint256 _maxTransactionAmount) external onlyOwner {
        require(
            _maxTransactionAmount  >= (totalSupply() / (10 ** decimals())) / 1000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmount  = _maxTransactionAmount  * (10 ** decimals());
        emit MaxTransactionLimitAmountChanged(maxTransactionAmount);
    }

    function setExcludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxTxLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxTxLimit[account] = exclude;
        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }


}

Contract Security Audit

Contract ABI

API
[{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransferRate","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimitRate","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueReceived","type":"uint256"}],"name":"SwapAndSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"swapWithLimit","type":"bool"}],"name":"SwapWithLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","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":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapWithLimit","type":"bool"}],"name":"setSwapWithLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapWithLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":[{"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"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160115f6101000a81548160ff021916908315150217905550600160145f6101000a81548160ff02191690831515021790555034801562000086575f80fd5b506040518060400160405280600c81526020017f4c69746869756d205065706500000000000000000000000000000000000000008152506040518060400160405280600681526020017f4c49504550450000000000000000000000000000000000000000000000000000815250816003908162000104919062001102565b50806004908162000116919062001102565b5050505f6200012a6200095160201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f73896fa8e8c3ee9b015885f0ffde6cf4bef4254f9c9050620001f0816200095860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8190505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200027d91906200124b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200030991906200124b565b6040518363ffffffff1660e01b8152600401620003289291906200128c565b6020604051808303815f875af115801562000345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200036b91906200124b565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004413060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b2860201b60201c565b73fb823d707a7de5170973609b6ed009ff458eea04600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f620004aa62000cf360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f620005ba62000cf360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f6200073e62000cf360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620008da620008c162000cf360201b60201c565b6b033b2e3c9fd0803ce800000062000d1b60201b60201c565b611388620008ed62000e8b60201b60201c565b620008f9919062001311565b600e8190555060646200091162000e8b60201b60201c565b6200091d919062001311565b60158190555060646200093562000e8b60201b60201c565b62000941919062001311565b6012819055505050505062001656565b5f33905090565b620009686200095160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f090620013a6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a61906200143a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9090620014ce565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c019062001562565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ce6919062001593565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d8390620015fc565b60405180910390fd5b62000d9f5f838362000e9460201b60201c565b8060025f82825462000db291906200161c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000e0691906200161c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e6c919062001593565b60405180910390a362000e875f838362000e9960201b60201c565b5050565b5f600254905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000f1a57607f821691505b60208210810362000f305762000f2f62000ed5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000f947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f57565b62000fa0868362000f57565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000fea62000fe462000fde8462000fb8565b62000fc1565b62000fb8565b9050919050565b5f819050919050565b620010058362000fca565b6200101d620010148262000ff1565b84845462000f63565b825550505050565b5f90565b6200103362001025565b6200104081848462000ffa565b505050565b5b8181101562001067576200105b5f8262001029565b60018101905062001046565b5050565b601f821115620010b657620010808162000f36565b6200108b8462000f48565b810160208510156200109b578190505b620010b3620010aa8562000f48565b83018262001045565b50505b505050565b5f82821c905092915050565b5f620010d85f1984600802620010bb565b1980831691505092915050565b5f620010f28383620010c7565b9150826002028217905092915050565b6200110d8262000e9e565b67ffffffffffffffff81111562001129576200112862000ea8565b5b62001135825462000f02565b620011428282856200106b565b5f60209050601f83116001811462001178575f841562001163578287015190505b6200116f8582620010e5565b865550620011de565b601f198416620011888662000f36565b5f5b82811015620011b1578489015182556001820191506020850194506020810190506200118a565b86831015620011d15784890151620011cd601f891682620010c7565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200121582620011ea565b9050919050565b620012278162001209565b811462001232575f80fd5b50565b5f8151905062001245816200121c565b92915050565b5f60208284031215620012635762001262620011e6565b5b5f620012728482850162001235565b91505092915050565b620012868162001209565b82525050565b5f604082019050620012a15f8301856200127b565b620012b060208301846200127b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200131d8262000fb8565b91506200132a8362000fb8565b9250826200133d576200133c620012b7565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200138e60208362001348565b91506200139b8262001358565b602082019050919050565b5f6020820190508181035f830152620013bf8162001380565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6200142260268362001348565b91506200142f82620013c6565b604082019050919050565b5f6020820190508181035f830152620014538162001414565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f620014b660248362001348565b9150620014c3826200145a565b604082019050919050565b5f6020820190508181035f830152620014e781620014a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200154a60228362001348565b91506200155782620014ee565b604082019050919050565b5f6020820190508181035f8301526200157b816200153c565b9050919050565b6200158d8162000fb8565b82525050565b5f602082019050620015a85f83018462001582565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620015e4601f8362001348565b9150620015f182620015ae565b602082019050919050565b5f6020820190508181035f8301526200161581620015d6565b9050919050565b5f620016288262000fb8565b9150620016358362000fb8565b925082820190508082111562001650576200164f620012e4565b5b92915050565b614b8580620016645f395ff3fe608060405260043610610254575f3560e01c806370a0823111610138578063a8a69b9d116100b5578063c024666811610079578063c0246668146108af578063c8c8ebe4146108d7578063dd62ed3e14610901578063e2f456051461093d578063f2fde38b14610967578063f9d0831a1461098f5761025b565b8063a8a69b9d146107bd578063a9059cbb146107f9578063aa4bde2814610835578063afa4f3b21461085f578063bb85c6d1146108875761025b565b80638f818b90116100fc5780638f818b90146106dd578063929f13601461070757806395d89b411461072f578063988be11814610759578063a457c2d7146107815761025b565b806370a0823114610621578063715018a61461065d57806375f0a874146106735780638a8c523c1461069d5780638da5cb5b146106b35761025b565b8063289af0d8116101d1578063488eb37f11610195578063488eb37f1461051557806349bd5a5e1461053f5780634ada218b146105695780634fbee193146105935780635031595f146105cf57806356a6cabf146105f95761025b565b8063289af0d8146104335780632a6c7dba1461045d5780632ba86bf214610485578063313ce567146104af57806339509351146104d95761025b565b806318d9ceae1161021857806318d9ceae146103415780631e293c101461037d57806321a9d82a146103a557806323b872dd146103cf57806327a14fc21461040b5761025b565b806306fdde031461025f578063095ea7b314610289578063150c880c146102c55780631694505e146102ed57806318160ddd146103175761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b506102736109b7565b604051610280919061362d565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa91906136de565b610a47565b6040516102bc9190613736565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190613779565b610a64565b005b3480156102f8575f80fd5b50610301610c2f565b60405161030e9190613812565b60405180910390f35b348015610322575f80fd5b5061032b610c54565b604051610338919061383a565b60405180910390f35b34801561034c575f80fd5b5061036760048036038101906103629190613853565b610c5d565b6040516103749190613736565b60405180910390f35b348015610388575f80fd5b506103a3600480360381019061039e919061387e565b610caf565b005b3480156103b0575f80fd5b506103b9610e1b565b6040516103c69190613736565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f091906138a9565b610e2d565b6040516104029190613736565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c919061387e565b610f47565b005b34801561043e575f80fd5b506104476110b2565b604051610454919061383a565b60405180910390f35b348015610468575f80fd5b50610483600480360381019061047e91906138f9565b6111ab565b005b348015610490575f80fd5b506104996112f6565b6040516104a69190613736565b60405180910390f35b3480156104ba575f80fd5b506104c3611308565b6040516104d0919061393f565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa91906136de565b611310565b60405161050c9190613736565b60405180910390f35b348015610520575f80fd5b506105296113b7565b6040516105369190613736565b60405180910390f35b34801561054a575f80fd5b506105536113c9565b6040516105609190613967565b60405180910390f35b348015610574575f80fd5b5061057d6113ee565b60405161058a9190613736565b60405180910390f35b34801561059e575f80fd5b506105b960048036038101906105b49190613853565b611401565b6040516105c69190613736565b60405180910390f35b3480156105da575f80fd5b506105e3611453565b6040516105f0919061383a565b60405180910390f35b348015610604575f80fd5b5061061f600480360381019061061a91906138f9565b611459565b005b34801561062c575f80fd5b5061064760048036038101906106429190613853565b6115a4565b604051610654919061383a565b60405180910390f35b348015610668575f80fd5b506106716115e9565b005b34801561067e575f80fd5b5061068761173c565b6040516106949190613967565b60405180910390f35b3480156106a8575f80fd5b506106b1611761565b005b3480156106be575f80fd5b506106c761186b565b6040516106d49190613967565b60405180910390f35b3480156106e8575f80fd5b506106f1611893565b6040516106fe919061383a565b60405180910390f35b348015610712575f80fd5b5061072d60048036038101906107289190613779565b611914565b005b34801561073a575f80fd5b50610743611adf565b604051610750919061362d565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a91906138f9565b611b6f565b005b34801561078c575f80fd5b506107a760048036038101906107a291906136de565b611c66565b6040516107b49190613736565b60405180910390f35b3480156107c8575f80fd5b506107e360048036038101906107de9190613853565b611d4c565b6040516107f09190613736565b60405180910390f35b348015610804575f80fd5b5061081f600480360381019061081a91906136de565b611d9e565b60405161082c9190613736565b60405180910390f35b348015610840575f80fd5b50610849611dbb565b604051610856919061383a565b60405180910390f35b34801561086a575f80fd5b506108856004803603810190610880919061387e565b611dc1565b005b348015610892575f80fd5b506108ad60048036038101906108a89190613853565b611ef1565b005b3480156108ba575f80fd5b506108d560048036038101906108d09190613779565b612038565b005b3480156108e2575f80fd5b506108eb612203565b6040516108f8919061383a565b60405180910390f35b34801561090c575f80fd5b5061092760048036038101906109229190613980565b612209565b604051610934919061383a565b60405180910390f35b348015610948575f80fd5b5061095161228b565b60405161095e919061383a565b60405180910390f35b348015610972575f80fd5b5061098d60048036038101906109889190613853565b612291565b005b34801561099a575f80fd5b506109b560048036038101906109b09190613853565b612453565b005b6060600380546109c6906139eb565b80601f01602080910402602001604051908101604052809291908181526020018280546109f2906139eb565b8015610a3d5780601f10610a1457610100808354040283529160200191610a3d565b820191905f5260205f20905b815481529060010190602001808311610a2057829003601f168201915b5050505050905090565b5f610a5a610a536126cb565b84846126d2565b6001905092915050565b610a6c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190613a65565b60405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613af3565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051610c239190613736565b60405180910390a25050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610cb76126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90613a65565b60405180910390fd5b6103e8610d50611308565b600a610d5c9190613c6d565b610d64610c54565b610d6e9190613ce4565b610d789190613ce4565b811015610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613d84565b60405180910390fd5b610dc2611308565b600a610dce9190613c6d565b81610dd99190613da2565b6015819055507f82752703028499b617ec0b1cf458c9689993344fd9c6ed80eeb873658cf5ad7f601554604051610e10919061383a565b60405180910390a150565b60115f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e756126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f305782811015610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613e53565b60405180910390fd5b610f2f85610f276126cb565b8584036126d2565b5b610f3b858585612895565b60019150509392505050565b610f4f6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613a65565b60405180910390fd5b6064610fe7611308565b600a610ff39190613c6d565b610ffb610c54565b6110059190613ce4565b61100f9190613ce4565b811015611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613ee1565b60405180910390fd5b611059611308565b600a6110659190613c6d565b816110709190613da2565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516110a7919061383a565b60405180910390a150565b5f8061012c600954426110c59190613eff565b10156110d457600f90506111a4565b61012c600954426110e59190613eff565b101580156111015750610258600954426110ff9190613eff565b105b1561110f57600a90506111a3565b610258600954426111209190613eff565b1015801561113c57506103846009544261113a9190613eff565b105b1561114a57600590506111a2565b6103846009544261115b9190613eff565b1015801561117757506105dc600954426111759190613eff565b105b1561118557600190506111a1565b6105dc600954426111969190613eff565b106111a057600190505b5b5b5b5b8091505090565b6111b36126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613a65565b60405180910390fd5b60115f9054906101000a900460ff16151581151503611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90613fa2565b60405180910390fd5b8060115f6101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f160115f9054906101000a900460ff166040516112eb9190613736565b60405180910390a150565b60145f9054906101000a900460ff1681565b5f6012905090565b5f6113ad61131c6126cb565b848460015f6113296126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113a89190613fc0565b6126d2565b6001905092915050565b600f5f9054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60149054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b6114616126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690613a65565b60405180910390fd5b60145f9054906101000a900460ff16151581151503611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90614063565b60405180910390fd5b8060145f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60145f9054906101000a900460ff166040516115999190613736565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115f16126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117696126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613a65565b60405180910390fd5b600d60149054906101000a900460ff1615611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906140cb565b60405180910390fd5b6001600d60146101000a81548160ff02191690831515021790555042600981905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80610384600954426118a69190613eff565b10156118b5576005905061190d565b610384600954426118c69190613eff565b101580156118e257506105dc600954426118e09190613eff565b105b156118f0576001905061190c565b6105dc600954426119019190613eff565b1061190b57600190505b5b5b8091505090565b61191c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190613a65565b60405180910390fd5b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090613af3565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c82604051611ad39190613736565b60405180910390a25050565b606060048054611aee906139eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1a906139eb565b8015611b655780601f10611b3c57610100808354040283529160200191611b65565b820191905f5260205f20905b815481529060010190602001808311611b4857829003601f168201915b5050505050905090565b611b776126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90613a65565b60405180910390fd5b80600f5f6101000a81548160ff0219169083151502179055507f94da5f18dc9529c37f2af4ffa1921f49d8bb14b6e5fe22b0d6ddc94f102f9232600f5f9054906101000a900460ff16604051611c5b9190613736565b60405180910390a150565b5f8060015f611c736126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490614159565b60405180910390fd5b611d41611d386126cb565b858584036126d2565b600191505092915050565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611db1611daa6126cb565b8484612895565b6001905092915050565b60125481565b611dc96126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613a65565b60405180910390fd5b620f4240611e63610c54565b611e6d9190613ce4565b8111611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea5906141e7565b60405180910390fd5b80600e819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600e54604051611ee6919061383a565b60405180910390a150565b611ef96126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614275565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120406126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613a65565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614303565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121f79190613736565b60405180910390a25050565b60155481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e5481565b6122996126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90614391565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61245b6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ca575f3373ffffffffffffffffffffffffffffffffffffffff1647604051612541906143dc565b5f6040518083038185875af1925050503d805f811461257b576040519150601f19603f3d011682016040523d82523d5f602084013e612580565b606091505b50509050806125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061443a565b60405180910390fd5b506126c8565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126089190613967565b602060405180830381865afa158015612623573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612647919061446c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612684929190614497565b6020604051808303815f875af11580156126a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c491906144d2565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127379061456d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a5906145fb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612888919061383a565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fa90614689565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890614717565b60405180910390fd5b600d60149054906101000a900460ff16806129d2575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612a23575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a599061477f565b60405180910390fd5b5f8103612a7957612a7483835f61306c565b613067565b60145f9054906101000a900460ff1615612c305760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b34575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b8c57505f151560135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612be457505f151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15612c2f57601554811115612c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c259061480d565b60405180910390fd5b5b5b5f612c3a306115a4565b90505f600e548210159050808015612c5f5750600f60019054906101000a900460ff16155b8015612cb7575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612d15576001600f60016101000a81548160ff021916908315150217905550600f5f9054906101000a900460ff1615612cf157600e5491505b612cfa826132e1565b5f600f60016101000a81548160ff0219169083151502179055505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612db1575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612dc85750600f60019054906101000a900460ff165b15612dd5575f9050612ea1565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612e3857612e31611893565b9050612ea0565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612e9b57612e946110b2565b9050612e9f565b5f90505b5b5b5f811115612edf575f60648286612eb89190613da2565b612ec29190613ce4565b90508085612ed09190613eff565b9450612edd87308361306c565b505b60115f9054906101000a900460ff1615613058575f151560105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515148015612f9b57505f151560105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612ff4575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613057575f613003866115a4565b905060125485826130149190613fc0565b1115613055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304c9061489b565b60405180910390fd5b505b5b61306386868661306c565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d190614689565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614717565b60405180910390fd5b613153838383613599565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cd90614929565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132649190613fc0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c8919061383a565b60405180910390a36132db84848461359e565b50505050565b5f4790505f600267ffffffffffffffff81111561330157613300614947565b5b60405190808252806020026020018201604052801561332f5781602001602082028036833780820191505090505b50905030815f8151811061334657613345614974565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340e91906149b5565b8160018151811061342257613421614974565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b81526004016134be959493929190614ad0565b5f604051808303815f87803b1580156134d5575f80fd5b505af11580156134e7573d5f803e3d5ffd5b505050505f82476134f89190613eff565b90505f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505090508015613592577f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8583604051613589929190614b28565b60405180910390a15b5050505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135da5780820151818401526020810190506135bf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135ff826135a3565b61360981856135ad565b93506136198185602086016135bd565b613622816135e5565b840191505092915050565b5f6020820190508181035f83015261364581846135f5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61367a82613651565b9050919050565b61368a81613670565b8114613694575f80fd5b50565b5f813590506136a581613681565b92915050565b5f819050919050565b6136bd816136ab565b81146136c7575f80fd5b50565b5f813590506136d8816136b4565b92915050565b5f80604083850312156136f4576136f361364d565b5b5f61370185828601613697565b9250506020613712858286016136ca565b9150509250929050565b5f8115159050919050565b6137308161371c565b82525050565b5f6020820190506137495f830184613727565b92915050565b6137588161371c565b8114613762575f80fd5b50565b5f813590506137738161374f565b92915050565b5f806040838503121561378f5761378e61364d565b5b5f61379c85828601613697565b92505060206137ad85828601613765565b9150509250929050565b5f819050919050565b5f6137da6137d56137d084613651565b6137b7565b613651565b9050919050565b5f6137eb826137c0565b9050919050565b5f6137fc826137e1565b9050919050565b61380c816137f2565b82525050565b5f6020820190506138255f830184613803565b92915050565b613834816136ab565b82525050565b5f60208201905061384d5f83018461382b565b92915050565b5f602082840312156138685761386761364d565b5b5f61387584828501613697565b91505092915050565b5f602082840312156138935761389261364d565b5b5f6138a0848285016136ca565b91505092915050565b5f805f606084860312156138c0576138bf61364d565b5b5f6138cd86828701613697565b93505060206138de86828701613697565b92505060406138ef868287016136ca565b9150509250925092565b5f6020828403121561390e5761390d61364d565b5b5f61391b84828501613765565b91505092915050565b5f60ff82169050919050565b61393981613924565b82525050565b5f6020820190506139525f830184613930565b92915050565b61396181613670565b82525050565b5f60208201905061397a5f830184613958565b92915050565b5f80604083850312156139965761399561364d565b5b5f6139a385828601613697565b92505060206139b485828601613697565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a0257607f821691505b602082108103613a1557613a146139be565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a4f6020836135ad565b9150613a5a82613a1b565b602082019050919050565b5f6020820190508181035f830152613a7c81613a43565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f613add6024836135ad565b9150613ae882613a83565b604082019050919050565b5f6020820190508181035f830152613b0a81613ad1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613b9357808604811115613b6f57613b6e613b11565b5b6001851615613b7e5780820291505b8081029050613b8c85613b3e565b9450613b53565b94509492505050565b5f82613bab5760019050613c66565b81613bb8575f9050613c66565b8160018114613bce5760028114613bd857613c07565b6001915050613c66565b60ff841115613bea57613be9613b11565b5b8360020a915084821115613c0157613c00613b11565b5b50613c66565b5060208310610133831016604e8410600b8410161715613c3c5782820a905083811115613c3757613c36613b11565b5b613c66565b613c498484846001613b4a565b92509050818404811115613c6057613c5f613b11565b5b81810290505b9392505050565b5f613c77826136ab565b9150613c8283613924565b9250613caf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b9c565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cee826136ab565b9150613cf9836136ab565b925082613d0957613d08613cb7565b5b828204905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f74206265205f8201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b5f613d6e603f836135ad565b9150613d7982613d14565b604082019050919050565b5f6020820190508181035f830152613d9b81613d62565b9050919050565b5f613dac826136ab565b9150613db7836136ab565b9250828202613dc5816136ab565b91508282048414831517613ddc57613ddb613b11565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e3d6028836135ad565b9150613e4882613de3565b604082019050919050565b5f6020820190508181035f830152613e6a81613e31565b9050919050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f613ecb602d836135ad565b9150613ed682613e71565b604082019050919050565b5f6020820190508181035f830152613ef881613ebf565b9050919050565b5f613f09826136ab565b9150613f14836136ab565b9250828203905081811115613f2c57613f2b613b11565b5b92915050565b7f4d61782077616c6c6574206c696d697420697320616c726561647920736574205f8201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b5f613f8c602d836135ad565b9150613f9782613f32565b604082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b5f613fca826136ab565b9150613fd5836136ab565b9250828201905080821115613fed57613fec613b11565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f61404d6032836135ad565b915061405882613ff3565b604082019050919050565b5f6020820190508181035f83015261407a81614041565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c65640000000000005f82015250565b5f6140b5601a836135ad565b91506140c082614081565b602082019050919050565b5f6020820190508181035f8301526140e2816140a9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141436025836135ad565b915061414e826140e9565b604082019050919050565b5f6020820190508181035f83015261417081614137565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d7573742062652067726561745f8201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b5f6141d1603f836135ad565b91506141dc82614177565b604082019050919050565b5f6020820190508181035f8301526141fe816141c5565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61425f602b836135ad565b915061426a82614205565b604082019050919050565b5f6020820190508181035f83015261428c81614253565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f6142ed602a836135ad565b91506142f882614293565b604082019050919050565b5f6020820190508181035f83015261431a816142e1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61437b6026836135ad565b915061438682614321565b604082019050919050565b5f6020820190508181035f8301526143a88161436f565b9050919050565b5f81905092915050565b50565b5f6143c75f836143af565b91506143d2826143b9565b5f82019050919050565b5f6143e6826143bc565b9150819050919050565b7f436c61696d206661696c656400000000000000000000000000000000000000005f82015250565b5f614424600c836135ad565b915061442f826143f0565b602082019050919050565b5f6020820190508181035f83015261445181614418565b9050919050565b5f81519050614466816136b4565b92915050565b5f602082840312156144815761448061364d565b5b5f61448e84828501614458565b91505092915050565b5f6040820190506144aa5f830185613958565b6144b7602083018461382b565b9392505050565b5f815190506144cc8161374f565b92915050565b5f602082840312156144e7576144e661364d565b5b5f6144f4848285016144be565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6145576024836135ad565b9150614562826144fd565b604082019050919050565b5f6020820190508181035f8301526145848161454b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145e56022836135ad565b91506145f08261458b565b604082019050919050565b5f6020820190508181035f830152614612816145d9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146736025836135ad565b915061467e82614619565b604082019050919050565b5f6020820190508181035f8301526146a081614667565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147016023836135ad565b915061470c826146a7565b604082019050919050565b5f6020820190508181035f83015261472e816146f5565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965740000000000005f82015250565b5f614769601a836135ad565b915061477482614735565b602082019050919050565b5f6020820190508181035f8301526147968161475d565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f6147f7603b836135ad565b91506148028261479d565b604082019050919050565b5f6020820190508181035f830152614824816147eb565b9050919050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f6148856030836135ad565b91506148908261482b565b604082019050919050565b5f6020820190508181035f8301526148b281614879565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149136026836135ad565b915061491e826148b9565b604082019050919050565b5f6020820190508181035f83015261494081614907565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506149af81613681565b92915050565b5f602082840312156149ca576149c961364d565b5b5f6149d7848285016149a1565b91505092915050565b5f819050919050565b5f614a036149fe6149f9846149e0565b6137b7565b6136ab565b9050919050565b614a13816149e9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614a4b81613670565b82525050565b5f614a5c8383614a42565b60208301905092915050565b5f602082019050919050565b5f614a7e82614a19565b614a888185614a23565b9350614a9383614a33565b805f5b83811015614ac3578151614aaa8882614a51565b9750614ab583614a68565b925050600181019050614a96565b5085935050505092915050565b5f60a082019050614ae35f83018861382b565b614af06020830187614a0a565b8181036040830152614b028186614a74565b9050614b116060830185613958565b614b1e608083018461382b565b9695505050505050565b5f604082019050614b3b5f83018561382b565b614b48602083018461382b565b939250505056fea2646970667358221220a6dac6a5d92ec99e1f6f9bd1c894833ad404c1b2b0d629f6024d5f98e9b3195f64736f6c63430008140033

Deployed Bytecode

0x608060405260043610610254575f3560e01c806370a0823111610138578063a8a69b9d116100b5578063c024666811610079578063c0246668146108af578063c8c8ebe4146108d7578063dd62ed3e14610901578063e2f456051461093d578063f2fde38b14610967578063f9d0831a1461098f5761025b565b8063a8a69b9d146107bd578063a9059cbb146107f9578063aa4bde2814610835578063afa4f3b21461085f578063bb85c6d1146108875761025b565b80638f818b90116100fc5780638f818b90146106dd578063929f13601461070757806395d89b411461072f578063988be11814610759578063a457c2d7146107815761025b565b806370a0823114610621578063715018a61461065d57806375f0a874146106735780638a8c523c1461069d5780638da5cb5b146106b35761025b565b8063289af0d8116101d1578063488eb37f11610195578063488eb37f1461051557806349bd5a5e1461053f5780634ada218b146105695780634fbee193146105935780635031595f146105cf57806356a6cabf146105f95761025b565b8063289af0d8146104335780632a6c7dba1461045d5780632ba86bf214610485578063313ce567146104af57806339509351146104d95761025b565b806318d9ceae1161021857806318d9ceae146103415780631e293c101461037d57806321a9d82a146103a557806323b872dd146103cf57806327a14fc21461040b5761025b565b806306fdde031461025f578063095ea7b314610289578063150c880c146102c55780631694505e146102ed57806318160ddd146103175761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b506102736109b7565b604051610280919061362d565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa91906136de565b610a47565b6040516102bc9190613736565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190613779565b610a64565b005b3480156102f8575f80fd5b50610301610c2f565b60405161030e9190613812565b60405180910390f35b348015610322575f80fd5b5061032b610c54565b604051610338919061383a565b60405180910390f35b34801561034c575f80fd5b5061036760048036038101906103629190613853565b610c5d565b6040516103749190613736565b60405180910390f35b348015610388575f80fd5b506103a3600480360381019061039e919061387e565b610caf565b005b3480156103b0575f80fd5b506103b9610e1b565b6040516103c69190613736565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f091906138a9565b610e2d565b6040516104029190613736565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c919061387e565b610f47565b005b34801561043e575f80fd5b506104476110b2565b604051610454919061383a565b60405180910390f35b348015610468575f80fd5b50610483600480360381019061047e91906138f9565b6111ab565b005b348015610490575f80fd5b506104996112f6565b6040516104a69190613736565b60405180910390f35b3480156104ba575f80fd5b506104c3611308565b6040516104d0919061393f565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa91906136de565b611310565b60405161050c9190613736565b60405180910390f35b348015610520575f80fd5b506105296113b7565b6040516105369190613736565b60405180910390f35b34801561054a575f80fd5b506105536113c9565b6040516105609190613967565b60405180910390f35b348015610574575f80fd5b5061057d6113ee565b60405161058a9190613736565b60405180910390f35b34801561059e575f80fd5b506105b960048036038101906105b49190613853565b611401565b6040516105c69190613736565b60405180910390f35b3480156105da575f80fd5b506105e3611453565b6040516105f0919061383a565b60405180910390f35b348015610604575f80fd5b5061061f600480360381019061061a91906138f9565b611459565b005b34801561062c575f80fd5b5061064760048036038101906106429190613853565b6115a4565b604051610654919061383a565b60405180910390f35b348015610668575f80fd5b506106716115e9565b005b34801561067e575f80fd5b5061068761173c565b6040516106949190613967565b60405180910390f35b3480156106a8575f80fd5b506106b1611761565b005b3480156106be575f80fd5b506106c761186b565b6040516106d49190613967565b60405180910390f35b3480156106e8575f80fd5b506106f1611893565b6040516106fe919061383a565b60405180910390f35b348015610712575f80fd5b5061072d60048036038101906107289190613779565b611914565b005b34801561073a575f80fd5b50610743611adf565b604051610750919061362d565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a91906138f9565b611b6f565b005b34801561078c575f80fd5b506107a760048036038101906107a291906136de565b611c66565b6040516107b49190613736565b60405180910390f35b3480156107c8575f80fd5b506107e360048036038101906107de9190613853565b611d4c565b6040516107f09190613736565b60405180910390f35b348015610804575f80fd5b5061081f600480360381019061081a91906136de565b611d9e565b60405161082c9190613736565b60405180910390f35b348015610840575f80fd5b50610849611dbb565b604051610856919061383a565b60405180910390f35b34801561086a575f80fd5b506108856004803603810190610880919061387e565b611dc1565b005b348015610892575f80fd5b506108ad60048036038101906108a89190613853565b611ef1565b005b3480156108ba575f80fd5b506108d560048036038101906108d09190613779565b612038565b005b3480156108e2575f80fd5b506108eb612203565b6040516108f8919061383a565b60405180910390f35b34801561090c575f80fd5b5061092760048036038101906109229190613980565b612209565b604051610934919061383a565b60405180910390f35b348015610948575f80fd5b5061095161228b565b60405161095e919061383a565b60405180910390f35b348015610972575f80fd5b5061098d60048036038101906109889190613853565b612291565b005b34801561099a575f80fd5b506109b560048036038101906109b09190613853565b612453565b005b6060600380546109c6906139eb565b80601f01602080910402602001604051908101604052809291908181526020018280546109f2906139eb565b8015610a3d5780601f10610a1457610100808354040283529160200191610a3d565b820191905f5260205f20905b815481529060010190602001808311610a2057829003601f168201915b5050505050905090565b5f610a5a610a536126cb565b84846126d2565b6001905092915050565b610a6c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190613a65565b60405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613af3565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051610c239190613736565b60405180910390a25050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610cb76126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90613a65565b60405180910390fd5b6103e8610d50611308565b600a610d5c9190613c6d565b610d64610c54565b610d6e9190613ce4565b610d789190613ce4565b811015610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613d84565b60405180910390fd5b610dc2611308565b600a610dce9190613c6d565b81610dd99190613da2565b6015819055507f82752703028499b617ec0b1cf458c9689993344fd9c6ed80eeb873658cf5ad7f601554604051610e10919061383a565b60405180910390a150565b60115f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e756126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f305782811015610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613e53565b60405180910390fd5b610f2f85610f276126cb565b8584036126d2565b5b610f3b858585612895565b60019150509392505050565b610f4f6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613a65565b60405180910390fd5b6064610fe7611308565b600a610ff39190613c6d565b610ffb610c54565b6110059190613ce4565b61100f9190613ce4565b811015611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613ee1565b60405180910390fd5b611059611308565b600a6110659190613c6d565b816110709190613da2565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516110a7919061383a565b60405180910390a150565b5f8061012c600954426110c59190613eff565b10156110d457600f90506111a4565b61012c600954426110e59190613eff565b101580156111015750610258600954426110ff9190613eff565b105b1561110f57600a90506111a3565b610258600954426111209190613eff565b1015801561113c57506103846009544261113a9190613eff565b105b1561114a57600590506111a2565b6103846009544261115b9190613eff565b1015801561117757506105dc600954426111759190613eff565b105b1561118557600190506111a1565b6105dc600954426111969190613eff565b106111a057600190505b5b5b5b5b8091505090565b6111b36126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613a65565b60405180910390fd5b60115f9054906101000a900460ff16151581151503611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90613fa2565b60405180910390fd5b8060115f6101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f160115f9054906101000a900460ff166040516112eb9190613736565b60405180910390a150565b60145f9054906101000a900460ff1681565b5f6012905090565b5f6113ad61131c6126cb565b848460015f6113296126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113a89190613fc0565b6126d2565b6001905092915050565b600f5f9054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60149054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b6114616126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690613a65565b60405180910390fd5b60145f9054906101000a900460ff16151581151503611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90614063565b60405180910390fd5b8060145f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60145f9054906101000a900460ff166040516115999190613736565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115f16126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117696126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613a65565b60405180910390fd5b600d60149054906101000a900460ff1615611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906140cb565b60405180910390fd5b6001600d60146101000a81548160ff02191690831515021790555042600981905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80610384600954426118a69190613eff565b10156118b5576005905061190d565b610384600954426118c69190613eff565b101580156118e257506105dc600954426118e09190613eff565b105b156118f0576001905061190c565b6105dc600954426119019190613eff565b1061190b57600190505b5b5b8091505090565b61191c6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190613a65565b60405180910390fd5b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090613af3565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c82604051611ad39190613736565b60405180910390a25050565b606060048054611aee906139eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1a906139eb565b8015611b655780601f10611b3c57610100808354040283529160200191611b65565b820191905f5260205f20905b815481529060010190602001808311611b4857829003601f168201915b5050505050905090565b611b776126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90613a65565b60405180910390fd5b80600f5f6101000a81548160ff0219169083151502179055507f94da5f18dc9529c37f2af4ffa1921f49d8bb14b6e5fe22b0d6ddc94f102f9232600f5f9054906101000a900460ff16604051611c5b9190613736565b60405180910390a150565b5f8060015f611c736126cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490614159565b60405180910390fd5b611d41611d386126cb565b858584036126d2565b600191505092915050565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611db1611daa6126cb565b8484612895565b6001905092915050565b60125481565b611dc96126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613a65565b60405180910390fd5b620f4240611e63610c54565b611e6d9190613ce4565b8111611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea5906141e7565b60405180910390fd5b80600e819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600e54604051611ee6919061383a565b60405180910390a150565b611ef96126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614275565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120406126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613a65565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614303565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121f79190613736565b60405180910390a25050565b60155481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e5481565b6122996126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90614391565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61245b6126cb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613a65565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ca575f3373ffffffffffffffffffffffffffffffffffffffff1647604051612541906143dc565b5f6040518083038185875af1925050503d805f811461257b576040519150601f19603f3d011682016040523d82523d5f602084013e612580565b606091505b50509050806125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061443a565b60405180910390fd5b506126c8565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126089190613967565b602060405180830381865afa158015612623573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612647919061446c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612684929190614497565b6020604051808303815f875af11580156126a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c491906144d2565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127379061456d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a5906145fb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612888919061383a565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fa90614689565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296890614717565b60405180910390fd5b600d60149054906101000a900460ff16806129d2575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612a23575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a599061477f565b60405180910390fd5b5f8103612a7957612a7483835f61306c565b613067565b60145f9054906101000a900460ff1615612c305760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b34575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b8c57505f151560135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612be457505f151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15612c2f57601554811115612c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c259061480d565b60405180910390fd5b5b5b5f612c3a306115a4565b90505f600e548210159050808015612c5f5750600f60019054906101000a900460ff16155b8015612cb7575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612d15576001600f60016101000a81548160ff021916908315150217905550600f5f9054906101000a900460ff1615612cf157600e5491505b612cfa826132e1565b5f600f60016101000a81548160ff0219169083151502179055505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612db1575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612dc85750600f60019054906101000a900460ff165b15612dd5575f9050612ea1565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612e3857612e31611893565b9050612ea0565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612e9b57612e946110b2565b9050612e9f565b5f90505b5b5b5f811115612edf575f60648286612eb89190613da2565b612ec29190613ce4565b90508085612ed09190613eff565b9450612edd87308361306c565b505b60115f9054906101000a900460ff1615613058575f151560105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515148015612f9b57505f151560105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612ff4575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613057575f613003866115a4565b905060125485826130149190613fc0565b1115613055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304c9061489b565b60405180910390fd5b505b5b61306386868661306c565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d190614689565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614717565b60405180910390fd5b613153838383613599565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cd90614929565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132649190613fc0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c8919061383a565b60405180910390a36132db84848461359e565b50505050565b5f4790505f600267ffffffffffffffff81111561330157613300614947565b5b60405190808252806020026020018201604052801561332f5781602001602082028036833780820191505090505b50905030815f8151811061334657613345614974565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340e91906149b5565b8160018151811061342257613421614974565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b81526004016134be959493929190614ad0565b5f604051808303815f87803b1580156134d5575f80fd5b505af11580156134e7573d5f803e3d5ffd5b505050505f82476134f89190613eff565b90505f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505090508015613592577f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8583604051613589929190614b28565b60405180910390a15b5050505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135da5780820151818401526020810190506135bf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135ff826135a3565b61360981856135ad565b93506136198185602086016135bd565b613622816135e5565b840191505092915050565b5f6020820190508181035f83015261364581846135f5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61367a82613651565b9050919050565b61368a81613670565b8114613694575f80fd5b50565b5f813590506136a581613681565b92915050565b5f819050919050565b6136bd816136ab565b81146136c7575f80fd5b50565b5f813590506136d8816136b4565b92915050565b5f80604083850312156136f4576136f361364d565b5b5f61370185828601613697565b9250506020613712858286016136ca565b9150509250929050565b5f8115159050919050565b6137308161371c565b82525050565b5f6020820190506137495f830184613727565b92915050565b6137588161371c565b8114613762575f80fd5b50565b5f813590506137738161374f565b92915050565b5f806040838503121561378f5761378e61364d565b5b5f61379c85828601613697565b92505060206137ad85828601613765565b9150509250929050565b5f819050919050565b5f6137da6137d56137d084613651565b6137b7565b613651565b9050919050565b5f6137eb826137c0565b9050919050565b5f6137fc826137e1565b9050919050565b61380c816137f2565b82525050565b5f6020820190506138255f830184613803565b92915050565b613834816136ab565b82525050565b5f60208201905061384d5f83018461382b565b92915050565b5f602082840312156138685761386761364d565b5b5f61387584828501613697565b91505092915050565b5f602082840312156138935761389261364d565b5b5f6138a0848285016136ca565b91505092915050565b5f805f606084860312156138c0576138bf61364d565b5b5f6138cd86828701613697565b93505060206138de86828701613697565b92505060406138ef868287016136ca565b9150509250925092565b5f6020828403121561390e5761390d61364d565b5b5f61391b84828501613765565b91505092915050565b5f60ff82169050919050565b61393981613924565b82525050565b5f6020820190506139525f830184613930565b92915050565b61396181613670565b82525050565b5f60208201905061397a5f830184613958565b92915050565b5f80604083850312156139965761399561364d565b5b5f6139a385828601613697565b92505060206139b485828601613697565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a0257607f821691505b602082108103613a1557613a146139be565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a4f6020836135ad565b9150613a5a82613a1b565b602082019050919050565b5f6020820190508181035f830152613a7c81613a43565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f613add6024836135ad565b9150613ae882613a83565b604082019050919050565b5f6020820190508181035f830152613b0a81613ad1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613b9357808604811115613b6f57613b6e613b11565b5b6001851615613b7e5780820291505b8081029050613b8c85613b3e565b9450613b53565b94509492505050565b5f82613bab5760019050613c66565b81613bb8575f9050613c66565b8160018114613bce5760028114613bd857613c07565b6001915050613c66565b60ff841115613bea57613be9613b11565b5b8360020a915084821115613c0157613c00613b11565b5b50613c66565b5060208310610133831016604e8410600b8410161715613c3c5782820a905083811115613c3757613c36613b11565b5b613c66565b613c498484846001613b4a565b92509050818404811115613c6057613c5f613b11565b5b81810290505b9392505050565b5f613c77826136ab565b9150613c8283613924565b9250613caf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b9c565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cee826136ab565b9150613cf9836136ab565b925082613d0957613d08613cb7565b5b828204905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f74206265205f8201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b5f613d6e603f836135ad565b9150613d7982613d14565b604082019050919050565b5f6020820190508181035f830152613d9b81613d62565b9050919050565b5f613dac826136ab565b9150613db7836136ab565b9250828202613dc5816136ab565b91508282048414831517613ddc57613ddb613b11565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e3d6028836135ad565b9150613e4882613de3565b604082019050919050565b5f6020820190508181035f830152613e6a81613e31565b9050919050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f613ecb602d836135ad565b9150613ed682613e71565b604082019050919050565b5f6020820190508181035f830152613ef881613ebf565b9050919050565b5f613f09826136ab565b9150613f14836136ab565b9250828203905081811115613f2c57613f2b613b11565b5b92915050565b7f4d61782077616c6c6574206c696d697420697320616c726561647920736574205f8201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b5f613f8c602d836135ad565b9150613f9782613f32565b604082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b5f613fca826136ab565b9150613fd5836136ab565b9250828201905080821115613fed57613fec613b11565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f61404d6032836135ad565b915061405882613ff3565b604082019050919050565b5f6020820190508181035f83015261407a81614041565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c65640000000000005f82015250565b5f6140b5601a836135ad565b91506140c082614081565b602082019050919050565b5f6020820190508181035f8301526140e2816140a9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141436025836135ad565b915061414e826140e9565b604082019050919050565b5f6020820190508181035f83015261417081614137565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d7573742062652067726561745f8201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b5f6141d1603f836135ad565b91506141dc82614177565b604082019050919050565b5f6020820190508181035f8301526141fe816141c5565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61425f602b836135ad565b915061426a82614205565b604082019050919050565b5f6020820190508181035f83015261428c81614253565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f6142ed602a836135ad565b91506142f882614293565b604082019050919050565b5f6020820190508181035f83015261431a816142e1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61437b6026836135ad565b915061438682614321565b604082019050919050565b5f6020820190508181035f8301526143a88161436f565b9050919050565b5f81905092915050565b50565b5f6143c75f836143af565b91506143d2826143b9565b5f82019050919050565b5f6143e6826143bc565b9150819050919050565b7f436c61696d206661696c656400000000000000000000000000000000000000005f82015250565b5f614424600c836135ad565b915061442f826143f0565b602082019050919050565b5f6020820190508181035f83015261445181614418565b9050919050565b5f81519050614466816136b4565b92915050565b5f602082840312156144815761448061364d565b5b5f61448e84828501614458565b91505092915050565b5f6040820190506144aa5f830185613958565b6144b7602083018461382b565b9392505050565b5f815190506144cc8161374f565b92915050565b5f602082840312156144e7576144e661364d565b5b5f6144f4848285016144be565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6145576024836135ad565b9150614562826144fd565b604082019050919050565b5f6020820190508181035f8301526145848161454b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145e56022836135ad565b91506145f08261458b565b604082019050919050565b5f6020820190508181035f830152614612816145d9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146736025836135ad565b915061467e82614619565b604082019050919050565b5f6020820190508181035f8301526146a081614667565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147016023836135ad565b915061470c826146a7565b604082019050919050565b5f6020820190508181035f83015261472e816146f5565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965740000000000005f82015250565b5f614769601a836135ad565b915061477482614735565b602082019050919050565b5f6020820190508181035f8301526147968161475d565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f6147f7603b836135ad565b91506148028261479d565b604082019050919050565b5f6020820190508181035f830152614824816147eb565b9050919050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f6148856030836135ad565b91506148908261482b565b604082019050919050565b5f6020820190508181035f8301526148b281614879565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149136026836135ad565b915061491e826148b9565b604082019050919050565b5f6020820190508181035f83015261494081614907565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506149af81613681565b92915050565b5f602082840312156149ca576149c961364d565b5b5f6149d7848285016149a1565b91505092915050565b5f819050919050565b5f614a036149fe6149f9846149e0565b6137b7565b6136ab565b9050919050565b614a13816149e9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614a4b81613670565b82525050565b5f614a5c8383614a42565b60208301905092915050565b5f602082019050919050565b5f614a7e82614a19565b614a888185614a23565b9350614a9383614a33565b805f5b83811015614ac3578151614aaa8882614a51565b9750614ab583614a68565b925050600181019050614a96565b5085935050505092915050565b5f60a082019050614ae35f83018861382b565b614af06020830187614a0a565b8181036040830152614b028186614a74565b9050614b116060830185613958565b614b1e608083018461382b565b9695505050505050565b5f604082019050614b3b5f83018561382b565b614b48602083018461382b565b939250505056fea2646970667358221220a6dac6a5d92ec99e1f6f9bd1c894833ad404c1b2b0d629f6024d5f98e9b3195f64736f6c63430008140033

Deployed Bytecode Sourcemap

17362:12004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12647:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13561:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28846:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17403:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12968:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29218:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28404:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26564:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13738:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26978:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21372:787;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26653:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27947:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12867:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14319:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17846:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17451:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17768;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22472:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17551:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28048:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13084:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11834:148;;;;;;;;;;;;;:::i;:::-;;17657:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20239:192;;;;;;;;;;;;;:::i;:::-;;11620:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20875:489;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27362:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12755:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25639:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14542:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27727:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13219:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26614:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25331:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22606:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22174:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28003:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13402:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17806:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11990:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20441:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12647:100;12701:13;12734:5;12727:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12647:100;:::o;13561:169::-;13644:4;13661:39;13670:12;:10;:12::i;:::-;13684:7;13693:6;13661:8;:39::i;:::-;13718:4;13711:11;;13561:169;;;;:::o;28846:364::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29010:7:::1;28972:45;;:25;:34;28998:7;28972:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;28950:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29130:7;29093:25;:34;29119:7;29093:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;29185:7;29153:49;;;29194:7;29153:49;;;;;;:::i;:::-;;;;;;;;28846:364:::0;;:::o;17403:41::-;;;;;;;;;;;;;:::o;12968:108::-;13029:7;13056:12;;13049:19;;12968:108;:::o;29218:141::-;29293:4;29317:25;:34;29343:7;29317:34;;;;;;;;;;;;;;;;;;;;;;;;;29310:41;;29218:141;;;:::o;28404:434::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28585:4:::1;28570:10;:8;:10::i;:::-;28564:2;:16;;;;:::i;:::-;28547:13;:11;:13::i;:::-;:34;;;;:::i;:::-;28546:43;;;;:::i;:::-;28520:21;:69;;28498:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;28749:10;:8;:10::i;:::-;28743:2;:16;;;;:::i;:::-;28717:21;:43;;;;:::i;:::-;28693:20;:67;;;;28776:54;28809:20;;28776:54;;;;;;:::i;:::-;;;;;;;;28404:434:::0;:::o;26564:43::-;;;;;;;;;;;;;:::o;13738:573::-;13878:4;13895:24;13922:11;:19;13934:6;13922:19;;;;;;;;;;;;;;;:33;13942:12;:10;:12::i;:::-;13922:33;;;;;;;;;;;;;;;;13895:60;;13990:17;13970:16;:37;13966:265;;14052:6;14032:16;:26;;14024:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14147:57;14156:6;14164:12;:10;:12::i;:::-;14197:6;14178:16;:25;14147:8;:57::i;:::-;13966:265;14243:36;14253:6;14261:9;14272:6;14243:9;:36::i;:::-;14299:4;14292:11;;;13738:573;;;;;:::o;26978:376::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27143:3:::1;27128:10;:8;:10::i;:::-;27122:2;:16;;;;:::i;:::-;27105:13;:11;:13::i;:::-;:34;;;;:::i;:::-;27104:42;;;;:::i;:::-;27084:16;:62;;27062:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27275:10;:8;:10::i;:::-;27269:2;:16;;;;:::i;:::-;27249;:37;;;;:::i;:::-;27231:15;:55;;;;27302:44;27330:15;;27302:44;;;;;;:::i;:::-;;;;;;;;26978:376:::0;:::o;21372:787::-;21415:7;21437:16;21508:9;21488:17;;21470:15;:35;;;;:::i;:::-;:47;21466:658;;;21546:2;21534:14;;21466:658;;;21610:9;21589:17;;21571:15;:35;;;;:::i;:::-;:48;;:100;;;;;21661:10;21641:17;;21623:15;:35;;;;:::i;:::-;:48;21571:100;21567:557;;;21700:2;21688:14;;21567:557;;;21764:10;21743:17;;21725:15;:35;;;;:::i;:::-;:49;;:101;;;;;21816:10;21796:17;;21778:15;:35;;;;:::i;:::-;:48;21725:101;21721:403;;;21855:1;21843:13;;21721:403;;;21918:10;21897:17;;21879:15;:35;;;;:::i;:::-;:49;;:101;;;;;21970:10;21950:17;;21932:15;:35;;;;:::i;:::-;:48;21879:101;21875:249;;;22009:1;21997:13;;21875:249;;;22072:10;22051:17;;22033:15;:35;;;;:::i;:::-;:49;22029:95;;22111:1;22099:13;;22029:95;21875:249;21721:403;21567:557;21466:658;22143:8;22136:15;;;21372:787;:::o;26653:317::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26761:21:::1;;;;;;;;;;;26751:31;;:6;:31;;::::0;26729:127:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26891:6;26867:21;;:30;;;;;;;;;;;;;;;;;;26913:49;26940:21;;;;;;;;;;;26913:49;;;;;;:::i;:::-;;;;;;;;26653:317:::0;:::o;27947:49::-;;;;;;;;;;;;;:::o;12867:93::-;12925:5;12950:2;12943:9;;12867:93;:::o;14319:215::-;14407:4;14424:80;14433:12;:10;:12::i;:::-;14447:7;14493:10;14456:11;:25;14468:12;:10;:12::i;:::-;14456:25;;;;;;;;;;;;;;;:34;14482:7;14456:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14424:8;:80::i;:::-;14522:4;14515:11;;14319:215;;;;:::o;17846:28::-;;;;;;;;;;;;;:::o;17451:29::-;;;;;;;;;;;;;:::o;17768:::-;;;;;;;;;;;;;:::o;22472:125::-;22537:4;22561:19;:28;22581:7;22561:28;;;;;;;;;;;;;;;;;;;;;;;;;22554:35;;22472:125;;;:::o;17551:32::-;;;;:::o;28048:348::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:26:::1;;;;;;;;;;;28152:36;;:6;:36;;::::0;28130:137:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28307:6;28278:26;;:35;;;;;;;;;;;;;;;;;;28329:59;28361:26;;;;;;;;;;;28329:59;;;;;;:::i;:::-;;;;;;;;28048:348:::0;:::o;13084:127::-;13158:7;13185:9;:18;13195:7;13185:18;;;;;;;;;;;;;;;;13178:25;;13084:127;;;:::o;11834:148::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11941:1:::1;11904:40;;11925:6;;;;;;;;;;;11904:40;;;;;;;;;;;;11972:1;11955:6;;:19;;;;;;;;;;;;;;;;;;11834:148::o:0;17657:30::-;;;;;;;;;;;;;:::o;20239:192::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20300:14:::1;;;;;;;;;;;20299:15;20291:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20373:4;20356:14;;:21;;;;;;;;;;;;;;;;;;20408:15;20388:17;:35;;;;20239:192::o:0;11620:79::-;11658:7;11685:6;;;;;;;;;;;11678:13;;11620:79;:::o;20875:489::-;20917:7;20947:15;21017:10;20997:17;;20979:15;:35;;;;:::i;:::-;:48;20975:347;;;21055:1;21044:12;;20975:347;;;21118:10;21097:17;;21079:15;:35;;;;:::i;:::-;:49;;:101;;;;;21170:10;21150:17;;21132:15;:35;;;;:::i;:::-;:48;21079:101;21075:247;;;21208:1;21197:12;;21075:247;;;21271:10;21250:17;;21232:15;:35;;;;:::i;:::-;:49;21228:94;;21309:1;21298:12;;21228:94;21075:247;20975:347;21349:7;21342:14;;;20875:489;:::o;27362:357::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27520:7:::1;27478:49;;:29;:38;27508:7;27478:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;27456:136:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27644:7;27603:29;:38;27633:7;27603:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;27694:7;27667:44;;;27703:7;27667:44;;;;;;:::i;:::-;;;;;;;;27362:357:::0;;:::o;12755:104::-;12811:13;12844:7;12837:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12755:104;:::o;25639:165::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25731:14:::1;25715:13;;:30;;;;;;;;;;;;;;;;;;25761:35;25782:13;;;;;;;;;;;25761:35;;;;;;:::i;:::-;;;;;;;;25639:165:::0;:::o;14542:413::-;14635:4;14652:24;14679:11;:25;14691:12;:10;:12::i;:::-;14679:25;;;;;;;;;;;;;;;:34;14705:7;14679:34;;;;;;;;;;;;;;;;14652:61;;14752:15;14732:16;:35;;14724:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14845:67;14854:12;:10;:12::i;:::-;14868:7;14896:15;14877:16;:34;14845:8;:67::i;:::-;14943:4;14936:11;;;14542:413;;;;:::o;27727:145::-;27802:4;27826:29;:38;27856:7;27826:38;;;;;;;;;;;;;;;;;;;;;;;;;27819:45;;27727:145;;;:::o;13219:175::-;13305:4;13322:42;13332:12;:10;:12::i;:::-;13346:9;13357:6;13322:9;:42::i;:::-;13382:4;13375:11;;13219:175;;;;:::o;26614:30::-;;;;:::o;25331:300::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25446:7:::1;25430:13;:11;:13::i;:::-;:23;;;;:::i;:::-;25418:9;:35;25410:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25553:9;25532:18;:30;;;;25578:45;25604:18;;25578:45;;;;;;:::i;:::-;;;;;;;;25331:300:::0;:::o;22606:226::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22729:1:::1;22701:30;;:16;:30;;::::0;22693:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22808:16;22790:15;;:34;;;;;;;;;;;;;;;;;;22606:226:::0;:::o;22174:290::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22300:8:::1;22268:40;;:19;:28;22288:7;22268:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;22260:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22396:8;22365:19;:28;22385:7;22365:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22438:7;22422:34;;;22447:8;22422:34;;;;;;:::i;:::-;;;;;;;;22174:290:::0;;:::o;28003:36::-;;;;:::o;13402:151::-;13491:7;13518:11;:18;13530:5;13518:18;;;;;;;;;;;;;;;:27;13537:7;13518:27;;;;;;;;;;;;;;;;13511:34;;13402:151;;;;:::o;17806:33::-;;;;:::o;11990:244::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12099:1:::1;12079:22;;:8;:22;;::::0;12071:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12189:8;12160:38;;12181:6;;;;;;;;;;;12160:38;;;;;;;;;;;;12218:8;12209:6;;:17;;;;;;;;;;;;;;;;;;11990:244:::0;:::o;20441:426::-;11757:12;:10;:12::i;:::-;11747:22;;:6;;;;;;;;;;;:22;;;11739:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20533:3:::1;20516:21;;:5;:21;;::::0;20512:189:::1;;20555:12;20572:10;:15;;20595:21;20572:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20554:67;;;20644:7;20636:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;20683:7;;;20512:189;20711:17;20738:5;20711:33;;20755:15;20773:10;:20;;;20802:4;20773:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20755:53;;20819:10;:19;;;20839:10;20851:7;20819:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20501:366;;11817:1;20441:426:::0;:::o;10943:98::-;10996:7;11023:10;11016:17;;10943:98;:::o;16710:380::-;16863:1;16846:19;;:5;:19;;;16838:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16944:1;16925:21;;:7;:21;;;16917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17028:6;16998:11;:18;17010:5;16998:18;;;;;;;;;;;;;;;:27;17017:7;16998:27;;;;;;;;;;;;;;;:36;;;;17066:7;17050:32;;17059:5;17050:32;;;17075:6;17050:32;;;;;;:::i;:::-;;;;;;;;16710:380;;;:::o;22844:2479::-;22957:1;22941:18;;:4;:18;;;22933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23034:1;23020:16;;:2;:16;;;23012:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23095:14;;;;;;;;;;;:43;;;;23113:19;:25;23133:4;23113:25;;;;;;;;;;;;;;;;;;;;;;;;;23095:43;:70;;;;23142:19;:23;23162:2;23142:23;;;;;;;;;;;;;;;;;;;;;;;;;23095:70;23087:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23235:1;23225:6;:11;23221:93;;23253:28;23269:4;23275:2;23279:1;23253:15;:28::i;:::-;23296:7;;23221:93;23330:26;;;;;;;;;;;23326:410;;;23396:13;;;;;;;;;;;23388:21;;:4;:21;;;:44;;;;23419:13;;;;;;;;;;;23413:19;;:2;:19;;;23388:44;23387:107;;;;;23489:5;23454:40;;:25;:31;23480:4;23454:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;23387:107;:169;;;;;23551:5;23516:40;;:25;:29;23542:2;23516:29;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;23387:169;23383:342;;;23609:20;;23599:6;:30;;23591:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23383:342;23326:410;23746:28;23777:24;23795:4;23777:9;:24::i;:::-;23746:55;;23814:12;23853:18;;23829:20;:42;;23814:57;;23888:7;:33;;;;;23913:8;;;;;;;;;;;23912:9;23888:33;:69;;;;;23944:13;;;;;;;;;;;23938:19;;:2;:19;;;23888:69;23884:322;;;23995:4;23984:8;;:15;;;;;;;;;;;;;;;;;;24020:13;;;;;;;;;;;24016:95;;;24077:18;;24054:41;;24016:95;24127:26;24132:20;24127:4;:26::i;:::-;24189:5;24178:8;;:16;;;;;;;;;;;;;;;;;;23884:322;24218:18;24251:19;:25;24271:4;24251:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24280:19;:23;24300:2;24280:23;;;;;;;;;;;;;;;;;;;;;;;;;24251:52;:64;;;;24307:8;;;;;;;;;;;24251:64;24247:350;;;24345:1;24332:14;;24247:350;;;24377:13;;;;;;;;;;;24369:21;;:4;:21;;;24365:232;;24421:11;:9;:11::i;:::-;24407:25;;24365:232;;;24461:13;;;;;;;;;;;24455:19;;:2;:19;;;24451:146;;24517:12;:10;:12::i;:::-;24504:25;;24451:146;;;24584:1;24571:14;;24451:146;24365:232;24247:350;24626:1;24613:10;:14;24609:183;;;24644:12;24683:3;24669:10;24660:6;:19;;;;:::i;:::-;24659:27;;;;:::i;:::-;24644:42;;24719:4;24710:6;:13;;;;:::i;:::-;24701:22;;24738:42;24754:4;24768;24775;24738:15;:42::i;:::-;24629:163;24609:183;24808:21;;;;;;;;;;;24804:466;;;24890:5;24850:45;;:29;:35;24880:4;24850:35;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;:112;;;;;24957:5;24917:45;;:29;:33;24947:2;24917:33;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;24850:112;:152;;;;;24989:13;;;;;;;;;;;24983:19;;:2;:19;;;;24850:152;24846:413;;;25037:12;25053:13;25063:2;25053:9;:13::i;:::-;25037:29;;25135:15;;25125:6;25115:7;:16;;;;:::i;:::-;:35;;25085:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;25018:241;24846:413;24804:466;25282:33;25298:4;25304:2;25308:6;25282:15;:33::i;:::-;22922:2401;;;22844:2479;;;;:::o;14963:733::-;15121:1;15103:20;;:6;:20;;;15095:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15205:1;15184:23;;:9;:23;;;15176:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15260:47;15281:6;15289:9;15300:6;15260:20;:47::i;:::-;15320:21;15344:9;:17;15354:6;15344:17;;;;;;;;;;;;;;;;15320:41;;15397:6;15380:13;:23;;15372:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15518:6;15502:13;:22;15482:9;:17;15492:6;15482:17;;;;;;;;;;;;;;;:42;;;;15570:6;15546:9;:20;15556:9;15546:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15611:9;15594:35;;15603:6;15594:35;;;15622:6;15594:35;;;;;;:::i;:::-;;;;;;;;15642:46;15662:6;15670:9;15681:6;15642:19;:46::i;:::-;15084:612;14963:733;;;:::o;25812:669::-;25866:22;25891:21;25866:46;;25925:21;25963:1;25949:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25925:40;;25994:4;25976;25981:1;25976:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26020:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26010:4;26015:1;26010:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26055:15;;;;;;;;;;;:66;;;26136:11;26162:1;26178:4;26205;26225:15;26055:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26254:18;26299:14;26275:21;:38;;;;:::i;:::-;26254:59;;26326:12;26349:15;;;;;;;;;;;26341:29;;:41;26371:10;26341:41;;;;;;;;;;;;;;;;;;;;;;;26326:56;;26397:7;26393:81;;;26426:36;26438:11;26451:10;26426:36;;;;;;;:::i;:::-;;;;;;;;26393:81;25855:626;;;;25812:669;:::o;17098:125::-;;;;:::o;17231:124::-;;;;:::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;1430:117::-;1539:1;1536;1529: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:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:468::-;3772:6;3780;3829:2;3817:9;3808:7;3804:23;3800:32;3797:119;;;3835:79;;:::i;:::-;3797:119;3955:1;3980:53;4025:7;4016:6;4005:9;4001:22;3980:53;:::i;:::-;3970:63;;3926:117;4082:2;4108:50;4150:7;4141:6;4130:9;4126:22;4108:50;:::i;:::-;4098:60;;4053:115;3707:468;;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:152::-;4603:9;4636:37;4667:5;4636:37;:::i;:::-;4623:50;;4527:152;;;:::o;4685:183::-;4798:63;4855:5;4798:63;:::i;:::-;4793:3;4786:76;4685:183;;:::o;4874:274::-;4993:4;5031:2;5020:9;5016:18;5008:26;;5044:97;5138:1;5127:9;5123:17;5114:6;5044:97;:::i;:::-;4874:274;;;;:::o;5154:118::-;5241:24;5259:5;5241:24;:::i;:::-;5236:3;5229:37;5154:118;;:::o;5278:222::-;5371:4;5409:2;5398:9;5394:18;5386:26;;5422:71;5490:1;5479:9;5475:17;5466:6;5422:71;:::i;:::-;5278:222;;;;:::o;5506:329::-;5565:6;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5506:329;;;;:::o;5841:::-;5900:6;5949:2;5937:9;5928:7;5924:23;5920:32;5917:119;;;5955:79;;:::i;:::-;5917:119;6075:1;6100:53;6145:7;6136:6;6125:9;6121:22;6100:53;:::i;:::-;6090:63;;6046:117;5841:329;;;;:::o;6176:619::-;6253:6;6261;6269;6318:2;6306:9;6297:7;6293:23;6289:32;6286:119;;;6324:79;;:::i;:::-;6286:119;6444:1;6469:53;6514:7;6505:6;6494:9;6490:22;6469:53;:::i;:::-;6459:63;;6415:117;6571:2;6597:53;6642:7;6633:6;6622:9;6618:22;6597:53;:::i;:::-;6587:63;;6542:118;6699:2;6725:53;6770:7;6761:6;6750:9;6746:22;6725:53;:::i;:::-;6715:63;;6670:118;6176:619;;;;;:::o;6801:323::-;6857:6;6906:2;6894:9;6885:7;6881:23;6877:32;6874:119;;;6912:79;;:::i;:::-;6874:119;7032:1;7057:50;7099:7;7090:6;7079:9;7075:22;7057:50;:::i;:::-;7047:60;;7003:114;6801:323;;;;:::o;7130:86::-;7165:7;7205:4;7198:5;7194:16;7183:27;;7130:86;;;:::o;7222:112::-;7305:22;7321:5;7305:22;:::i;:::-;7300:3;7293:35;7222:112;;:::o;7340:214::-;7429:4;7467:2;7456:9;7452:18;7444:26;;7480:67;7544:1;7533:9;7529:17;7520:6;7480:67;:::i;:::-;7340:214;;;;:::o;7560:118::-;7647:24;7665:5;7647:24;:::i;:::-;7642:3;7635:37;7560:118;;:::o;7684:222::-;7777:4;7815:2;7804:9;7800:18;7792:26;;7828:71;7896:1;7885:9;7881:17;7872:6;7828:71;:::i;:::-;7684:222;;;;:::o;7912:474::-;7980:6;7988;8037:2;8025:9;8016:7;8012:23;8008:32;8005:119;;;8043:79;;:::i;:::-;8005:119;8163:1;8188:53;8233:7;8224:6;8213:9;8209:22;8188:53;:::i;:::-;8178:63;;8134:117;8290:2;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8261:118;7912:474;;;;;:::o;8392:180::-;8440:77;8437:1;8430:88;8537:4;8534:1;8527:15;8561:4;8558:1;8551:15;8578:320;8622:6;8659:1;8653:4;8649:12;8639:22;;8706:1;8700:4;8696:12;8727:18;8717:81;;8783:4;8775:6;8771:17;8761:27;;8717:81;8845:2;8837:6;8834:14;8814:18;8811:38;8808:84;;8864:18;;:::i;:::-;8808:84;8629:269;8578:320;;;:::o;8904:182::-;9044:34;9040:1;9032:6;9028:14;9021:58;8904:182;:::o;9092:366::-;9234:3;9255:67;9319:2;9314:3;9255:67;:::i;:::-;9248:74;;9331:93;9420:3;9331:93;:::i;:::-;9449:2;9444:3;9440:12;9433:19;;9092:366;;;:::o;9464:419::-;9630:4;9668:2;9657:9;9653:18;9645:26;;9717:9;9711:4;9707:20;9703:1;9692:9;9688:17;9681:47;9745:131;9871:4;9745:131;:::i;:::-;9737:139;;9464:419;;;:::o;9889:223::-;10029:34;10025:1;10017:6;10013:14;10006:58;10098:6;10093:2;10085:6;10081:15;10074:31;9889:223;:::o;10118:366::-;10260:3;10281:67;10345:2;10340:3;10281:67;:::i;:::-;10274:74;;10357:93;10446:3;10357:93;:::i;:::-;10475:2;10470:3;10466:12;10459:19;;10118:366;;;:::o;10490:419::-;10656:4;10694:2;10683:9;10679:18;10671:26;;10743:9;10737:4;10733:20;10729:1;10718:9;10714:17;10707:47;10771:131;10897:4;10771:131;:::i;:::-;10763:139;;10490:419;;;:::o;10915:180::-;10963:77;10960:1;10953:88;11060:4;11057:1;11050:15;11084:4;11081:1;11074:15;11101:102;11143:8;11190:5;11187:1;11183:13;11162:34;;11101:102;;;:::o;11209:848::-;11270:5;11277:4;11301:6;11292:15;;11325:5;11316:14;;11339:712;11360:1;11350:8;11347:15;11339:712;;;11455:4;11450:3;11446:14;11440:4;11437:24;11434:50;;;11464:18;;:::i;:::-;11434:50;11514:1;11504:8;11500:16;11497:451;;;11929:4;11922:5;11918:16;11909:25;;11497:451;11979:4;11973;11969:15;11961:23;;12009:32;12032:8;12009:32;:::i;:::-;11997:44;;11339:712;;;11209:848;;;;;;;:::o;12063:1073::-;12117:5;12308:8;12298:40;;12329:1;12320:10;;12331:5;;12298:40;12357:4;12347:36;;12374:1;12365:10;;12376:5;;12347:36;12443:4;12491:1;12486:27;;;;12527:1;12522:191;;;;12436:277;;12486:27;12504:1;12495:10;;12506:5;;;12522:191;12567:3;12557:8;12554:17;12551:43;;;12574:18;;:::i;:::-;12551:43;12623:8;12620:1;12616:16;12607:25;;12658:3;12651:5;12648:14;12645:40;;;12665:18;;:::i;:::-;12645:40;12698:5;;;12436:277;;12822:2;12812:8;12809:16;12803:3;12797:4;12794:13;12790:36;12772:2;12762:8;12759:16;12754:2;12748:4;12745:12;12741:35;12725:111;12722:246;;;12878:8;12872:4;12868:19;12859:28;;12913:3;12906:5;12903:14;12900:40;;;12920:18;;:::i;:::-;12900:40;12953:5;;12722:246;12993:42;13031:3;13021:8;13015:4;13012:1;12993:42;:::i;:::-;12978:57;;;;13067:4;13062:3;13058:14;13051:5;13048:25;13045:51;;;13076:18;;:::i;:::-;13045:51;13125:4;13118:5;13114:16;13105:25;;12063:1073;;;;;;:::o;13142:281::-;13200:5;13224:23;13242:4;13224:23;:::i;:::-;13216:31;;13268:25;13284:8;13268:25;:::i;:::-;13256:37;;13312:104;13349:66;13339:8;13333:4;13312:104;:::i;:::-;13303:113;;13142:281;;;;:::o;13429:180::-;13477:77;13474:1;13467:88;13574:4;13571:1;13564:15;13598:4;13595:1;13588:15;13615:185;13655:1;13672:20;13690:1;13672:20;:::i;:::-;13667:25;;13706:20;13724:1;13706:20;:::i;:::-;13701:25;;13745:1;13735:35;;13750:18;;:::i;:::-;13735:35;13792:1;13789;13785:9;13780:14;;13615:185;;;;:::o;13806:250::-;13946:34;13942:1;13934:6;13930:14;13923:58;14015:33;14010:2;14002:6;13998:15;13991:58;13806:250;:::o;14062:366::-;14204:3;14225:67;14289:2;14284:3;14225:67;:::i;:::-;14218:74;;14301:93;14390:3;14301:93;:::i;:::-;14419:2;14414:3;14410:12;14403:19;;14062:366;;;:::o;14434:419::-;14600:4;14638:2;14627:9;14623:18;14615:26;;14687:9;14681:4;14677:20;14673:1;14662:9;14658:17;14651:47;14715:131;14841:4;14715:131;:::i;:::-;14707:139;;14434:419;;;:::o;14859:410::-;14899:7;14922:20;14940:1;14922:20;:::i;:::-;14917:25;;14956:20;14974:1;14956:20;:::i;:::-;14951:25;;15011:1;15008;15004:9;15033:30;15051:11;15033:30;:::i;:::-;15022:41;;15212:1;15203:7;15199:15;15196:1;15193:22;15173:1;15166:9;15146:83;15123:139;;15242:18;;:::i;:::-;15123:139;14907:362;14859:410;;;;:::o;15275:227::-;15415:34;15411:1;15403:6;15399:14;15392:58;15484:10;15479:2;15471:6;15467:15;15460:35;15275:227;:::o;15508:366::-;15650:3;15671:67;15735:2;15730:3;15671:67;:::i;:::-;15664:74;;15747:93;15836:3;15747:93;:::i;:::-;15865:2;15860:3;15856:12;15849:19;;15508:366;;;:::o;15880:419::-;16046:4;16084:2;16073:9;16069:18;16061:26;;16133:9;16127:4;16123:20;16119:1;16108:9;16104:17;16097:47;16161:131;16287:4;16161:131;:::i;:::-;16153:139;;15880:419;;;:::o;16305:232::-;16445:34;16441:1;16433:6;16429:14;16422:58;16514:15;16509:2;16501:6;16497:15;16490:40;16305:232;:::o;16543:366::-;16685:3;16706:67;16770:2;16765:3;16706:67;:::i;:::-;16699:74;;16782:93;16871:3;16782:93;:::i;:::-;16900:2;16895:3;16891:12;16884:19;;16543:366;;;:::o;16915:419::-;17081:4;17119:2;17108:9;17104:18;17096:26;;17168:9;17162:4;17158:20;17154:1;17143:9;17139:17;17132:47;17196:131;17322:4;17196:131;:::i;:::-;17188:139;;16915:419;;;:::o;17340:194::-;17380:4;17400:20;17418:1;17400:20;:::i;:::-;17395:25;;17434:20;17452:1;17434:20;:::i;:::-;17429:25;;17478:1;17475;17471:9;17463:17;;17502:1;17496:4;17493:11;17490:37;;;17507:18;;:::i;:::-;17490:37;17340:194;;;;:::o;17540:232::-;17680:34;17676:1;17668:6;17664:14;17657:58;17749:15;17744:2;17736:6;17732:15;17725:40;17540:232;:::o;17778:366::-;17920:3;17941:67;18005:2;18000:3;17941:67;:::i;:::-;17934:74;;18017:93;18106:3;18017:93;:::i;:::-;18135:2;18130:3;18126:12;18119:19;;17778:366;;;:::o;18150:419::-;18316:4;18354:2;18343:9;18339:18;18331:26;;18403:9;18397:4;18393:20;18389:1;18378:9;18374:17;18367:47;18431:131;18557:4;18431:131;:::i;:::-;18423:139;;18150:419;;;:::o;18575:191::-;18615:3;18634:20;18652:1;18634:20;:::i;:::-;18629:25;;18668:20;18686:1;18668:20;:::i;:::-;18663:25;;18711:1;18708;18704:9;18697:16;;18732:3;18729:1;18726:10;18723:36;;;18739:18;;:::i;:::-;18723:36;18575:191;;;;:::o;18772:237::-;18912:34;18908:1;18900:6;18896:14;18889:58;18981:20;18976:2;18968:6;18964:15;18957:45;18772:237;:::o;19015:366::-;19157:3;19178:67;19242:2;19237:3;19178:67;:::i;:::-;19171:74;;19254:93;19343:3;19254:93;:::i;:::-;19372:2;19367:3;19363:12;19356:19;;19015:366;;;:::o;19387:419::-;19553:4;19591:2;19580:9;19576:18;19568:26;;19640:9;19634:4;19630:20;19626:1;19615:9;19611:17;19604:47;19668:131;19794:4;19668:131;:::i;:::-;19660:139;;19387:419;;;:::o;19812:176::-;19952:28;19948:1;19940:6;19936:14;19929:52;19812:176;:::o;19994:366::-;20136:3;20157:67;20221:2;20216:3;20157:67;:::i;:::-;20150:74;;20233:93;20322:3;20233:93;:::i;:::-;20351:2;20346:3;20342:12;20335:19;;19994:366;;;:::o;20366:419::-;20532:4;20570:2;20559:9;20555:18;20547:26;;20619:9;20613:4;20609:20;20605:1;20594:9;20590:17;20583:47;20647:131;20773:4;20647:131;:::i;:::-;20639:139;;20366:419;;;:::o;20791:224::-;20931:34;20927:1;20919:6;20915:14;20908:58;21000:7;20995:2;20987:6;20983:15;20976:32;20791:224;:::o;21021:366::-;21163:3;21184:67;21248:2;21243:3;21184:67;:::i;:::-;21177:74;;21260:93;21349:3;21260:93;:::i;:::-;21378:2;21373:3;21369:12;21362:19;;21021:366;;;:::o;21393:419::-;21559:4;21597:2;21586:9;21582:18;21574:26;;21646:9;21640:4;21636:20;21632:1;21621:9;21617:17;21610:47;21674:131;21800:4;21674:131;:::i;:::-;21666:139;;21393:419;;;:::o;21818:250::-;21958:34;21954:1;21946:6;21942:14;21935:58;22027:33;22022:2;22014:6;22010:15;22003:58;21818:250;:::o;22074:366::-;22216:3;22237:67;22301:2;22296:3;22237:67;:::i;:::-;22230:74;;22313:93;22402:3;22313:93;:::i;:::-;22431:2;22426:3;22422:12;22415:19;;22074:366;;;:::o;22446:419::-;22612:4;22650:2;22639:9;22635:18;22627:26;;22699:9;22693:4;22689:20;22685:1;22674:9;22670:17;22663:47;22727:131;22853:4;22727:131;:::i;:::-;22719:139;;22446:419;;;:::o;22871:230::-;23011:34;23007:1;22999:6;22995:14;22988:58;23080:13;23075:2;23067:6;23063:15;23056:38;22871:230;:::o;23107:366::-;23249:3;23270:67;23334:2;23329:3;23270:67;:::i;:::-;23263:74;;23346:93;23435:3;23346:93;:::i;:::-;23464:2;23459:3;23455:12;23448:19;;23107:366;;;:::o;23479:419::-;23645:4;23683:2;23672:9;23668:18;23660:26;;23732:9;23726:4;23722:20;23718:1;23707:9;23703:17;23696:47;23760:131;23886:4;23760:131;:::i;:::-;23752:139;;23479:419;;;:::o;23904:229::-;24044:34;24040:1;24032:6;24028:14;24021:58;24113:12;24108:2;24100:6;24096:15;24089:37;23904:229;:::o;24139:366::-;24281:3;24302:67;24366:2;24361:3;24302:67;:::i;:::-;24295:74;;24378:93;24467:3;24378:93;:::i;:::-;24496:2;24491:3;24487:12;24480:19;;24139:366;;;:::o;24511:419::-;24677:4;24715:2;24704:9;24700:18;24692:26;;24764:9;24758:4;24754:20;24750:1;24739:9;24735:17;24728:47;24792:131;24918:4;24792:131;:::i;:::-;24784:139;;24511:419;;;:::o;24936:225::-;25076:34;25072:1;25064:6;25060:14;25053:58;25145:8;25140:2;25132:6;25128:15;25121:33;24936:225;:::o;25167:366::-;25309:3;25330:67;25394:2;25389:3;25330:67;:::i;:::-;25323:74;;25406:93;25495:3;25406:93;:::i;:::-;25524:2;25519:3;25515:12;25508:19;;25167:366;;;:::o;25539:419::-;25705:4;25743:2;25732:9;25728:18;25720:26;;25792:9;25786:4;25782:20;25778:1;25767:9;25763:17;25756:47;25820:131;25946:4;25820:131;:::i;:::-;25812:139;;25539:419;;;:::o;25964:147::-;26065:11;26102:3;26087:18;;25964:147;;;;:::o;26117:114::-;;:::o;26237:398::-;26396:3;26417:83;26498:1;26493:3;26417:83;:::i;:::-;26410:90;;26509:93;26598:3;26509:93;:::i;:::-;26627:1;26622:3;26618:11;26611:18;;26237:398;;;:::o;26641:379::-;26825:3;26847:147;26990:3;26847:147;:::i;:::-;26840:154;;27011:3;27004:10;;26641:379;;;:::o;27026:162::-;27166:14;27162:1;27154:6;27150:14;27143:38;27026:162;:::o;27194:366::-;27336:3;27357:67;27421:2;27416:3;27357:67;:::i;:::-;27350:74;;27433:93;27522:3;27433:93;:::i;:::-;27551:2;27546:3;27542:12;27535:19;;27194:366;;;:::o;27566:419::-;27732:4;27770:2;27759:9;27755:18;27747:26;;27819:9;27813:4;27809:20;27805:1;27794:9;27790:17;27783:47;27847:131;27973:4;27847:131;:::i;:::-;27839:139;;27566:419;;;:::o;27991:143::-;28048:5;28079:6;28073:13;28064:22;;28095:33;28122:5;28095:33;:::i;:::-;27991:143;;;;:::o;28140:351::-;28210:6;28259:2;28247:9;28238:7;28234:23;28230:32;28227:119;;;28265:79;;:::i;:::-;28227:119;28385:1;28410:64;28466:7;28457:6;28446:9;28442:22;28410:64;:::i;:::-;28400:74;;28356:128;28140:351;;;;:::o;28497:332::-;28618:4;28656:2;28645:9;28641:18;28633:26;;28669:71;28737:1;28726:9;28722:17;28713:6;28669:71;:::i;:::-;28750:72;28818:2;28807:9;28803:18;28794:6;28750:72;:::i;:::-;28497:332;;;;;:::o;28835:137::-;28889:5;28920:6;28914:13;28905:22;;28936:30;28960:5;28936:30;:::i;:::-;28835:137;;;;:::o;28978:345::-;29045:6;29094:2;29082:9;29073:7;29069:23;29065:32;29062:119;;;29100:79;;:::i;:::-;29062:119;29220:1;29245:61;29298:7;29289:6;29278:9;29274:22;29245:61;:::i;:::-;29235:71;;29191:125;28978:345;;;;:::o;29329:223::-;29469:34;29465:1;29457:6;29453:14;29446:58;29538:6;29533:2;29525:6;29521:15;29514:31;29329:223;:::o;29558:366::-;29700:3;29721:67;29785:2;29780:3;29721:67;:::i;:::-;29714:74;;29797:93;29886:3;29797:93;:::i;:::-;29915:2;29910:3;29906:12;29899:19;;29558:366;;;:::o;29930:419::-;30096:4;30134:2;30123:9;30119:18;30111:26;;30183:9;30177:4;30173:20;30169:1;30158:9;30154:17;30147:47;30211:131;30337:4;30211:131;:::i;:::-;30203:139;;29930:419;;;:::o;30355:221::-;30495:34;30491:1;30483:6;30479:14;30472:58;30564:4;30559:2;30551:6;30547:15;30540:29;30355:221;:::o;30582:366::-;30724:3;30745:67;30809:2;30804:3;30745:67;:::i;:::-;30738:74;;30821:93;30910:3;30821:93;:::i;:::-;30939:2;30934:3;30930:12;30923:19;;30582:366;;;:::o;30954:419::-;31120:4;31158:2;31147:9;31143:18;31135:26;;31207:9;31201:4;31197:20;31193:1;31182:9;31178:17;31171:47;31235:131;31361:4;31235:131;:::i;:::-;31227:139;;30954:419;;;:::o;31379:224::-;31519:34;31515:1;31507:6;31503:14;31496:58;31588:7;31583:2;31575:6;31571:15;31564:32;31379:224;:::o;31609:366::-;31751:3;31772:67;31836:2;31831:3;31772:67;:::i;:::-;31765:74;;31848:93;31937:3;31848:93;:::i;:::-;31966:2;31961:3;31957:12;31950:19;;31609:366;;;:::o;31981:419::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:131;32388:4;32262:131;:::i;:::-;32254:139;;31981:419;;;:::o;32406:222::-;32546:34;32542:1;32534:6;32530:14;32523:58;32615:5;32610:2;32602:6;32598:15;32591:30;32406:222;:::o;32634:366::-;32776:3;32797:67;32861:2;32856:3;32797:67;:::i;:::-;32790:74;;32873:93;32962:3;32873:93;:::i;:::-;32991:2;32986:3;32982:12;32975:19;;32634:366;;;:::o;33006:419::-;33172:4;33210:2;33199:9;33195:18;33187:26;;33259:9;33253:4;33249:20;33245:1;33234:9;33230:17;33223:47;33287:131;33413:4;33287:131;:::i;:::-;33279:139;;33006:419;;;:::o;33431:176::-;33571:28;33567:1;33559:6;33555:14;33548:52;33431:176;:::o;33613:366::-;33755:3;33776:67;33840:2;33835:3;33776:67;:::i;:::-;33769:74;;33852:93;33941:3;33852:93;:::i;:::-;33970:2;33965:3;33961:12;33954:19;;33613:366;;;:::o;33985:419::-;34151:4;34189:2;34178:9;34174:18;34166:26;;34238:9;34232:4;34228:20;34224:1;34213:9;34209:17;34202:47;34266:131;34392:4;34266:131;:::i;:::-;34258:139;;33985:419;;;:::o;34410:246::-;34550:34;34546:1;34538:6;34534:14;34527:58;34619:29;34614:2;34606:6;34602:15;34595:54;34410:246;:::o;34662:366::-;34804:3;34825:67;34889:2;34884:3;34825:67;:::i;:::-;34818:74;;34901:93;34990:3;34901:93;:::i;:::-;35019:2;35014:3;35010:12;35003:19;;34662:366;;;:::o;35034:419::-;35200:4;35238:2;35227:9;35223:18;35215:26;;35287:9;35281:4;35277:20;35273:1;35262:9;35258:17;35251:47;35315:131;35441:4;35315:131;:::i;:::-;35307:139;;35034:419;;;:::o;35459:235::-;35599:34;35595:1;35587:6;35583:14;35576:58;35668:18;35663:2;35655:6;35651:15;35644:43;35459:235;:::o;35700:366::-;35842:3;35863:67;35927:2;35922:3;35863:67;:::i;:::-;35856:74;;35939:93;36028:3;35939:93;:::i;:::-;36057:2;36052:3;36048:12;36041:19;;35700:366;;;:::o;36072:419::-;36238:4;36276:2;36265:9;36261:18;36253:26;;36325:9;36319:4;36315:20;36311:1;36300:9;36296:17;36289:47;36353:131;36479:4;36353:131;:::i;:::-;36345:139;;36072:419;;;:::o;36497:225::-;36637:34;36633:1;36625:6;36621:14;36614:58;36706:8;36701:2;36693:6;36689:15;36682:33;36497:225;:::o;36728:366::-;36870:3;36891:67;36955:2;36950:3;36891:67;:::i;:::-;36884:74;;36967:93;37056:3;36967:93;:::i;:::-;37085:2;37080:3;37076:12;37069:19;;36728:366;;;:::o;37100:419::-;37266:4;37304:2;37293:9;37289:18;37281:26;;37353:9;37347:4;37343:20;37339:1;37328:9;37324:17;37317:47;37381:131;37507:4;37381:131;:::i;:::-;37373:139;;37100:419;;;:::o;37525:180::-;37573:77;37570:1;37563:88;37670:4;37667:1;37660:15;37694:4;37691:1;37684:15;37711:180;37759:77;37756:1;37749:88;37856:4;37853:1;37846:15;37880:4;37877:1;37870:15;37897:143;37954:5;37985:6;37979:13;37970:22;;38001:33;38028:5;38001:33;:::i;:::-;37897:143;;;;:::o;38046:351::-;38116:6;38165:2;38153:9;38144:7;38140:23;38136:32;38133:119;;;38171:79;;:::i;:::-;38133:119;38291:1;38316:64;38372:7;38363:6;38352:9;38348:22;38316:64;:::i;:::-;38306:74;;38262:128;38046:351;;;;:::o;38403:85::-;38448:7;38477:5;38466:16;;38403:85;;;:::o;38494:158::-;38552:9;38585:61;38603:42;38612:32;38638:5;38612:32;:::i;:::-;38603:42;:::i;:::-;38585:61;:::i;:::-;38572:74;;38494:158;;;:::o;38658:147::-;38753:45;38792:5;38753:45;:::i;:::-;38748:3;38741:58;38658:147;;:::o;38811:114::-;38878:6;38912:5;38906:12;38896:22;;38811:114;;;:::o;38931:184::-;39030:11;39064:6;39059:3;39052:19;39104:4;39099:3;39095:14;39080:29;;38931:184;;;;:::o;39121:132::-;39188:4;39211:3;39203:11;;39241:4;39236:3;39232:14;39224:22;;39121:132;;;:::o;39259:108::-;39336:24;39354:5;39336:24;:::i;:::-;39331:3;39324:37;39259:108;;:::o;39373:179::-;39442:10;39463:46;39505:3;39497:6;39463:46;:::i;:::-;39541:4;39536:3;39532:14;39518:28;;39373:179;;;;:::o;39558:113::-;39628:4;39660;39655:3;39651:14;39643:22;;39558:113;;;:::o;39707:732::-;39826:3;39855:54;39903:5;39855:54;:::i;:::-;39925:86;40004:6;39999:3;39925:86;:::i;:::-;39918:93;;40035:56;40085:5;40035:56;:::i;:::-;40114:7;40145:1;40130:284;40155:6;40152:1;40149:13;40130:284;;;40231:6;40225:13;40258:63;40317:3;40302:13;40258:63;:::i;:::-;40251:70;;40344:60;40397:6;40344:60;:::i;:::-;40334:70;;40190:224;40177:1;40174;40170:9;40165:14;;40130:284;;;40134:14;40430:3;40423:10;;39831:608;;;39707:732;;;;:::o;40445:831::-;40708:4;40746:3;40735:9;40731:19;40723:27;;40760:71;40828:1;40817:9;40813:17;40804:6;40760:71;:::i;:::-;40841:80;40917:2;40906:9;40902:18;40893:6;40841:80;:::i;:::-;40968:9;40962:4;40958:20;40953:2;40942:9;40938:18;40931:48;40996:108;41099:4;41090:6;40996:108;:::i;:::-;40988:116;;41114:72;41182:2;41171:9;41167:18;41158:6;41114:72;:::i;:::-;41196:73;41264:3;41253:9;41249:19;41240:6;41196:73;:::i;:::-;40445:831;;;;;;;;:::o;41282:332::-;41403:4;41441:2;41430:9;41426:18;41418:26;;41454:71;41522:1;41511:9;41507:17;41498:6;41454:71;:::i;:::-;41535:72;41603:2;41592:9;41588:18;41579:6;41535:72;:::i;:::-;41282:332;;;;;:::o

Swarm Source

ipfs://a6dac6a5d92ec99e1f6f9bd1c894833ad404c1b2b0d629f6024d5f98e9b3195f

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.