ETH Price: $3,279.13 (-1.56%)

Token

Cyber Spoon (SPOON)
 

Overview

Max Total Supply

1,000,000,000,000 SPOON

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
checknow.eth
Balance
10,705,489,397.20078664452459528 SPOON

Value
$0.00
0x5453e6725c73ccb1CeFdB8C991e5B82951197823
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:
SPOON

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-09-06
*/

/**

https://twitter.com/SawyerMerritt/status/1699257380054179856?t=Pyvu05rnuXrwp5HwqzYBwA&s=19

https://t.me/CyberspoonERC

*/


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

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

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

interface IUniswapV2Pair {
    event Sync(uint112 reserve0, uint112 reserve1);
    function sync() external;
}

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

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


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 allowance 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 {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @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");

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @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 {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

contract SPOON is ERC20, Ownable {

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => bool) public isBlacklisted;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

    constructor() ERC20("Cyber Spoon", "SPOON") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 15;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 25;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1000000000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 2 / 100; // 
        maxWallet = totalSupply * 2 / 100; //
        swapTokensAtAmount = totalSupply * 5 / 1000; // 

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner()); 
        devWallet = address(owner()); // 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function orchestratelimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount <= 1, "Swap amount cannot be higher than 1% total supply.");
  	    swapTokensAtAmount = totalSupply() * newAmount / 100;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 txNum, uint256 walNum) external onlyOwner {
        require(txNum >= 1, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = (totalSupply() * txNum / 100)/1e18;
        require(walNum >= 1, "Cannot set maxWallet lower than 1%");
        maxWallet = (totalSupply() * walNum / 100)/1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

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

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

    function orchestratemarketingWallet(address newMarketingWallet) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }
    
    function orchestatedevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function orchestrate_bots(address _address, bool status) external onlyOwner {
        require(_address != address(0),"Address should not be 0");
        isBlacklisted[_address] = status;
    }

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

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

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

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percent/10000;
        
        
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"orchestatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"orchestrate_bots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"orchestratelimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"orchestratemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txNum","type":"uint256"},{"internalType":"uint256","name":"walNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600b81526020017f43796265722053706f6f6e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f53504f4f4e000000000000000000000000000000000000000000000000000000815250816003908162000127919062000d76565b50806004908162000139919062000d76565b50505060006200014e6200066960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002198160016200067160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d919062000ec7565b6040518363ffffffff1660e01b81526004016200036c92919062000f0a565b6020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fa60a05160016200067160201b60201c565b6200040f60a05160016200076e60201b60201c565b6000600f905060008060006019905060008060006c0c9f2c9cd04674edea400000009050606460028262000444919062000f66565b62000450919062000fe0565b600881905550606460028262000467919062000f66565b62000473919062000fe0565b600a819055506103e86005826200048b919062000f66565b62000497919062000fe0565b600981905550866016819055508560178190555084601881905550601854601754601654620004c7919062001018565b620004d3919062001018565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000503919062001018565b6200050f919062001018565b60198190555062000525620007c960201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000575620007c960201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d7620005c9620007c960201b60201c565b6001620007f360201b60201c565b620005ea306001620007f360201b60201c565b620005ff61dead6001620007f360201b60201c565b6200062162000613620007c960201b60201c565b60016200067160201b60201c565b620006343060016200067160201b60201c565b6200064961dead60016200067160201b60201c565b6200065b3382620008f060201b60201c565b5050505050505050620011e8565b600033905090565b620006816200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000713576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070a90620010b4565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008036200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088c90620010b4565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009599062001126565b60405180910390fd5b620009766000838362000a9460201b60201c565b6200098d8160025462000a9960201b90919060201c565b600281905550620009e6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a9960201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a88919062001159565b60405180910390a35050565b505050565b600080828462000aaa919062001018565b90508381101562000af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae990620011c6565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b7e57607f821691505b60208210810362000b945762000b9362000b36565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bfe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bbf565b62000c0a868362000bbf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5762000c5162000c4b8462000c22565b62000c2c565b62000c22565b9050919050565b6000819050919050565b62000c738362000c36565b62000c8b62000c828262000c5e565b84845462000bcc565b825550505050565b600090565b62000ca262000c93565b62000caf81848462000c68565b505050565b5b8181101562000cd75762000ccb60008262000c98565b60018101905062000cb5565b5050565b601f82111562000d265762000cf08162000b9a565b62000cfb8462000baf565b8101602085101562000d0b578190505b62000d2362000d1a8562000baf565b83018262000cb4565b50505b505050565b600082821c905092915050565b600062000d4b6000198460080262000d2b565b1980831691505092915050565b600062000d66838362000d38565b9150826002028217905092915050565b62000d818262000afc565b67ffffffffffffffff81111562000d9d5762000d9c62000b07565b5b62000da9825462000b65565b62000db682828562000cdb565b600060209050601f83116001811462000dee576000841562000dd9578287015190505b62000de5858262000d58565b86555062000e55565b601f19841662000dfe8662000b9a565b60005b8281101562000e285784890151825560018201915060208501945060208101905062000e01565b8683101562000e48578489015162000e44601f89168262000d38565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e8f8262000e62565b9050919050565b62000ea18162000e82565b811462000ead57600080fd5b50565b60008151905062000ec18162000e96565b92915050565b60006020828403121562000ee05762000edf62000e5d565b5b600062000ef08482850162000eb0565b91505092915050565b62000f048162000e82565b82525050565b600060408201905062000f21600083018562000ef9565b62000f30602083018462000ef9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f738262000c22565b915062000f808362000c22565b925082820262000f908162000c22565b9150828204841483151762000faa5762000fa962000f37565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fed8262000c22565b915062000ffa8362000c22565b9250826200100d576200100c62000fb1565b5b828204905092915050565b6000620010258262000c22565b9150620010328362000c22565b92508282019050808211156200104d576200104c62000f37565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109c60208362001053565b9150620010a98262001064565b602082019050919050565b60006020820190508181036000830152620010cf816200108d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110e601f8362001053565b91506200111b82620010d6565b602082019050919050565b600060208201905081810360008301526200114181620010ff565b9050919050565b620011538162000c22565b82525050565b600060208201905062001170600083018462001148565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011ae601b8362001053565b9150620011bb8262001176565b602082019050919050565b60006020820190508181036000830152620011e1816200119f565b9050919050565b60805160a0516154236200125460003960008181611479015281816125f001528181612699015281816126c60152612dbc01526000818161127f01528181612d6401528181613cfb01528181613ddc01528181613e0301528181613e9f0152613ec601526154236000f3fe60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063c17b5b8c11610102578063dd62ed3e116100a0578063f63743421161006f578063f637434214610d99578063f8b45b0514610dc4578063fe575a8714610def578063fe72b27a14610e2c576103a2565b8063dd62ed3e14610cdd578063e2f4560514610d1a578063f11a24d314610d45578063f2fde38b14610d70576103a2565b8063c9567bf9116100dc578063c9567bf914610c35578063d257b34f14610c4c578063d85ba06314610c89578063d89452ef14610cb4576103a2565b8063c17b5b8c14610bb6578063c876d0b914610bdf578063c8c8ebe414610c0a576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610ae8578063b62496f514610b25578063bbc0c74214610b62578063c024666814610b8d576103a2565b80639fccce3214610a2a578063a0d82dc514610a55578063a457c2d714610a80578063a4c82a0014610abd576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639c3b4fdc146109d45780639ec22c0e146109ff576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b80632e82f1a0116102c15780636a486a8e1161025f5780637571336a1161022e5780637571336a1461085757806375f0a874146108805780637bce5a04146108ab5780638095d564146108d6576103a2565b80636a486a8e146107ad5780636ddd1713146107d857806370a0823114610803578063715018a614610840576103a2565b806349bd5a5e1161029b57806349bd5a5e146106f15780634a62bb651461071c5780634fbee1931461074757806351dbdf0f14610784576103a2565b80632e82f1a01461065e578063313ce5671461068957806339509351146106b4576103a2565b806318160ddd116103395780631f3fed8f116103085780631f3fed8f146105a057806323b872dd146105cb57806327c8f835146106085780632c3e486c14610633576103a2565b806318160ddd146104f4578063184c16c51461051f578063199ffc721461054a5780631a8145bb14610575576103a2565b806310d5de531161037557806310d5de5314610438578063117e88191461047557806311a582c3146104a05780631694505e146104c9576103a2565b80630227f65b146103a757806306fdde03146103d0578063095ea7b3146103fb576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103ce60048036038101906103c99190613fd8565b610e69565b005b3480156103dc57600080fd5b506103e5610f44565b6040516103f29190614095565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906140ed565b610fd6565b60405161042f9190614148565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190613fd8565b610ff4565b60405161046c9190614148565b60405180910390f35b34801561048157600080fd5b5061048a611014565b6040516104979190614148565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190614163565b6110ea565b005b3480156104d557600080fd5b506104de61127d565b6040516104eb9190614202565b60405180910390f35b34801561050057600080fd5b506105096112a1565b604051610516919061422c565b60405180910390f35b34801561052b57600080fd5b506105346112ab565b604051610541919061422c565b60405180910390f35b34801561055657600080fd5b5061055f6112b1565b60405161056c919061422c565b60405180910390f35b34801561058157600080fd5b5061058a6112b7565b604051610597919061422c565b60405180910390f35b3480156105ac57600080fd5b506105b56112bd565b6040516105c2919061422c565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190614247565b6112c3565b6040516105ff9190614148565b60405180910390f35b34801561061457600080fd5b5061061d61139c565b60405161062a91906142a9565b60405180910390f35b34801561063f57600080fd5b506106486113a2565b604051610655919061422c565b60405180910390f35b34801561066a57600080fd5b506106736113a8565b6040516106809190614148565b60405180910390f35b34801561069557600080fd5b5061069e6113bb565b6040516106ab91906142e0565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906140ed565b6113c4565b6040516106e89190614148565b60405180910390f35b3480156106fd57600080fd5b50610706611477565b60405161071391906142a9565b60405180910390f35b34801561072857600080fd5b5061073161149b565b60405161073e9190614148565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613fd8565b6114ae565b60405161077b9190614148565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190614327565b611504565b005b3480156107b957600080fd5b506107c2611665565b6040516107cf919061422c565b60405180910390f35b3480156107e457600080fd5b506107ed61166b565b6040516107fa9190614148565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190613fd8565b61167e565b604051610837919061422c565b60405180910390f35b34801561084c57600080fd5b506108556116c6565b005b34801561086357600080fd5b5061087e60048036038101906108799190614327565b61181e565b005b34801561088c57600080fd5b50610895611910565b6040516108a291906142a9565b60405180910390f35b3480156108b757600080fd5b506108c0611936565b6040516108cd919061422c565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190614367565b61193c565b005b34801561090b57600080fd5b50610914611a56565b60405161092191906142a9565b60405180910390f35b34801561093657600080fd5b5061093f611a80565b60405161094c91906142a9565b60405180910390f35b34801561096157600080fd5b5061096a611aa6565b604051610977919061422c565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906143ba565b611aac565b005b3480156109b557600080fd5b506109be611b60565b6040516109cb9190614095565b60405180910390f35b3480156109e057600080fd5b506109e9611bf2565b6040516109f6919061422c565b60405180910390f35b348015610a0b57600080fd5b50610a14611bf8565b604051610a21919061422c565b60405180910390f35b348015610a3657600080fd5b50610a3f611bfe565b604051610a4c919061422c565b60405180910390f35b348015610a6157600080fd5b50610a6a611c04565b604051610a77919061422c565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa291906140ed565b611c0a565b604051610ab49190614148565b60405180910390f35b348015610ac957600080fd5b50610ad2611cd7565b604051610adf919061422c565b60405180910390f35b348015610af457600080fd5b50610b0f6004803603810190610b0a91906140ed565b611cdd565b604051610b1c9190614148565b60405180910390f35b348015610b3157600080fd5b50610b4c6004803603810190610b479190613fd8565b611cfb565b604051610b599190614148565b60405180910390f35b348015610b6e57600080fd5b50610b77611d1b565b604051610b849190614148565b60405180910390f35b348015610b9957600080fd5b50610bb46004803603810190610baf9190614327565b611d2e565b005b348015610bc257600080fd5b50610bdd6004803603810190610bd89190614367565b611e20565b005b348015610beb57600080fd5b50610bf4611f3a565b604051610c019190614148565b60405180910390f35b348015610c1657600080fd5b50610c1f611f4d565b604051610c2c919061422c565b60405180910390f35b348015610c4157600080fd5b50610c4a611f53565b005b348015610c5857600080fd5b50610c736004803603810190610c6e91906143e7565b612029565b604051610c809190614148565b60405180910390f35b348015610c9557600080fd5b50610c9e612134565b604051610cab919061422c565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190613fd8565b61213a565b005b348015610ce957600080fd5b50610d046004803603810190610cff9190614414565b612215565b604051610d11919061422c565b60405180910390f35b348015610d2657600080fd5b50610d2f61229c565b604051610d3c919061422c565b60405180910390f35b348015610d5157600080fd5b50610d5a6122a2565b604051610d67919061422c565b60405180910390f35b348015610d7c57600080fd5b50610d976004803603810190610d929190613fd8565b6122a8565b005b348015610da557600080fd5b50610dae61246e565b604051610dbb919061422c565b60405180910390f35b348015610dd057600080fd5b50610dd9612474565b604051610de6919061422c565b60405180910390f35b348015610dfb57600080fd5b50610e166004803603810190610e119190613fd8565b61247a565b604051610e239190614148565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e91906143e7565b61249a565b604051610e609190614148565b60405180910390f35b610e71612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef7906144a0565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610f53906144ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7f906144ef565b8015610fcc5780601f10610fa157610100808354040283529160200191610fcc565b820191906000526020600020905b815481529060010190602001808311610faf57829003601f168201915b5050505050905090565b6000610fea610fe3612753565b848461275b565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600061101e612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a4906144a0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b6110f2612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611178906144a0565b60405180910390fd5b60018210156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90614592565b60405180910390fd5b670de0b6b3a76400006064836111d96112a1565b6111e391906145e1565b6111ed9190614652565b6111f79190614652565b6008819055506001811015611241576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611238906146f5565b60405180910390fd5b670de0b6b3a76400006064826112556112a1565b61125f91906145e1565b6112699190614652565b6112739190614652565b600a819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b60006112d0848484612924565b611391846112dc612753565b61138c856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611342612753565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136829092919063ffffffff16565b61275b565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061146d6113d1612753565b8461146885600160006113e2612753565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e690919063ffffffff16565b61275b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61150c612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190614761565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116ce612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611754906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611826612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906144a0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611944612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906144a0565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119fb9190614781565b611a059190614781565b60158190555060636015541115611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614801565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611ab4612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906144a0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b6f906144ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b906144ef565b8015611be85780601f10611bbd57610100808354040283529160200191611be8565b820191906000526020600020905b815481529060010190602001808311611bcb57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611ccd611c17612753565b84611cc8856040518060600160405280602581526020016153c96025913960016000611c41612753565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136829092919063ffffffff16565b61275b565b6001905092915050565b600e5481565b6000611cf1611cea612753565b8484612924565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611d36612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906144a0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e28612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae906144a0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611edf9190614781565b611ee99190614781565b60198190555060636019541115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90614801565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b611f5b612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe1906144a0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000612033612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b9906144a0565b60405180910390fd5b6001821115612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614893565b60405180910390fd5b6064826121116112a1565b61211b91906145e1565b6121259190614652565b60098190555060019050919050565b60155481565b612142612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c8906144a0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b6122b0612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612336906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590614925565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006124a4612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a906144a0565b60405180910390fd5b600f546010546125439190614781565b4211612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614991565b60405180910390fd5b6103e88211156125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090614a23565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161262b91906142a9565b602060405180830381865afa158015612648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266c9190614a58565b90506000612710848361267f91906145e1565b6126899190614652565b905060008111156126c2576126c17f000000000000000000000000000000000000000000000000000000000000000061dead83613744565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c190614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614b89565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612917919061422c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90614c1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990614cad565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612aa65750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614d19565b60405180910390fd5b60008103612afe57612af983836000613744565b61367d565b601160009054906101000a900460ff16156131c157612b1b611a56565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b895750612b59611a56565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c155750600560149054906101000a900460ff16155b156131c057601160019054906101000a900460ff16612d0f57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ccf5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0590614d85565b60405180910390fd5b5b601460009054906101000a900460ff1615612ed757612d2c611a56565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612db357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e0b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ed65743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8890614e3d565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f7a5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561302157600854811115612fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbb90614ecf565b60405180910390fd5b600a54612fd08361167e565b82612fdb9190614781565b111561301c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301390614f3b565b60405180910390fd5b6131bf565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130c45750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131135760085481111561310e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310590614fcd565b60405180910390fd5b6131be565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131bd57600a546131708361167e565b8261317b9190614781565b11156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390614f3b565b60405180910390fd5b5b5b5b5b5b60006131cc3061167e565b9050600060095482101590508080156131f15750601160029054906101000a900460ff165b801561320a5750600560149054906101000a900460ff16155b80156132605750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b65750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561330c5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613350576001600560146101000a81548160ff0219169083151502179055506133346139d7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134065750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341057600090505b6000811561366d57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601954115b156135325760646019548661348891906145e1565b6134929190614652565b9050601954601b54826134a591906145e1565b6134af9190614652565b601e60008282546134c09190614781565b92505081905550601954601c54826134d891906145e1565b6134e29190614652565b601f60008282546134f39190614781565b92505081905550601954601a548261350b91906145e1565b6135159190614652565b601d60008282546135269190614781565b92505081905550613649565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358d57506000601554115b15613648576064601554866135a291906145e1565b6135ac9190614652565b9050601554601754826135bf91906145e1565b6135c99190614652565b601e60008282546135da9190614781565b92505081905550601554601854826135f291906145e1565b6135fc9190614652565b601f600082825461360d9190614781565b925050819055506015546016548261362591906145e1565b61362f9190614652565b601d60008282546136409190614781565b925050819055505b5b600081111561365e5761365d873083613744565b5b808561366a9190614fed565b94505b613678878787613744565b505050505b505050565b60008383111582906136ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c19190614095565b60405180910390fd5b50600083856136d99190614fed565b9050809150509392505050565b60008082846136f59190614781565b90508381101561373a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137319061506d565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137aa90614c1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614cad565b60405180910390fd5b61382d838383613c57565b6138988160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136829092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139ca919061422c565b60405180910390a3505050565b60006139e23061167e565b90506000601f54601d54601e546139f99190614781565b613a039190614781565b9050600080831480613a155750600082145b15613a2257505050613c55565b6014600954613a3191906145e1565b831115613a4a576014600954613a4791906145e1565b92505b6000600283601e5486613a5d91906145e1565b613a679190614652565b613a719190614652565b905060008185613a819190614fed565b90506000479050613a9182613c5c565b60008147613a9f9190614fed565b9050600086601d5483613ab291906145e1565b613abc9190614652565b9050600087601f5484613acf91906145e1565b613ad99190614652565b90506000818385613aea9190614fed565b613af49190614fed565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b54906150be565b60006040518083038185875af1925050503d8060008114613b91576040519150601f19603f3d011682016040523d82523d6000602084013e613b96565b606091505b505080985050600087118015613bac5750600081115b15613bbc57613bbb8782613e99565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c02906150be565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613c7957613c786150d3565b5b604051908082528060200260200182016040528015613ca75781602001602082028036833780820191505090505b5090503081600081518110613cbf57613cbe615102565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d889190615146565b81600181518110613d9c57613d9b615102565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e01307f00000000000000000000000000000000000000000000000000000000000000008461275b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e6395949392919061526c565b600060405180830381600087803b158015613e7d57600080fd5b505af1158015613e91573d6000803e3d6000fd5b505050505050565b613ec4307f00000000000000000000000000000000000000000000000000000000000000008461275b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f2b969594939291906152c6565b60606040518083038185885af1158015613f49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f6e9190615327565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fa582613f7a565b9050919050565b613fb581613f9a565b8114613fc057600080fd5b50565b600081359050613fd281613fac565b92915050565b600060208284031215613fee57613fed613f75565b5b6000613ffc84828501613fc3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561403f578082015181840152602081019050614024565b60008484015250505050565b6000601f19601f8301169050919050565b600061406782614005565b6140718185614010565b9350614081818560208601614021565b61408a8161404b565b840191505092915050565b600060208201905081810360008301526140af818461405c565b905092915050565b6000819050919050565b6140ca816140b7565b81146140d557600080fd5b50565b6000813590506140e7816140c1565b92915050565b6000806040838503121561410457614103613f75565b5b600061411285828601613fc3565b9250506020614123858286016140d8565b9150509250929050565b60008115159050919050565b6141428161412d565b82525050565b600060208201905061415d6000830184614139565b92915050565b6000806040838503121561417a57614179613f75565b5b6000614188858286016140d8565b9250506020614199858286016140d8565b9150509250929050565b6000819050919050565b60006141c86141c36141be84613f7a565b6141a3565b613f7a565b9050919050565b60006141da826141ad565b9050919050565b60006141ec826141cf565b9050919050565b6141fc816141e1565b82525050565b600060208201905061421760008301846141f3565b92915050565b614226816140b7565b82525050565b6000602082019050614241600083018461421d565b92915050565b6000806000606084860312156142605761425f613f75565b5b600061426e86828701613fc3565b935050602061427f86828701613fc3565b9250506040614290868287016140d8565b9150509250925092565b6142a381613f9a565b82525050565b60006020820190506142be600083018461429a565b92915050565b600060ff82169050919050565b6142da816142c4565b82525050565b60006020820190506142f560008301846142d1565b92915050565b6143048161412d565b811461430f57600080fd5b50565b600081359050614321816142fb565b92915050565b6000806040838503121561433e5761433d613f75565b5b600061434c85828601613fc3565b925050602061435d85828601614312565b9150509250929050565b6000806000606084860312156143805761437f613f75565b5b600061438e868287016140d8565b935050602061439f868287016140d8565b92505060406143b0868287016140d8565b9150509250925092565b6000602082840312156143d0576143cf613f75565b5b60006143de84828501614312565b91505092915050565b6000602082840312156143fd576143fc613f75565b5b600061440b848285016140d8565b91505092915050565b6000806040838503121561442b5761442a613f75565b5b600061443985828601613fc3565b925050602061444a85828601613fc3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061448a602083614010565b915061449582614454565b602082019050919050565b600060208201905081810360008301526144b98161447d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450757607f821691505b60208210810361451a576145196144c0565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061457c602d83614010565b915061458782614520565b604082019050919050565b600060208201905081810360008301526145ab8161456f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145ec826140b7565b91506145f7836140b7565b9250828202614605816140b7565b9150828204841483151761461c5761461b6145b2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061465d826140b7565b9150614668836140b7565b92508261467857614677614623565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006146df602283614010565b91506146ea82614683565b604082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061474b601783614010565b915061475682614715565b602082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b600061478c826140b7565b9150614797836140b7565b92508282019050808211156147af576147ae6145b2565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006147eb601d83614010565b91506147f6826147b5565b602082019050919050565b6000602082019050818103600083015261481a816147de565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b600061487d603283614010565b915061488882614821565b604082019050919050565b600060208201905081810360008301526148ac81614870565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061490f602683614010565b915061491a826148b3565b604082019050919050565b6000602082019050818103600083015261493e81614902565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061497b602083614010565b915061498682614945565b602082019050919050565b600060208201905081810360008301526149aa8161496e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614a0d602a83614010565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b600081519050614a52816140c1565b92915050565b600060208284031215614a6e57614a6d613f75565b5b6000614a7c84828501614a43565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ae1602483614010565b9150614aec82614a85565b604082019050919050565b60006020820190508181036000830152614b1081614ad4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b73602283614010565b9150614b7e82614b17565b604082019050919050565b60006020820190508181036000830152614ba281614b66565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c05602583614010565b9150614c1082614ba9565b604082019050919050565b60006020820190508181036000830152614c3481614bf8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c97602383614010565b9150614ca282614c3b565b604082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614d03600b83614010565b9150614d0e82614ccd565b602082019050919050565b60006020820190508181036000830152614d3281614cf6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d6f601683614010565b9150614d7a82614d39565b602082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e27604983614010565b9150614e3282614da5565b606082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eb9603583614010565b9150614ec482614e5d565b604082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f25601383614010565b9150614f3082614eef565b602082019050919050565b60006020820190508181036000830152614f5481614f18565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fb7603683614010565b9150614fc282614f5b565b604082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b6000614ff8826140b7565b9150615003836140b7565b925082820390508181111561501b5761501a6145b2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615057601b83614010565b915061506282615021565b602082019050919050565b600060208201905081810360008301526150868161504a565b9050919050565b600081905092915050565b50565b60006150a860008361508d565b91506150b382615098565b600082019050919050565b60006150c98261509b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061514081613fac565b92915050565b60006020828403121561515c5761515b613f75565b5b600061516a84828501615131565b91505092915050565b6000819050919050565b600061519861519361518e84615173565b6141a3565b6140b7565b9050919050565b6151a88161517d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151e381613f9a565b82525050565b60006151f583836151da565b60208301905092915050565b6000602082019050919050565b6000615219826151ae565b61522381856151b9565b935061522e836151ca565b8060005b8381101561525f57815161524688826151e9565b975061525183615201565b925050600181019050615232565b5085935050505092915050565b600060a082019050615281600083018861421d565b61528e602083018761519f565b81810360408301526152a0818661520e565b90506152af606083018561429a565b6152bc608083018461421d565b9695505050505050565b600060c0820190506152db600083018961429a565b6152e8602083018861421d565b6152f5604083018761519f565b615302606083018661519f565b61530f608083018561429a565b61531c60a083018461421d565b979650505050505050565b6000806000606084860312156153405761533f613f75565b5b600061534e86828701614a43565b935050602061535f86828701614a43565b925050604061537086828701614a43565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207f705134788a631d4641363f214a03f151183156623df030bbfc2df6020596fc64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063c17b5b8c11610102578063dd62ed3e116100a0578063f63743421161006f578063f637434214610d99578063f8b45b0514610dc4578063fe575a8714610def578063fe72b27a14610e2c576103a2565b8063dd62ed3e14610cdd578063e2f4560514610d1a578063f11a24d314610d45578063f2fde38b14610d70576103a2565b8063c9567bf9116100dc578063c9567bf914610c35578063d257b34f14610c4c578063d85ba06314610c89578063d89452ef14610cb4576103a2565b8063c17b5b8c14610bb6578063c876d0b914610bdf578063c8c8ebe414610c0a576103a2565b80639fccce321161017a578063a9059cbb11610149578063a9059cbb14610ae8578063b62496f514610b25578063bbc0c74214610b62578063c024666814610b8d576103a2565b80639fccce3214610a2a578063a0d82dc514610a55578063a457c2d714610a80578063a4c82a0014610abd576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639c3b4fdc146109d45780639ec22c0e146109ff576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b80632e82f1a0116102c15780636a486a8e1161025f5780637571336a1161022e5780637571336a1461085757806375f0a874146108805780637bce5a04146108ab5780638095d564146108d6576103a2565b80636a486a8e146107ad5780636ddd1713146107d857806370a0823114610803578063715018a614610840576103a2565b806349bd5a5e1161029b57806349bd5a5e146106f15780634a62bb651461071c5780634fbee1931461074757806351dbdf0f14610784576103a2565b80632e82f1a01461065e578063313ce5671461068957806339509351146106b4576103a2565b806318160ddd116103395780631f3fed8f116103085780631f3fed8f146105a057806323b872dd146105cb57806327c8f835146106085780632c3e486c14610633576103a2565b806318160ddd146104f4578063184c16c51461051f578063199ffc721461054a5780631a8145bb14610575576103a2565b806310d5de531161037557806310d5de5314610438578063117e88191461047557806311a582c3146104a05780631694505e146104c9576103a2565b80630227f65b146103a757806306fdde03146103d0578063095ea7b3146103fb576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103ce60048036038101906103c99190613fd8565b610e69565b005b3480156103dc57600080fd5b506103e5610f44565b6040516103f29190614095565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d91906140ed565b610fd6565b60405161042f9190614148565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190613fd8565b610ff4565b60405161046c9190614148565b60405180910390f35b34801561048157600080fd5b5061048a611014565b6040516104979190614148565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190614163565b6110ea565b005b3480156104d557600080fd5b506104de61127d565b6040516104eb9190614202565b60405180910390f35b34801561050057600080fd5b506105096112a1565b604051610516919061422c565b60405180910390f35b34801561052b57600080fd5b506105346112ab565b604051610541919061422c565b60405180910390f35b34801561055657600080fd5b5061055f6112b1565b60405161056c919061422c565b60405180910390f35b34801561058157600080fd5b5061058a6112b7565b604051610597919061422c565b60405180910390f35b3480156105ac57600080fd5b506105b56112bd565b6040516105c2919061422c565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190614247565b6112c3565b6040516105ff9190614148565b60405180910390f35b34801561061457600080fd5b5061061d61139c565b60405161062a91906142a9565b60405180910390f35b34801561063f57600080fd5b506106486113a2565b604051610655919061422c565b60405180910390f35b34801561066a57600080fd5b506106736113a8565b6040516106809190614148565b60405180910390f35b34801561069557600080fd5b5061069e6113bb565b6040516106ab91906142e0565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906140ed565b6113c4565b6040516106e89190614148565b60405180910390f35b3480156106fd57600080fd5b50610706611477565b60405161071391906142a9565b60405180910390f35b34801561072857600080fd5b5061073161149b565b60405161073e9190614148565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613fd8565b6114ae565b60405161077b9190614148565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190614327565b611504565b005b3480156107b957600080fd5b506107c2611665565b6040516107cf919061422c565b60405180910390f35b3480156107e457600080fd5b506107ed61166b565b6040516107fa9190614148565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190613fd8565b61167e565b604051610837919061422c565b60405180910390f35b34801561084c57600080fd5b506108556116c6565b005b34801561086357600080fd5b5061087e60048036038101906108799190614327565b61181e565b005b34801561088c57600080fd5b50610895611910565b6040516108a291906142a9565b60405180910390f35b3480156108b757600080fd5b506108c0611936565b6040516108cd919061422c565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190614367565b61193c565b005b34801561090b57600080fd5b50610914611a56565b60405161092191906142a9565b60405180910390f35b34801561093657600080fd5b5061093f611a80565b60405161094c91906142a9565b60405180910390f35b34801561096157600080fd5b5061096a611aa6565b604051610977919061422c565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906143ba565b611aac565b005b3480156109b557600080fd5b506109be611b60565b6040516109cb9190614095565b60405180910390f35b3480156109e057600080fd5b506109e9611bf2565b6040516109f6919061422c565b60405180910390f35b348015610a0b57600080fd5b50610a14611bf8565b604051610a21919061422c565b60405180910390f35b348015610a3657600080fd5b50610a3f611bfe565b604051610a4c919061422c565b60405180910390f35b348015610a6157600080fd5b50610a6a611c04565b604051610a77919061422c565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa291906140ed565b611c0a565b604051610ab49190614148565b60405180910390f35b348015610ac957600080fd5b50610ad2611cd7565b604051610adf919061422c565b60405180910390f35b348015610af457600080fd5b50610b0f6004803603810190610b0a91906140ed565b611cdd565b604051610b1c9190614148565b60405180910390f35b348015610b3157600080fd5b50610b4c6004803603810190610b479190613fd8565b611cfb565b604051610b599190614148565b60405180910390f35b348015610b6e57600080fd5b50610b77611d1b565b604051610b849190614148565b60405180910390f35b348015610b9957600080fd5b50610bb46004803603810190610baf9190614327565b611d2e565b005b348015610bc257600080fd5b50610bdd6004803603810190610bd89190614367565b611e20565b005b348015610beb57600080fd5b50610bf4611f3a565b604051610c019190614148565b60405180910390f35b348015610c1657600080fd5b50610c1f611f4d565b604051610c2c919061422c565b60405180910390f35b348015610c4157600080fd5b50610c4a611f53565b005b348015610c5857600080fd5b50610c736004803603810190610c6e91906143e7565b612029565b604051610c809190614148565b60405180910390f35b348015610c9557600080fd5b50610c9e612134565b604051610cab919061422c565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190613fd8565b61213a565b005b348015610ce957600080fd5b50610d046004803603810190610cff9190614414565b612215565b604051610d11919061422c565b60405180910390f35b348015610d2657600080fd5b50610d2f61229c565b604051610d3c919061422c565b60405180910390f35b348015610d5157600080fd5b50610d5a6122a2565b604051610d67919061422c565b60405180910390f35b348015610d7c57600080fd5b50610d976004803603810190610d929190613fd8565b6122a8565b005b348015610da557600080fd5b50610dae61246e565b604051610dbb919061422c565b60405180910390f35b348015610dd057600080fd5b50610dd9612474565b604051610de6919061422c565b60405180910390f35b348015610dfb57600080fd5b50610e166004803603810190610e119190613fd8565b61247a565b604051610e239190614148565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e91906143e7565b61249a565b604051610e609190614148565b60405180910390f35b610e71612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef7906144a0565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610f53906144ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7f906144ef565b8015610fcc5780601f10610fa157610100808354040283529160200191610fcc565b820191906000526020600020905b815481529060010190602001808311610faf57829003601f168201915b5050505050905090565b6000610fea610fe3612753565b848461275b565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600061101e612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a4906144a0565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b6110f2612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611178906144a0565b60405180910390fd5b60018210156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90614592565b60405180910390fd5b670de0b6b3a76400006064836111d96112a1565b6111e391906145e1565b6111ed9190614652565b6111f79190614652565b6008819055506001811015611241576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611238906146f5565b60405180910390fd5b670de0b6b3a76400006064826112556112a1565b61125f91906145e1565b6112699190614652565b6112739190614652565b600a819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b60006112d0848484612924565b611391846112dc612753565b61138c856040518060600160405280602881526020016153a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611342612753565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136829092919063ffffffff16565b61275b565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061146d6113d1612753565b8461146885600160006113e2612753565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e690919063ffffffff16565b61275b565b6001905092915050565b7f0000000000000000000000001409ecf9b085b4653b0da3eaa36cee0dd09e65e881565b601160009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61150c612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190614761565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60195481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116ce612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611754906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611826612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906144a0565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611944612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca906144a0565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119fb9190614781565b611a059190614781565b60158190555060636015541115611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890614801565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611ab4612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906144a0565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611b6f906144ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b906144ef565b8015611be85780601f10611bbd57610100808354040283529160200191611be8565b820191906000526020600020905b815481529060010190602001808311611bcb57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611ccd611c17612753565b84611cc8856040518060600160405280602581526020016153c96025913960016000611c41612753565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136829092919063ffffffff16565b61275b565b6001905092915050565b600e5481565b6000611cf1611cea612753565b8484612924565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611d36612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906144a0565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e28612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae906144a0565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611edf9190614781565b611ee99190614781565b60198190555060636019541115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90614801565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b611f5b612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe1906144a0565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000612033612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b9906144a0565b60405180910390fd5b6001821115612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614893565b60405180910390fd5b6064826121116112a1565b61211b91906145e1565b6121259190614652565b60098190555060019050919050565b60155481565b612142612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c8906144a0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b6122b0612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612336906144a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590614925565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006124a4612753565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a906144a0565b60405180910390fd5b600f546010546125439190614781565b4211612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614991565b60405180910390fd5b6103e88211156125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090614a23565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000001409ecf9b085b4653b0da3eaa36cee0dd09e65e86040518263ffffffff1660e01b815260040161262b91906142a9565b602060405180830381865afa158015612648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266c9190614a58565b90506000612710848361267f91906145e1565b6126899190614652565b905060008111156126c2576126c17f0000000000000000000000001409ecf9b085b4653b0da3eaa36cee0dd09e65e861dead83613744565b5b60007f0000000000000000000000001409ecf9b085b4653b0da3eaa36cee0dd09e65e890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561272f57600080fd5b505af1158015612743573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c190614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614b89565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612917919061422c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90614c1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990614cad565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612aa65750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614d19565b60405180910390fd5b60008103612afe57612af983836000613744565b61367d565b601160009054906101000a900460ff16156131c157612b1b611a56565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b895750612b59611a56565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bfc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c155750600560149054906101000a900460ff16155b156131c057601160019054906101000a900460ff16612d0f57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ccf5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0590614d85565b60405180910390fd5b5b601460009054906101000a900460ff1615612ed757612d2c611a56565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612db357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e0b57507f0000000000000000000000001409ecf9b085b4653b0da3eaa36cee0dd09e65e873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ed65743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8890614e3d565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f7a5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561302157600854811115612fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbb90614ecf565b60405180910390fd5b600a54612fd08361167e565b82612fdb9190614781565b111561301c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301390614f3b565b60405180910390fd5b6131bf565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130c45750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131135760085481111561310e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310590614fcd565b60405180910390fd5b6131be565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131bd57600a546131708361167e565b8261317b9190614781565b11156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390614f3b565b60405180910390fd5b5b5b5b5b5b60006131cc3061167e565b9050600060095482101590508080156131f15750601160029054906101000a900460ff165b801561320a5750600560149054906101000a900460ff16155b80156132605750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b65750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561330c5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613350576001600560146101000a81548160ff0219169083151502179055506133346139d7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134065750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341057600090505b6000811561366d57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601954115b156135325760646019548661348891906145e1565b6134929190614652565b9050601954601b54826134a591906145e1565b6134af9190614652565b601e60008282546134c09190614781565b92505081905550601954601c54826134d891906145e1565b6134e29190614652565b601f60008282546134f39190614781565b92505081905550601954601a548261350b91906145e1565b6135159190614652565b601d60008282546135269190614781565b92505081905550613649565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358d57506000601554115b15613648576064601554866135a291906145e1565b6135ac9190614652565b9050601554601754826135bf91906145e1565b6135c99190614652565b601e60008282546135da9190614781565b92505081905550601554601854826135f291906145e1565b6135fc9190614652565b601f600082825461360d9190614781565b925050819055506015546016548261362591906145e1565b61362f9190614652565b601d60008282546136409190614781565b925050819055505b5b600081111561365e5761365d873083613744565b5b808561366a9190614fed565b94505b613678878787613744565b505050505b505050565b60008383111582906136ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c19190614095565b60405180910390fd5b50600083856136d99190614fed565b9050809150509392505050565b60008082846136f59190614781565b90508381101561373a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137319061506d565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137aa90614c1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614cad565b60405180910390fd5b61382d838383613c57565b6138988160405180606001604052806026815260200161537b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136829092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139ca919061422c565b60405180910390a3505050565b60006139e23061167e565b90506000601f54601d54601e546139f99190614781565b613a039190614781565b9050600080831480613a155750600082145b15613a2257505050613c55565b6014600954613a3191906145e1565b831115613a4a576014600954613a4791906145e1565b92505b6000600283601e5486613a5d91906145e1565b613a679190614652565b613a719190614652565b905060008185613a819190614fed565b90506000479050613a9182613c5c565b60008147613a9f9190614fed565b9050600086601d5483613ab291906145e1565b613abc9190614652565b9050600087601f5484613acf91906145e1565b613ad99190614652565b90506000818385613aea9190614fed565b613af49190614fed565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613b54906150be565b60006040518083038185875af1925050503d8060008114613b91576040519150601f19603f3d011682016040523d82523d6000602084013e613b96565b606091505b505080985050600087118015613bac5750600081115b15613bbc57613bbb8782613e99565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c02906150be565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613c7957613c786150d3565b5b604051908082528060200260200182016040528015613ca75781602001602082028036833780820191505090505b5090503081600081518110613cbf57613cbe615102565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d889190615146565b81600181518110613d9c57613d9b615102565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e01307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461275b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e6395949392919061526c565b600060405180830381600087803b158015613e7d57600080fd5b505af1158015613e91573d6000803e3d6000fd5b505050505050565b613ec4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461275b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f2b969594939291906152c6565b60606040518083038185885af1158015613f49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f6e9190615327565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fa582613f7a565b9050919050565b613fb581613f9a565b8114613fc057600080fd5b50565b600081359050613fd281613fac565b92915050565b600060208284031215613fee57613fed613f75565b5b6000613ffc84828501613fc3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561403f578082015181840152602081019050614024565b60008484015250505050565b6000601f19601f8301169050919050565b600061406782614005565b6140718185614010565b9350614081818560208601614021565b61408a8161404b565b840191505092915050565b600060208201905081810360008301526140af818461405c565b905092915050565b6000819050919050565b6140ca816140b7565b81146140d557600080fd5b50565b6000813590506140e7816140c1565b92915050565b6000806040838503121561410457614103613f75565b5b600061411285828601613fc3565b9250506020614123858286016140d8565b9150509250929050565b60008115159050919050565b6141428161412d565b82525050565b600060208201905061415d6000830184614139565b92915050565b6000806040838503121561417a57614179613f75565b5b6000614188858286016140d8565b9250506020614199858286016140d8565b9150509250929050565b6000819050919050565b60006141c86141c36141be84613f7a565b6141a3565b613f7a565b9050919050565b60006141da826141ad565b9050919050565b60006141ec826141cf565b9050919050565b6141fc816141e1565b82525050565b600060208201905061421760008301846141f3565b92915050565b614226816140b7565b82525050565b6000602082019050614241600083018461421d565b92915050565b6000806000606084860312156142605761425f613f75565b5b600061426e86828701613fc3565b935050602061427f86828701613fc3565b9250506040614290868287016140d8565b9150509250925092565b6142a381613f9a565b82525050565b60006020820190506142be600083018461429a565b92915050565b600060ff82169050919050565b6142da816142c4565b82525050565b60006020820190506142f560008301846142d1565b92915050565b6143048161412d565b811461430f57600080fd5b50565b600081359050614321816142fb565b92915050565b6000806040838503121561433e5761433d613f75565b5b600061434c85828601613fc3565b925050602061435d85828601614312565b9150509250929050565b6000806000606084860312156143805761437f613f75565b5b600061438e868287016140d8565b935050602061439f868287016140d8565b92505060406143b0868287016140d8565b9150509250925092565b6000602082840312156143d0576143cf613f75565b5b60006143de84828501614312565b91505092915050565b6000602082840312156143fd576143fc613f75565b5b600061440b848285016140d8565b91505092915050565b6000806040838503121561442b5761442a613f75565b5b600061443985828601613fc3565b925050602061444a85828601613fc3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061448a602083614010565b915061449582614454565b602082019050919050565b600060208201905081810360008301526144b98161447d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450757607f821691505b60208210810361451a576145196144c0565b5b50919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061457c602d83614010565b915061458782614520565b604082019050919050565b600060208201905081810360008301526145ab8161456f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145ec826140b7565b91506145f7836140b7565b9250828202614605816140b7565b9150828204841483151761461c5761461b6145b2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061465d826140b7565b9150614668836140b7565b92508261467857614677614623565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006146df602283614010565b91506146ea82614683565b604082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061474b601783614010565b915061475682614715565b602082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b600061478c826140b7565b9150614797836140b7565b92508282019050808211156147af576147ae6145b2565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006147eb601d83614010565b91506147f6826147b5565b602082019050919050565b6000602082019050818103600083015261481a816147de565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b600061487d603283614010565b915061488882614821565b604082019050919050565b600060208201905081810360008301526148ac81614870565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061490f602683614010565b915061491a826148b3565b604082019050919050565b6000602082019050818103600083015261493e81614902565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061497b602083614010565b915061498682614945565b602082019050919050565b600060208201905081810360008301526149aa8161496e565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614a0d602a83614010565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b600081519050614a52816140c1565b92915050565b600060208284031215614a6e57614a6d613f75565b5b6000614a7c84828501614a43565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ae1602483614010565b9150614aec82614a85565b604082019050919050565b60006020820190508181036000830152614b1081614ad4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b73602283614010565b9150614b7e82614b17565b604082019050919050565b60006020820190508181036000830152614ba281614b66565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c05602583614010565b9150614c1082614ba9565b604082019050919050565b60006020820190508181036000830152614c3481614bf8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c97602383614010565b9150614ca282614c3b565b604082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614d03600b83614010565b9150614d0e82614ccd565b602082019050919050565b60006020820190508181036000830152614d3281614cf6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d6f601683614010565b9150614d7a82614d39565b602082019050919050565b60006020820190508181036000830152614d9e81614d62565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e27604983614010565b9150614e3282614da5565b606082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614eb9603583614010565b9150614ec482614e5d565b604082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f25601383614010565b9150614f3082614eef565b602082019050919050565b60006020820190508181036000830152614f5481614f18565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614fb7603683614010565b9150614fc282614f5b565b604082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b6000614ff8826140b7565b9150615003836140b7565b925082820390508181111561501b5761501a6145b2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615057601b83614010565b915061506282615021565b602082019050919050565b600060208201905081810360008301526150868161504a565b9050919050565b600081905092915050565b50565b60006150a860008361508d565b91506150b382615098565b600082019050919050565b60006150c98261509b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061514081613fac565b92915050565b60006020828403121561515c5761515b613f75565b5b600061516a84828501615131565b91505092915050565b6000819050919050565b600061519861519361518e84615173565b6141a3565b6140b7565b9050919050565b6151a88161517d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151e381613f9a565b82525050565b60006151f583836151da565b60208301905092915050565b6000602082019050919050565b6000615219826151ae565b61522381856151b9565b935061522e836151ca565b8060005b8381101561525f57815161524688826151e9565b975061525183615201565b925050600181019050615232565b5085935050505092915050565b600060a082019050615281600083018861421d565b61528e602083018761519f565b81810360408301526152a0818661520e565b90506152af606083018561429a565b6152bc608083018461421d565b9695505050505050565b600060c0820190506152db600083018961429a565b6152e8602083018861421d565b6152f5604083018761519f565b615302606083018661519f565b61530f608083018561429a565b61531c60a083018461421d565b979650505050505050565b6000806000606084860312156153405761533f613f75565b5b600061534e86828701614a43565b935050602061535f86828701614a43565b925050604061537086828701614a43565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207f705134788a631d4641363f214a03f151183156623df030bbfc2df6020596fc64736f6c63430008130033

Deployed Bytecode Sourcemap

22646:14875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29308:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4966:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7133:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24291:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26875:164;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27388:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22688:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6086:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23266:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23076:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24102:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24062;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7784:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22791:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23172:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23132:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5928:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8548:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22746:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23364:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29423:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29556:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23913:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23444:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6257:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19431:148;;;;;;;;;;;;;:::i;:::-;;27756:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22883:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23802;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28113:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18789:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22920:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23948:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28000:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5185:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23876:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23320:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24142:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24024:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9269:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23224:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6597:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24513:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23404:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28880:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28494:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23720:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22957:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26666:153;;;;;;;;;;;;;:::i;:::-;;27113:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23768:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29158:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6835:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22999:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23839:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19734:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23986:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23039:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23667:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36616:902;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29308:107;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29398:9:::1;29386;;:21;;;;;;;;;;;;;;;;;;29308:107:::0;:::o;4966:100::-;5020:13;5053:5;5046:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4966:100;:::o;7133:169::-;7216:4;7233:39;7242:12;:10;:12::i;:::-;7256:7;7265:6;7233:8;:39::i;:::-;7290:4;7283:11;;7133:169;;;;:::o;24291:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;26875:164::-;26932:4;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26965:5:::1;26948:14;;:22;;;;;;;;;;;;;;;;;;27004:5;26981:20;;:28;;;;;;;;;;;;;;;;;;27027:4;27020:11;;26875:164:::0;:::o;27388:360::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27494:1:::1;27485:5;:10;;27477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27609:4;27604:3;27596:5;27580:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:27;;;;:::i;:::-;27579:34;;;;:::i;:::-;27556:20;:57;;;;27642:1;27632:6;:11;;27624:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27736:4;27731:3;27722:6;27706:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;27705:35;;;;:::i;:::-;27693:9;:47;;;;27388:360:::0;;:::o;22688:51::-;;;:::o;6086:108::-;6147:7;6174:12;;6167:19;;6086:108;:::o;23266:47::-;;;;:::o;23076:36::-;;;;:::o;24102:33::-;;;;:::o;24062:::-;;;;:::o;7784:355::-;7924:4;7941:36;7951:6;7959:9;7970:6;7941:9;:36::i;:::-;7988:121;7997:6;8005:12;:10;:12::i;:::-;8019:89;8057:6;8019:89;;;;;;;;;;;;;;;;;:11;:19;8031:6;8019:19;;;;;;;;;;;;;;;:33;8039:12;:10;:12::i;:::-;8019:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7988:8;:121::i;:::-;8127:4;8120:11;;7784:355;;;;;:::o;22791:53::-;22837:6;22791:53;:::o;23172:45::-;;;;:::o;23132:33::-;;;;;;;;;;;;;:::o;5928:93::-;5986:5;6011:2;6004:9;;5928:93;:::o;8548:218::-;8636:4;8653:83;8662:12;:10;:12::i;:::-;8676:7;8685:50;8724:10;8685:11;:25;8697:12;:10;:12::i;:::-;8685:25;;;;;;;;;;;;;;;:34;8711:7;8685:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8653:8;:83::i;:::-;8754:4;8747:11;;8548:218;;;;:::o;22746:38::-;;;:::o;23364:33::-;;;;;;;;;;;;;:::o;29423:125::-;29488:4;29512:19;:28;29532:7;29512:28;;;;;;;;;;;;;;;;;;;;;;;;;29505:35;;29423:125;;;:::o;29556:195::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29671:1:::1;29651:22;;:8;:22;;::::0;29643:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29737:6;29711:13;:23;29725:8;29711:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;29556:195:::0;;:::o;23913:28::-;;;;:::o;23444:31::-;;;;;;;;;;;;;:::o;6257:127::-;6331:7;6358:9;:18;6368:7;6358:18;;;;;;;;;;;;;;;;6351:25;;6257:127;;;:::o;19431:148::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19538:1:::1;19501:40;;19522:6;;;;;;;;;;;19501:40;;;;;;;;;;;;19569:1;19552:6;;:19;;;;;;;;;;;;;;;;;;19431:148::o:0;27756:144::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27888:4:::1;27846:31;:39;27878:6;27846:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27756:144:::0;;:::o;22883:30::-;;;;;;;;;;;;;:::o;23802:::-;;;;:::o;28113:369::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28247:13:::1;28229:15;:31;;;;28289:13;28271:15;:31;;;;28325:7;28313:9;:19;;;;28394:9;;28376:15;;28358;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;28343:12;:60;;;;28438:2;28422:12;;:18;;28414:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28113:369:::0;;;:::o;18789:79::-;18827:7;18854:6;;;;;;;;;;;18847:13;;18789:79;:::o;22920:24::-;;;;;;;;;;;;;:::o;23948:31::-;;;;:::o;28000:101::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28086:7:::1;28072:11;;:21;;;;;;;;;;;;;;;;;;28000:101:::0;:::o;5185:104::-;5241:13;5274:7;5267:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5185:104;:::o;23876:24::-;;;;:::o;23320:35::-;;;;:::o;24142:27::-;;;;:::o;24024:25::-;;;;:::o;9269:269::-;9362:4;9379:129;9388:12;:10;:12::i;:::-;9402:7;9411:96;9450:15;9411:96;;;;;;;;;;;;;;;;;:11;:25;9423:12;:10;:12::i;:::-;9411:25;;;;;;;;;;;;;;;:34;9437:7;9411:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9379:8;:129::i;:::-;9526:4;9519:11;;9269:269;;;;:::o;23224:29::-;;;;:::o;6597:175::-;6683:4;6700:42;6710:12;:10;:12::i;:::-;6724:9;6735:6;6700:9;:42::i;:::-;6760:4;6753:11;;6597:175;;;;:::o;24513:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;23404:33::-;;;;;;;;;;;;;:::o;28880:132::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28996:8:::1;28965:19;:28;28985:7;28965:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28880:132:::0;;:::o;28494:378::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28630:13:::1;28611:16;:32;;;;28673:13;28654:16;:32;;;;28710:7;28697:10;:20;;;;28782:10;;28763:16;;28744;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;28728:13;:64;;;;28828:2;28811:13;;:19;;28803:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28494:378:::0;;;:::o;23720:39::-;;;;;;;;;;;;;:::o;22957:35::-;;;;:::o;26666:153::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26735:4:::1;26719:13;;:20;;;;;;;;;;;;;;;;;;26764:4;26750:11;;:18;;;;;;;;;;;;;;;;;;26796:15;26779:14;:32;;;;26666:153::o:0;27113:263::-;27194:4;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27230:1:::1;27217:9;:14;;27209:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;27345:3;27333:9;27317:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;27296:18;:52;;;;27365:4;27358:11;;27113:263:::0;;;:::o;23768:27::-;;;;:::o;29158:138::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29270:18:::1;29252:15;;:36;;;;;;;;;;;;;;;;;;29158:138:::0;:::o;6835:151::-;6924:7;6951:11;:18;6963:5;6951:18;;;;;;;;;;;;;;;:27;6970:7;6951:27;;;;;;;;;;;;;;;;6944:34;;6835:151;;;;:::o;22999:33::-;;;;:::o;23839:30::-;;;;:::o;19734:244::-;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19843:1:::1;19823:22;;:8;:22;;::::0;19815:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19933:8;19904:38;;19925:6;;;;;;;;;;;19904:38;;;;;;;;;;;;19962:8;19953:6;;:17;;;;;;;;;;;;;;;;;;19734:244:::0;:::o;23986:31::-;;;;:::o;23039:24::-;;;;:::o;23667:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;36616:902::-;36700:4;19011:12;:10;:12::i;:::-;19001:22;;:6;;;;;;;;;;;:22;;;18993:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36765:19:::1;;36742:20;;:42;;;;:::i;:::-;36724:15;:60;36716:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;36852:4;36841:7;:15;;36833:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36937:15;36914:20;:38;;;;37015:28;37046:4;:14;;;37061:13;37046:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37015:60;;37133:20;37187:5;37179:7;37156:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;37133:59;;37242:1;37227:12;:16;37223:109;;;37259:61;37275:13;37298:6;37307:12;37259:15;:61::i;:::-;37223:109;37415:19;37452:13;37415:51;;37477:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37506:4;37499:11;;;;;36616:902:::0;;;:::o;367:98::-;420:7;447:10;440:17;;367:98;:::o;12455:380::-;12608:1;12591:19;;:5;:19;;;12583:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12689:1;12670:21;;:7;:21;;;12662:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12773:6;12743:11;:18;12755:5;12743:18;;;;;;;;;;;;;;;:27;12762:7;12743:27;;;;;;;;;;;;;;;:36;;;;12811:7;12795:32;;12804:5;12795:32;;;12820:6;12795:32;;;;;;:::i;:::-;;;;;;;;12455:380;;;:::o;29759:4174::-;29907:1;29891:18;;:4;:18;;;29883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29984:1;29970:16;;:2;:16;;;29962:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30046:13;:19;30060:4;30046:19;;;;;;;;;;;;;;;;;;;;;;;;;30045:20;:42;;;;;30070:13;:17;30084:2;30070:17;;;;;;;;;;;;;;;;;;;;;;;;;30069:18;30045:42;30037:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30137:1;30127:6;:11;30124:92;;30155:28;30171:4;30177:2;30181:1;30155:15;:28::i;:::-;30198:7;;30124:92;30239:14;;;;;;;;;;;30236:1841;;;30299:7;:5;:7::i;:::-;30291:15;;:4;:15;;;;:49;;;;;30333:7;:5;:7::i;:::-;30327:13;;:2;:13;;;;30291:49;:86;;;;;30375:1;30361:16;;:2;:16;;;;30291:86;:128;;;;;30412:6;30398:21;;:2;:21;;;;30291:128;:158;;;;;30441:8;;;;;;;;;;;30440:9;30291:158;30269:1797;;;30487:13;;;;;;;;;;;30483:148;;30532:19;:25;30552:4;30532:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30561:19;:23;30581:2;30561:23;;;;;;;;;;;;;;;;;;;;;;;;;30532:52;30524:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;30483:148;30789:20;;;;;;;;;;;30785:423;;;30843:7;:5;:7::i;:::-;30837:13;;:2;:13;;;;:47;;;;;30868:15;30854:30;;:2;:30;;;;30837:47;:79;;;;;30902:13;30888:28;;:2;:28;;;;30837:79;30833:356;;;30994:12;30952:28;:39;30981:9;30952:39;;;;;;;;;;;;;;;;:54;30944:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31153:12;31111:28;:39;31140:9;31111:39;;;;;;;;;;;;;;;:54;;;;30833:356;30785:423;31277:25;:31;31303:4;31277:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;31313:31;:35;31345:2;31313:35;;;;;;;;;;;;;;;;;;;;;;;;;31312:36;31277:71;31273:778;;;31395:20;;31385:6;:30;;31377:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;31534:9;;31517:13;31527:2;31517:9;:13::i;:::-;31508:6;:22;;;;:::i;:::-;:35;;31500:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31273:778;;;31661:25;:29;31687:2;31661:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;31695:31;:37;31727:4;31695:37;;;;;;;;;;;;;;;;;;;;;;;;;31694:38;31661:71;31657:394;;;31779:20;;31769:6;:30;;31761:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;31657:394;;;31905:31;:35;31937:2;31905:35;;;;;;;;;;;;;;;;;;;;;;;;;31901:150;;31998:9;;31981:13;31991:2;31981:9;:13::i;:::-;31972:6;:22;;;;:::i;:::-;:35;;31964:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31901:150;31657:394;31273:778;30269:1797;30236:1841;32091:28;32122:24;32140:4;32122:9;:24::i;:::-;32091:55;;32167:12;32206:18;;32182:20;:42;;32167:57;;32255:7;:35;;;;;32279:11;;;;;;;;;;;32255:35;:61;;;;;32308:8;;;;;;;;;;;32307:9;32255:61;:110;;;;;32334:25;:31;32360:4;32334:31;;;;;;;;;;;;;;;;;;;;;;;;;32333:32;32255:110;:153;;;;;32383:19;:25;32403:4;32383:25;;;;;;;;;;;;;;;;;;;;;;;;;32382:26;32255:153;:194;;;;;32426:19;:23;32446:2;32426:23;;;;;;;;;;;;;;;;;;;;;;;;;32425:24;32255:194;32237:338;;;32487:4;32476:8;;:15;;;;;;;;;;;;;;;;;;32520:10;:8;:10::i;:::-;32558:5;32547:8;;:16;;;;;;;;;;;;;;;;;;32237:338;32587:12;32603:8;;;;;;;;;;;32602:9;32587:24;;32712:19;:25;32732:4;32712:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32741:19;:23;32761:2;32741:23;;;;;;;;;;;;;;;;;;;;;;;;;32712:52;32709:99;;;32791:5;32781:15;;32709:99;32828:12;32932:7;32929:951;;;32983:25;:29;33009:2;32983:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;33032:1;33016:13;;:17;32983:50;32979:732;;;33083:3;33069:13;;33060:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;33053:33;;33153:13;;33134:16;;33127:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33105:18;;:61;;;;;;;:::i;:::-;;;;;;;;33221:13;;33208:10;;33201:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;33185:12;;:49;;;;;;;:::i;:::-;;;;;;;;33301:13;;33282:16;;33275:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33253:18;;:61;;;;;;;:::i;:::-;;;;;;;;32979:732;;;33375:25;:31;33401:4;33375:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;33425:1;33410:12;;:16;33375:51;33372:339;;;33473:3;33460:12;;33451:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;33444:32;;33539:12;;33521:15;;33514:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;33492:18;;:59;;;;;;;:::i;:::-;;;;;;;;33605:12;;33593:9;;33586:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;33570:12;;:47;;;;;;;:::i;:::-;;;;;;;;33683:12;;33665:15;;33658:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;33636:18;;:59;;;;;;;:::i;:::-;;;;;;;;33372:339;32979:732;33749:1;33742:4;:8;33739:93;;;33774:42;33790:4;33804;33811;33774:15;:42::i;:::-;33739:93;33864:4;33854:14;;;;;:::i;:::-;;;32929:951;33892:33;33908:4;33914:2;33918:6;33892:15;:33::i;:::-;29872:4061;;;;29759:4174;;;;:::o;14736:192::-;14822:7;14855:1;14850;:6;;14858:12;14842:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14882:9;14898:1;14894;:5;;;;:::i;:::-;14882:17;;14919:1;14912:8;;;14736:192;;;;;:::o;13833:181::-;13891:7;13911:9;13927:1;13923;:5;;;;:::i;:::-;13911:17;;13952:1;13947;:6;;13939:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;14005:1;13998:8;;;13833:181;;;;:::o;10028:573::-;10186:1;10168:20;;:6;:20;;;10160:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10270:1;10249:23;;:9;:23;;;10241:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10325:47;10346:6;10354:9;10365:6;10325:20;:47::i;:::-;10405:71;10427:6;10405:71;;;;;;;;;;;;;;;;;:9;:17;10415:6;10405:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10385:9;:17;10395:6;10385:17;;;;;;;;;;;;;;;:91;;;;10510:32;10535:6;10510:9;:20;10520:9;10510:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10487:9;:20;10497:9;10487:20;;;;;;;;;;;;;;;:55;;;;10575:9;10558:35;;10567:6;10558:35;;;10586:6;10558:35;;;;;;:::i;:::-;;;;;;;;10028:573;;;:::o;35085:1523::-;35124:23;35150:24;35168:4;35150:9;:24::i;:::-;35124:50;;35185:25;35255:12;;35234:18;;35213;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;35185:82;;35278:12;35333:1;35314:15;:20;:46;;;;35359:1;35338:17;:22;35314:46;35311:60;;;35363:7;;;;;35311:60;35425:2;35404:18;;:23;;;;:::i;:::-;35386:15;:41;35383:111;;;35480:2;35459:18;;:23;;;;:::i;:::-;35441:41;;35383:111;35563:23;35648:1;35628:17;35607:18;;35589:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;35563:86;;35660:26;35707:15;35689;:33;;;;:::i;:::-;35660:62;;35743:25;35771:21;35743:49;;35805:36;35822:18;35805:16;:36::i;:::-;35863:18;35908:17;35884:21;:41;;;;:::i;:::-;35863:62;;35946:23;36004:17;35985:18;;35972:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;35946:75;;36032:17;36078;36065:12;;36052:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;36032:63;;36116:23;36173:9;36155:15;36142:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;36116:66;;36224:1;36203:18;:22;;;;36257:1;36236:18;:22;;;;36284:1;36269:12;:16;;;;36327:9;;;;;;;;;;;36319:23;;36350:9;36319:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36306:58;;;;;36406:1;36388:15;:19;:42;;;;;36429:1;36411:15;:19;36388:42;36385:119;;;36446:46;36459:15;36476;36446:12;:46::i;:::-;36385:119;36545:15;;;;;;;;;;;36537:29;;36574:21;36537:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36524:76;;;;;35113:1495;;;;;;;;;;35085:1523;:::o;13438:125::-;;;;:::o;33941:601::-;34069:21;34107:1;34093:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34069:40;;34138:4;34120;34125:1;34120:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34164:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34154:4;34159:1;34154:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34199:62;34216:4;34231:15;34249:11;34199:8;:62::i;:::-;34300:15;:66;;;34381:11;34407:1;34451:4;34478;34498:15;34300:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33996:546;33941:601;:::o;34560:517::-;34708:62;34725:4;34740:15;34758:11;34708:8;:62::i;:::-;34813:15;:31;;;34852:9;34885:4;34905:11;34931:1;34974;22837:6;35043:15;34813:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34560:517;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::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:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:619::-;5668:6;5676;5684;5733:2;5721:9;5712:7;5708:23;5704:32;5701:119;;;5739:79;;:::i;:::-;5701:119;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5591:619;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:619::-;7810:6;7818;7826;7875:2;7863:9;7854:7;7850:23;7846:32;7843:119;;;7881:79;;:::i;:::-;7843:119;8001:1;8026:53;8071:7;8062:6;8051:9;8047:22;8026:53;:::i;:::-;8016:63;;7972:117;8128:2;8154:53;8199:7;8190:6;8179:9;8175:22;8154:53;:::i;:::-;8144:63;;8099:118;8256:2;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8227:118;7733:619;;;;;:::o;8358:323::-;8414:6;8463:2;8451:9;8442:7;8438:23;8434:32;8431:119;;;8469:79;;:::i;:::-;8431:119;8589:1;8614:50;8656:7;8647:6;8636:9;8632:22;8614:50;:::i;:::-;8604:60;;8560:114;8358:323;;;;:::o;8687:329::-;8746:6;8795:2;8783:9;8774:7;8770:23;8766:32;8763:119;;;8801:79;;:::i;:::-;8763:119;8921:1;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8892:117;8687:329;;;;:::o;9022:474::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:182::-;9642:34;9638:1;9630:6;9626:14;9619:58;9502:182;:::o;9690:366::-;9832:3;9853:67;9917:2;9912:3;9853:67;:::i;:::-;9846:74;;9929:93;10018:3;9929:93;:::i;:::-;10047:2;10042:3;10038:12;10031:19;;9690:366;;;:::o;10062:419::-;10228:4;10266:2;10255:9;10251:18;10243:26;;10315:9;10309:4;10305:20;10301:1;10290:9;10286:17;10279:47;10343:131;10469:4;10343:131;:::i;:::-;10335:139;;10062:419;;;:::o;10487:180::-;10535:77;10532:1;10525:88;10632:4;10629:1;10622:15;10656:4;10653:1;10646:15;10673:320;10717:6;10754:1;10748:4;10744:12;10734:22;;10801:1;10795:4;10791:12;10822:18;10812:81;;10878:4;10870:6;10866:17;10856:27;;10812:81;10940:2;10932:6;10929:14;10909:18;10906:38;10903:84;;10959:18;;:::i;:::-;10903:84;10724:269;10673:320;;;:::o;10999:232::-;11139:34;11135:1;11127:6;11123:14;11116:58;11208:15;11203:2;11195:6;11191:15;11184:40;10999:232;:::o;11237:366::-;11379:3;11400:67;11464:2;11459:3;11400:67;:::i;:::-;11393:74;;11476:93;11565:3;11476:93;:::i;:::-;11594:2;11589:3;11585:12;11578:19;;11237:366;;;:::o;11609:419::-;11775:4;11813:2;11802:9;11798:18;11790:26;;11862:9;11856:4;11852:20;11848:1;11837:9;11833:17;11826:47;11890:131;12016:4;11890:131;:::i;:::-;11882:139;;11609:419;;;:::o;12034:180::-;12082:77;12079:1;12072:88;12179:4;12176:1;12169:15;12203:4;12200:1;12193:15;12220:410;12260:7;12283:20;12301:1;12283:20;:::i;:::-;12278:25;;12317:20;12335:1;12317:20;:::i;:::-;12312:25;;12372:1;12369;12365:9;12394:30;12412:11;12394:30;:::i;:::-;12383:41;;12573:1;12564:7;12560:15;12557:1;12554:22;12534:1;12527:9;12507:83;12484:139;;12603:18;;:::i;:::-;12484:139;12268:362;12220:410;;;;:::o;12636:180::-;12684:77;12681:1;12674:88;12781:4;12778:1;12771:15;12805:4;12802:1;12795:15;12822:185;12862:1;12879:20;12897:1;12879:20;:::i;:::-;12874:25;;12913:20;12931:1;12913:20;:::i;:::-;12908:25;;12952:1;12942:35;;12957:18;;:::i;:::-;12942:35;12999:1;12996;12992:9;12987:14;;12822:185;;;;:::o;13013:221::-;13153:34;13149:1;13141:6;13137:14;13130:58;13222:4;13217:2;13209:6;13205:15;13198:29;13013:221;:::o;13240:366::-;13382:3;13403:67;13467:2;13462:3;13403:67;:::i;:::-;13396:74;;13479:93;13568:3;13479:93;:::i;:::-;13597:2;13592:3;13588:12;13581:19;;13240:366;;;:::o;13612:419::-;13778:4;13816:2;13805:9;13801:18;13793:26;;13865:9;13859:4;13855:20;13851:1;13840:9;13836:17;13829:47;13893:131;14019:4;13893:131;:::i;:::-;13885:139;;13612:419;;;:::o;14037:173::-;14177:25;14173:1;14165:6;14161:14;14154:49;14037:173;:::o;14216:366::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:419::-;14754:4;14792:2;14781:9;14777:18;14769:26;;14841:9;14835:4;14831:20;14827:1;14816:9;14812:17;14805:47;14869:131;14995:4;14869:131;:::i;:::-;14861:139;;14588:419;;;:::o;15013:191::-;15053:3;15072:20;15090:1;15072:20;:::i;:::-;15067:25;;15106:20;15124:1;15106:20;:::i;:::-;15101:25;;15149:1;15146;15142:9;15135:16;;15170:3;15167:1;15164:10;15161:36;;;15177:18;;:::i;:::-;15161:36;15013:191;;;;:::o;15210:179::-;15350:31;15346:1;15338:6;15334:14;15327:55;15210:179;:::o;15395:366::-;15537:3;15558:67;15622:2;15617:3;15558:67;:::i;:::-;15551:74;;15634:93;15723:3;15634:93;:::i;:::-;15752:2;15747:3;15743:12;15736:19;;15395:366;;;:::o;15767:419::-;15933:4;15971:2;15960:9;15956:18;15948:26;;16020:9;16014:4;16010:20;16006:1;15995:9;15991:17;15984:47;16048:131;16174:4;16048:131;:::i;:::-;16040:139;;15767:419;;;:::o;16192:237::-;16332:34;16328:1;16320:6;16316:14;16309:58;16401:20;16396:2;16388:6;16384:15;16377:45;16192:237;:::o;16435:366::-;16577:3;16598:67;16662:2;16657:3;16598:67;:::i;:::-;16591:74;;16674:93;16763:3;16674:93;:::i;:::-;16792:2;16787:3;16783:12;16776:19;;16435:366;;;:::o;16807:419::-;16973:4;17011:2;17000:9;16996:18;16988:26;;17060:9;17054:4;17050:20;17046:1;17035:9;17031:17;17024:47;17088:131;17214:4;17088:131;:::i;:::-;17080:139;;16807:419;;;:::o;17232:225::-;17372:34;17368:1;17360:6;17356:14;17349:58;17441:8;17436:2;17428:6;17424:15;17417:33;17232:225;:::o;17463:366::-;17605:3;17626:67;17690:2;17685:3;17626:67;:::i;:::-;17619:74;;17702:93;17791:3;17702:93;:::i;:::-;17820:2;17815:3;17811:12;17804:19;;17463:366;;;:::o;17835:419::-;18001:4;18039:2;18028:9;18024:18;18016:26;;18088:9;18082:4;18078:20;18074:1;18063:9;18059:17;18052:47;18116:131;18242:4;18116:131;:::i;:::-;18108:139;;17835:419;;;:::o;18260:182::-;18400:34;18396:1;18388:6;18384:14;18377:58;18260:182;:::o;18448:366::-;18590:3;18611:67;18675:2;18670:3;18611:67;:::i;:::-;18604:74;;18687:93;18776:3;18687:93;:::i;:::-;18805:2;18800:3;18796:12;18789:19;;18448:366;;;:::o;18820:419::-;18986:4;19024:2;19013:9;19009:18;19001:26;;19073:9;19067:4;19063:20;19059:1;19048:9;19044:17;19037:47;19101:131;19227:4;19101:131;:::i;:::-;19093:139;;18820:419;;;:::o;19245:229::-;19385:34;19381:1;19373:6;19369:14;19362:58;19454:12;19449:2;19441:6;19437:15;19430:37;19245:229;:::o;19480:366::-;19622:3;19643:67;19707:2;19702:3;19643:67;:::i;:::-;19636:74;;19719:93;19808:3;19719:93;:::i;:::-;19837:2;19832:3;19828:12;19821:19;;19480:366;;;:::o;19852:419::-;20018:4;20056:2;20045:9;20041:18;20033:26;;20105:9;20099:4;20095:20;20091:1;20080:9;20076:17;20069:47;20133:131;20259:4;20133:131;:::i;:::-;20125:139;;19852:419;;;:::o;20277:143::-;20334:5;20365:6;20359:13;20350:22;;20381:33;20408:5;20381:33;:::i;:::-;20277:143;;;;:::o;20426:351::-;20496:6;20545:2;20533:9;20524:7;20520:23;20516:32;20513:119;;;20551:79;;:::i;:::-;20513:119;20671:1;20696:64;20752:7;20743:6;20732:9;20728:22;20696:64;:::i;:::-;20686:74;;20642:128;20426:351;;;;:::o;20783:223::-;20923:34;20919:1;20911:6;20907:14;20900:58;20992:6;20987:2;20979:6;20975:15;20968:31;20783:223;:::o;21012:366::-;21154:3;21175:67;21239:2;21234:3;21175:67;:::i;:::-;21168:74;;21251:93;21340:3;21251:93;:::i;:::-;21369:2;21364:3;21360:12;21353:19;;21012:366;;;:::o;21384:419::-;21550:4;21588:2;21577:9;21573:18;21565:26;;21637:9;21631:4;21627:20;21623:1;21612:9;21608:17;21601:47;21665:131;21791:4;21665:131;:::i;:::-;21657:139;;21384:419;;;:::o;21809:221::-;21949:34;21945:1;21937:6;21933:14;21926:58;22018:4;22013:2;22005:6;22001:15;21994:29;21809:221;:::o;22036:366::-;22178:3;22199:67;22263:2;22258:3;22199:67;:::i;:::-;22192:74;;22275:93;22364:3;22275:93;:::i;:::-;22393:2;22388:3;22384:12;22377:19;;22036:366;;;:::o;22408:419::-;22574:4;22612:2;22601:9;22597:18;22589:26;;22661:9;22655:4;22651:20;22647:1;22636:9;22632:17;22625:47;22689:131;22815:4;22689:131;:::i;:::-;22681:139;;22408:419;;;:::o;22833:224::-;22973:34;22969:1;22961:6;22957:14;22950:58;23042:7;23037:2;23029:6;23025:15;23018:32;22833:224;:::o;23063:366::-;23205:3;23226:67;23290:2;23285:3;23226:67;:::i;:::-;23219:74;;23302:93;23391:3;23302:93;:::i;:::-;23420:2;23415:3;23411:12;23404:19;;23063:366;;;:::o;23435:419::-;23601:4;23639:2;23628:9;23624:18;23616:26;;23688:9;23682:4;23678:20;23674:1;23663:9;23659:17;23652:47;23716:131;23842:4;23716:131;:::i;:::-;23708:139;;23435:419;;;:::o;23860:222::-;24000:34;23996:1;23988:6;23984:14;23977:58;24069:5;24064:2;24056:6;24052:15;24045:30;23860:222;:::o;24088:366::-;24230:3;24251:67;24315:2;24310:3;24251:67;:::i;:::-;24244:74;;24327:93;24416:3;24327:93;:::i;:::-;24445:2;24440:3;24436:12;24429:19;;24088:366;;;:::o;24460:419::-;24626:4;24664:2;24653:9;24649:18;24641:26;;24713:9;24707:4;24703:20;24699:1;24688:9;24684:17;24677:47;24741:131;24867:4;24741:131;:::i;:::-;24733:139;;24460:419;;;:::o;24885:161::-;25025:13;25021:1;25013:6;25009:14;25002:37;24885:161;:::o;25052:366::-;25194:3;25215:67;25279:2;25274:3;25215:67;:::i;:::-;25208:74;;25291:93;25380:3;25291:93;:::i;:::-;25409:2;25404:3;25400:12;25393:19;;25052:366;;;:::o;25424:419::-;25590:4;25628:2;25617:9;25613:18;25605:26;;25677:9;25671:4;25667:20;25663:1;25652:9;25648:17;25641:47;25705:131;25831:4;25705:131;:::i;:::-;25697:139;;25424:419;;;:::o;25849:172::-;25989:24;25985:1;25977:6;25973:14;25966:48;25849:172;:::o;26027:366::-;26169:3;26190:67;26254:2;26249:3;26190:67;:::i;:::-;26183:74;;26266:93;26355:3;26266:93;:::i;:::-;26384:2;26379:3;26375:12;26368:19;;26027:366;;;:::o;26399:419::-;26565:4;26603:2;26592:9;26588:18;26580:26;;26652:9;26646:4;26642:20;26638:1;26627:9;26623:17;26616:47;26680:131;26806:4;26680:131;:::i;:::-;26672:139;;26399:419;;;:::o;26824:297::-;26964:34;26960:1;26952:6;26948:14;26941:58;27033:34;27028:2;27020:6;27016:15;27009:59;27102:11;27097:2;27089:6;27085:15;27078:36;26824:297;:::o;27127:366::-;27269:3;27290:67;27354:2;27349:3;27290:67;:::i;:::-;27283:74;;27366:93;27455:3;27366:93;:::i;:::-;27484:2;27479:3;27475:12;27468:19;;27127:366;;;:::o;27499:419::-;27665:4;27703:2;27692:9;27688:18;27680:26;;27752:9;27746:4;27742:20;27738:1;27727:9;27723:17;27716:47;27780:131;27906:4;27780:131;:::i;:::-;27772:139;;27499:419;;;:::o;27924:240::-;28064:34;28060:1;28052:6;28048:14;28041:58;28133:23;28128:2;28120:6;28116:15;28109:48;27924:240;:::o;28170:366::-;28312:3;28333:67;28397:2;28392:3;28333:67;:::i;:::-;28326:74;;28409:93;28498:3;28409:93;:::i;:::-;28527:2;28522:3;28518:12;28511:19;;28170:366;;;:::o;28542:419::-;28708:4;28746:2;28735:9;28731:18;28723:26;;28795:9;28789:4;28785:20;28781:1;28770:9;28766:17;28759:47;28823:131;28949:4;28823:131;:::i;:::-;28815:139;;28542:419;;;:::o;28967:169::-;29107:21;29103:1;29095:6;29091:14;29084:45;28967:169;:::o;29142:366::-;29284:3;29305:67;29369:2;29364:3;29305:67;:::i;:::-;29298:74;;29381:93;29470:3;29381:93;:::i;:::-;29499:2;29494:3;29490:12;29483:19;;29142:366;;;:::o;29514:419::-;29680:4;29718:2;29707:9;29703:18;29695:26;;29767:9;29761:4;29757:20;29753:1;29742:9;29738:17;29731:47;29795:131;29921:4;29795:131;:::i;:::-;29787:139;;29514:419;;;:::o;29939:241::-;30079:34;30075:1;30067:6;30063:14;30056:58;30148:24;30143:2;30135:6;30131:15;30124:49;29939:241;:::o;30186:366::-;30328:3;30349:67;30413:2;30408:3;30349:67;:::i;:::-;30342:74;;30425:93;30514:3;30425:93;:::i;:::-;30543:2;30538:3;30534:12;30527:19;;30186:366;;;:::o;30558:419::-;30724:4;30762:2;30751:9;30747:18;30739:26;;30811:9;30805:4;30801:20;30797:1;30786:9;30782:17;30775:47;30839:131;30965:4;30839:131;:::i;:::-;30831:139;;30558:419;;;:::o;30983:194::-;31023:4;31043:20;31061:1;31043:20;:::i;:::-;31038:25;;31077:20;31095:1;31077:20;:::i;:::-;31072:25;;31121:1;31118;31114:9;31106:17;;31145:1;31139:4;31136:11;31133:37;;;31150:18;;:::i;:::-;31133:37;30983:194;;;;:::o;31183:177::-;31323:29;31319:1;31311:6;31307:14;31300:53;31183:177;:::o;31366:366::-;31508:3;31529:67;31593:2;31588:3;31529:67;:::i;:::-;31522:74;;31605:93;31694:3;31605:93;:::i;:::-;31723:2;31718:3;31714:12;31707:19;;31366:366;;;:::o;31738:419::-;31904:4;31942:2;31931:9;31927:18;31919:26;;31991:9;31985:4;31981:20;31977:1;31966:9;31962:17;31955:47;32019:131;32145:4;32019:131;:::i;:::-;32011:139;;31738:419;;;:::o;32163:147::-;32264:11;32301:3;32286:18;;32163:147;;;;:::o;32316:114::-;;:::o;32436:398::-;32595:3;32616:83;32697:1;32692:3;32616:83;:::i;:::-;32609:90;;32708:93;32797:3;32708:93;:::i;:::-;32826:1;32821:3;32817:11;32810:18;;32436:398;;;:::o;32840:379::-;33024:3;33046:147;33189:3;33046:147;:::i;:::-;33039:154;;33210:3;33203:10;;32840:379;;;:::o;33225:180::-;33273:77;33270:1;33263:88;33370:4;33367:1;33360:15;33394:4;33391:1;33384:15;33411:180;33459:77;33456:1;33449:88;33556:4;33553:1;33546:15;33580:4;33577:1;33570:15;33597:143;33654:5;33685:6;33679:13;33670:22;;33701:33;33728:5;33701:33;:::i;:::-;33597:143;;;;:::o;33746:351::-;33816:6;33865:2;33853:9;33844:7;33840:23;33836:32;33833:119;;;33871:79;;:::i;:::-;33833:119;33991:1;34016:64;34072:7;34063:6;34052:9;34048:22;34016:64;:::i;:::-;34006:74;;33962:128;33746:351;;;;:::o;34103:85::-;34148:7;34177:5;34166:16;;34103:85;;;:::o;34194:158::-;34252:9;34285:61;34303:42;34312:32;34338:5;34312:32;:::i;:::-;34303:42;:::i;:::-;34285:61;:::i;:::-;34272:74;;34194:158;;;:::o;34358:147::-;34453:45;34492:5;34453:45;:::i;:::-;34448:3;34441:58;34358:147;;:::o;34511:114::-;34578:6;34612:5;34606:12;34596:22;;34511:114;;;:::o;34631:184::-;34730:11;34764:6;34759:3;34752:19;34804:4;34799:3;34795:14;34780:29;;34631:184;;;;:::o;34821:132::-;34888:4;34911:3;34903:11;;34941:4;34936:3;34932:14;34924:22;;34821:132;;;:::o;34959:108::-;35036:24;35054:5;35036:24;:::i;:::-;35031:3;35024:37;34959:108;;:::o;35073:179::-;35142:10;35163:46;35205:3;35197:6;35163:46;:::i;:::-;35241:4;35236:3;35232:14;35218:28;;35073:179;;;;:::o;35258:113::-;35328:4;35360;35355:3;35351:14;35343:22;;35258:113;;;:::o;35407:732::-;35526:3;35555:54;35603:5;35555:54;:::i;:::-;35625:86;35704:6;35699:3;35625:86;:::i;:::-;35618:93;;35735:56;35785:5;35735:56;:::i;:::-;35814:7;35845:1;35830:284;35855:6;35852:1;35849:13;35830:284;;;35931:6;35925:13;35958:63;36017:3;36002:13;35958:63;:::i;:::-;35951:70;;36044:60;36097:6;36044:60;:::i;:::-;36034:70;;35890:224;35877:1;35874;35870:9;35865:14;;35830:284;;;35834:14;36130:3;36123:10;;35531:608;;;35407:732;;;;:::o;36145:831::-;36408:4;36446:3;36435:9;36431:19;36423:27;;36460:71;36528:1;36517:9;36513:17;36504:6;36460:71;:::i;:::-;36541:80;36617:2;36606:9;36602:18;36593:6;36541:80;:::i;:::-;36668:9;36662:4;36658:20;36653:2;36642:9;36638:18;36631:48;36696:108;36799:4;36790:6;36696:108;:::i;:::-;36688:116;;36814:72;36882:2;36871:9;36867:18;36858:6;36814:72;:::i;:::-;36896:73;36964:3;36953:9;36949:19;36940:6;36896:73;:::i;:::-;36145:831;;;;;;;;:::o;36982:807::-;37231:4;37269:3;37258:9;37254:19;37246:27;;37283:71;37351:1;37340:9;37336:17;37327:6;37283:71;:::i;:::-;37364:72;37432:2;37421:9;37417:18;37408:6;37364:72;:::i;:::-;37446:80;37522:2;37511:9;37507:18;37498:6;37446:80;:::i;:::-;37536;37612:2;37601:9;37597:18;37588:6;37536:80;:::i;:::-;37626:73;37694:3;37683:9;37679:19;37670:6;37626:73;:::i;:::-;37709;37777:3;37766:9;37762:19;37753:6;37709:73;:::i;:::-;36982:807;;;;;;;;;:::o;37795:663::-;37883:6;37891;37899;37948:2;37936:9;37927:7;37923:23;37919:32;37916:119;;;37954:79;;:::i;:::-;37916:119;38074:1;38099:64;38155:7;38146:6;38135:9;38131:22;38099:64;:::i;:::-;38089:74;;38045:128;38212:2;38238:64;38294:7;38285:6;38274:9;38270:22;38238:64;:::i;:::-;38228:74;;38183:129;38351:2;38377:64;38433:7;38424:6;38413:9;38409:22;38377:64;:::i;:::-;38367:74;;38322:129;37795:663;;;;;:::o

Swarm Source

ipfs://7f705134788a631d4641363f214a03f151183156623df030bbfc2df6020596fc
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.