ETH Price: $3,117.88 (+1.54%)
Gas: 4 Gwei

Token

GOTTA GO FAST (GGF)
 

Overview

Max Total Supply

8,000,000,000 GGF

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
56,000,000 GGF

Value
$0.00
0x3ed12a6db3d838ed42f91314738209f1db8eebf3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GOTTAGOFAST

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-08
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

/*                         ______                         
                     _.-*'"      "`*-._                   
                _.-*'                  `*-._              
             .-'                            `-.           
  /`-.    .-'                  _.              `-.        
 :    `..'                  .-'_ .                `.      
 |    .'                 .-'_.' \ .                 \     
 |   /                 .' .*     ;               .-'"     
 :   L                    `.     | ;          .-'         
  \.' `*.          .-*"*-.  `.   ; |        .'            
  /      \        '       `.  `-'  ;      .'              
 : .'"`.  .       .-*'`*-.  \     .      (_               
 |              .'        \  .             `*-.           
 |.     .      /           ;                   `-.        
 :    db      '       d$b  |                      `-.     
 .   :PT;.   '       :P"T; :                         `.   
 :   :bd;   '        :b_d; :                           \  
 |   :$$; `'         :$$$; |                            \ 
 |    TP              T$P  '                             ;
 :                        /.-*'"`.                       |
.sdP^T$bs.               /'       \                       
$$$._.$$$$b.--._      _.'   .--.   ;                      
`*$$$$$$P*'     `*--*'     '  / \  :                      
   \                        .'   ; ;   [Gotta Go Fast]              
    `.                  _.-'    ' /                       
      `*-.                      .'      Website:    https://www.sanic.wtf                    
          `*-._            _.-*'        Telegram:   https://t.me/GGF_portal                
               `*=--..--=*'             Twitter:    https://twitter.com/GGF_WTF
*/
 
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns(uint256);

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns(uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns(bool);

    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns(uint256);

    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns(bool);

    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns(bool);

        /**
        * @dev Emitted when `value` tokens are moved from one account (`from`) to
        * another (`to`).
        *
        * Note that `value` may be zero.
        */
        event Transfer(address indexed from, address indexed to, uint256 value);

        /**
        * @dev Emitted when the allowance of a `spender` for an `owner` is set by
        * a call to {approve}. `value` is the new allowance.
        */
        event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns(string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns(string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns(uint8);
}

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

}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns(string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns(string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns(uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns(uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns(bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns(uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

    
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


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

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

    function 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;
}
 
contract GOTTAGOFAST is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;

    // addresses
    address private developmentWallet;
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;

    struct Fees {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyDevelopmentFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevelopmentFee:0,
        sellLiquidityFee: 0
    });

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 private taxTill;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    constructor() ERC20("GOTTA GO FAST", "GGF") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

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

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

        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);

        uint256 totalSupply = 8e9 * 1e18;
        maxBuyAmount = totalSupply * 1 / 100; // 1% maxBuyAmount
        maxSellAmount = totalSupply * 1 / 100; // 1% maxSellAmount
        maxWalletAmount = totalSupply * 1 / 100; // 1% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 1000; 

        _fees.buyMarketingFee = 30;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevelopmentFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellMarketingFee = 30;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevelopmentFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;

        marketingWallet = address(0xA0ba9Df57cace8e5DCbb59bC4ff73a3B807c9877);
        developmentWallet = address(0xA0ba9Df57cace8e5DCbb59bC4ff73a3B807c9877);

        // exclude from paying fees or having max transaction amount

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 0;
    }

    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) public onlyOwner {
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    function updateMaxWalletAmount(uint256 newPercentage) public onlyOwner {
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateFees(uint256 _marketingFeeBuy, uint256 _liquidityFeeBuy,uint256 _developmentFeeBuy,uint256 _marketingFeeSell, uint256 _liquidityFeeSell,uint256 _developmentFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevelopmentFee = _developmentFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevelopmentFee = _developmentFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;
        require(_fees.buyTotalFees <= 70, "Must keep fees at 70% or less");   
        require(_fees.sellTotalFees <= 70, "Must keep fees at 70% or less");
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function removeLimits() external onlyOwner {
        updateMaxTxnAmount(1000,1000);
        updateMaxWalletAmount(1000);
    }

    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair");
        marketPair[pair] = value;
    }

    function setWallets(address _marketingWallet,address _developmentWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        developmentWallet = _developmentWallet;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }

        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDevelopment += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDevelopment += fees * _fees.sellDevelopmentFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDevelopment += fees * _fees.buyDevelopmentFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(developmentWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050348015620000dd57600080fd5b506040518060400160405280600d81526020017f474f54544120474f2046415354000000000000000000000000000000000000008152506040518060400160405280600381526020017f474746000000000000000000000000000000000000000000000000000000000081525081600390816200015b919062001056565b5080600490816200016d919062001056565b50505060006200018262000a9c60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd9190620011a7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036d9190620011a7565b6040518363ffffffff1660e01b81526004016200038c929190620011ea565b6020604051808303816000875af1158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d29190620011a7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001601a600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000620004cf62000aa460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000620005e862000aa460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000620006a762000aa460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008926080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000ace60201b60201c565b5060006b19d971e4fe8401e74000000090506064600182620008b5919062001246565b620008c19190620012c0565b6008819055506064600182620008d8919062001246565b620008e49190620012c0565b6009819055506064600182620008fb919062001246565b620009079190620012c0565b600a819055506103e86001826200091f919062001246565b6200092b9190620012c0565b600b81905550601e600d600101819055506000600d600301819055506000600d60020181905550600d60020154600d60030154600d60010154620009709190620012f8565b6200097c9190620012f8565b600d60000181905550601e600d600501819055506000600d600701819055506000600d60060181905550600d60060154600d60070154600d60050154620009c49190620012f8565b620009d09190620012f8565b600d6004018190555073a0ba9df57cace8e5dcbb59bc4ff73a3b807c9877600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0ba9df57cace8e5dcbb59bc4ff73a3b807c9877600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a95338262000afc60201b60201c565b5062001456565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000af262000ae462000a9c60201b60201c565b848462000c8c60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b659062001394565b60405180910390fd5b62000b858160025462000d7960201b90919060201c565b60028190555062000bde816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d7960201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c809190620013c7565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d6c9190620013c7565b60405180910390a3505050565b600080828462000d8a9190620012f8565b90508381101562000dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dc99062001434565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e5e57607f821691505b60208210810362000e745762000e7362000e16565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ede7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e9f565b62000eea868362000e9f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f3762000f3162000f2b8462000f02565b62000f0c565b62000f02565b9050919050565b6000819050919050565b62000f538362000f16565b62000f6b62000f628262000f3e565b84845462000eac565b825550505050565b600090565b62000f8262000f73565b62000f8f81848462000f48565b505050565b5b8181101562000fb75762000fab60008262000f78565b60018101905062000f95565b5050565b601f821115620010065762000fd08162000e7a565b62000fdb8462000e8f565b8101602085101562000feb578190505b6200100362000ffa8562000e8f565b83018262000f94565b50505b505050565b600082821c905092915050565b60006200102b600019846008026200100b565b1980831691505092915050565b600062001046838362001018565b9150826002028217905092915050565b620010618262000ddc565b67ffffffffffffffff8111156200107d576200107c62000de7565b5b62001089825462000e45565b6200109682828562000fbb565b600060209050601f831160018114620010ce5760008415620010b9578287015190505b620010c5858262001038565b86555062001135565b601f198416620010de8662000e7a565b60005b828110156200110857848901518255600182019150602085019450602081019050620010e1565b8683101562001128578489015162001124601f89168262001018565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200116f8262001142565b9050919050565b620011818162001162565b81146200118d57600080fd5b50565b600081519050620011a18162001176565b92915050565b600060208284031215620011c057620011bf6200113d565b5b6000620011d08482850162001190565b91505092915050565b620011e48162001162565b82525050565b6000604082019050620012016000830185620011d9565b620012106020830184620011d9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012538262000f02565b9150620012608362000f02565b9250828202620012708162000f02565b915082820484148315176200128a576200128962001217565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012cd8262000f02565b9150620012da8362000f02565b925082620012ed57620012ec62001291565b5b828204905092915050565b6000620013058262000f02565b9150620013128362000f02565b92508282019050808211156200132d576200132c62001217565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200137c601f8362001333565b9150620013898262001344565b602082019050919050565b60006020820190508181036000830152620013af816200136d565b9050919050565b620013c18162000f02565b82525050565b6000602082019050620013de6000830184620013b6565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200141c601b8362001333565b91506200142982620013e4565b602082019050919050565b600060208201905081810360008301526200144f816200140d565b9050919050565b60805160a0516142ed620014a660003960008181610d3e01526117c6015260008181611e2701528181613018015281816130f901528181613120015281816131bc01526131e301526142ed6000f3fe6080604052600436106102295760003560e01c80638a8c523c11610123578063c16dd4a4116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c16dd4a414610757578063c18bc19514610780578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063992c58e4116100f2578063992c58e414610660578063a457c2d714610689578063a9059cbb146106c6578063b886311514610703578063c02466681461072e57610230565b80638a8c523c146105b65780638da5cb5b146105cd57806395d89b41146105f857806396880b171461062357610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104f757806370a0823114610522578063715018a61461055f578063751039fc146105765780637571336a1461058d57610230565b8063313ce567146103ea578063395093511461041557806349bd5a5e146104525780634fbee1931461047d578063555467a1146104ba57610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a75146103595780631f3fed8f1461038257806323b872dd146103ad57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b6040516102579190613383565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061343e565b6109b8565b6040516102949190613499565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906134b4565b6109d6565b6040516102d19190613499565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906134e1565b6109f6565b005b34801561030f57600080fd5b50610318610add565b6040516103259190613530565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b6040516103509190613530565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613577565b610aed565b005b34801561038e57600080fd5b50610397610ba1565b6040516103a49190613530565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906135a4565b610ba7565b6040516103e19190613499565b60405180910390f35b3480156103f657600080fd5b506103ff610c80565b60405161040c9190613613565b60405180910390f35b34801561042157600080fd5b5061043c6004803603810190610437919061343e565b610c89565b6040516104499190613499565b60405180910390f35b34801561045e57600080fd5b50610467610d3c565b604051610474919061363d565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906134b4565b610d60565b6040516104b19190613499565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613658565b610db6565b6040516104ee9190613499565b60405180910390f35b34801561050357600080fd5b5061050c610e5f565b6040516105199190613499565b60405180910390f35b34801561052e57600080fd5b50610549600480360381019061054491906134b4565b610e72565b6040516105569190613530565b60405180910390f35b34801561056b57600080fd5b50610574610eba565b005b34801561058257600080fd5b5061058b611012565b005b34801561059957600080fd5b506105b460048036038101906105af9190613685565b6110c2565b005b3480156105c257600080fd5b506105cb6111b4565b005b3480156105d957600080fd5b506105e2611296565b6040516105ef919061363d565b60405180910390f35b34801561060457600080fd5b5061060d6112c0565b60405161061a9190613383565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906134b4565b611352565b6040516106579190613499565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906136c5565b611372565b005b34801561069557600080fd5b506106b060048036038101906106ab919061343e565b61153d565b6040516106bd9190613499565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e8919061343e565b61160a565b6040516106fa9190613499565b60405180910390f35b34801561070f57600080fd5b50610718611628565b6040516107259190613499565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613685565b61163b565b005b34801561076357600080fd5b5061077e60048036038101906107799190613685565b61172d565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613658565b6118ad565b005b3480156107b557600080fd5b506107be61196d565b6040516107d2989796959493929190613752565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906137d0565b6119a3565b005b34801561081057600080fd5b5061082b600480360381019061082691906137d0565b611ac0565b6040516108389190613530565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613685565b611b47565b005b34801561087657600080fd5b5061087f611c39565b60405161088c9190613530565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b791906134b4565b611c3f565b005b3480156108ca57600080fd5b506108e560048036038101906108e091906134b4565b611e05565b6040516108f29190613499565b60405180910390f35b34801561090757600080fd5b50610910611e25565b60405161091d919061386f565b60405180910390f35b606060038054610935906138b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906138b9565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611e49565b8484611e51565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6109fe611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613936565b60405180910390fd5b6103e882610a99610add565b610aa39190613985565b610aad91906139f6565b6008819055506103e881610abf610add565b610ac99190613985565b610ad391906139f6565b6009819055505050565b6000600254905090565b60165481565b610af5611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613936565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60155481565b6000610bb4848484611f3c565b610c7584610bc0611e49565b610c708560405180606001604052806028815260200161429060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c26611e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129119092919063ffffffff16565b611e51565b600190509392505050565b60006012905090565b6000610d32610c96611e49565b84610d2d8560016000610ca7611e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b611e51565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610dc0611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613936565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec2611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613936565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61101a611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a090613936565b60405180910390fd5b6110b56103e8806109f6565b6110c06103e86118ad565b565b6110ca611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613936565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111bc611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613936565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555060004361128e9190613a27565b601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112cf906138b9565b80601f01602080910402602001604051908101604052809291908181526020018280546112fb906138b9565b80156113485780601f1061131d57610100808354040283529160200191611348565b820191906000526020600020905b81548152906001019060200180831161132b57829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b61137a611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090613936565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d600101546114439190613a27565b61144d9190613a27565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546114909190613a27565b61149a9190613a27565b600d600401819055506046600d6000015411156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613aa7565b60405180910390fd5b6046600d600401541115611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c90613aa7565b60405180910390fd5b505050505050565b600061160061154a611e49565b846115fb856040518060600160405280602581526020016142456025913960016000611574611e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129119092919063ffffffff16565b611e51565b6001905092915050565b600061161e611617611e49565b8484611f3c565b6001905092915050565b600c60029054906101000a900460ff1681565b611643611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990613936565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611735611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613936565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613b39565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118b5611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90613936565b60405180910390fd5b6103e881611950610add565b61195a9190613985565b61196491906139f6565b600a8190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6119ab611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190613936565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b4f611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613936565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611c47611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90613936565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613bcb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f2f9190613530565b60405180910390a3505050565b60008103611f5557611f50838360006129d3565b61290c565b611f5d611296565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fcb5750611f9b611296565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fe45750600c60029054906101000a900460ff16155b1561236a57600c60009054906101000a900460ff166120de57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061209e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d490613c37565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121d0576008548111156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290613cc9565b60405180910390fd5b6122bf565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122735750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122be576009548111156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490613d5b565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661236957600a5461231c83610e72565b826123279190613a27565b1115612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90613dc7565b60405180910390fd5b5b5b600061237530610e72565b90506000600b54821015905080801561239a5750600c60019054906101000a900460ff165b80156123b35750600c60029054906101000a900460ff16155b80156124085750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561245e5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124b45750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124f8576001600c60026101000a81548160ff0219169083151502179055506124dc612b7d565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ae5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125b857600090505b80156128fd57600060185443101561265a576125f160646125e3606388612e6b90919063ffffffff16565b612ee590919063ffffffff16565b90506063605e826126029190613985565b61260c91906139f6565b6015600082825461261d9190613a27565b9250508190555060636005826126339190613985565b61263d91906139f6565b6017600082825461264e9190613a27565b925050819055506128d8565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b857506000600d60040154115b1561279a576126e860646126da600d6004015488612e6b90919063ffffffff16565b612ee590919063ffffffff16565b9050600d60040154600d60070154826127019190613985565b61270b91906139f6565b6016600082825461271c9190613a27565b92505081905550600d60040154600d600501548261273a9190613985565b61274491906139f6565b601560008282546127559190613a27565b92505081905550600d60040154600d60060154826127739190613985565b61277d91906139f6565b6017600082825461278e9190613a27565b925050819055506128d7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f857506000600d60000154115b156128d657612828606461281a600d6000015488612e6b90919063ffffffff16565b612ee590919063ffffffff16565b9050600d60000154600d60030154826128419190613985565b61284b91906139f6565b6016600082825461285c9190613a27565b92505081905550600d60000154600d600101548261287a9190613985565b61288491906139f6565b601560008282546128959190613a27565b92505081905550600d60000154600d60020154826128b39190613985565b6128bd91906139f6565b601760008282546128ce9190613a27565b925050819055505b5b5b60008111156128ed576128ec8730836129d3565b5b80856128f99190613de7565b9450505b6129088686866129d3565b5050505b505050565b6000838311158290612959576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129509190613383565b60405180910390fd5b50600083856129689190613de7565b9050809150509392505050565b60008082846129849190613a27565b9050838110156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c090613e67565b60405180910390fd5b8091505092915050565b612a3e8160405180606001604052806026815260200161426a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129119092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b709190613530565b60405180910390a3505050565b6000612b8830610e72565b90506000601754601554601654612b9f9190613a27565b612ba99190613a27565b9050600080831480612bbb5750600082145b15612bc857505050612e69565b6014600b54612bd79190613985565b831115612bf0576014600b54612bed9190613985565b92505b600060028360165486612c039190613985565b612c0d91906139f6565b612c1791906139f6565b90506000612c2e8286612f2f90919063ffffffff16565b90506000479050612c3e82612f79565b6000612c538247612f2f90919063ffffffff16565b90506000612c7e87612c7060155485612e6b90919063ffffffff16565b612ee590919063ffffffff16565b90506000612ca988612c9b60175486612e6b90919063ffffffff16565b612ee590919063ffffffff16565b905060008183612cb99190613a27565b84612cc49190613de7565b9050600060168190555060006015819055506000601781905550600087118015612cee5750600081115b15612d3757612cfd87826131b6565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612d2e929190613e87565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612d7c9190613de7565b604051612d8890613ee1565b60006040518083038185875af1925050503d8060008114612dc5576040519150601f19603f3d011682016040523d82523d6000602084013e612dca565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e1690613ee1565b60006040518083038185875af1925050503d8060008114612e53576040519150601f19603f3d011682016040523d82523d6000602084013e612e58565b606091505b505080985050505050505050505050505b565b6000808303612e7d5760009050612edf565b60008284612e8b9190613985565b9050828482612e9a91906139f6565b14612eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed190613f68565b60405180910390fd5b809150505b92915050565b6000612f2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613290565b905092915050565b6000612f7183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612911565b905092915050565b6000600267ffffffffffffffff811115612f9657612f95613f88565b5b604051908082528060200260200182016040528015612fc45781602001602082028036833780820191505090505b5090503081600081518110612fdc57612fdb613fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190613ffb565b816001815181106130b9576130b8613fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061311e307f000000000000000000000000000000000000000000000000000000000000000084611e51565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613180959493929190614121565b600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b505050505050565b6131e1307f000000000000000000000000000000000000000000000000000000000000000084611e51565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016132469695949392919061417b565b60606040518083038185885af1158015613264573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061328991906141f1565b5050505050565b600080831182906132d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ce9190613383565b60405180910390fd5b50600083856132e691906139f6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561332d578082015181840152602081019050613312565b60008484015250505050565b6000601f19601f8301169050919050565b6000613355826132f3565b61335f81856132fe565b935061336f81856020860161330f565b61337881613339565b840191505092915050565b6000602082019050818103600083015261339d818461334a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133d5826133aa565b9050919050565b6133e5816133ca565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000819050919050565b61341b81613408565b811461342657600080fd5b50565b60008135905061343881613412565b92915050565b60008060408385031215613455576134546133a5565b5b6000613463858286016133f3565b925050602061347485828601613429565b9150509250929050565b60008115159050919050565b6134938161347e565b82525050565b60006020820190506134ae600083018461348a565b92915050565b6000602082840312156134ca576134c96133a5565b5b60006134d8848285016133f3565b91505092915050565b600080604083850312156134f8576134f76133a5565b5b600061350685828601613429565b925050602061351785828601613429565b9150509250929050565b61352a81613408565b82525050565b60006020820190506135456000830184613521565b92915050565b6135548161347e565b811461355f57600080fd5b50565b6000813590506135718161354b565b92915050565b60006020828403121561358d5761358c6133a5565b5b600061359b84828501613562565b91505092915050565b6000806000606084860312156135bd576135bc6133a5565b5b60006135cb868287016133f3565b93505060206135dc868287016133f3565b92505060406135ed86828701613429565b9150509250925092565b600060ff82169050919050565b61360d816135f7565b82525050565b60006020820190506136286000830184613604565b92915050565b613637816133ca565b82525050565b6000602082019050613652600083018461362e565b92915050565b60006020828403121561366e5761366d6133a5565b5b600061367c84828501613429565b91505092915050565b6000806040838503121561369c5761369b6133a5565b5b60006136aa858286016133f3565b92505060206136bb85828601613562565b9150509250929050565b60008060008060008060c087890312156136e2576136e16133a5565b5b60006136f089828a01613429565b965050602061370189828a01613429565b955050604061371289828a01613429565b945050606061372389828a01613429565b935050608061373489828a01613429565b92505060a061374589828a01613429565b9150509295509295509295565b600061010082019050613768600083018b613521565b613775602083018a613521565b6137826040830189613521565b61378f6060830188613521565b61379c6080830187613521565b6137a960a0830186613521565b6137b660c0830185613521565b6137c360e0830184613521565b9998505050505050505050565b600080604083850312156137e7576137e66133a5565b5b60006137f5858286016133f3565b9250506020613806858286016133f3565b9150509250929050565b6000819050919050565b600061383561383061382b846133aa565b613810565b6133aa565b9050919050565b60006138478261381a565b9050919050565b60006138598261383c565b9050919050565b6138698161384e565b82525050565b60006020820190506138846000830184613860565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138d157607f821691505b6020821081036138e4576138e361388a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139206020836132fe565b915061392b826138ea565b602082019050919050565b6000602082019050818103600083015261394f81613913565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399082613408565b915061399b83613408565b92508282026139a981613408565b915082820484148315176139c0576139bf613956565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a0182613408565b9150613a0c83613408565b925082613a1c57613a1b6139c7565b5b828204905092915050565b6000613a3282613408565b9150613a3d83613408565b9250828201905080821115613a5557613a54613956565b5b92915050565b7f4d757374206b656570206665657320617420373025206f72206c657373000000600082015250565b6000613a91601d836132fe565b9150613a9c82613a5b565b602082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613b23602a836132fe565b9150613b2e82613ac7565b604082019050919050565b60006020820190508181036000830152613b5281613b16565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613bb56026836132fe565b9150613bc082613b59565b604082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613c216016836132fe565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613cb36035836132fe565b9150613cbe82613c57565b604082019050919050565b60006020820190508181036000830152613ce281613ca6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613d456036836132fe565b9150613d5082613ce9565b604082019050919050565b60006020820190508181036000830152613d7481613d38565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613db16013836132fe565b9150613dbc82613d7b565b602082019050919050565b60006020820190508181036000830152613de081613da4565b9050919050565b6000613df282613408565b9150613dfd83613408565b9250828203905081811115613e1557613e14613956565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e51601b836132fe565b9150613e5c82613e1b565b602082019050919050565b60006020820190508181036000830152613e8081613e44565b9050919050565b6000604082019050613e9c6000830185613521565b613ea96020830184613521565b9392505050565b600081905092915050565b50565b6000613ecb600083613eb0565b9150613ed682613ebb565b600082019050919050565b6000613eec82613ebe565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f526021836132fe565b9150613f5d82613ef6565b604082019050919050565b60006020820190508181036000830152613f8181613f45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613ff5816133dc565b92915050565b600060208284031215614011576140106133a5565b5b600061401f84828501613fe6565b91505092915050565b6000819050919050565b600061404d61404861404384614028565b613810565b613408565b9050919050565b61405d81614032565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614098816133ca565b82525050565b60006140aa838361408f565b60208301905092915050565b6000602082019050919050565b60006140ce82614063565b6140d8818561406e565b93506140e38361407f565b8060005b838110156141145781516140fb888261409e565b9750614106836140b6565b9250506001810190506140e7565b5085935050505092915050565b600060a0820190506141366000830188613521565b6141436020830187614054565b818103604083015261415581866140c3565b9050614164606083018561362e565b6141716080830184613521565b9695505050505050565b600060c082019050614190600083018961362e565b61419d6020830188613521565b6141aa6040830187614054565b6141b76060830186614054565b6141c4608083018561362e565b6141d160a0830184613521565b979650505050505050565b6000815190506141eb81613412565b92915050565b60008060006060848603121561420a576142096133a5565b5b6000614218868287016141dc565b9350506020614229868287016141dc565b925050604061423a868287016141dc565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220269513de353228dc9b66fe57891a3b81d903ca85c487f14c499b6e0edeca851264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638a8c523c11610123578063c16dd4a4116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c16dd4a414610757578063c18bc19514610780578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063992c58e4116100f2578063992c58e414610660578063a457c2d714610689578063a9059cbb146106c6578063b886311514610703578063c02466681461072e57610230565b80638a8c523c146105b65780638da5cb5b146105cd57806395d89b41146105f857806396880b171461062357610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104f757806370a0823114610522578063715018a61461055f578063751039fc146105765780637571336a1461058d57610230565b8063313ce567146103ea578063395093511461041557806349bd5a5e146104525780634fbee1931461047d578063555467a1146104ba57610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a75146103595780631f3fed8f1461038257806323b872dd146103ad57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b6040516102579190613383565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061343e565b6109b8565b6040516102949190613499565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906134b4565b6109d6565b6040516102d19190613499565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906134e1565b6109f6565b005b34801561030f57600080fd5b50610318610add565b6040516103259190613530565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b6040516103509190613530565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613577565b610aed565b005b34801561038e57600080fd5b50610397610ba1565b6040516103a49190613530565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906135a4565b610ba7565b6040516103e19190613499565b60405180910390f35b3480156103f657600080fd5b506103ff610c80565b60405161040c9190613613565b60405180910390f35b34801561042157600080fd5b5061043c6004803603810190610437919061343e565b610c89565b6040516104499190613499565b60405180910390f35b34801561045e57600080fd5b50610467610d3c565b604051610474919061363d565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f91906134b4565b610d60565b6040516104b19190613499565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613658565b610db6565b6040516104ee9190613499565b60405180910390f35b34801561050357600080fd5b5061050c610e5f565b6040516105199190613499565b60405180910390f35b34801561052e57600080fd5b50610549600480360381019061054491906134b4565b610e72565b6040516105569190613530565b60405180910390f35b34801561056b57600080fd5b50610574610eba565b005b34801561058257600080fd5b5061058b611012565b005b34801561059957600080fd5b506105b460048036038101906105af9190613685565b6110c2565b005b3480156105c257600080fd5b506105cb6111b4565b005b3480156105d957600080fd5b506105e2611296565b6040516105ef919061363d565b60405180910390f35b34801561060457600080fd5b5061060d6112c0565b60405161061a9190613383565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906134b4565b611352565b6040516106579190613499565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906136c5565b611372565b005b34801561069557600080fd5b506106b060048036038101906106ab919061343e565b61153d565b6040516106bd9190613499565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e8919061343e565b61160a565b6040516106fa9190613499565b60405180910390f35b34801561070f57600080fd5b50610718611628565b6040516107259190613499565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613685565b61163b565b005b34801561076357600080fd5b5061077e60048036038101906107799190613685565b61172d565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613658565b6118ad565b005b3480156107b557600080fd5b506107be61196d565b6040516107d2989796959493929190613752565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906137d0565b6119a3565b005b34801561081057600080fd5b5061082b600480360381019061082691906137d0565b611ac0565b6040516108389190613530565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613685565b611b47565b005b34801561087657600080fd5b5061087f611c39565b60405161088c9190613530565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b791906134b4565b611c3f565b005b3480156108ca57600080fd5b506108e560048036038101906108e091906134b4565b611e05565b6040516108f29190613499565b60405180910390f35b34801561090757600080fd5b50610910611e25565b60405161091d919061386f565b60405180910390f35b606060038054610935906138b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906138b9565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611e49565b8484611e51565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6109fe611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613936565b60405180910390fd5b6103e882610a99610add565b610aa39190613985565b610aad91906139f6565b6008819055506103e881610abf610add565b610ac99190613985565b610ad391906139f6565b6009819055505050565b6000600254905090565b60165481565b610af5611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613936565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60155481565b6000610bb4848484611f3c565b610c7584610bc0611e49565b610c708560405180606001604052806028815260200161429060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c26611e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129119092919063ffffffff16565b611e51565b600190509392505050565b60006012905090565b6000610d32610c96611e49565b84610d2d8560016000610ca7611e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b611e51565b6001905092915050565b7f00000000000000000000000039da513254ee1d6b7e37c9f422545f37126f3c0b81565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610dc0611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613936565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec2611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613936565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61101a611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a090613936565b60405180910390fd5b6110b56103e8806109f6565b6110c06103e86118ad565b565b6110ca611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613936565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111bc611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613936565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555060004361128e9190613a27565b601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112cf906138b9565b80601f01602080910402602001604051908101604052809291908181526020018280546112fb906138b9565b80156113485780601f1061131d57610100808354040283529160200191611348565b820191906000526020600020905b81548152906001019060200180831161132b57829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b61137a611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090613936565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d600101546114439190613a27565b61144d9190613a27565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546114909190613a27565b61149a9190613a27565b600d600401819055506046600d6000015411156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613aa7565b60405180910390fd5b6046600d600401541115611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c90613aa7565b60405180910390fd5b505050505050565b600061160061154a611e49565b846115fb856040518060600160405280602581526020016142456025913960016000611574611e49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129119092919063ffffffff16565b611e51565b6001905092915050565b600061161e611617611e49565b8484611f3c565b6001905092915050565b600c60029054906101000a900460ff1681565b611643611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990613936565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611735611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613936565b60405180910390fd5b7f00000000000000000000000039da513254ee1d6b7e37c9f422545f37126f3c0b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613b39565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118b5611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90613936565b60405180910390fd5b6103e881611950610add565b61195a9190613985565b61196491906139f6565b600a8190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6119ab611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190613936565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b4f611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613936565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611c47611e49565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90613936565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613bcb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f2f9190613530565b60405180910390a3505050565b60008103611f5557611f50838360006129d3565b61290c565b611f5d611296565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fcb5750611f9b611296565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fe45750600c60029054906101000a900460ff16155b1561236a57600c60009054906101000a900460ff166120de57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061209e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d490613c37565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121815750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121d0576008548111156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290613cc9565b60405180910390fd5b6122bf565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122735750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122be576009548111156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490613d5b565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661236957600a5461231c83610e72565b826123279190613a27565b1115612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90613dc7565b60405180910390fd5b5b5b600061237530610e72565b90506000600b54821015905080801561239a5750600c60019054906101000a900460ff165b80156123b35750600c60029054906101000a900460ff16155b80156124085750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561245e5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124b45750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124f8576001600c60026101000a81548160ff0219169083151502179055506124dc612b7d565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ae5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125b857600090505b80156128fd57600060185443101561265a576125f160646125e3606388612e6b90919063ffffffff16565b612ee590919063ffffffff16565b90506063605e826126029190613985565b61260c91906139f6565b6015600082825461261d9190613a27565b9250508190555060636005826126339190613985565b61263d91906139f6565b6017600082825461264e9190613a27565b925050819055506128d8565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b857506000600d60040154115b1561279a576126e860646126da600d6004015488612e6b90919063ffffffff16565b612ee590919063ffffffff16565b9050600d60040154600d60070154826127019190613985565b61270b91906139f6565b6016600082825461271c9190613a27565b92505081905550600d60040154600d600501548261273a9190613985565b61274491906139f6565b601560008282546127559190613a27565b92505081905550600d60040154600d60060154826127739190613985565b61277d91906139f6565b6017600082825461278e9190613a27565b925050819055506128d7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f857506000600d60000154115b156128d657612828606461281a600d6000015488612e6b90919063ffffffff16565b612ee590919063ffffffff16565b9050600d60000154600d60030154826128419190613985565b61284b91906139f6565b6016600082825461285c9190613a27565b92505081905550600d60000154600d600101548261287a9190613985565b61288491906139f6565b601560008282546128959190613a27565b92505081905550600d60000154600d60020154826128b39190613985565b6128bd91906139f6565b601760008282546128ce9190613a27565b925050819055505b5b5b60008111156128ed576128ec8730836129d3565b5b80856128f99190613de7565b9450505b6129088686866129d3565b5050505b505050565b6000838311158290612959576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129509190613383565b60405180910390fd5b50600083856129689190613de7565b9050809150509392505050565b60008082846129849190613a27565b9050838110156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c090613e67565b60405180910390fd5b8091505092915050565b612a3e8160405180606001604052806026815260200161426a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129119092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b709190613530565b60405180910390a3505050565b6000612b8830610e72565b90506000601754601554601654612b9f9190613a27565b612ba99190613a27565b9050600080831480612bbb5750600082145b15612bc857505050612e69565b6014600b54612bd79190613985565b831115612bf0576014600b54612bed9190613985565b92505b600060028360165486612c039190613985565b612c0d91906139f6565b612c1791906139f6565b90506000612c2e8286612f2f90919063ffffffff16565b90506000479050612c3e82612f79565b6000612c538247612f2f90919063ffffffff16565b90506000612c7e87612c7060155485612e6b90919063ffffffff16565b612ee590919063ffffffff16565b90506000612ca988612c9b60175486612e6b90919063ffffffff16565b612ee590919063ffffffff16565b905060008183612cb99190613a27565b84612cc49190613de7565b9050600060168190555060006015819055506000601781905550600087118015612cee5750600081115b15612d3757612cfd87826131b6565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612d2e929190613e87565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612d7c9190613de7565b604051612d8890613ee1565b60006040518083038185875af1925050503d8060008114612dc5576040519150601f19603f3d011682016040523d82523d6000602084013e612dca565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e1690613ee1565b60006040518083038185875af1925050503d8060008114612e53576040519150601f19603f3d011682016040523d82523d6000602084013e612e58565b606091505b505080985050505050505050505050505b565b6000808303612e7d5760009050612edf565b60008284612e8b9190613985565b9050828482612e9a91906139f6565b14612eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed190613f68565b60405180910390fd5b809150505b92915050565b6000612f2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613290565b905092915050565b6000612f7183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612911565b905092915050565b6000600267ffffffffffffffff811115612f9657612f95613f88565b5b604051908082528060200260200182016040528015612fc45781602001602082028036833780820191505090505b5090503081600081518110612fdc57612fdb613fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a59190613ffb565b816001815181106130b9576130b8613fb7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061311e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e51565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613180959493929190614121565b600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b505050505050565b6131e1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e51565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016132469695949392919061417b565b60606040518083038185885af1158015613264573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061328991906141f1565b5050505050565b600080831182906132d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ce9190613383565b60405180910390fd5b50600083856132e691906139f6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561332d578082015181840152602081019050613312565b60008484015250505050565b6000601f19601f8301169050919050565b6000613355826132f3565b61335f81856132fe565b935061336f81856020860161330f565b61337881613339565b840191505092915050565b6000602082019050818103600083015261339d818461334a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133d5826133aa565b9050919050565b6133e5816133ca565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000819050919050565b61341b81613408565b811461342657600080fd5b50565b60008135905061343881613412565b92915050565b60008060408385031215613455576134546133a5565b5b6000613463858286016133f3565b925050602061347485828601613429565b9150509250929050565b60008115159050919050565b6134938161347e565b82525050565b60006020820190506134ae600083018461348a565b92915050565b6000602082840312156134ca576134c96133a5565b5b60006134d8848285016133f3565b91505092915050565b600080604083850312156134f8576134f76133a5565b5b600061350685828601613429565b925050602061351785828601613429565b9150509250929050565b61352a81613408565b82525050565b60006020820190506135456000830184613521565b92915050565b6135548161347e565b811461355f57600080fd5b50565b6000813590506135718161354b565b92915050565b60006020828403121561358d5761358c6133a5565b5b600061359b84828501613562565b91505092915050565b6000806000606084860312156135bd576135bc6133a5565b5b60006135cb868287016133f3565b93505060206135dc868287016133f3565b92505060406135ed86828701613429565b9150509250925092565b600060ff82169050919050565b61360d816135f7565b82525050565b60006020820190506136286000830184613604565b92915050565b613637816133ca565b82525050565b6000602082019050613652600083018461362e565b92915050565b60006020828403121561366e5761366d6133a5565b5b600061367c84828501613429565b91505092915050565b6000806040838503121561369c5761369b6133a5565b5b60006136aa858286016133f3565b92505060206136bb85828601613562565b9150509250929050565b60008060008060008060c087890312156136e2576136e16133a5565b5b60006136f089828a01613429565b965050602061370189828a01613429565b955050604061371289828a01613429565b945050606061372389828a01613429565b935050608061373489828a01613429565b92505060a061374589828a01613429565b9150509295509295509295565b600061010082019050613768600083018b613521565b613775602083018a613521565b6137826040830189613521565b61378f6060830188613521565b61379c6080830187613521565b6137a960a0830186613521565b6137b660c0830185613521565b6137c360e0830184613521565b9998505050505050505050565b600080604083850312156137e7576137e66133a5565b5b60006137f5858286016133f3565b9250506020613806858286016133f3565b9150509250929050565b6000819050919050565b600061383561383061382b846133aa565b613810565b6133aa565b9050919050565b60006138478261381a565b9050919050565b60006138598261383c565b9050919050565b6138698161384e565b82525050565b60006020820190506138846000830184613860565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138d157607f821691505b6020821081036138e4576138e361388a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139206020836132fe565b915061392b826138ea565b602082019050919050565b6000602082019050818103600083015261394f81613913565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399082613408565b915061399b83613408565b92508282026139a981613408565b915082820484148315176139c0576139bf613956565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a0182613408565b9150613a0c83613408565b925082613a1c57613a1b6139c7565b5b828204905092915050565b6000613a3282613408565b9150613a3d83613408565b9250828201905080821115613a5557613a54613956565b5b92915050565b7f4d757374206b656570206665657320617420373025206f72206c657373000000600082015250565b6000613a91601d836132fe565b9150613a9c82613a5b565b602082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613b23602a836132fe565b9150613b2e82613ac7565b604082019050919050565b60006020820190508181036000830152613b5281613b16565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613bb56026836132fe565b9150613bc082613b59565b604082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613c216016836132fe565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613cb36035836132fe565b9150613cbe82613c57565b604082019050919050565b60006020820190508181036000830152613ce281613ca6565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613d456036836132fe565b9150613d5082613ce9565b604082019050919050565b60006020820190508181036000830152613d7481613d38565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613db16013836132fe565b9150613dbc82613d7b565b602082019050919050565b60006020820190508181036000830152613de081613da4565b9050919050565b6000613df282613408565b9150613dfd83613408565b9250828203905081811115613e1557613e14613956565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e51601b836132fe565b9150613e5c82613e1b565b602082019050919050565b60006020820190508181036000830152613e8081613e44565b9050919050565b6000604082019050613e9c6000830185613521565b613ea96020830184613521565b9392505050565b600081905092915050565b50565b6000613ecb600083613eb0565b9150613ed682613ebb565b600082019050919050565b6000613eec82613ebe565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f526021836132fe565b9150613f5d82613ef6565b604082019050919050565b60006020820190508181036000830152613f8181613f45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613ff5816133dc565b92915050565b600060208284031215614011576140106133a5565b5b600061401f84828501613fe6565b91505092915050565b6000819050919050565b600061404d61404861404384614028565b613810565b613408565b9050919050565b61405d81614032565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614098816133ca565b82525050565b60006140aa838361408f565b60208301905092915050565b6000602082019050919050565b60006140ce82614063565b6140d8818561406e565b93506140e38361407f565b8060005b838110156141145781516140fb888261409e565b9750614106836140b6565b9250506001810190506140e7565b5085935050505092915050565b600060a0820190506141366000830188613521565b6141436020830187614054565b818103604083015261415581866140c3565b9050614164606083018561362e565b6141716080830184613521565b9695505050505050565b600060c082019050614190600083018961362e565b61419d6020830188613521565b6141aa6040830187614054565b6141b76060830186614054565b6141c4608083018561362e565b6141d160a0830184613521565b979650505050505050565b6000815190506141eb81613412565b92915050565b60008060006060848603121561420a576142096133a5565b5b6000614218868287016141dc565b9350506020614229868287016141dc565b925050604061423a868287016141dc565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220269513de353228dc9b66fe57891a3b81d903ca85c487f14c499b6e0edeca851264736f6c63430008130033

Deployed Bytecode Sourcemap

22441:13008:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6024:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8184:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23866:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26988:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7141:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23640:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27452:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23600:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8834:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6984:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9597:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22571:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29453:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26822:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22949:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7311:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15121:148;;;;;;;;;;;;;:::i;:::-;;28911:129;;;;;;;;;;;;;:::i;:::-;;28759:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26607:145;;;;;;;;;;;;;:::i;:::-;;14480:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6242:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23936:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27561:896;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10317:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7650:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22987:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28469:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29048:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27210:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23324:267;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;29252:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7887:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28607:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23680:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15424:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24152:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22522;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6024:99;6077:13;6110:5;6103:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6024:99;:::o;8184:168::-;8266:4;8283:39;8292:12;:10;:12::i;:::-;8306:7;8315:6;8283:8;:39::i;:::-;8340:4;8333:11;;8184:168;;;;:::o;23866:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;26988:214::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27128:4:::1;27115:9;27099:13;:11;:13::i;:::-;:25;;;;:::i;:::-;27098:34;;;;:::i;:::-;27083:12;:49;;;;27190:4;27176:10;27160:13;:11;:13::i;:::-;:26;;;;:::i;:::-;27159:35;;;;:::i;:::-;27143:13;:51;;;;26988:214:::0;;:::o;7141:107::-;7201:7;7228:12;;7221:19;;7141:107;:::o;23640:33::-;;;;:::o;27452:101::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27538:7:::1;27524:11;;:21;;;;;;;;;;;;;;;;;;27452:101:::0;:::o;23600:33::-;;;;:::o;8834:354::-;8973:4;8990:36;9000:6;9008:9;9019:6;8990:9;:36::i;:::-;9037:121;9046:6;9054:12;:10;:12::i;:::-;9068:89;9106:6;9068:89;;;;;;;;;;;;;;;;;:11;:19;9080:6;9068:19;;;;;;;;;;;;;;;:33;9088:12;:10;:12::i;:::-;9068:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9037:8;:121::i;:::-;9176:4;9169:11;;8834:354;;;;;:::o;6984:92::-;7041:5;7066:2;7059:9;;6984:92;:::o;9597:217::-;9684:4;9701:83;9710:12;:10;:12::i;:::-;9724:7;9733:50;9772:10;9733:11;:25;9745:12;:10;:12::i;:::-;9733:25;;;;;;;;;;;;;;;:34;9759:7;9733:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;9701:8;:83::i;:::-;9802:4;9795:11;;9597:217;;;;:::o;22571:38::-;;;:::o;29453:125::-;29518:4;29542:19;:28;29562:7;29542:28;;;;;;;;;;;;;;;;;;;;;;;;;29535:35;;29453:125;;;:::o;26822:158::-;26903:4;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26941:9:::1;26919:19;:31;;;;26968:4;26961:11;;26822:158:::0;;;:::o;22949:31::-;;;;;;;;;;;;;:::o;7311:126::-;7384:7;7411:9;:18;7421:7;7411:18;;;;;;;;;;;;;;;;7404:25;;7311:126;;;:::o;15121:148::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15228:1:::1;15191:40;;15212:6;;;;;;;;;;;15191:40;;;;;;;;;;;;15259:1;15242:6;;:19;;;;;;;;;;;;;;;;;;15121:148::o:0;28911:129::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28965:29:::1;28984:4;28989::::0;28965:18:::1;:29::i;:::-;29005:27;29027:4;29005:21;:27::i;:::-;28911:129::o:0;28759:144::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28891:4:::1;28849:31;:39;28881:6;28849:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28759:144:::0;;:::o;26607:145::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26674:4:::1;26662:9;;:16;;;;;;;;;;;;;;;;;;26703:4;26689:11;;:18;;;;;;;;;;;;;;;;;;26743:1;26728:12;:16;;;;:::i;:::-;26718:7;:26;;;;26607:145::o:0;14480:78::-;14517:7;14544:6;;;;;;;;;;;14537:13;;14480:78;:::o;6242:103::-;6297:13;6330:7;6323:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6242:103;:::o;23936:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;27561:896::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27794:16:::1;27770:5;:21;;:40;;;;27845:16;27821:5;:21;;:40;;;;27898:18;27872:5;:23;;:44;;;;27996:5;:23;;;27972:5;:21;;;27948:5;:21;;;:45;;;;:::i;:::-;:71;;;;:::i;:::-;27927:5;:18;;:92;;;;28057:17;28032:5;:22;;:42;;;;28110:17;28085:5;:22;;:42;;;;28165:19;28138:5;:24;;:46;;;;28267:5;:24;;;28242:5;:22;;;28217:5;:22;;;:47;;;;:::i;:::-;:74;;;;:::i;:::-;28195:5;:19;;:96;;;;28332:2;28310:5;:18;;;:24;;28302:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28413:2;28390:5;:19;;;:25;;28382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27561:896:::0;;;;;;:::o;10317:268::-;10409:4;10426:129;10435:12;:10;:12::i;:::-;10449:7;10458:96;10497:15;10458:96;;;;;;;;;;;;;;;;;:11;:25;10470:12;:10;:12::i;:::-;10458:25;;;;;;;;;;;;;;;:34;10484:7;10458:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;10426:8;:129::i;:::-;10573:4;10566:11;;10317:268;;;;:::o;7650:174::-;7735:4;7752:42;7762:12;:10;:12::i;:::-;7776:9;7787:6;7752:9;:42::i;:::-;7812:4;7805:11;;7650:174;;;;:::o;22987:22::-;;;;;;;;;;;;;:::o;28469:132::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28585:8:::1;28554:19;:28;28574:7;28554:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28469:132:::0;;:::o;29048:196::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29141:13:::1;29133:21;;:4;:21;;::::0;29125:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29231:5;29212:10;:16;29223:4;29212:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;29048:196:::0;;:::o;27210:146::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27344:4:::1;27327:13;27311;:11;:13::i;:::-;:29;;;;:::i;:::-;27310:38;;;;:::i;:::-;27292:15;:56;;;;27210:146:::0;:::o;23324:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29252:193::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29372:16:::1;29354:15;;:34;;;;;;;;;;;;;;;;;;29419:18;29399:17;;:38;;;;;;;;;;;;;;;;;;29252:193:::0;;:::o;7887:150::-;7975:7;8002:11;:18;8014:5;8002:18;;;;;;;;;;;;;;;:27;8021:7;8002:27;;;;;;;;;;;;;;;;7995:34;;7887:150;;;;:::o;28607:146::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28737:8:::1;28699:26;:35;28726:7;28699:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28607:146:::0;;:::o;23680:35::-;;;;:::o;15424:244::-;14701:12;:10;:12::i;:::-;14691:22;;:6;;;;;;;;;;;:22;;;14683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15533:1:::1;15513:22;;:8;:22;;::::0;15505:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15623:8;15594:38;;15615:6;;;;;;;;;;;15594:38;;;;;;;;;;;;15652:8;15643:6;;:17;;;;;;;;;;;;;;;;;;15424:244:::0;:::o;24152:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;22522:::-;;;:::o;5097:97::-;5149:7;5176:10;5169:17;;5097:97;:::o;12480:220::-;12638:6;12608:11;:18;12620:5;12608:18;;;;;;;;;;;;;;;:27;12627:7;12608:27;;;;;;;;;;;;;;;:36;;;;12676:7;12660:32;;12669:5;12660:32;;;12685:6;12660:32;;;;;;:::i;:::-;;;;;;;;12480:220;;;:::o;29586:3317::-;29743:1;29733:6;:11;29729:102;;29761:37;29777:6;29785:9;29796:1;29761:15;:37::i;:::-;29813:7;;29729:102;29871:7;:5;:7::i;:::-;29861:17;;:6;:17;;;;:54;;;;;29908:7;:5;:7::i;:::-;29895:20;;:9;:20;;;;29861:54;:82;;;;;29933:10;;;;;;;;;;;29932:11;29861:82;29843:888;;;29977:9;;;;;;;;;;;29972:147;;30015:19;:27;30035:6;30015:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;30046:19;:30;30066:9;30046:30;;;;;;;;;;;;;;;;;;;;;;;;;30015:61;30007:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;29972:147;30137:10;:18;30148:6;30137:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;30160:31;:42;30192:9;30160:42;;;;;;;;;;;;;;;;;;;;;;;;;30159:43;30137:65;30133:410;;;30241:12;;30231:6;:22;;30223:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;30133:410;;;30351:10;:21;30362:9;30351:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;30377:31;:39;30409:6;30377:39;;;;;;;;;;;;;;;;;;;;;;;;;30376:40;30351:65;30347:196;;;30455:13;;30445:6;:23;;30437:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;30347:196;30133:410;30564:26;:37;30591:9;30564:37;;;;;;;;;;;;;;;;;;;;;;;;;30559:159;;30663:15;;30639:20;30649:9;30639;:20::i;:::-;30630:6;:29;;;;:::i;:::-;:48;;30622:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;30559:159;29843:888;30744:28;30775:24;30793:4;30775:9;:24::i;:::-;30744:55;;30813:12;30852:19;;30828:20;:43;;30813:58;;30902:7;:35;;;;;30926:11;;;;;;;;;;;30902:35;:63;;;;;30955:10;;;;;;;;;;;30954:11;30902:63;:101;;;;;30982:10;:21;30993:9;30982:21;;;;;;;;;;;;;;;;;;;;;;;;;30902:101;:146;;;;;31021:19;:27;31041:6;31021:27;;;;;;;;;;;;;;;;;;;;;;;;;31020:28;30902:146;:194;;;;;31066:19;:30;31086:9;31066:30;;;;;;;;;;;;;;;;;;;;;;;;;31065:31;30902:194;30884:326;;;31136:4;31123:10;;:17;;;;;;;;;;;;;;;;;;31155:10;:8;:10::i;:::-;31193:5;31180:10;;:18;;;;;;;;;;;;;;;;;;30884:326;31223:12;31239:10;;;;;;;;;;;31238:11;31223:26;;31351:19;:27;31371:6;31351:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;31382:19;:30;31402:9;31382:30;;;;;;;;;;;;;;;;;;;;;;;;;31351:61;31347:109;;;31439:5;31429:15;;31347:109;31557:7;31553:1288;;;31581:12;31630:7;;31615:12;:22;31612:1076;;;31665:23;31684:3;31665:14;31676:2;31665:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;31658:30;;31743:2;31737;31730:4;:9;;;;:::i;:::-;31729:16;;;;:::i;:::-;31707:18;;:38;;;;;;;:::i;:::-;;;;;;;;31801:2;31796:1;31789:4;:8;;;;:::i;:::-;31788:15;;;;:::i;:::-;31764:20;;:39;;;;;;;:::i;:::-;;;;;;;;31612:1076;;;31829:10;:21;31840:9;31829:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;31876:1;31854:5;:19;;;:23;31829:48;31825:863;;;31905:40;31941:3;31905:31;31916:5;:19;;;31905:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;31898:47;;32018:5;:19;;;31993:5;:22;;;31986:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;31964:18;;:73;;;;;;;:::i;:::-;;;;;;;;32110:5;:19;;;32085:5;:22;;;32078:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;32056:18;;:73;;;;;;;:::i;:::-;;;;;;;;32206:5;:19;;;32179:5;:24;;;32172:4;:31;;;;:::i;:::-;:53;;;;:::i;:::-;32148:20;;:77;;;;;;;:::i;:::-;;;;;;;;31825:863;;;32287:10;:18;32298:6;32287:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;32330:1;32309:5;:18;;;:22;32287:44;32283:405;;;32359:39;32394:3;32359:30;32370:5;:18;;;32359:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;32352:46;;32470:5;:18;;;32446:5;:21;;;32439:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;32417:18;;:71;;;;;;;:::i;:::-;;;;;;;;32560:5;:18;;;32536:5;:21;;;32529:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;32507:18;;:71;;;;;;;:::i;:::-;;;;;;;;32654:5;:18;;;32628:5;:23;;;32621:4;:30;;;;:::i;:::-;:51;;;;:::i;:::-;32597:20;;:75;;;;;;;:::i;:::-;;;;;;;;32283:405;31825:863;31612:1076;32715:1;32708:4;:8;32704:93;;;32737:44;32753:6;32769:4;32776;32737:15;:44::i;:::-;32704:93;32823:4;32813:14;;;;;:::i;:::-;;;31566:1275;31553:1288;32853:42;32869:6;32877:9;32888:6;32853:15;:42::i;:::-;29708:3195;;;29586:3317;;;;:::o;13086:191::-;13171:7;13204:1;13199;:6;;13207:12;13191:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13231:9;13247:1;13243;:5;;;;:::i;:::-;13231:17;;13268:1;13261:8;;;13086:191;;;;;:::o;12745:180::-;12802:7;12822:9;12838:1;12834;:5;;;;:::i;:::-;12822:17;;12863:1;12858;:6;;12850:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;12916:1;12909:8;;;12745:180;;;;:::o;11075:358::-;11237:71;11259:6;11237:71;;;;;;;;;;;;;;;;;:9;:17;11247:6;11237:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;11217:9;:17;11227:6;11217:17;;;;;;;;;;;;;;;:91;;;;11342:32;11367:6;11342:9;:20;11352:9;11342:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11319:9;:20;11329:9;11319:20;;;;;;;;;;;;;;;:55;;;;11407:9;11390:35;;11399:6;11390:35;;;11418:6;11390:35;;;;;;:::i;:::-;;;;;;;;11075:358;;;:::o;33831:1613::-;33870:28;33901:24;33919:4;33901:9;:24::i;:::-;33870:55;;33936:14;33995:20;;33974:18;;33953;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;33936:79;;34026:12;34079:1;34055:20;:25;:40;;;;34094:1;34084:6;:11;34055:40;34051:57;;;34099:7;;;;;34051:57;34169:2;34147:19;;:24;;;;:::i;:::-;34124:20;:47;34120:127;;;34233:2;34211:19;;:24;;;;:::i;:::-;34188:47;;34120:127;34308:23;34387:1;34378:6;34357:18;;34334:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;34308:80;;34399:26;34428:41;34453:15;34428:20;:24;;:41;;;;:::i;:::-;34399:70;;34483:25;34511:21;34483:49;;34545:36;34562:18;34545:16;:36::i;:::-;34596:18;34617:44;34643:17;34617:21;:25;;:44;;;;:::i;:::-;34596:65;;34675:23;34701:46;34740:6;34701:34;34716:18;;34701:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;34675:72;;34758:25;34786:48;34827:6;34786:36;34801:20;;34786:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;34758:76;;34845:23;34903:17;34885:15;:35;;;;:::i;:::-;34871:10;:50;;;;:::i;:::-;34845:76;;34957:1;34936:18;:22;;;;34990:1;34969:18;:22;;;;35025:1;35002:20;:24;;;;35063:1;35045:15;:19;:42;;;;;35086:1;35068:15;:19;35045:42;35041:192;;;35104:46;35117:15;35134;35104:12;:46::i;:::-;35170:51;35185:18;35205:15;35170:51;;;;;;;:::i;:::-;;;;;;;;35041:192;35266:17;;;;;;;;;;;35258:31;;35323:15;35299:21;:39;;;;:::i;:::-;35258:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35245:101;;;;;35378:15;;;;;;;;;;;35370:29;;35408:21;35370:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35357:79;;;;;33859:1585;;;;;;;;;;33831:1613;:::o;13285:256::-;13342:7;13377:1;13372;:6;13368:47;;13402:1;13395:8;;;;13368:47;13428:9;13444:1;13440;:5;;;;:::i;:::-;13428:17;;13473:1;13468;13464;:5;;;;:::i;:::-;:10;13456:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;13532:1;13525:8;;;13285:256;;;;;:::o;13552:131::-;13609:7;13636:39;13640:1;13643;13636:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;13629:46;;13552:131;;;;:::o;12938:135::-;12995:7;13022:43;13026:1;13029;13022:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13015:50;;12938:135;;;;:::o;32911:554::-;33035:21;33073:1;33059:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33035:40;;33104:4;33086;33091:1;33086:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33130:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33120:4;33125:1;33120:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33156:49;33173:4;33188:6;33197:7;33156:8;:49::i;:::-;33244:6;:57;;;33316:7;33338:1;33382:4;33409;33429:15;33244:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32962:503;32911:554;:::o;33473:350::-;33617:49;33634:4;33649:6;33658:7;33617:8;:49::i;:::-;33709:6;:22;;;33740:9;33761:4;33768:7;33777:1;33780;33792:4;33799:15;33709:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33473:350;;:::o;13695:277::-;13780:7;13812:1;13808;:5;13815:12;13800:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13839:9;13855:1;13851;:5;;;;:::i;:::-;13839:17;;13963:1;13956:8;;;13695:277;;;;;:::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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:116::-;4683:21;4698:5;4683:21;:::i;:::-;4676:5;4673:32;4663:60;;4719:1;4716;4709:12;4663:60;4613:116;:::o;4735:133::-;4778:5;4816:6;4803:20;4794:29;;4832:30;4856:5;4832:30;:::i;:::-;4735:133;;;;:::o;4874:323::-;4930:6;4979:2;4967:9;4958:7;4954:23;4950:32;4947:119;;;4985:79;;:::i;:::-;4947:119;5105:1;5130:50;5172:7;5163:6;5152:9;5148:22;5130:50;:::i;:::-;5120:60;;5076:114;4874:323;;;;:::o;5203:619::-;5280:6;5288;5296;5345:2;5333:9;5324:7;5320:23;5316:32;5313:119;;;5351:79;;:::i;:::-;5313:119;5471:1;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5442:117;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5726:2;5752:53;5797:7;5788:6;5777:9;5773:22;5752:53;:::i;:::-;5742:63;;5697:118;5203:619;;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:112::-;6003:22;6019:5;6003:22;:::i;:::-;5998:3;5991:35;5920:112;;:::o;6038:214::-;6127:4;6165:2;6154:9;6150:18;6142:26;;6178:67;6242:1;6231:9;6227:17;6218:6;6178:67;:::i;:::-;6038:214;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:329::-;6669:6;6718:2;6706:9;6697:7;6693:23;6689:32;6686:119;;;6724:79;;:::i;:::-;6686:119;6844:1;6869:53;6914:7;6905:6;6894:9;6890:22;6869:53;:::i;:::-;6859:63;;6815:117;6610:329;;;;:::o;6945:468::-;7010:6;7018;7067:2;7055:9;7046:7;7042:23;7038:32;7035:119;;;7073:79;;:::i;:::-;7035:119;7193:1;7218:53;7263:7;7254:6;7243:9;7239:22;7218:53;:::i;:::-;7208:63;;7164:117;7320:2;7346:50;7388:7;7379:6;7368:9;7364:22;7346:50;:::i;:::-;7336:60;;7291:115;6945:468;;;;;:::o;7419:1057::-;7523:6;7531;7539;7547;7555;7563;7612:3;7600:9;7591:7;7587:23;7583:33;7580:120;;;7619:79;;:::i;:::-;7580:120;7739:1;7764:53;7809:7;7800:6;7789:9;7785:22;7764:53;:::i;:::-;7754:63;;7710:117;7866:2;7892:53;7937:7;7928:6;7917:9;7913:22;7892:53;:::i;:::-;7882:63;;7837:118;7994:2;8020:53;8065:7;8056:6;8045:9;8041:22;8020:53;:::i;:::-;8010:63;;7965:118;8122:2;8148:53;8193:7;8184:6;8173:9;8169:22;8148:53;:::i;:::-;8138:63;;8093:118;8250:3;8277:53;8322:7;8313:6;8302:9;8298:22;8277:53;:::i;:::-;8267:63;;8221:119;8379:3;8406:53;8451:7;8442:6;8431:9;8427:22;8406:53;:::i;:::-;8396:63;;8350:119;7419:1057;;;;;;;;:::o;8482:997::-;8771:4;8809:3;8798:9;8794:19;8786:27;;8823:71;8891:1;8880:9;8876:17;8867:6;8823:71;:::i;:::-;8904:72;8972:2;8961:9;8957:18;8948:6;8904:72;:::i;:::-;8986;9054:2;9043:9;9039:18;9030:6;8986:72;:::i;:::-;9068;9136:2;9125:9;9121:18;9112:6;9068:72;:::i;:::-;9150:73;9218:3;9207:9;9203:19;9194:6;9150:73;:::i;:::-;9233;9301:3;9290:9;9286:19;9277:6;9233:73;:::i;:::-;9316;9384:3;9373:9;9369:19;9360:6;9316:73;:::i;:::-;9399;9467:3;9456:9;9452:19;9443:6;9399:73;:::i;:::-;8482:997;;;;;;;;;;;:::o;9485:474::-;9553:6;9561;9610:2;9598:9;9589:7;9585:23;9581:32;9578:119;;;9616:79;;:::i;:::-;9578:119;9736:1;9761:53;9806:7;9797:6;9786:9;9782:22;9761:53;:::i;:::-;9751:63;;9707:117;9863:2;9889:53;9934:7;9925:6;9914:9;9910:22;9889:53;:::i;:::-;9879:63;;9834:118;9485:474;;;;;:::o;9965:60::-;9993:3;10014:5;10007:12;;9965:60;;;:::o;10031:142::-;10081:9;10114:53;10132:34;10141:24;10159:5;10141:24;:::i;:::-;10132:34;:::i;:::-;10114:53;:::i;:::-;10101:66;;10031:142;;;:::o;10179:126::-;10229:9;10262:37;10293:5;10262:37;:::i;:::-;10249:50;;10179:126;;;:::o;10311:153::-;10388:9;10421:37;10452:5;10421:37;:::i;:::-;10408:50;;10311:153;;;:::o;10470:185::-;10584:64;10642:5;10584:64;:::i;:::-;10579:3;10572:77;10470:185;;:::o;10661:276::-;10781:4;10819:2;10808:9;10804:18;10796:26;;10832:98;10927:1;10916:9;10912:17;10903:6;10832:98;:::i;:::-;10661:276;;;;:::o;10943:180::-;10991:77;10988:1;10981:88;11088:4;11085:1;11078:15;11112:4;11109:1;11102:15;11129:320;11173:6;11210:1;11204:4;11200:12;11190:22;;11257:1;11251:4;11247:12;11278:18;11268:81;;11334:4;11326:6;11322:17;11312:27;;11268:81;11396:2;11388:6;11385:14;11365:18;11362:38;11359:84;;11415:18;;:::i;:::-;11359:84;11180:269;11129:320;;;:::o;11455:182::-;11595:34;11591:1;11583:6;11579:14;11572:58;11455:182;:::o;11643:366::-;11785:3;11806:67;11870:2;11865:3;11806:67;:::i;:::-;11799:74;;11882:93;11971:3;11882:93;:::i;:::-;12000:2;11995:3;11991:12;11984:19;;11643:366;;;:::o;12015:419::-;12181:4;12219:2;12208:9;12204:18;12196:26;;12268:9;12262:4;12258:20;12254:1;12243:9;12239:17;12232:47;12296:131;12422:4;12296:131;:::i;:::-;12288:139;;12015:419;;;:::o;12440:180::-;12488:77;12485:1;12478:88;12585:4;12582:1;12575:15;12609:4;12606:1;12599:15;12626:410;12666:7;12689:20;12707:1;12689:20;:::i;:::-;12684:25;;12723:20;12741:1;12723:20;:::i;:::-;12718:25;;12778:1;12775;12771:9;12800:30;12818:11;12800:30;:::i;:::-;12789:41;;12979:1;12970:7;12966:15;12963:1;12960:22;12940:1;12933:9;12913:83;12890:139;;13009:18;;:::i;:::-;12890:139;12674:362;12626:410;;;;:::o;13042:180::-;13090:77;13087:1;13080:88;13187:4;13184:1;13177:15;13211:4;13208:1;13201:15;13228:185;13268:1;13285:20;13303:1;13285:20;:::i;:::-;13280:25;;13319:20;13337:1;13319:20;:::i;:::-;13314:25;;13358:1;13348:35;;13363:18;;:::i;:::-;13348:35;13405:1;13402;13398:9;13393:14;;13228:185;;;;:::o;13419:191::-;13459:3;13478:20;13496:1;13478:20;:::i;:::-;13473:25;;13512:20;13530:1;13512:20;:::i;:::-;13507:25;;13555:1;13552;13548:9;13541:16;;13576:3;13573:1;13570:10;13567:36;;;13583:18;;:::i;:::-;13567:36;13419:191;;;;:::o;13616:179::-;13756:31;13752:1;13744:6;13740:14;13733:55;13616:179;:::o;13801:366::-;13943:3;13964:67;14028:2;14023:3;13964:67;:::i;:::-;13957:74;;14040:93;14129:3;14040:93;:::i;:::-;14158:2;14153:3;14149:12;14142:19;;13801:366;;;:::o;14173:419::-;14339:4;14377:2;14366:9;14362:18;14354:26;;14426:9;14420:4;14416:20;14412:1;14401:9;14397:17;14390:47;14454:131;14580:4;14454:131;:::i;:::-;14446:139;;14173:419;;;:::o;14598:229::-;14738:34;14734:1;14726:6;14722:14;14715:58;14807:12;14802:2;14794:6;14790:15;14783:37;14598:229;:::o;14833:366::-;14975:3;14996:67;15060:2;15055:3;14996:67;:::i;:::-;14989:74;;15072:93;15161:3;15072:93;:::i;:::-;15190:2;15185:3;15181:12;15174:19;;14833:366;;;:::o;15205:419::-;15371:4;15409:2;15398:9;15394:18;15386:26;;15458:9;15452:4;15448:20;15444:1;15433:9;15429:17;15422:47;15486:131;15612:4;15486:131;:::i;:::-;15478:139;;15205:419;;;:::o;15630:225::-;15770:34;15766:1;15758:6;15754:14;15747:58;15839:8;15834:2;15826:6;15822:15;15815:33;15630:225;:::o;15861:366::-;16003:3;16024:67;16088:2;16083:3;16024:67;:::i;:::-;16017:74;;16100:93;16189:3;16100:93;:::i;:::-;16218:2;16213:3;16209:12;16202:19;;15861:366;;;:::o;16233:419::-;16399:4;16437:2;16426:9;16422:18;16414:26;;16486:9;16480:4;16476:20;16472:1;16461:9;16457:17;16450:47;16514:131;16640:4;16514:131;:::i;:::-;16506:139;;16233:419;;;:::o;16658:172::-;16798:24;16794:1;16786:6;16782:14;16775:48;16658:172;:::o;16836:366::-;16978:3;16999:67;17063:2;17058:3;16999:67;:::i;:::-;16992:74;;17075:93;17164:3;17075:93;:::i;:::-;17193:2;17188:3;17184:12;17177:19;;16836:366;;;:::o;17208:419::-;17374:4;17412:2;17401:9;17397:18;17389:26;;17461:9;17455:4;17451:20;17447:1;17436:9;17432:17;17425:47;17489:131;17615:4;17489:131;:::i;:::-;17481:139;;17208:419;;;:::o;17633:240::-;17773:34;17769:1;17761:6;17757:14;17750:58;17842:23;17837:2;17829:6;17825:15;17818:48;17633:240;:::o;17879:366::-;18021:3;18042:67;18106:2;18101:3;18042:67;:::i;:::-;18035:74;;18118:93;18207:3;18118:93;:::i;:::-;18236:2;18231:3;18227:12;18220:19;;17879:366;;;:::o;18251:419::-;18417:4;18455:2;18444:9;18440:18;18432:26;;18504:9;18498:4;18494:20;18490:1;18479:9;18475:17;18468:47;18532:131;18658:4;18532:131;:::i;:::-;18524:139;;18251:419;;;:::o;18676:241::-;18816:34;18812:1;18804:6;18800:14;18793:58;18885:24;18880:2;18872:6;18868:15;18861:49;18676:241;:::o;18923:366::-;19065:3;19086:67;19150:2;19145:3;19086:67;:::i;:::-;19079:74;;19162:93;19251:3;19162:93;:::i;:::-;19280:2;19275:3;19271:12;19264:19;;18923:366;;;:::o;19295:419::-;19461:4;19499:2;19488:9;19484:18;19476:26;;19548:9;19542:4;19538:20;19534:1;19523:9;19519:17;19512:47;19576:131;19702:4;19576:131;:::i;:::-;19568:139;;19295:419;;;:::o;19720:169::-;19860:21;19856:1;19848:6;19844:14;19837:45;19720:169;:::o;19895:366::-;20037:3;20058:67;20122:2;20117:3;20058:67;:::i;:::-;20051:74;;20134:93;20223:3;20134:93;:::i;:::-;20252:2;20247:3;20243:12;20236:19;;19895:366;;;:::o;20267:419::-;20433:4;20471:2;20460:9;20456:18;20448:26;;20520:9;20514:4;20510:20;20506:1;20495:9;20491:17;20484:47;20548:131;20674:4;20548:131;:::i;:::-;20540:139;;20267:419;;;:::o;20692:194::-;20732:4;20752:20;20770:1;20752:20;:::i;:::-;20747:25;;20786:20;20804:1;20786:20;:::i;:::-;20781:25;;20830:1;20827;20823:9;20815:17;;20854:1;20848:4;20845:11;20842:37;;;20859:18;;:::i;:::-;20842:37;20692:194;;;;:::o;20892:177::-;21032:29;21028:1;21020:6;21016:14;21009:53;20892:177;:::o;21075:366::-;21217:3;21238:67;21302:2;21297:3;21238:67;:::i;:::-;21231:74;;21314:93;21403:3;21314:93;:::i;:::-;21432:2;21427:3;21423:12;21416:19;;21075:366;;;:::o;21447:419::-;21613:4;21651:2;21640:9;21636:18;21628:26;;21700:9;21694:4;21690:20;21686:1;21675:9;21671:17;21664:47;21728:131;21854:4;21728:131;:::i;:::-;21720:139;;21447:419;;;:::o;21872:332::-;21993:4;22031:2;22020:9;22016:18;22008:26;;22044:71;22112:1;22101:9;22097:17;22088:6;22044:71;:::i;:::-;22125:72;22193:2;22182:9;22178:18;22169:6;22125:72;:::i;:::-;21872:332;;;;;:::o;22210:147::-;22311:11;22348:3;22333:18;;22210:147;;;;:::o;22363:114::-;;:::o;22483:398::-;22642:3;22663:83;22744:1;22739:3;22663:83;:::i;:::-;22656:90;;22755:93;22844:3;22755:93;:::i;:::-;22873:1;22868:3;22864:11;22857:18;;22483:398;;;:::o;22887:379::-;23071:3;23093:147;23236:3;23093:147;:::i;:::-;23086:154;;23257:3;23250:10;;22887:379;;;:::o;23272:220::-;23412:34;23408:1;23400:6;23396:14;23389:58;23481:3;23476:2;23468:6;23464:15;23457:28;23272:220;:::o;23498:366::-;23640:3;23661:67;23725:2;23720:3;23661:67;:::i;:::-;23654:74;;23737:93;23826:3;23737:93;:::i;:::-;23855:2;23850:3;23846:12;23839:19;;23498:366;;;:::o;23870:419::-;24036:4;24074:2;24063:9;24059:18;24051:26;;24123:9;24117:4;24113:20;24109:1;24098:9;24094:17;24087:47;24151:131;24277:4;24151:131;:::i;:::-;24143:139;;23870:419;;;:::o;24295:180::-;24343:77;24340:1;24333:88;24440:4;24437:1;24430:15;24464:4;24461:1;24454:15;24481:180;24529:77;24526:1;24519:88;24626:4;24623:1;24616:15;24650:4;24647:1;24640:15;24667:143;24724:5;24755:6;24749:13;24740:22;;24771:33;24798:5;24771:33;:::i;:::-;24667:143;;;;:::o;24816:351::-;24886:6;24935:2;24923:9;24914:7;24910:23;24906:32;24903:119;;;24941:79;;:::i;:::-;24903:119;25061:1;25086:64;25142:7;25133:6;25122:9;25118:22;25086:64;:::i;:::-;25076:74;;25032:128;24816:351;;;;:::o;25173:85::-;25218:7;25247:5;25236:16;;25173:85;;;:::o;25264:158::-;25322:9;25355:61;25373:42;25382:32;25408:5;25382:32;:::i;:::-;25373:42;:::i;:::-;25355:61;:::i;:::-;25342:74;;25264:158;;;:::o;25428:147::-;25523:45;25562:5;25523:45;:::i;:::-;25518:3;25511:58;25428:147;;:::o;25581:114::-;25648:6;25682:5;25676:12;25666:22;;25581:114;;;:::o;25701:184::-;25800:11;25834:6;25829:3;25822:19;25874:4;25869:3;25865:14;25850:29;;25701:184;;;;:::o;25891:132::-;25958:4;25981:3;25973:11;;26011:4;26006:3;26002:14;25994:22;;25891:132;;;:::o;26029:108::-;26106:24;26124:5;26106:24;:::i;:::-;26101:3;26094:37;26029:108;;:::o;26143:179::-;26212:10;26233:46;26275:3;26267:6;26233:46;:::i;:::-;26311:4;26306:3;26302:14;26288:28;;26143:179;;;;:::o;26328:113::-;26398:4;26430;26425:3;26421:14;26413:22;;26328:113;;;:::o;26477:732::-;26596:3;26625:54;26673:5;26625:54;:::i;:::-;26695:86;26774:6;26769:3;26695:86;:::i;:::-;26688:93;;26805:56;26855:5;26805:56;:::i;:::-;26884:7;26915:1;26900:284;26925:6;26922:1;26919:13;26900:284;;;27001:6;26995:13;27028:63;27087:3;27072:13;27028:63;:::i;:::-;27021:70;;27114:60;27167:6;27114:60;:::i;:::-;27104:70;;26960:224;26947:1;26944;26940:9;26935:14;;26900:284;;;26904:14;27200:3;27193:10;;26601:608;;;26477:732;;;;:::o;27215:831::-;27478:4;27516:3;27505:9;27501:19;27493:27;;27530:71;27598:1;27587:9;27583:17;27574:6;27530:71;:::i;:::-;27611:80;27687:2;27676:9;27672:18;27663:6;27611:80;:::i;:::-;27738:9;27732:4;27728:20;27723:2;27712:9;27708:18;27701:48;27766:108;27869:4;27860:6;27766:108;:::i;:::-;27758:116;;27884:72;27952:2;27941:9;27937:18;27928:6;27884:72;:::i;:::-;27966:73;28034:3;28023:9;28019:19;28010:6;27966:73;:::i;:::-;27215:831;;;;;;;;:::o;28052:807::-;28301:4;28339:3;28328:9;28324:19;28316:27;;28353:71;28421:1;28410:9;28406:17;28397:6;28353:71;:::i;:::-;28434:72;28502:2;28491:9;28487:18;28478:6;28434:72;:::i;:::-;28516:80;28592:2;28581:9;28577:18;28568:6;28516:80;:::i;:::-;28606;28682:2;28671:9;28667:18;28658:6;28606:80;:::i;:::-;28696:73;28764:3;28753:9;28749:19;28740:6;28696:73;:::i;:::-;28779;28847:3;28836:9;28832:19;28823:6;28779:73;:::i;:::-;28052:807;;;;;;;;;:::o;28865:143::-;28922:5;28953:6;28947:13;28938:22;;28969:33;28996:5;28969:33;:::i;:::-;28865:143;;;;:::o;29014:663::-;29102:6;29110;29118;29167:2;29155:9;29146:7;29142:23;29138:32;29135:119;;;29173:79;;:::i;:::-;29135:119;29293:1;29318:64;29374:7;29365:6;29354:9;29350:22;29318:64;:::i;:::-;29308:74;;29264:128;29431:2;29457:64;29513:7;29504:6;29493:9;29489:22;29457:64;:::i;:::-;29447:74;;29402:129;29570:2;29596:64;29652:7;29643:6;29632:9;29628:22;29596:64;:::i;:::-;29586:74;;29541:129;29014:663;;;;;:::o

Swarm Source

ipfs://269513de353228dc9b66fe57891a3b81d903ca85c487f14c499b6e0edeca8512
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.