ETH Price: $2,509.43 (-1.23%)

Token

ReAnimationDAO (Re:Anime)
 

Overview

Max Total Supply

888,888,888,888 Re:Anime

Holders

131

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
414,000,000 Re:Anime

Value
$0.00
0x9c9b299d4fdeb99eb8d9ca6b67b2c8f054e4035f
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:
ReAnimationDAO

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 1300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-07
*/

/*     
    ░░  ░   ░   ░   ░   ░  ░░  ░   ░       ░  ░░  ░   ░   ░   ░  ░░  ░   ░   ░   ░
                                  ╓╖▒░░░
                                @╬▓▓▒░░░░
                               ╫╢╢╢╢╢@▒@@@▒
      ░░  ░   ░   ░   ░  ░░  ░ ▓╢╢╢╢╢╢╢╢╢╢▓Ñ╖░  ░░  ░   ░   ░  ░░  ░░  ░   ░   ░   ░
                                ▓╢╢╢╢╢╢╢╢╢╢╢╢▓@╖,        ╖╖╖╖.                  ░
      ░░  ░   ░   ░   ░  ░░  ░   ╙▓╢╢╢╢╢╢╢╢╢╢╢╣╢▓▓▓ ░ ╓╢▓▒▒▒░░ ░░  ░░  ░   ░   ░   ░
                                   ╙╩▓╢╢╢╢╢╢╢╫╣╢╢╢╢  ║▒▓╢▓▒▒▒▒░
                                      `╨▓╢╢╢╢╢╢╢╢╢╢  ╢╣╢╢╢▓▓▓▓╖
                 ,                      ]╢╢╢╢╢╢╢╢╢╢▒  ▓╢╢╢╢╢╢╢▒╖
    ░░  ░   ░ ,▒▒░░▒∩╖     ░░  ░   ░   ░ ▓╢╢╢╢╢╢╢╢╢▒╖ ░▓╢╢╢╢╢╢╢@╖░░  ░   ░   ░   ░
      ░░  ░░  ║▒▒▒▒▒▓▓▓▓▓▓▓@╖,   ░   ░   ░▓╢╢╢╢╢╢╢╢╣▒╖  ▓╢╢╢╢╢╢╣▓@ ░░  ░   ░   ░   ░
              ╫╢╢╢╢╢╢╢╢╢╢╢╢╢╫▓▓╖           ▓╢╢╢╢╢╢╢╢╣▓╣ └╢╢╢╢╢╢╢╢▓▒
      ░░  ░   ╚╣╣╣╢╢╢╢╢╢╢╢╢╢╢╢╢▒ ░   ░   ░╟╢╢╢╢╢╬╣╢╢╢╢▓░░╟╢╢╢╢╢╢╢╢▓░░  ░   ░   ░   ░
                ╙╨╩▓▓▓▓╢╢╢╣╢╢╢╢▓▒         ╟╢╢╢╢╢╢╢╢╢╢▓╜   ▓╢╢╢╢╢╢╢╢╣
                       ╟╢╣╣╢╣╣╣╣╣▓        ▒╢╢╢╢╢╢╢╢╢╢╣   ╓▒▓╢╢╢╢╢╢╢▓[   ╓╢▒▒▒▒
                        ▓╣╣╣╣╣╢╣▓▓▓       ▒╢╢╣╢╢╢╢╢╢╢Ü  ╓▒▓╢╢╢╢╣╣╢╢╢▒  ╢▒▓╢▓▒▒▒
    ░░  ░░  ░   ░   ░  ░░▓▓▓╣╣▓▓╢╢╣▓╖  ░  ▒╣╣╣╣╣╣╣╣╣▓ ░,▒╣╢╢╢╢╢╢╢▓▓▓ ░ ▒╢╢╢▓@▒▒ 
                         ]╣▓▓╣▓▓╣╣╣╣▓@╖ ╓▓╫╣╣╣╣╣╣╣╣╣▓ ,╫╣╣╣╣╣╣╣╢╣╢▓    ╠╢╢╢╢╢╢╜
    ░░  ░   ░   ░   ░   ░ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╣╣╣╣╣╣╣╣▓g▓╣╣╣╣╣╣╣╣╣▓╜░  ░ ╟╣╣╣╢╢╣   
          ░               └▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╣▓▓▓▓▓▓▓▓╣▓▓▓╣╣╣╣╣╣╣╣▓      ╥▓╣╢╫╣╢╣H
      ]▒▒▒▒▓H╖,            ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓      ╫▓╣╣╣╣╢╣▓
      ]▒▒▒▒▓▓▓▒╖           j▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░   ,╓╢▓╣╣╣╣╣╣╣▓
      ░▓▓▓▓▓▓▓▓▒  ░   ░  ░░ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓@@▓▓▓▓▓▓▓▓▓▓▓▓  ░   ░
    ░░ ▓▓▓▓▓▓▓▓M░   ░  ░░  ░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░   ░
      ]▓▓▓▓▓▓▓▓╖  ░   ░  ░░╓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓M   ░   ░
      ▓▓▓▓▓▓▓▓▓▓▓N,      ,╢▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
      ▀▓▓▓▓▓▓▓▓▓▓▓▓▓╖  ,@▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
        ╙▓▓▓▓▓▓▓▓▓▓▓▓▓╢▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▀`
    ░░  ░  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╜ ░   ░   ░   ░
      ░░  ░ ▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░  ░   ░   ░   ░
             ║▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
      ░░  ░   ╫▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓C ░░  ░   ░   ░   ░
              └▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
                ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
                 ╙▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░
    ░░  ░   ░   ░   ╙▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░  ░   ░   ░   ░
      ░░  ░   ░   ░    `▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░  ░░  ░░  ░   ░   ░
    ░░  ░   ░   ░   ░   ░  ▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╜  ░░  ░   ░   ░   ░
                             ▀▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╣
                              ╙▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓@
                               ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╣
      ░   ░              ░   ░  ╫▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓M░  ░   ░
    ░░  ░░  ░   ░   ░  ░░  ░░  ░╘▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓  ░░  ░   ░   ░   ░
                                 ╫▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓U
    ░░  ░   ░   ░   ░   ░  ░░  ░ ╟▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░  ░   ░   ░   ░
                      ,▄▄▄▄,     ╟▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌@
          ,.⌐∞═ⁿ▀▀▀▀▀▀ ` . ▀██▄▄▄╣▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒
                       ╙▀▀█▄▄████╫███▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██▄███▀▀▀▀▀▀M═∞¡
      ░░  ░   ░   *w▄,░  ░░  '▀█████▓▓▓████████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██████▀  ░ , ░   ░   ░
     ░                ▀▀R▄▄▄▄▄▄████████████████████████████████████▀RP▀▀ ░       ░
      ░░  ░   ░   ░   ░       '-   ▄Æ█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀-      ░  ░   ░   ░   ░   ░
     The Summoning Jutsu: Reanimation is a forbidden technique used to revive the dead
	 
	 Brought back to enter the flesh again
*/	 
//	 44 6F 20 6E 6F 74 20 62 75 79 20 75 6E 74 69 6C 20 34 38 20 68 6F 75 72 73 20 61 66 74 65 72 20 6F 70 65 6E 20 74 72 61 64 65
	 
//	 22 47 72 65 65 64 20 6B 69 6C 6C 65 64 20 6D 61 6E 73 20 73 6F 75 6C 22 20
	 
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

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


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @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/od/ai/nu/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);
}

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

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

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

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

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


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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

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 removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract ReAnimationDAO is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 300;
    uint256 public _marketingFee = 500;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 300;
    uint256 public _sellMarketingFee = 500;
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferMarketingFee = _buyMarketingFee;
    
    uint256 private maxReflectFee = 1000;
    uint256 private maxLiquidityFee = 1000;
    uint256 private maxMarketingFee = 2000;

    uint256 public _liquidityRatio = 300;
    uint256 public _marketingRatio = 500;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function intializeContract(address payable setNewWallet, string memory _tokenname, string memory _tokensymbol, uint8 _block, uint256 gas) external onlyOwner {
        require(!contractInitialized);
        require(snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        require(gas >= 75, "you fucking jeet");

        _marketingWallet = payable(setNewWallet);

        _name = _tokenname;
        _symbol = _tokensymbol;
        startingSupply = 888_888_888_888;
        if (startingSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        snipeBlockAmt = _block;
        gasPriceLimit = gas * 1 gwei;
        _maxTxAmount = (_tTotal * 2000) / 100000;
        maxTxAmountUI = (startingSupply * 500) / 100000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (startingSupply * 10) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        _transfer(owner(), address(this), balanceOf(owner()));


        

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );

    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view returns (uint8) { return _decimals; }
    function symbol() external view returns (string memory) { return _symbol; }
    function name() external view returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "you fucking jeet");
        gasPriceLimit = gas * 1 gwei;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }

    function setBlacklistMultipleEnabled(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _isSniperOrBlacklisted[account[i]] = enabled;
        }
    }
    
    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 3450);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setExcludedFromFee(address account, bool enabled) public onlyOwner {
        _isExcludedFromFee[account] = enabled;
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOwned[account] = 0;
                    _isExcluded[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt > 3) {
            _liqAddBlock = block.number + 500;
        } else {
            _liqAddBlock = block.number;
        }
        tradingEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function rescueETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"setNewWallet","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"},{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistMultipleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiGas","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600e81905561012c600f8190556101f460108190556011839055601282905560138190556014839055601582905560168190556017839055601882905560198190556103e8601a819055601b556107d0601c55601d91909155601e55612710601f55602880546001600160a01b031990811661dead179091556029805482169055602a805460ff60a81b191690556031805462ffffff191661010017905560328290556033829055603482905560358290556036805460ff1990811660019081179092556038805482169092178255603a80549091169055825490911633179091554614156200012157602780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001aa565b46606114156200015757602780546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001aa565b4660011480620001675750466004145b80620001735750466003145b15620001a557602780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001aa565b600080fd5b600160066000620001c36000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a906200021c6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000265620002503390565b6027546001600160a01b031660001962000287565b602754620002819030906001600160a01b031660001962000287565b620003b3565b6001600160a01b038316620002ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002e6565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61478080620003c36000396000f3fe6080604052600436106103e25760003560e01c80636639dd931161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b58578063f6540ec714610b78578063fb78680d14610b8e57600080fd5b8063ea08d30b14610b22578063eafb5a3c14610b3857600080fd5b8063dc44b6a014610a90578063dd62ed3e14610aa6578063e79d416014610aec578063e7c281d614610b0257600080fd5b8063c5d24189116100f7578063c5d2418914610a2e578063c860795214610a44578063d038b07e14610a5a578063d9e6646014610a7057600080fd5b8063a9059cbb146109b8578063b6f8f8dc146109d8578063bbcea6bf146109f8578063c49b9a8014610a0e57600080fd5b806388790a68116101a05780638a8c523c1161016f5780638a8c523c1461096e5780638da5cb5b1461091757806395d89b4114610983578063a457c2d71461099857600080fd5b806388790a68146108c857806388f82020146108de578063893d20e81461091757806389fd9bc11461093557600080fd5b80636ed18aae116101dc5780636ed18aae1461085357806370a0823114610873578063715018a61461089357806380c581d1146108a857600080fd5b80636639dd93146107e75780636bc87c3a146108075780636c6d9fa11461081d5780636cbdd5e31461083d57600080fd5b806339509351116102fd5780635342acb41161029057806358fa63ca1161025f57806358fa63ca146107715780635d098b381461079157806364038409146107b15780636612e66f146107c757600080fd5b80635342acb4146106d857806356a39e9314610711578063571ac8b014610731578063575f18e51461075157600080fd5b80634a74bb02116102cc5780634a74bb02146106615780634ef3cce5146106825780634fb2e45d1461069857806350a8e016146106b857600080fd5b806339509351146105eb5780633f3cf56c1461060b578063452ed4f11461062b57806345e8c85c1461064b57600080fd5b806318160ddd11610375578063260039571161034457806326003957146105745780632d83811914610594578063313ce567146105b4578063384f6b51146105d557600080fd5b806318160ddd1461051457806320800a001461052957806322976e0d1461053e57806323b872dd1461055457600080fd5b8063095ea7b3116103b1578063095ea7b31461048f57806313114a9d146104bf57806313e46192146104de57806315639c1b146104fe57600080fd5b806303fd2a45146103ee57806306fdde031461042b5780630758d9241461044d578063092316021461046d57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5060285461040e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043757600080fd5b50610440610bae565b6040516104229190613fda565b34801561045957600080fd5b5060255461040e906001600160a01b031681565b34801561047957600080fd5b5061048d61048836600461402f565b610c40565b005b34801561049b57600080fd5b506104af6104aa36600461405d565b610cf2565b6040519015158152602001610422565b3480156104cb57600080fd5b506024545b604051908152602001610422565b3480156104ea57600080fd5b5061048d6104f936600461409e565b610d09565b34801561050a57600080fd5b506104d0600e5481565b34801561052057600080fd5b506022546104d0565b34801561053557600080fd5b5061048d61101b565b34801561054a57600080fd5b506104d060105481565b34801561056057600080fd5b506104af61056f3660046140d3565b6110a0565b34801561058057600080fd5b5061048d61058f366004614114565b6110f3565b3480156105a057600080fd5b506104d06105af36600461402f565b611204565b3480156105c057600080fd5b506020805460405160ff909116815201610422565b3480156105e157600080fd5b506104d0601d5481565b3480156105f757600080fd5b506104af61060636600461405d565b61129b565b34801561061757600080fd5b5061048d610626366004614114565b6112d2565b34801561063757600080fd5b5060265461040e906001600160a01b031681565b34801561065757600080fd5b506104d060175481565b34801561066d57600080fd5b50602a546104af90600160a81b900460ff1681565b34801561068e57600080fd5b506104d0601e5481565b3480156106a457600080fd5b5061048d6106b3366004614136565b6113e3565b3480156106c457600080fd5b506031546104af9062010000900460ff1681565b3480156106e457600080fd5b506104af6106f3366004614136565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561071d57600080fd5b5061048d61072c36600461420a565b61164f565b34801561073d57600080fd5b506104af61074c366004614136565b611c6e565b34801561075d57600080fd5b5061048d61076c3660046142a1565b611c7c565b34801561077d57600080fd5b5060295461040e906001600160a01b031681565b34801561079d57600080fd5b5061048d6107ac366004614136565b611d20565b3480156107bd57600080fd5b506104d0602c5481565b3480156107d357600080fd5b5061048d6107e236600461409e565b611de8565b3480156107f357600080fd5b5061048d610802366004614114565b611e5b565b34801561081357600080fd5b506104d0600f5481565b34801561082957600080fd5b5061048d6108383660046142a1565b611eae565b34801561084957600080fd5b506104d060195481565b34801561085f57600080fd5b5061048d61086e3660046142cd565b611f52565b34801561087f57600080fd5b506104d061088e366004614136565b612001565b34801561089f57600080fd5b5061048d612060565b3480156108b457600080fd5b5061048d6108c336600461409e565b6120fd565b3480156108d457600080fd5b506104d060155481565b3480156108ea57600080fd5b506104af6108f9366004614136565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561092357600080fd5b506000546001600160a01b031661040e565b34801561094157600080fd5b506104af610950366004614136565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561097a57600080fd5b5061048d6121fe565b34801561098f57600080fd5b506104406122ee565b3480156109a457600080fd5b506104af6109b336600461405d565b6122fd565b3480156109c457600080fd5b506104af6109d336600461405d565b612334565b3480156109e457600080fd5b5061048d6109f3366004614391565b612341565b348015610a0457600080fd5b506104d060145481565b348015610a1a57600080fd5b5061048d610a293660046143d4565b6123c5565b348015610a3a57600080fd5b506104d060135481565b348015610a5057600080fd5b506104d060165481565b348015610a6657600080fd5b506104d060115481565b348015610a7c57600080fd5b5060275461040e906001600160a01b031681565b348015610a9c57600080fd5b506104d060125481565b348015610ab257600080fd5b506104d0610ac13660046143ef565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610af857600080fd5b506104d060355481565b348015610b0e57600080fd5b5061048d610b1d3660046142a1565b612480565b348015610b2e57600080fd5b506104d060185481565b348015610b4457600080fd5b5061048d610b53366004614136565b612524565b348015610b6457600080fd5b5061048d610b7336600461409e565b6128a2565b348015610b8457600080fd5b506104d0602e5481565b348015610b9a57600080fd5b5061048d610ba9366004614428565b612915565b6060600c8054610bbd9061445a565b80601f0160208091040260200160405190810160405280929190818152602001828054610be99061445a565b8015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c8d5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b83398151915260448201526064015b60405180910390fd5b604b811015610cde5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c84565b610cec81633b9aca006144ab565b60375550565b6000610cff33848461299c565b5060015b92915050565b6000546001600160a01b03163314610d515760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60018115151415610e86576001600160a01b03821660009081526007602052604090205460ff1615610dc55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c84565b6001600160a01b03821660009081526001602052604090205415610e1f576001600160a01b038216600090815260016020526040902054610e0590611204565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611017576001600160a01b03821660009081526007602052604090205460ff16610ef35760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c84565b60005b60085481101561101557826001600160a01b031660088281548110610f1d57610f1d6144ca565b6000918252602090912001546001600160a01b031614156110035760088054610f48906001906144e0565b81548110610f5857610f586144ca565b600091825260209091200154600880546001600160a01b039092169183908110610f8457610f846144ca565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fdc57610fdc6144f7565b600082815260209020810160001990810180546001600160a01b0319169055019055611015565b8061100d8161450d565b915050610ef6565b505b5050565b6000546001600160a01b031633146110635760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561109d573d6000803e3d6000fd5b50565b60006110ad848484612af4565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546110e99186916110e49086906144e0565b61299c565b5060019392505050565b6000546001600160a01b0316331461113b5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6000818360225461114c91906144ab565b611156919061453e565b90506103e8602254611168919061453e565b8110156111dd5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c84565b602d819055600b5482906111f29085906144ab565b6111fc919061453e565b602e55505050565b600060235482111561127e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610c84565b6000611288612ffc565b9050611294818461453e565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cff9185906110e4908690614552565b6000546001600160a01b0316331461131a5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6000818360225461132b91906144ab565b611335919061453e565b90506103e8602254611347919061453e565b8110156113bc5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c84565b602b819055600b5482906113d19085906144ab565b6113db919061453e565b602c55505050565b6000546001600160a01b0316331461142b5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6001600160a01b0381166114a75760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c84565b6028546001600160a01b038281169116141561152b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c84565b60008054611544916001600160a01b0390911690611de8565b61154f816001611de8565b61155a816001610d09565b600054602a546001600160a01b039081169116141561158f57602a80546001600160a01b0319166001600160a01b0383161790555b6000546115a4906001600160a01b0316612001565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115dd9116612001565b111561160457600054611602906001600160a01b0316826115fd82612001565b612af4565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146116975760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b603a5460ff16156116a757600080fd5b6034541580156116b75750603754155b80156116cc575060315462010000900460ff16155b6116d557600080fd5b604b8110156117265760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c84565b602a80546001600160a01b0319166001600160a01b038716179055835161175490600c906020870190613f41565b50825161176890600d906020860190613f41565b5064cef5e80e38600b556020805460ff1916600990811790915560215560215461179390600a61464e565b600b546117a091906144ab565b60228190556117b19060001961465a565b6117bd906000196144e0565b602355602754602580546001600160a01b0319166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015611835573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611859919061466e565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de919061466e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611942573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611966919061466e565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff82166034556119d181633b9aca006144ab565b603755602254620186a0906119e8906107d06144ab565b6119f2919061453e565b602b55600b54620186a090611a09906101f46144ab565b611a13919061453e565b602c556022546103e890611a289060146144ab565b611a32919061453e565b602d55600b546103e890611a4790600a6144ab565b611a51919061453e565b602e5560225461271090611a669060056144ab565b611a70919061453e565b602f556022546103e890611a859060056144ab565b611a8f919061453e565b603055602754611aaa906001600160a01b0316600019610cf2565b50603a805460ff19166001908117909155602354906000611ad36000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611aff6000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602554611b629030906001600160a01b031660001961299c565b611b8d611b776000546001600160a01b031690565b306115fd61088e6000546001600160a01b031690565b506025546001600160a01b031663f305d7194730611baa81612001565b600080611bbf6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611c3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c64919061468b565b5050505050505050565b6000610d0382600019610cf2565b6000546001600160a01b03163314611cc45760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601a548311158015611cd85750601b548211155b8015611ce65750601c548111155b611cef57600080fd5b610d7a81611cfd8486614552565b611d079190614552565b1115611d1257600080fd5b601792909255601855601955565b6000546001600160a01b03163314611d685760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b602a546001600160a01b0382811691161415611dc65760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610c84565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e305760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ea35760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601d91909155601e55565b6000546001600160a01b03163314611ef65760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601a548311158015611f0a5750601b548211155b8015611f185750601c548111155b611f2157600080fd5b610d7a81611f2f8486614552565b611f399190614552565b1115611f4457600080fd5b601192909255601255601355565b6000546001600160a01b03163314611f9a5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60005b8251811015611015578160096000858481518110611fbd57611fbd6144ca565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611ff98161450d565b915050611f9d565b6001600160a01b03811660009081526007602052604081205460ff161561203e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d0390611204565b6000546001600160a01b031633146120a85760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b600080546120c1916001600160a01b0390911690611de8565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146121455760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b8061216c57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156121d35762093a806004544261218691906144e0565b116121d35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610c84565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146122465760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60315460ff16156122995760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c84565b6122a4306001610d09565b6026546122bb906001600160a01b03166001610d09565b600360345411156122da576122d2436101f4614552565b6032556122df565b436032555b6031805460ff19166001179055565b6060600d8054610bbd9061445a565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cff9185906110e49086906144e0565b60006110e9338484612af4565b6000546001600160a01b031633146123895760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b0316331461240d5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061247590831515815260200190565b60405180910390a150565b6000546001600160a01b031633146124c85760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601a5483111580156124dc5750601b548211155b80156124ea5750601c548111155b6124f357600080fd5b610d7a816125018486614552565b61250b9190614552565b111561251657600080fd5b601492909255601555601655565b6000546001600160a01b0316331461256c5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d5919061466e565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612646919061466e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156126a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cd919061466e565b90506001600160a01b03811661285e57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273f919061466e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b0919061466e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612815573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612839919061466e565b602680546001600160a01b0319166001600160a01b039290921691909117905561287a565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b038416179055611015308460001961299c565b6000546001600160a01b031633146128ea5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461295d5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b828460225461296c91906144ab565b612976919061453e565b602f5560225481906129899084906144ab565b612993919061453e565b60305550505050565b6001600160a01b038316612a175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b038216612a935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612b725760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b038316612bee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c84565b60008211612c645760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c84565b60365460ff1615612cc1576037543a1115612cc15760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c84565b612ccb848461301f565b15612f135760315460ff16612d225760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c84565b60385460ff1615612dd4576001600160a01b03841660009081526003602052604090205460ff1615612d93576001600160a01b038316600090815260396020526040902054431415612d7357600080fd5b6001600160a01b0383166000908152603960205260409020439055612dd4565b6001600160a01b038416600090815260396020526040902054431415612db857600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b54821115612e4c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c84565b6027546001600160a01b03848116911614801590612e8357506001600160a01b03831660009081526003602052604090205460ff16155b15612f1357602d5482612e9585612001565b612e9f9190614552565b1115612f135760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b03841660009081526006602052604090205460019060ff1680612f5557506001600160a01b03841660009081526006602052604090205460ff165b15612f5e575060005b6001600160a01b03841660009081526003602052604090205460ff1615612fe757602a5474010000000000000000000000000000000000000000900460ff16158015612fb35750602a54600160a81b900460ff165b15612fe7576000612fc330612001565b9050602f548110612fe5576030548110612fdc57506030545b612fe5816130df565b505b612ff385858584613487565b95945050505050565b600080600061300961398c565b9092509050613018818361453e565b9250505090565b600080546001600160a01b0384811691161480159061304c57506000546001600160a01b03838116911614155b801561307157506001600160a01b0382166000908152600a602052604090205460ff16155b801561309657506001600160a01b0383166000908152600a602052604090205460ff16155b80156130b057506028546001600160a01b03838116911614155b80156130c457506001600160a01b03821615155b801561129457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d546131249190614552565b61312d57613466565b60006002601e54601d546131419190614552565b601d5461314e90856144ab565b613158919061453e565b613162919061453e565b9050600061317082846144e0565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106131aa576131aa6144ca565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561321c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613240919061466e565b81600181518110613253576132536144ca565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906132b29085906000908690309042906004016146b9565b600060405180830381600087803b1580156132cc57600080fd5b505af11580156132e0573d6000803e3d6000fd5b5050505060006002601e54601d546132f89190614552565b601d5461330590476144ab565b61330f919061453e565b613319919061453e565b90508315613414576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156133aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133cf919061468b565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061342085876144e0565b111561346157602a546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561345f573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff161561369f576001600160a01b03851660009081526009602052604090205460ff16806134d957506001600160a01b03841660009081526009602052604090205460ff165b156135265760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610c84565b60315462010000900460ff166135d6576135408585613b0f565b60315462010000900460ff1615801561355e575061355e858561301f565b156135d15760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c84565b61369f565b600060325411801561360057506001600160a01b03851660009081526003602052604090205460ff165b80156136115750613611858561301f565b1561369f5760345460325461362690436144e0565b101561369f576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161365d8361450d565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006136ad86868686613c61565b60808101516001600160a01b0388166000908152600160205260409020549192506136d7916144e0565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461370e9190614552565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561376257506001600160a01b03851660009081526007602052604090205460ff16155b156137a9576001600160a01b03861660009081526002602052604090205461378b9085906144e0565b6001600160a01b0387166000908152600260205260409020556138e9565b6001600160a01b03861660009081526007602052604090205460ff161580156137ea57506001600160a01b03851660009081526007602052604090205460ff165b156138325780516001600160a01b0386166000908152600260205260409020546138149190614552565b6001600160a01b0386166000908152600260205260409020556138e9565b6001600160a01b03861660009081526007602052604090205460ff16801561387257506001600160a01b03851660009081526007602052604090205460ff165b156138e9576001600160a01b03861660009081526002602052604090205461389b9085906144e0565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546138cf9190614552565b6001600160a01b0386166000908152600260205260409020555b60408101511561390157613901868260400151613e4f565b60008160a001511180613918575060008160200151115b1561392f5761392f8160a001518260200151613f1b565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161397891815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613ade578260016000600884815481106139bb576139bb6144ca565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613a2657508160026000600884815481106139ff576139ff6144ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613a3c57602354602254945094505050509091565b6001600060088381548110613a5357613a536144ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a8290846144e0565b92506002600060088381548110613a9b57613a9b6144ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613aca90836144e0565b915080613ad68161450d565b915050613999565b50602254602354613aef919061453e565b821015613b06576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613b8e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c84565b613b98828261301f565b158015613bb257506026546001600160a01b038281169116145b15611017576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613c5591901515815260200190565b60405180910390a15050565b613c9a6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613cd36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613cdd612ffc565b9050613ce981866144ab565b60808301528315613df9576001600160a01b03861660009081526003602052604090205460ff1615613d2c57601454600e55601554600f55601654601055613d77565b6001600160a01b03871660009081526003602052604090205460ff1615613d6457601154600e55601254600f55601354601055613d77565b601754600e55601854600f556019546010555b601f54600e54613d8790876144ab565b613d91919061453e565b6020830152601f54601054600f54613da99190614552565b613db390876144ab565b613dbd919061453e565b604083018190526020830151613dd39190614552565b613ddd90866144e0565b82526020820151613def9082906144ab565b60a0830152613e12565b6000602083018190526040830181905285835260a08301525b808260400151613e2291906144ab565b8260a00151613e319190614552565b8260800151613e4091906144e0565b60608301525095945050505050565b6000613e59612ffc565b90506000613e6782846144ab565b30600090815260016020526040902054909150613e85908290614552565b3060009081526001602090815260408083209390935560079052205460ff1615613ed55730600090815260026020526040902054613ec4908490614552565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602354613f2991906144e0565b602355602454613f3a908290614552565b6024555050565b828054613f4d9061445a565b90600052602060002090601f016020900481019282613f6f5760008555613fb5565b82601f10613f8857805160ff1916838001178555613fb5565b82800160010185558215613fb5579182015b82811115613fb5578251825591602001919060010190613f9a565b50613fc1929150613fc5565b5090565b5b80821115613fc15760008155600101613fc6565b600060208083528351808285015260005b8181101561400757858101830151858201604001528201613feb565b81811115614019576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561404157600080fd5b5035919050565b6001600160a01b038116811461109d57600080fd5b6000806040838503121561407057600080fd5b823561407b81614048565b946020939093013593505050565b8035801515811461409957600080fd5b919050565b600080604083850312156140b157600080fd5b82356140bc81614048565b91506140ca60208401614089565b90509250929050565b6000806000606084860312156140e857600080fd5b83356140f381614048565b9250602084013561410381614048565b929592945050506040919091013590565b6000806040838503121561412757600080fd5b50508035926020909101359150565b60006020828403121561414857600080fd5b813561129481614048565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561419257614192614153565b604052919050565b600082601f8301126141ab57600080fd5b813567ffffffffffffffff8111156141c5576141c5614153565b6141d8601f8201601f1916602001614169565b8181528460208386010111156141ed57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561422257600080fd5b853561422d81614048565b9450602086013567ffffffffffffffff8082111561424a57600080fd5b61425689838a0161419a565b9550604088013591508082111561426c57600080fd5b506142798882890161419a565b935050606086013560ff8116811461429057600080fd5b949793965091946080013592915050565b6000806000606084860312156142b657600080fd5b505081359360208301359350604090920135919050565b600080604083850312156142e057600080fd5b823567ffffffffffffffff808211156142f857600080fd5b818501915085601f83011261430c57600080fd5b813560208282111561432057614320614153565b8160051b9250614331818401614169565b828152928401810192818101908985111561434b57600080fd5b948201945b84861015614375578535935061436584614048565b8382529482019490820190614350565b96506143849050878201614089565b9450505050509250929050565b6000806000606084860312156143a657600080fd5b6143af84614089565b92506143bd60208501614089565b91506143cb60408501614089565b90509250925092565b6000602082840312156143e657600080fd5b61129482614089565b6000806040838503121561440257600080fd5b823561440d81614048565b9150602083013561441d81614048565b809150509250929050565b6000806000806080858703121561443e57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061446e57607f821691505b6020821081141561448f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156144c5576144c5614495565b500290565b634e487b7160e01b600052603260045260246000fd5b6000828210156144f2576144f2614495565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561452157614521614495565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261454d5761454d614528565b500490565b6000821982111561456557614565614495565b500190565b600181815b808511156145a557816000190482111561458b5761458b614495565b8085161561459857918102915b93841c939080029061456f565b509250929050565b6000826145bc57506001610d03565b816145c957506000610d03565b81600181146145df57600281146145e957614605565b6001915050610d03565b60ff8411156145fa576145fa614495565b50506001821b610d03565b5060208310610133831016604e8410600b8410161715614628575081810a610d03565b614632838361456a565b806000190482111561464657614646614495565b029392505050565b600061129483836145ad565b60008261466957614669614528565b500690565b60006020828403121561468057600080fd5b815161129481614048565b6000806000606084860312156146a057600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156147095784516001600160a01b0316835293830193918301916001016146e4565b50506001600160a01b0396909616606085015250505060800152939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212202a8dc97dcf860aa627fb7922611ea8d928cb20ee75a909d62a8fa6b16c350f8d64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103e25760003560e01c80636639dd931161020d578063a9059cbb11610128578063dc44b6a0116100bb578063ea08d30b1161008a578063eec2744e1161006f578063eec2744e14610b58578063f6540ec714610b78578063fb78680d14610b8e57600080fd5b8063ea08d30b14610b22578063eafb5a3c14610b3857600080fd5b8063dc44b6a014610a90578063dd62ed3e14610aa6578063e79d416014610aec578063e7c281d614610b0257600080fd5b8063c5d24189116100f7578063c5d2418914610a2e578063c860795214610a44578063d038b07e14610a5a578063d9e6646014610a7057600080fd5b8063a9059cbb146109b8578063b6f8f8dc146109d8578063bbcea6bf146109f8578063c49b9a8014610a0e57600080fd5b806388790a68116101a05780638a8c523c1161016f5780638a8c523c1461096e5780638da5cb5b1461091757806395d89b4114610983578063a457c2d71461099857600080fd5b806388790a68146108c857806388f82020146108de578063893d20e81461091757806389fd9bc11461093557600080fd5b80636ed18aae116101dc5780636ed18aae1461085357806370a0823114610873578063715018a61461089357806380c581d1146108a857600080fd5b80636639dd93146107e75780636bc87c3a146108075780636c6d9fa11461081d5780636cbdd5e31461083d57600080fd5b806339509351116102fd5780635342acb41161029057806358fa63ca1161025f57806358fa63ca146107715780635d098b381461079157806364038409146107b15780636612e66f146107c757600080fd5b80635342acb4146106d857806356a39e9314610711578063571ac8b014610731578063575f18e51461075157600080fd5b80634a74bb02116102cc5780634a74bb02146106615780634ef3cce5146106825780634fb2e45d1461069857806350a8e016146106b857600080fd5b806339509351146105eb5780633f3cf56c1461060b578063452ed4f11461062b57806345e8c85c1461064b57600080fd5b806318160ddd11610375578063260039571161034457806326003957146105745780632d83811914610594578063313ce567146105b4578063384f6b51146105d557600080fd5b806318160ddd1461051457806320800a001461052957806322976e0d1461053e57806323b872dd1461055457600080fd5b8063095ea7b3116103b1578063095ea7b31461048f57806313114a9d146104bf57806313e46192146104de57806315639c1b146104fe57600080fd5b806303fd2a45146103ee57806306fdde031461042b5780630758d9241461044d578063092316021461046d57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5060285461040e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043757600080fd5b50610440610bae565b6040516104229190613fda565b34801561045957600080fd5b5060255461040e906001600160a01b031681565b34801561047957600080fd5b5061048d61048836600461402f565b610c40565b005b34801561049b57600080fd5b506104af6104aa36600461405d565b610cf2565b6040519015158152602001610422565b3480156104cb57600080fd5b506024545b604051908152602001610422565b3480156104ea57600080fd5b5061048d6104f936600461409e565b610d09565b34801561050a57600080fd5b506104d0600e5481565b34801561052057600080fd5b506022546104d0565b34801561053557600080fd5b5061048d61101b565b34801561054a57600080fd5b506104d060105481565b34801561056057600080fd5b506104af61056f3660046140d3565b6110a0565b34801561058057600080fd5b5061048d61058f366004614114565b6110f3565b3480156105a057600080fd5b506104d06105af36600461402f565b611204565b3480156105c057600080fd5b506020805460405160ff909116815201610422565b3480156105e157600080fd5b506104d0601d5481565b3480156105f757600080fd5b506104af61060636600461405d565b61129b565b34801561061757600080fd5b5061048d610626366004614114565b6112d2565b34801561063757600080fd5b5060265461040e906001600160a01b031681565b34801561065757600080fd5b506104d060175481565b34801561066d57600080fd5b50602a546104af90600160a81b900460ff1681565b34801561068e57600080fd5b506104d0601e5481565b3480156106a457600080fd5b5061048d6106b3366004614136565b6113e3565b3480156106c457600080fd5b506031546104af9062010000900460ff1681565b3480156106e457600080fd5b506104af6106f3366004614136565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561071d57600080fd5b5061048d61072c36600461420a565b61164f565b34801561073d57600080fd5b506104af61074c366004614136565b611c6e565b34801561075d57600080fd5b5061048d61076c3660046142a1565b611c7c565b34801561077d57600080fd5b5060295461040e906001600160a01b031681565b34801561079d57600080fd5b5061048d6107ac366004614136565b611d20565b3480156107bd57600080fd5b506104d0602c5481565b3480156107d357600080fd5b5061048d6107e236600461409e565b611de8565b3480156107f357600080fd5b5061048d610802366004614114565b611e5b565b34801561081357600080fd5b506104d0600f5481565b34801561082957600080fd5b5061048d6108383660046142a1565b611eae565b34801561084957600080fd5b506104d060195481565b34801561085f57600080fd5b5061048d61086e3660046142cd565b611f52565b34801561087f57600080fd5b506104d061088e366004614136565b612001565b34801561089f57600080fd5b5061048d612060565b3480156108b457600080fd5b5061048d6108c336600461409e565b6120fd565b3480156108d457600080fd5b506104d060155481565b3480156108ea57600080fd5b506104af6108f9366004614136565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561092357600080fd5b506000546001600160a01b031661040e565b34801561094157600080fd5b506104af610950366004614136565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561097a57600080fd5b5061048d6121fe565b34801561098f57600080fd5b506104406122ee565b3480156109a457600080fd5b506104af6109b336600461405d565b6122fd565b3480156109c457600080fd5b506104af6109d336600461405d565b612334565b3480156109e457600080fd5b5061048d6109f3366004614391565b612341565b348015610a0457600080fd5b506104d060145481565b348015610a1a57600080fd5b5061048d610a293660046143d4565b6123c5565b348015610a3a57600080fd5b506104d060135481565b348015610a5057600080fd5b506104d060165481565b348015610a6657600080fd5b506104d060115481565b348015610a7c57600080fd5b5060275461040e906001600160a01b031681565b348015610a9c57600080fd5b506104d060125481565b348015610ab257600080fd5b506104d0610ac13660046143ef565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610af857600080fd5b506104d060355481565b348015610b0e57600080fd5b5061048d610b1d3660046142a1565b612480565b348015610b2e57600080fd5b506104d060185481565b348015610b4457600080fd5b5061048d610b53366004614136565b612524565b348015610b6457600080fd5b5061048d610b7336600461409e565b6128a2565b348015610b8457600080fd5b506104d0602e5481565b348015610b9a57600080fd5b5061048d610ba9366004614428565b612915565b6060600c8054610bbd9061445a565b80601f0160208091040260200160405190810160405280929190818152602001828054610be99061445a565b8015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b5050505050905090565b6000546001600160a01b03163314610c8d5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b83398151915260448201526064015b60405180910390fd5b604b811015610cde5760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c84565b610cec81633b9aca006144ab565b60375550565b6000610cff33848461299c565b5060015b92915050565b6000546001600160a01b03163314610d515760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60018115151415610e86576001600160a01b03821660009081526007602052604090205460ff1615610dc55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c84565b6001600160a01b03821660009081526001602052604090205415610e1f576001600160a01b038216600090815260016020526040902054610e0590611204565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611017576001600160a01b03821660009081526007602052604090205460ff16610ef35760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c84565b60005b60085481101561101557826001600160a01b031660088281548110610f1d57610f1d6144ca565b6000918252602090912001546001600160a01b031614156110035760088054610f48906001906144e0565b81548110610f5857610f586144ca565b600091825260209091200154600880546001600160a01b039092169183908110610f8457610f846144ca565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610fdc57610fdc6144f7565b600082815260209020810160001990810180546001600160a01b0319169055019055611015565b8061100d8161450d565b915050610ef6565b505b5050565b6000546001600160a01b031633146110635760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561109d573d6000803e3d6000fd5b50565b60006110ad848484612af4565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546110e99186916110e49086906144e0565b61299c565b5060019392505050565b6000546001600160a01b0316331461113b5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6000818360225461114c91906144ab565b611156919061453e565b90506103e8602254611168919061453e565b8110156111dd5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610c84565b602d819055600b5482906111f29085906144ab565b6111fc919061453e565b602e55505050565b600060235482111561127e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610c84565b6000611288612ffc565b9050611294818461453e565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cff9185906110e4908690614552565b6000546001600160a01b0316331461131a5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6000818360225461132b91906144ab565b611335919061453e565b90506103e8602254611347919061453e565b8110156113bc5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c84565b602b819055600b5482906113d19085906144ab565b6113db919061453e565b602c55505050565b6000546001600160a01b0316331461142b5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6001600160a01b0381166114a75760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c84565b6028546001600160a01b038281169116141561152b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c84565b60008054611544916001600160a01b0390911690611de8565b61154f816001611de8565b61155a816001610d09565b600054602a546001600160a01b039081169116141561158f57602a80546001600160a01b0319166001600160a01b0383161790555b6000546115a4906001600160a01b0316612001565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115dd9116612001565b111561160457600054611602906001600160a01b0316826115fd82612001565b612af4565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146116975760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b603a5460ff16156116a757600080fd5b6034541580156116b75750603754155b80156116cc575060315462010000900460ff16155b6116d557600080fd5b604b8110156117265760405162461bcd60e51b815260206004820152601060248201527f796f75206675636b696e67206a656574000000000000000000000000000000006044820152606401610c84565b602a80546001600160a01b0319166001600160a01b038716179055835161175490600c906020870190613f41565b50825161176890600d906020860190613f41565b5064cef5e80e38600b556020805460ff1916600990811790915560215560215461179390600a61464e565b600b546117a091906144ab565b60228190556117b19060001961465a565b6117bd906000196144e0565b602355602754602580546001600160a01b0319166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015611835573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611859919061466e565b6001600160a01b031663c9c65396602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de919061466e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611942573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611966919061466e565b602680546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602554909416835292905220600019905560ff82166034556119d181633b9aca006144ab565b603755602254620186a0906119e8906107d06144ab565b6119f2919061453e565b602b55600b54620186a090611a09906101f46144ab565b611a13919061453e565b602c556022546103e890611a289060146144ab565b611a32919061453e565b602d55600b546103e890611a4790600a6144ab565b611a51919061453e565b602e5560225461271090611a669060056144ab565b611a70919061453e565b602f556022546103e890611a859060056144ab565b611a8f919061453e565b603055602754611aaa906001600160a01b0316600019610cf2565b50603a805460ff19166001908117909155602354906000611ad36000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611aff6000546001600160a01b031690565b6029546022546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602554611b629030906001600160a01b031660001961299c565b611b8d611b776000546001600160a01b031690565b306115fd61088e6000546001600160a01b031690565b506025546001600160a01b031663f305d7194730611baa81612001565b600080611bbf6000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611c3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c64919061468b565b5050505050505050565b6000610d0382600019610cf2565b6000546001600160a01b03163314611cc45760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601a548311158015611cd85750601b548211155b8015611ce65750601c548111155b611cef57600080fd5b610d7a81611cfd8486614552565b611d079190614552565b1115611d1257600080fd5b601792909255601855601955565b6000546001600160a01b03163314611d685760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b602a546001600160a01b0382811691161415611dc65760405162461bcd60e51b815260206004820152601360248201527f57616c6c657420616c72656164792073657421000000000000000000000000006044820152606401610c84565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e305760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ea35760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601d91909155601e55565b6000546001600160a01b03163314611ef65760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601a548311158015611f0a5750601b548211155b8015611f185750601c548111155b611f2157600080fd5b610d7a81611f2f8486614552565b611f399190614552565b1115611f4457600080fd5b601192909255601255601355565b6000546001600160a01b03163314611f9a5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60005b8251811015611015578160096000858481518110611fbd57611fbd6144ca565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611ff98161450d565b915050611f9d565b6001600160a01b03811660009081526007602052604081205460ff161561203e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d0390611204565b6000546001600160a01b031633146120a85760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b600080546120c1916001600160a01b0390911690611de8565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146121455760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b8061216c57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156121d35762093a806004544261218691906144e0565b116121d35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610c84565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146122465760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60315460ff16156122995760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c84565b6122a4306001610d09565b6026546122bb906001600160a01b03166001610d09565b600360345411156122da576122d2436101f4614552565b6032556122df565b436032555b6031805460ff19166001179055565b6060600d8054610bbd9061445a565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cff9185906110e49086906144e0565b60006110e9338484612af4565b6000546001600160a01b031633146123895760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b603180549315156101000261ff0019909416939093179092556036805491151560ff199283161790556038805492151592909116919091179055565b6000546001600160a01b0316331461240d5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b602a8054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061247590831515815260200190565b60405180910390a150565b6000546001600160a01b031633146124c85760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b601a5483111580156124dc5750601b548211155b80156124ea5750601c548111155b6124f357600080fd5b610d7a816125018486614552565b61250b9190614552565b111561251657600080fd5b601492909255601555601655565b6000546001600160a01b0316331461256c5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d5919061466e565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612646919061466e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156126a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cd919061466e565b90506001600160a01b03811661285e57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273f919061466e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b0919061466e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612815573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612839919061466e565b602680546001600160a01b0319166001600160a01b039290921691909117905561287a565b602680546001600160a01b0319166001600160a01b0383161790555b602580546001600160a01b0319166001600160a01b038416179055611015308460001961299c565b6000546001600160a01b031633146128ea5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461295d5760405162461bcd60e51b8152602060048201819052602482015260008051602061472b8339815191526044820152606401610c84565b828460225461296c91906144ab565b612976919061453e565b602f5560225481906129899084906144ab565b612993919061453e565b60305550505050565b6001600160a01b038316612a175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b038216612a935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612b725760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b038316612bee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610c84565b60008211612c645760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610c84565b60365460ff1615612cc1576037543a1115612cc15760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c84565b612ccb848461301f565b15612f135760315460ff16612d225760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c84565b60385460ff1615612dd4576001600160a01b03841660009081526003602052604090205460ff1615612d93576001600160a01b038316600090815260396020526040902054431415612d7357600080fd5b6001600160a01b0383166000908152603960205260409020439055612dd4565b6001600160a01b038416600090815260396020526040902054431415612db857600080fd5b6001600160a01b03841660009081526039602052604090204390555b602b54821115612e4c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610c84565b6027546001600160a01b03848116911614801590612e8357506001600160a01b03831660009081526003602052604090205460ff16155b15612f1357602d5482612e9585612001565b612e9f9190614552565b1115612f135760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610c84565b6001600160a01b03841660009081526006602052604090205460019060ff1680612f5557506001600160a01b03841660009081526006602052604090205460ff165b15612f5e575060005b6001600160a01b03841660009081526003602052604090205460ff1615612fe757602a5474010000000000000000000000000000000000000000900460ff16158015612fb35750602a54600160a81b900460ff165b15612fe7576000612fc330612001565b9050602f548110612fe5576030548110612fdc57506030545b612fe5816130df565b505b612ff385858584613487565b95945050505050565b600080600061300961398c565b9092509050613018818361453e565b9250505090565b600080546001600160a01b0384811691161480159061304c57506000546001600160a01b03838116911614155b801561307157506001600160a01b0382166000908152600a602052604090205460ff16155b801561309657506001600160a01b0383166000908152600a602052604090205460ff16155b80156130b057506028546001600160a01b03838116911614155b80156130c457506001600160a01b03821615155b801561129457506001600160a01b0383163014159392505050565b602a805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055601e54601d546131249190614552565b61312d57613466565b60006002601e54601d546131419190614552565b601d5461314e90856144ab565b613158919061453e565b613162919061453e565b9050600061317082846144e0565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106131aa576131aa6144ca565b6001600160a01b03928316602091820292909201810191909152602554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561321c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613240919061466e565b81600181518110613253576132536144ca565b6001600160a01b0392831660209182029290920101526025546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906132b29085906000908690309042906004016146b9565b600060405180830381600087803b1580156132cc57600080fd5b505af11580156132e0573d6000803e3d6000fd5b5050505060006002601e54601d546132f89190614552565b601d5461330590476144ab565b61330f919061453e565b613319919061453e565b90508315613414576025546028546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156133aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133cf919061468b565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061342085876144e0565b111561346157602a546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561345f573d6000803e3d6000fd5b505b505050505b50602a805474ff000000000000000000000000000000000000000019169055565b603154600090610100900460ff161561369f576001600160a01b03851660009081526009602052604090205460ff16806134d957506001600160a01b03841660009081526009602052604090205460ff165b156135265760405162461bcd60e51b815260206004820152600960248201527f52656a65637465642e00000000000000000000000000000000000000000000006044820152606401610c84565b60315462010000900460ff166135d6576135408585613b0f565b60315462010000900460ff1615801561355e575061355e858561301f565b156135d15760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610c84565b61369f565b600060325411801561360057506001600160a01b03851660009081526003602052604090205460ff165b80156136115750613611858561301f565b1561369f5760345460325461362690436144e0565b101561369f576001600160a01b0384166000908152600960205260408120805460ff19166001179055603580549161365d8361450d565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b60006136ad86868686613c61565b60808101516001600160a01b0388166000908152600160205260409020549192506136d7916144e0565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461370e9190614552565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561376257506001600160a01b03851660009081526007602052604090205460ff16155b156137a9576001600160a01b03861660009081526002602052604090205461378b9085906144e0565b6001600160a01b0387166000908152600260205260409020556138e9565b6001600160a01b03861660009081526007602052604090205460ff161580156137ea57506001600160a01b03851660009081526007602052604090205460ff165b156138325780516001600160a01b0386166000908152600260205260409020546138149190614552565b6001600160a01b0386166000908152600260205260409020556138e9565b6001600160a01b03861660009081526007602052604090205460ff16801561387257506001600160a01b03851660009081526007602052604090205460ff165b156138e9576001600160a01b03861660009081526002602052604090205461389b9085906144e0565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546138cf9190614552565b6001600160a01b0386166000908152600260205260409020555b60408101511561390157613901868260400151613e4f565b60008160a001511180613918575060008160200151115b1561392f5761392f8160a001518260200151613f1b565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161397891815260200190565b60405180910390a350600195945050505050565b6023546022546000918291825b600854811015613ade578260016000600884815481106139bb576139bb6144ca565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613a2657508160026000600884815481106139ff576139ff6144ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613a3c57602354602254945094505050509091565b6001600060088381548110613a5357613a536144ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a8290846144e0565b92506002600060088381548110613a9b57613a9b6144ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613aca90836144e0565b915080613ad68161450d565b915050613999565b50602254602354613aef919061453e565b821015613b06576023546022549350935050509091565b90939092509050565b60315462010000900460ff1615613b8e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610c84565b613b98828261301f565b158015613bb257506026546001600160a01b038281169116145b15611017576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556031805462ff000019166201000017905542603355602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613c5591901515815260200190565b60405180910390a15050565b613c9a6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613cd36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613cdd612ffc565b9050613ce981866144ab565b60808301528315613df9576001600160a01b03861660009081526003602052604090205460ff1615613d2c57601454600e55601554600f55601654601055613d77565b6001600160a01b03871660009081526003602052604090205460ff1615613d6457601154600e55601254600f55601354601055613d77565b601754600e55601854600f556019546010555b601f54600e54613d8790876144ab565b613d91919061453e565b6020830152601f54601054600f54613da99190614552565b613db390876144ab565b613dbd919061453e565b604083018190526020830151613dd39190614552565b613ddd90866144e0565b82526020820151613def9082906144ab565b60a0830152613e12565b6000602083018190526040830181905285835260a08301525b808260400151613e2291906144ab565b8260a00151613e319190614552565b8260800151613e4091906144e0565b60608301525095945050505050565b6000613e59612ffc565b90506000613e6782846144ab565b30600090815260016020526040902054909150613e85908290614552565b3060009081526001602090815260408083209390935560079052205460ff1615613ed55730600090815260026020526040902054613ec4908490614552565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602354613f2991906144e0565b602355602454613f3a908290614552565b6024555050565b828054613f4d9061445a565b90600052602060002090601f016020900481019282613f6f5760008555613fb5565b82601f10613f8857805160ff1916838001178555613fb5565b82800160010185558215613fb5579182015b82811115613fb5578251825591602001919060010190613f9a565b50613fc1929150613fc5565b5090565b5b80821115613fc15760008155600101613fc6565b600060208083528351808285015260005b8181101561400757858101830151858201604001528201613feb565b81811115614019576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561404157600080fd5b5035919050565b6001600160a01b038116811461109d57600080fd5b6000806040838503121561407057600080fd5b823561407b81614048565b946020939093013593505050565b8035801515811461409957600080fd5b919050565b600080604083850312156140b157600080fd5b82356140bc81614048565b91506140ca60208401614089565b90509250929050565b6000806000606084860312156140e857600080fd5b83356140f381614048565b9250602084013561410381614048565b929592945050506040919091013590565b6000806040838503121561412757600080fd5b50508035926020909101359150565b60006020828403121561414857600080fd5b813561129481614048565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561419257614192614153565b604052919050565b600082601f8301126141ab57600080fd5b813567ffffffffffffffff8111156141c5576141c5614153565b6141d8601f8201601f1916602001614169565b8181528460208386010111156141ed57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561422257600080fd5b853561422d81614048565b9450602086013567ffffffffffffffff8082111561424a57600080fd5b61425689838a0161419a565b9550604088013591508082111561426c57600080fd5b506142798882890161419a565b935050606086013560ff8116811461429057600080fd5b949793965091946080013592915050565b6000806000606084860312156142b657600080fd5b505081359360208301359350604090920135919050565b600080604083850312156142e057600080fd5b823567ffffffffffffffff808211156142f857600080fd5b818501915085601f83011261430c57600080fd5b813560208282111561432057614320614153565b8160051b9250614331818401614169565b828152928401810192818101908985111561434b57600080fd5b948201945b84861015614375578535935061436584614048565b8382529482019490820190614350565b96506143849050878201614089565b9450505050509250929050565b6000806000606084860312156143a657600080fd5b6143af84614089565b92506143bd60208501614089565b91506143cb60408501614089565b90509250925092565b6000602082840312156143e657600080fd5b61129482614089565b6000806040838503121561440257600080fd5b823561440d81614048565b9150602083013561441d81614048565b809150509250929050565b6000806000806080858703121561443e57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061446e57607f821691505b6020821081141561448f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156144c5576144c5614495565b500290565b634e487b7160e01b600052603260045260246000fd5b6000828210156144f2576144f2614495565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561452157614521614495565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261454d5761454d614528565b500490565b6000821982111561456557614565614495565b500190565b600181815b808511156145a557816000190482111561458b5761458b614495565b8085161561459857918102915b93841c939080029061456f565b509250929050565b6000826145bc57506001610d03565b816145c957506000610d03565b81600181146145df57600281146145e957614605565b6001915050610d03565b60ff8411156145fa576145fa614495565b50506001821b610d03565b5060208310610133831016604e8410600b8410161715614628575081810a610d03565b614632838361456a565b806000190482111561464657614646614495565b029392505050565b600061129483836145ad565b60008261466957614669614528565b500690565b60006020828403121561468057600080fd5b815161129481614048565b6000806000606084860312156146a057600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156147095784516001600160a01b0316835293830193918301916001016146e4565b50506001600160a01b0396909616606085015250505060800152939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212202a8dc97dcf860aa627fb7922611ea8d928cb20ee75a909d62a8fa6b16c350f8d64736f6c634300080b0033

Deployed Bytecode Sourcemap

17099:26706:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19101:64;;;;;;;;;;-1:-1:-1;19101:64:0;;;;-1:-1:-1;;;;;19101:64:0;;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;19101:64:0;;;;;;;;25854:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18972:35::-;;;;;;;;;;-1:-1:-1;18972:35:0;;;;-1:-1:-1;;;;;18972:35:0;;;29175:154;;;;;;;;;;-1:-1:-1;29175:154:0;;;;;:::i;:::-;;:::i;:::-;;26530:161;;;;;;;;;;-1:-1:-1;26530:161:0;;;;;:::i;:::-;;:::i;:::-;;;1933:14:1;;1926:22;1908:41;;1896:2;1881:18;26530:161:0;1768:187:1;33684:87:0;;;;;;;;;;-1:-1:-1;33753:10:0;;33684:87;;;2106:25:1;;;2094:2;2079:18;33684:87:0;1960:177:1;32770:906:0;;;;;;;;;;-1:-1:-1;32770:906:0;;;;;:::i;:::-;;:::i;17885:30::-;;;;;;;;;;;;;;;;25607:83;;;;;;;;;;-1:-1:-1;25680:7:0;;25607:83;;43222:107;;;;;;;;;;;;;:::i;17963:34::-;;;;;;;;;;;;;;;;26827:266;;;;;;;;;;-1:-1:-1;26827:266:0;;;;;:::i;:::-;;:::i;31596:340::-;;;;;;;;;;-1:-1:-1;31596:340:0;;;;;:::i;:::-;;:::i;34111:250::-;;;;;;;;;;-1:-1:-1;34111:250:0;;;;;:::i;:::-;;:::i;25696:71::-;;;;;;;;;;-1:-1:-1;25755:9:0;;;25696:71;;25755:9;;;;3483:36:1;;3456:18;25696:71:0;3341:184:1;18626:36:0;;;;;;;;;;;;;;;;27101:215;;;;;;;;;;-1:-1:-1;27101:215:0;;;;;:::i;:::-;;:::i;31248:340::-;;;;;;;;;;-1:-1:-1;31248:340:0;;;;;:::i;:::-;;:::i;19014:21::-;;;;;;;;;;-1:-1:-1;19014:21:0;;;;-1:-1:-1;;;;;19014:21:0;;;18303:51;;;;;;;;;;;;;;;;19324:41;;;;;;;;;;-1:-1:-1;19324:41:0;;;;-1:-1:-1;;;19324:41:0;;;;;;18669:36;;;;;;;;;;;;;;;;24245:807;;;;;;;;;;-1:-1:-1;24245:807:0;;;;;:::i;:::-;;:::i;19676:36::-;;;;;;;;;;-1:-1:-1;19676:36:0;;;;;;;;;;;28678:123;;;;;;;;;;-1:-1:-1;28678:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;28766:27:0;28742:4;28766:27;;;:18;:27;;;;;;;;;28678:123;21573:2032;;;;;;;;;;-1:-1:-1;21573:2032:0;;;;;:::i;:::-;;:::i;26699:120::-;;;;;;;;;;-1:-1:-1;26699:120:0;;;;;:::i;:::-;;:::i;30617:455::-;;;;;;;;;;-1:-1:-1;30617:455:0;;;;;:::i;:::-;;:::i;19172:64::-;;;;;;;;;;-1:-1:-1;19172:64:0;;;;-1:-1:-1;;;;;19172:64:0;;;32241:202;;;;;;;;;;-1:-1:-1;32241:202:0;;;;;:::i;:::-;;:::i;19413:28::-;;;;;;;;;;;;;;;;32630:132;;;;;;;;;;-1:-1:-1;32630:132:0;;;;;:::i;:::-;;:::i;31080:160::-;;;;;;;;;;-1:-1:-1;31080:160:0;;;;;:::i;:::-;;:::i;17922:34::-;;;;;;;;;;;;;;;;29727:435;;;;;;;;;;-1:-1:-1;29727:435:0;;;;;:::i;:::-;;:::i;18423:55::-;;;;;;;;;;;;;;;;29486:229;;;;;;;;;;-1:-1:-1;29486:229:0;;;;;:::i;:::-;;:::i;26149:198::-;;;;;;;;;;-1:-1:-1;26149:198:0;;;;;:::i;:::-;;:::i;25060:194::-;;;;;;;;;;;;;:::i;28118:424::-;;;;;;;;;;-1:-1:-1;28118:424:0;;;;;:::i;:::-;;:::i;18207:38::-;;;;;;;;;;;;;;;;28550:120;;;;;;;;;;-1:-1:-1;28550:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28642:20:0;28618:4;28642:20;;;:11;:20;;;;;;;;;28550:120;25931:71;;;;;;;;;;-1:-1:-1;25974:7:0;24223:6;-1:-1:-1;;;;;24223:6:0;25931:71;;28809:132;;;;;;;;;;-1:-1:-1;28809:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;28902:31:0;28878:4;28902:31;;;:22;:31;;;;;;;;;28809:132;38372:397;;;;;;;;;;;;;:::i;25773:75::-;;;;;;;;;;;;;:::i;27324:225::-;;;;;;;;;;-1:-1:-1;27324:225:0;;;;;:::i;:::-;;:::i;26355:167::-;;;;;;;;;;-1:-1:-1;26355:167:0;;;;;:::i;:::-;;:::i;28949:218::-;;;;;;;;;;-1:-1:-1;28949:218:0;;;;;:::i;:::-;;:::i;18166:34::-;;;;;;;;;;;;;;;;32451:171;;;;;;;;;;-1:-1:-1;32451:171:0;;;;;:::i;:::-;;:::i;18110:47::-;;;;;;;;;;;;;;;;18252:38;;;;;;;;;;;;;;;;18006:43;;;;;;;;;;;;;;;;19063:29;;;;;;;;;;-1:-1:-1;19063:29:0;;;;-1:-1:-1;;;;;19063:29:0;;;18056:47;;;;;;;;;;;;;;;;26008:133;;;;;;;;;;-1:-1:-1;26008:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;26110:19:0;;;26092:7;26110:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;26008:133;19837:32;;;;;;;;;;;;;;;;30170:439;;;;;;;;;;-1:-1:-1;30170:439:0;;;;;:::i;:::-;;:::i;18361:55::-;;;;;;;;;;;;;;;;27557:553;;;;;;;;;;-1:-1:-1;27557:553:0;;;;;:::i;:::-;;:::i;29337:141::-;;;;;;;;;;-1:-1:-1;29337:141:0;;;;;:::i;:::-;;:::i;19487:30::-;;;;;;;;;;;;;;;;31944:289;;;;;;;;;;-1:-1:-1;31944:289:0;;;;;:::i;:::-;;:::i;25854:71::-;25893:13;25917:5;25910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25854:71;:::o;29175:154::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;;;;;;;;;29259:2:::1;29252:3;:9;;29244:38;;;::::0;-1:-1:-1;;;29244:38:0;;9684:2:1;29244:38:0::1;::::0;::::1;9666:21:1::0;9723:2;9703:18;;;9696:30;9762:18;9742;;;9735:46;9798:18;;29244:38:0::1;9482:340:1::0;29244:38:0::1;29309:12;:3:::0;29315:6:::1;29309:12;:::i;:::-;29293:13;:28:::0;-1:-1:-1;29175:154:0:o;26530:161::-;26605:4;26622:39;9085:10;26645:7;26654:6;26622:8;:39::i;:::-;-1:-1:-1;26679:4:0;26530:161;;;;;:::o;32770:906::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;32875:4:::1;32864:15:::0;::::1;;;32860:809;;;-1:-1:-1::0;;;;;32905:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32904:21;32896:62;;;::::0;-1:-1:-1;;;32896:62:0;;10391:2:1;32896:62:0::1;::::0;::::1;10373:21:1::0;10430:2;10410:18;;;10403:30;10469;10449:18;;;10442:58;10517:18;;32896:62:0::1;10189:352:1::0;32896:62:0::1;-1:-1:-1::0;;;;;32976:16:0;::::1;32995:1;32976:16:::0;;;:7:::1;:16;::::0;;;;;:20;32973:116:::1;;-1:-1:-1::0;;;;;33056:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33036:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;33017:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32973:116:::1;-1:-1:-1::0;;;;;;33103:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;33103:27:0::1;33126:4;33103:27:::0;;::::1;::::0;;;33145:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33145:23:0::1;::::0;;::::1;::::0;;32770:906::o;32860:809::-:1;33190:16:::0;33186:483:::1;;-1:-1:-1::0;;;;;33231:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33223:61;;;::::0;-1:-1:-1;;;33223:61:0;;10748:2:1;33223:61:0::1;::::0;::::1;10730:21:1::0;10787:2;10767:18;;;10760:30;10826;10806:18;;;10799:58;10874:18;;33223:61:0::1;10546:352:1::0;33223:61:0::1;33304:9;33299:359;33323:9;:16:::0;33319:20;::::1;33299:359;;;33385:7;-1:-1:-1::0;;;;;33369:23:0::1;:9;33379:1;33369:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33369:12:0::1;:23;33365:278;;;33432:9;33442:16:::0;;:20:::1;::::0;33461:1:::1;::::0;33442:20:::1;:::i;:::-;33432:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;33417:9:::1;:12:::0;;-1:-1:-1;;;;;33432:31:0;;::::1;::::0;33427:1;;33417:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33417:46:0::1;-1:-1:-1::0;;;;;33417:46:0;;::::1;;::::0;;33486:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;33529:11:::1;:20:::0;;;;:28;;-1:-1:-1;;33529:28:0::1;::::0;;33580:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33580:15:0;;;;;-1:-1:-1;;;;;;33580:15:0::1;::::0;;;;;33618:5:::1;;33365:278;33341:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33299:359;;;;33186:483;32770:906:::0;;:::o;43222:107::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;24196:7;24223:6;;43273:48:::1;::::0;-1:-1:-1;;;;;24223:6:0;;;;43299:21:::1;43273:48:::0;::::1;;;::::0;43299:21;;43273:48;24196:7;43273:48;43299:21;24223:6;43273:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;43222:107::o:0;26827:266::-;26925:4;26942:36;26952:6;26960:9;26971:6;26942:9;:36::i;:::-;-1:-1:-1;;;;;;27020:19:0;;;;;;:11;:19;;;;;;;;9085:10;27020:33;;;;;;;;;26989:74;;26998:6;;27020:42;;27056:6;;27020:42;:::i;:::-;26989:8;:74::i;:::-;-1:-1:-1;27081:4:0;26827:266;;;;;:::o;31596:340::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;31686:13:::1;31724:7;31713;31703;;:17;;;;:::i;:::-;31702:29;;;;:::i;:::-;31686:45;;31770:4;31760:7;;:14;;;;:::i;:::-;31750:5;:25;;31742:88;;;::::0;-1:-1:-1;;;31742:88:0;;12067:2:1;31742:88:0::1;::::0;::::1;12049:21:1::0;12106:2;12086:18;;;12079:30;12145:34;12125:18;;;12118:62;12216:20;12196:18;;;12189:48;12254:19;;31742:88:0::1;11865:414:1::0;31742:88:0::1;31841:14;:22:::0;;;31893:14:::1;::::0;31921:7;;31893:24:::1;::::0;31910:7;;31893:24:::1;:::i;:::-;31892:36;;;;:::i;:::-;31874:15;:54:::0;-1:-1:-1;;;31596:340:0:o;34111:250::-;34177:7;34216;;34205;:18;;34197:73;;;;-1:-1:-1;;;34197:73:0;;12486:2:1;34197:73:0;;;12468:21:1;12525:2;12505:18;;;12498:30;12564:34;12544:18;;;12537:62;12635:12;12615:18;;;12608:40;12665:19;;34197:73:0;12284:406:1;34197:73:0;34281:19;34304:10;:8;:10::i;:::-;34281:33;-1:-1:-1;34332:21:0;34281:33;34332:7;:21;:::i;:::-;34325:28;34111:250;-1:-1:-1;;;34111:250:0:o;27101:215::-;9085:10;27189:4;27238:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27238:34:0;;;;;;;;;;27189:4;;27206:80;;27229:7;;27238:47;;27275:10;;27238:47;:::i;31248:340::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;31337:13:::1;31375:7;31364;31354;;:17;;;;:::i;:::-;31353:29;;;;:::i;:::-;31337:45;;31421:4;31411:7;;:14;;;;:::i;:::-;31401:5;:25;;31393:93;;;::::0;-1:-1:-1;;;31393:93:0;;13030:2:1;31393:93:0::1;::::0;::::1;13012:21:1::0;13069:2;13049:18;;;13042:30;13108:34;13088:18;;;13081:62;13179:25;13159:18;;;13152:53;13222:19;;31393:93:0::1;12828:419:1::0;31393:93:0::1;31497:12;:20:::0;;;31545:14:::1;::::0;31573:7;;31545:24:::1;::::0;31562:7;;31545:24:::1;:::i;:::-;31544:36;;;;:::i;:::-;31528:13;:52:::0;-1:-1:-1;;;31248:340:0:o;24245:807::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;-1:-1:-1;;;;;24326:22:0;::::1;24318:96;;;::::0;-1:-1:-1;;;24318:96:0;;13454:2:1;24318:96:0::1;::::0;::::1;13436:21:1::0;13493:2;13473:18;;;13466:30;13532:34;13512:18;;;13505:62;13603:31;13583:18;;;13576:59;13652:19;;24318:96:0::1;13252:425:1::0;24318:96:0::1;24445:4;::::0;-1:-1:-1;;;;;24433:16:0;;::::1;24445:4:::0;::::1;24433:16;;24425:90;;;::::0;-1:-1:-1;;;24425:90:0;;13454:2:1;24425:90:0::1;::::0;::::1;13436:21:1::0;13493:2;13473:18;;;13466:30;13532:34;13512:18;;;13505:62;13603:31;13583:18;;;13576:59;13652:19;;24425:90:0::1;13252:425:1::0;24425:90:0::1;24545:6;::::0;;24526:33:::1;::::0;-1:-1:-1;;;;;24545:6:0;;::::1;::::0;24526:18:::1;:33::i;:::-;24570:34;24589:8;24599:4;24570:18;:34::i;:::-;24615:37;24637:8;24647:4;24615:21;:37::i;:::-;24705:6;::::0;24677:16:::1;::::0;-1:-1:-1;;;;;24677:16:0;;::::1;24705:6:::0;::::1;24677:35;24673:90;;;24727:16;:36:::0;;-1:-1:-1;;;;;;24727:36:0::1;-1:-1:-1::0;;;;;24727:36:0;::::1;;::::0;;24673:90:::1;24826:6;::::0;24816:17:::1;::::0;-1:-1:-1;;;;;24826:6:0::1;24816:9;:17::i;:::-;24784:19;24796:6:::0;;-1:-1:-1;;;;;24796:6:0;;::::1;24784:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;24857:6;;24784:19;;24847:17:::1;::::0;24857:6:::1;24847:9;:17::i;:::-;:21;24844:99;;;24895:6;::::0;24885:46:::1;::::0;-1:-1:-1;;;;;24895:6:0::1;24903:8:::0;24913:17:::1;24895:6:::0;24913:9:::1;:17::i;:::-;24885:9;:46::i;:::-;;24844:99;24963:6;:17:::0;;-1:-1:-1;;;;;;24963:17:0::1;-1:-1:-1::0;;;;;24963:17:0;::::1;::::0;;::::1;::::0;;24996:38:::1;::::0;24963:17;;;;24996:38:::1;::::0;24963:6;24996:38:::1;24245:807:::0;:::o;21573:2032::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;21750:19:::1;::::0;::::1;;21749:20;21741:29;;;::::0;::::1;;21789:13;::::0;:18;:40;::::1;;;-1:-1:-1::0;21811:13:0::1;::::0;:18;21789:40:::1;:61;;;;-1:-1:-1::0;21834:16:0::1;::::0;;;::::1;;;21833:17;21789:61;21781:70;;;::::0;::::1;;21877:2;21870:3;:9;;21862:38;;;::::0;-1:-1:-1;;;21862:38:0;;9684:2:1;21862:38:0::1;::::0;::::1;9666:21:1::0;9723:2;9703:18;;;9696:30;9762:18;9742;;;9735:46;9798:18;;21862:38:0::1;9482:340:1::0;21862:38:0::1;21913:16;:40:::0;;-1:-1:-1;;;;;;21913:40:0::1;-1:-1:-1::0;;;;;21913:40:0;::::1;;::::0;;21966:18;;::::1;::::0;:5:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;21995:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;22045:15:0::1;22028:14;:32:::0;22206:9:::1;:13:::0;;-1:-1:-1;;22206:13:0::1;22218:1;22206:13:::0;;::::1;::::0;;;22234:12:::1;:24:::0;22312:12:::1;::::0;22308:16:::1;::::0;:2:::1;:16;:::i;:::-;22290:14;;:35;;;;:::i;:::-;22280:7;:45:::0;;;22354:13:::1;::::0;-1:-1:-1;;22354:13:0::1;:::i;:::-;22347:21;::::0;-1:-1:-1;;22347:21:0::1;:::i;:::-;22336:7;:33:::0;22413:14:::1;::::0;22382:9:::1;:46:::0;;-1:-1:-1;;;;;;22382:46:0::1;-1:-1:-1::0;;;;;22413:14:0;;::::1;22382:46:::0;;::::1;::::0;;22466:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;22413:14;22466:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22448:49:0::1;;22498:9;;;;;;;;;-1:-1:-1::0;;;;;22498:9:0::1;-1:-1:-1::0;;;;;22498:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22448:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15682:15:1;;;22448:82:0::1;::::0;::::1;15664:34:1::0;22524:4:0::1;15714:18:1::0;;;15707:43;15576:18;;22448:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22439:6;:91:::0;;-1:-1:-1;;;;;;22439:91:0::1;-1:-1:-1::0;;;;;22439:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22541:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;22541:22:0::1;-1:-1:-1::0;22541:22:0::1;::::0;;22594:4:::1;22574:26:::0;;:11:::1;:26:::0;;;;;22609:9:::1;::::0;;;::::1;22574:46:::0;;;;;;-1:-1:-1;;22574:66:0;;22541:22:::1;22661::::0;::::1;:13;:22:::0;22710:12:::1;:3:::0;22716:6:::1;22710:12;:::i;:::-;22694:13;:28:::0;22749:7:::1;::::0;22767:6:::1;::::0;22749:14:::1;::::0;22759:4:::1;22749:14;:::i;:::-;22748:25;;;;:::i;:::-;22733:12;:40:::0;22801:14:::1;::::0;22825:6:::1;::::0;22801:20:::1;::::0;22818:3:::1;22801:20;:::i;:::-;22800:31;;;;:::i;:::-;22784:13;:47:::0;22860:7:::1;::::0;22876:4:::1;::::0;22860:12:::1;::::0;22870:2:::1;22860:12;:::i;:::-;22859:21;;;;:::i;:::-;22842:14;:38:::0;22910:14:::1;::::0;22933:4:::1;::::0;22910:19:::1;::::0;22927:2:::1;22910:19;:::i;:::-;22909:28;;;;:::i;:::-;22891:15;:46:::0;22965:7:::1;::::0;22980:5:::1;::::0;22965:11:::1;::::0;22975:1:::1;22965:11;:::i;:::-;22964:21;;;;:::i;:::-;22948:13;:37:::0;23010:7:::1;::::0;23025:4:::1;::::0;23010:11:::1;::::0;23020:1:::1;23010:11;:::i;:::-;23009:20;;;;:::i;:::-;22996:10;:33:::0;23050:14:::1;::::0;23042:42:::1;::::0;-1:-1:-1;;;;;23050:14:0::1;-1:-1:-1::0;;23042:7:0::1;:42::i;:::-;-1:-1:-1::0;23097:19:0::1;:26:::0;;-1:-1:-1;;23097:26:0::1;23119:4;23097:26:::0;;::::1;::::0;;;23153:7:::1;::::0;;23097:19:::1;23142:7;24196::::0;24223:6;-1:-1:-1;;;;;24223:6:0;;24158:79;23142:7:::1;-1:-1:-1::0;;;;;23134:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23134:16:0;:26;23191:7:::1;24196::::0;24223:6;-1:-1:-1;;;;;24223:6:0;;24158:79;23191:7:::1;23185:4;::::0;23200:7:::1;::::0;23176:32:::1;::::0;2106:25:1;;;-1:-1:-1;;;;;23176:32:0;;::::1;::::0;23185:4;;::::1;::::0;23176:32:::1;::::0;2094:2:1;2079:18;23176:32:0::1;;;;;;;23253:9;::::0;23221:62:::1;::::0;23238:4:::1;::::0;-1:-1:-1;;;;;23253:9:0::1;-1:-1:-1::0;;23221:8:0::1;:62::i;:::-;23296:53;23306:7;24196::::0;24223:6;-1:-1:-1;;;;;24223:6:0;;24158:79;23306:7:::1;23323:4;23330:18;23340:7;24196::::0;24223:6;-1:-1:-1;;;;;24223:6:0;;24158:79;23296:53:::1;-1:-1:-1::0;23376:9:0::1;::::0;-1:-1:-1;;;;;23376:9:0::1;:25;23409:21;23454:4;23474:24;23454:4:::0;23474:9:::1;:24::i;:::-;23513:1;23530::::0;23547:7:::1;24196::::0;24223:6;-1:-1:-1;;;;;24223:6:0;;24158:79;23547:7:::1;23376:219;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;16143:15:1;;;23376:219:0::1;::::0;::::1;16125:34:1::0;16175:18;;;16168:34;;;;16218:18;;;16211:34;;;;16261:18;;;16254:34;16325:15;;;16304:19;;;16297:44;23569:15:0::1;16357:19:1::0;;;16350:35;16036:19;;23376:219:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21573:2032:::0;;;;;:::o;26699:120::-;26752:4;26776:35;26784:7;-1:-1:-1;;26776:7:0;:35::i;30617:455::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;30747:13:::1;;30736:7;:24;;:73;;;;;30794:15;;30781:9;:28;;30736:73;:122;;;;;30843:15;;30830:9;:28;;30736:122;30728:149;;;::::0;::::1;;30931:4;30918:9:::0;30896:19:::1;30906:9:::0;30896:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;30888:48;;;::::0;::::1;;30947:19;:29:::0;;;;30987:21:::1;:33:::0;31031:21:::1;:33:::0;30617:455::o;32241:202::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;32334:16:::1;::::0;-1:-1:-1;;;;;32334:29:0;;::::1;:16:::0;::::1;:29;;32326:61;;;::::0;-1:-1:-1;;;32326:61:0;;16909:2:1;32326:61:0::1;::::0;::::1;16891:21:1::0;16948:2;16928:18;;;16921:30;16987:21;16967:18;;;16960:49;17026:18;;32326:61:0::1;16707:343:1::0;32326:61:0::1;32398:16;:37:::0;;-1:-1:-1;;;;;;32398:37:0::1;-1:-1:-1::0;;;;;32398:37:0;;;::::1;::::0;;;::::1;::::0;;32241:202::o;32630:132::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;-1:-1:-1;;;;;32717:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;32717:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32630:132::o;31080:160::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;31167:15:::1;:27:::0;;;;31205:15:::1;:27:::0;31080:160::o;29727:435::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;29852:13:::1;;29841:7;:24;;:73;;;;;29899:15;;29886:9;:28;;29841:73;:122;;;;;29948:15;;29935:9;:28;;29841:122;29833:149;;;::::0;::::1;;30036:4;30023:9:::0;30001:19:::1;30011:9:::0;30001:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;29993:48;;;::::0;::::1;;30052:14;:24:::0;;;;30087:16:::1;:28:::0;30126:16:::1;:28:::0;29727:435::o;29486:229::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;29600:6:::1;29595:113;29616:7;:14;29612:1;:18;29595:113;;;29689:7;29652:22;:34;29675:7;29683:1;29675:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29652:34:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;29652:34:0;:44;;-1:-1:-1;;29652:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29632:3;::::1;::::0;::::1;:::i;:::-;;;;29595:113;;26149:198:::0;-1:-1:-1;;;;;26239:20:0;;26215:7;26239:20;;;:11;:20;;;;;;;;26235:49;;;-1:-1:-1;;;;;;26268:16:0;;;;;:7;:16;;;;;;;26149:198::o;26235:49::-;-1:-1:-1;;;;;26322:16:0;;;;;;:7;:16;;;;;;26302:37;;:19;:37::i;25060:194::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;25146:6:::1;::::0;;25127:33:::1;::::0;-1:-1:-1;;;;;25146:6:0;;::::1;::::0;25127:18:::1;:33::i;:::-;25188:1;25171:19:::0;;-1:-1:-1;;;;;;25171:19:0::1;::::0;;25206:40:::1;::::0;25188:1;;25206:40:::1;::::0;25188:1;;25206:40:::1;25060:194::o:0;28118:424::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;28199:16;28195:340:::1;;-1:-1:-1::0;;;;;;28232:13:0::1;28248:5;28232:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;28232:21:0::1;::::0;;32770:906::o;28195:340::-:1;28290:17;::::0;:22;28286:153:::1;;28379:7;28359:17;;28341:15;:35;;;;:::i;:::-;:45;28333:90;;;::::0;-1:-1:-1;;;28333:90:0;;17257:2:1;28333:90:0::1;::::0;::::1;17239:21:1::0;;;17276:18;;;17269:30;17335:34;17315:18;;;17308:62;17387:18;;28333:90:0::1;17055:356:1::0;28333:90:0::1;-1:-1:-1::0;;;;;28453:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;28453:20:0::1;28469:4;28453:20;::::0;;28508:15:::1;28488:17;:35:::0;28118:424;;:::o;38372:397::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;38434:14:::1;::::0;::::1;;38433:15;38425:52;;;::::0;-1:-1:-1;;;38425:52:0;;17618:2:1;38425:52:0::1;::::0;::::1;17600:21:1::0;17657:2;17637:18;;;17630:30;17696:26;17676:18;;;17669:54;17740:18;;38425:52:0::1;17416:348:1::0;38425:52:0::1;38488:42;38518:4;38525;38488:21;:42::i;:::-;38563:6;::::0;38541:35:::1;::::0;-1:-1:-1;;;;;38563:6:0::1;::::0;38541:21:::1;:35::i;:::-;38607:1;38591:13;;:17;38587:143;;;38640:18;:12;38655:3;38640:18;:::i;:::-;38625:12;:33:::0;38587:143:::1;;;38706:12;38691;:27:::0;38587:143:::1;38740:14;:21:::0;;-1:-1:-1;;38740:21:0::1;38757:4;38740:21;::::0;;38372:397::o;25773:75::-;25814:13;25838:7;25831:14;;;;;:::i;27324:225::-;9085:10;27417:4;27466:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27466:34:0;;;;;;;;;;27417:4;;27434:85;;27457:7;;27466:52;;27503:15;;27466:52;:::i;26355:167::-;26433:4;26450:42;9085:10;26474:9;26485:6;26450:9;:42::i;28949:218::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;29058:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;29058:28:0;;::::1;::::0;;;::::1;::::0;;;29097:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;29097:24:0;;::::1;;::::0;;29132:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;28949:218::o;32451:171::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;32528:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;32528:32:0::1;::::0;;;::::1;;::::0;;32576:38:::1;::::0;::::1;::::0;::::1;::::0;32552:8;1933:14:1;1926:22;1908:41;;1896:2;1881:18;;1768:187;32576:38:0::1;;;;;;;;32451:171:::0;:::o;30170:439::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;30296:13:::1;;30285:7;:24;;:73;;;;;30343:15;;30330:9;:28;;30285:73;:122;;;;;30392:15;;30379:9;:28;;30285:122;30277:149;;;::::0;::::1;;30480:4;30467:9:::0;30445:19:::1;30455:9:::0;30445:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;30437:48;;;::::0;::::1;;30496:15;:25:::0;;;;30532:17:::1;:29:::0;30572:17:::1;:29:::0;30170:439::o;27557:553::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;27630:29:::1;27681:9;27630:61;;27702:16;27739:10;-1:-1:-1::0;;;;;27739:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27721:47:0::1;;27777:4;27784:10;-1:-1:-1::0;;;;;27784:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27721:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15682:15:1;;;27721:81:0::1;::::0;::::1;15664:34:1::0;15734:15;;15714:18;;;15707:43;15576:18;;27721:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27702:100:::0;-1:-1:-1;;;;;;27817:22:0;::::1;27813:207;;27883:10;-1:-1:-1::0;;;;;27883:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27865:50:0::1;;27924:4;27931:10;-1:-1:-1::0;;;;;27931:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27865:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15682:15:1;;;27865:84:0::1;::::0;::::1;15664:34:1::0;15734:15;;15714:18;;;15707:43;15576:18;;27865:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27856:6;:93:::0;;-1:-1:-1;;;;;;27856:93:0::1;-1:-1:-1::0;;;;;27856:93:0;;;::::1;::::0;;;::::1;::::0;;27813:207:::1;;;27991:6;:17:::0;;-1:-1:-1;;;;;;27991:17:0::1;-1:-1:-1::0;;;;;27991:17:0;::::1;;::::0;;27813:207:::1;28030:9;:22:::0;;-1:-1:-1;;;;;;28030:22:0::1;-1:-1:-1::0;;;;;28030:22:0;::::1;;::::0;;28063:39:::1;28080:4;28087:9:::0;-1:-1:-1;;28063:8:0::1;:39::i;29337:141::-:0;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;-1:-1:-1;;;;;29429:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;29429:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29337:141::o;31944:289::-;20653:6;;-1:-1:-1;;;;;20653:6:0;9085:10;20653:22;20645:67;;;;-1:-1:-1;;;20645:67:0;;9323:2:1;20645:67:0;;;9305:21:1;;;9342:18;;;9335:30;-1:-1:-1;;;;;;;;;;;9381:18:1;;;9374:62;9453:18;;20645:67:0;9121:356:1;20645:67:0;32144:16:::1;32124;32114:7;;:26;;;;:::i;:::-;32113:47;;;;:::i;:::-;32097:13;:63:::0;32185:7:::1;::::0;32212:13;;32185:23:::1;::::0;32195:13;;32185:23:::1;:::i;:::-;32184:41;;;;:::i;:::-;32171:10;:54:::0;-1:-1:-1;;;;31944:289:0:o;34373:342::-;-1:-1:-1;;;;;34468:20:0;;34460:69;;;;-1:-1:-1;;;34460:69:0;;17971:2:1;34460:69:0;;;17953:21:1;18010:2;17990:18;;;17983:30;18049:34;18029:18;;;18022:62;18120:6;18100:18;;;18093:34;18144:19;;34460:69:0;17769:400:1;34460:69:0;-1:-1:-1;;;;;34548:21:0;;34540:68;;;;-1:-1:-1;;;34540:68:0;;18376:2:1;34540:68:0;;;18358:21:1;18415:2;18395:18;;;18388:30;18454:34;18434:18;;;18427:62;18525:4;18505:18;;;18498:32;18547:19;;34540:68:0;18174:398:1;34540:68:0;-1:-1:-1;;;;;34621:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;34674:33;;2106:25:1;;;34674:33:0;;2079:18:1;34674:33:0;;;;;;;34373:342;;;:::o;34723:1900::-;34802:4;-1:-1:-1;;;;;34827:18:0;;34819:68;;;;-1:-1:-1;;;34819:68:0;;18779:2:1;34819:68:0;;;18761:21:1;18818:2;18798:18;;;18791:30;18857:34;18837:18;;;18830:62;18928:7;18908:18;;;18901:35;18953:19;;34819:68:0;18577:401:1;34819:68:0;-1:-1:-1;;;;;34906:16:0;;34898:64;;;;-1:-1:-1;;;34898:64:0;;19185:2:1;34898:64:0;;;19167:21:1;19224:2;19204:18;;;19197:30;19263:34;19243:18;;;19236:62;19334:5;19314:18;;;19307:33;19357:19;;34898:64:0;18983:399:1;34898:64:0;34990:1;34981:6;:10;34973:64;;;;-1:-1:-1;;;34973:64:0;;19589:2:1;34973:64:0;;;19571:21:1;19628:2;19608:18;;;19601:30;19667:34;19647:18;;;19640:62;19738:11;19718:18;;;19711:39;19767:19;;34973:64:0;19387:405:1;34973:64:0;35052:14;;;;35048:112;;;35106:13;;35091:11;:28;;35083:65;;;;-1:-1:-1;;;35083:65:0;;19999:2:1;35083:65:0;;;19981:21:1;20038:2;20018:18;;;20011:30;20077:26;20057:18;;;20050:54;20121:18;;35083:65:0;19797:348:1;35083:65:0;35173:20;35184:4;35190:2;35173:10;:20::i;:::-;35170:776;;;35214:14;;;;35210:89;;35249:34;;-1:-1:-1;;;35249:34:0;;20352:2:1;35249:34:0;;;20334:21:1;20391:2;20371:18;;;20364:30;20430:26;20410:18;;;20403:54;20474:18;;35249:34:0;20150:348:1;35210:89:0;35317:15;;;;35313:347;;;-1:-1:-1;;;;;35357:13:0;;;;;;:7;:13;;;;;;;;35353:292;;;-1:-1:-1;;;;;35402:13:0;;;;;;:9;:13;;;;;;35419:12;35402:29;;35394:38;;;;;;-1:-1:-1;;;;;35455:13:0;;;;;;:9;:13;;;;;35471:12;35455:28;;35353:292;;;-1:-1:-1;;;;;35540:15:0;;;;;;:9;:15;;;;;;35559:12;35540:31;;35532:40;;;;;;-1:-1:-1;;;;;35595:15:0;;;;;;:9;:15;;;;;35613:12;35595:30;;35353:292;35692:12;;35682:6;:22;;35674:75;;;;-1:-1:-1;;;35674:75:0;;20705:2:1;35674:75:0;;;20687:21:1;20744:2;20724:18;;;20717:30;20783:34;20763:18;;;20756:62;20854:10;20834:18;;;20827:38;20882:19;;35674:75:0;20503:404:1;35674:75:0;35773:14;;-1:-1:-1;;;;;35767:20:0;;;35773:14;;35767:20;;;;:36;;-1:-1:-1;;;;;;35792:11:0;;;;;;:7;:11;;;;;;;;35791:12;35767:36;35764:171;;;35858:14;;35848:6;35832:13;35842:2;35832:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;35824:95;;;;-1:-1:-1;;;35824:95:0;;21114:2:1;35824:95:0;;;21096:21:1;21153:2;21133:18;;;21126:30;21192:34;21172:18;;;21165:62;21263:12;21243:18;;;21236:40;21293:19;;35824:95:0;20912:406:1;35824:95:0;-1:-1:-1;;;;;35991:24:0;;35958:12;35991:24;;;:18;:24;;;;;;35973:4;;35991:24;;;:50;;-1:-1:-1;;;;;;36019:22:0;;;;;;:18;:22;;;;;;;;35991:50;35988:96;;;-1:-1:-1;36067:5:0;35988:96;-1:-1:-1;;;;;36100:11:0;;;;;;:7;:11;;;;;;;;36096:457;;;36133:16;;;;;;;36132:17;:59;;;;-1:-1:-1;36170:21:0;;-1:-1:-1;;;36170:21:0;;;;36132:59;36128:408;;;36226:28;36257:24;36275:4;36257:9;:24::i;:::-;36226:55;;36328:13;;36304:20;:37;36300:221;;36393:10;;36369:20;:34;36366:77;;-1:-1:-1;36430:10:0;;36366:77;36465:36;36480:20;36465:14;:36::i;:::-;36207:329;36128:408;36571:44;36589:4;36595:2;36599:6;36607:7;36571:17;:44::i;:::-;36564:51;34723:1900;-1:-1:-1;;;;;34723:1900:0:o;42343:161::-;42385:7;42406:15;42423;42442:19;:17;:19::i;:::-;42405:56;;-1:-1:-1;42405:56:0;-1:-1:-1;42479:17:0;42405:56;;42479:17;:::i;:::-;42472:24;;;;42343:161;:::o;33779:324::-;33848:4;24223:6;;-1:-1:-1;;;;;33872:15:0;;;24223:6;;33872:15;;;;:45;;-1:-1:-1;24196:7:0;24223:6;-1:-1:-1;;;;;33904:13:0;;;24223:6;;33904:13;;33872:45;:84;;;;-1:-1:-1;;;;;;33935:21:0;;;;;;:17;:21;;;;;;;;33934:22;33872:84;:125;;;;-1:-1:-1;;;;;;33974:23:0;;;;;;:17;:23;;;;;;;;33973:24;33872:125;:152;;;;-1:-1:-1;34020:4:0;;-1:-1:-1;;;;;34014:10:0;;;34020:4;;34014:10;;33872:152;:185;;;;-1:-1:-1;;;;;;34041:16:0;;;;33872:185;:223;;;;-1:-1:-1;;;;;;34074:21:0;;34090:4;34074:21;;33865:230;33779:324;-1:-1:-1;;;33779:324:0:o;36631:1278::-;20527:16;:23;;-1:-1:-1;;20527:23:0;;;;;36739:15:::1;::::0;36721::::1;::::0;:33:::1;::::0;36739:15;36721:33:::1;:::i;:::-;36717:64;;36774:7;;36717:64;36791:17;36894:1;36874:15;;36856;;:33;;;;:::i;:::-;36836:15;::::0;36813:38:::1;::::0;:20;:38:::1;:::i;:::-;36812:78;;;;:::i;:::-;36811:84;;;;:::i;:::-;36791:104:::0;-1:-1:-1;36908:20:0::1;36931:32;36791:104:::0;36931:20;:32:::1;:::i;:::-;37000:16;::::0;;37014:1:::1;37000:16:::0;;;;;::::1;::::0;;36908:55;;-1:-1:-1;36976:21:0::1;::::0;37000:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;37000:16:0::1;36976:40;;37045:4;37027;37032:1;37027:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37027:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;37071:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;37027:7;;37071:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37061:4;37066:1;37061:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37061:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;37100:9:::1;::::0;:191:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;37175:12;;37100:9:::1;::::0;37218:4;;37245::::1;::::0;37265:15:::1;::::0;37100:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37306:24;37417:1;37397:15;;37379;;:33;;;;:::i;:::-;37359:15;::::0;37335:39:::1;::::0;:21:::1;:39;:::i;:::-;37334:79;;;;:::i;:::-;37333:85;;;;:::i;:::-;37306:112:::0;-1:-1:-1;37435:13:0;;37431:344:::1;;37465:9;::::0;37636:4:::1;::::0;37465:224:::1;::::0;;;;37542:4:::1;37465:224;::::0;::::1;16125:34:1::0;16175:18;;;16168:34;;;37465:9:0::1;16218:18:1::0;;;16211:34;;;16261:18;;;16254:34;-1:-1:-1;;;;;37636:4:0;;::::1;16304:19:1::0;;;16297:44;37659:15:0::1;16357:19:1::0;;;16350:35;37465:9:0;::::1;::::0;:25:::1;::::0;37498:16;;16036:19:1;;37465:224:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37709:54:0::1;::::0;;22556:25:1;;;22612:2;22597:18;;22590:34;;;22640:18;;;22633:34;;;37709:54:0::1;::::0;-1:-1:-1;22544:2:1;22529:18;37709:54:0::1;;;;;;;37431:344;37824:1;37789:32;37812:9:::0;37789:20;:32:::1;:::i;:::-;:36;37785:117;;;37842:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;37842:16:0;;::::1;::::0;37868:21:::1;37842:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;37868:21;37842:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37785:117;36706:1203;;;;20561:1;-1:-1:-1::0;20573:16:0;:24;;-1:-1:-1;;20573:24:0;;;36631:1278::o;38983:1880::-;39106:16;;39085:4;;39106:16;;;;;39102:851;;;-1:-1:-1;;;;;28902:31:0;;28878:4;28902:31;;;:22;:31;;;;;;;;39142:56;;;-1:-1:-1;;;;;;28902:31:0;;28878:4;28902:31;;;:22;:31;;;;;;;;39173:25;39138:116;;;39219:19;;-1:-1:-1;;;39219:19:0;;22880:2:1;39219:19:0;;;22862:21:1;22919:1;22899:18;;;22892:29;22957:11;22937:18;;;22930:39;22986:18;;39219:19:0;22678:332:1;39138:116:0;39275:16;;;;;;;39270:672;;39312:28;39331:4;39337:2;39312:18;:28::i;:::-;39364:16;;;;;;;39363:17;:41;;;;;39384:20;39395:4;39401:2;39384:10;:20::i;:::-;39359:137;;;39429:47;;-1:-1:-1;;;39429:47:0;;23217:2:1;39429:47:0;;;23199:21:1;23256:2;23236:18;;;23229:30;23295:34;23275:18;;;23268:62;23366:7;23346:18;;;23339:35;23391:19;;39429:47:0;23015:401:1;39359:137:0;39270:672;;;39555:1;39540:12;;:16;:55;;;;-1:-1:-1;;;;;;39582:13:0;;;;;;:7;:13;;;;;;;;39540:55;:101;;;;;39621:20;39632:4;39638:2;39621:10;:20::i;:::-;39536:391;;;39718:13;;39703:12;;39688:27;;:12;:27;:::i;:::-;:43;39684:224;;;-1:-1:-1;;;;;39760:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;39760:33:0;39789:4;39760:33;;;39820:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;39868:16:0;;-1:-1:-1;;;;;178:55:1;;160:74;;39868:16:0;;148:2:1;133:18;39868:16:0;;;;;;;39684:224;39965:25;39993:38;40004:4;40010:2;40014:7;40023;39993:10;:38::i;:::-;40076:14;;;;-1:-1:-1;;;;;40060:13:0;;;;;;:7;:13;;;;;;39965:66;;-1:-1:-1;40060:30:0;;;:::i;:::-;-1:-1:-1;;;;;40044:13:0;;;;;;;:7;:13;;;;;;:46;;;;40129:22;;;;40115:11;;;;;;;;;;:36;;40129:22;40115:36;:::i;:::-;-1:-1:-1;;;;;40101:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;40168:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;40190:15:0;;;;;;:11;:15;;;;;;;;40189:16;40168:37;40164:416;;;-1:-1:-1;;;;;40238:13:0;;;;;;:7;:13;;;;;;:23;;40254:7;;40238:23;:::i;:::-;-1:-1:-1;;;;;40222:13:0;;;;;;:7;:13;;;;;:39;40164:416;;;-1:-1:-1;;;;;40284:17:0;;;;;;:11;:17;;;;;;;;40283:18;:37;;;;-1:-1:-1;;;;;;40305:15:0;;;;;;:11;:15;;;;;;;;40283:37;40279:301;;;40365:22;;-1:-1:-1;;;;;40351:11:0;;40365:22;40351:11;;;:7;:11;;;;;;:36;;40365:22;40351:36;:::i;:::-;-1:-1:-1;;;;;40337:11:0;;;;;;:7;:11;;;;;:50;40279:301;;;-1:-1:-1;;;;;40411:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;40432:15:0;;;;;;:11;:15;;;;;;;;40411:36;40407:173;;;-1:-1:-1;;;;;40480:13:0;;;;;;:7;:13;;;;;;:23;;40496:7;;40480:23;:::i;:::-;-1:-1:-1;;;;;40464:13:0;;;;;;;:7;:13;;;;;;:39;;;;40546:22;;40532:11;;;;;;;;;;:36;;40546:22;40532:36;:::i;:::-;-1:-1:-1;;;;;40518:11:0;;;;;;:7;:11;;;;;:50;40407:173;40596:17;;;;:21;40592:79;;40632:39;40647:4;40653:6;:17;;;40632:14;:39::i;:::-;40700:1;40686:6;:11;;;:15;:34;;;;40719:1;40705:6;:11;;;:15;40686:34;40682:91;;;40735:38;40748:6;:11;;;40761:6;:11;;;40735:12;:38::i;:::-;40806:2;-1:-1:-1;;;;;40791:42:0;40800:4;-1:-1:-1;;;;;40791:42:0;;40810:6;:22;;;40791:42;;;;2106:25:1;;2094:2;2079:18;;1960:177;40791:42:0;;;;;;;;-1:-1:-1;40851:4:0;;38983:1880;-1:-1:-1;;;;;38983:1880:0:o;42512:547::-;42610:7;;42646;;42563;;;;;42664:283;42688:9;:16;42684:20;;42664:283;;;42754:7;42730;:21;42738:9;42748:1;42738:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42738:12:0;42730:21;;;;;;;;;;;;;:31;;:66;;;42789:7;42765;:21;42773:9;42783:1;42773:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42773:12:0;42765:21;;;;;;;;;;;;;:31;42730:66;42726:97;;;42806:7;;42815;;42798:25;;;;;;;42512:547;;:::o;42726:97::-;42858:7;:21;42866:9;42876:1;42866:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42866:12:0;42858:21;;;;;;;;;;;;;42848:31;;:7;:31;:::i;:::-;42838:41;;42914:7;:21;42922:9;42932:1;42922:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42922:12:0;42914:21;;;;;;;;;;;;;42904:31;;:7;:31;:::i;:::-;42894:41;-1:-1:-1;42706:3:0;;;;:::i;:::-;;;;42664:283;;;;42981:7;;42971;;:17;;;;:::i;:::-;42961:7;:27;42957:58;;;42998:7;;43007;;42990:25;;;;;;42512:547;;:::o;42957:58::-;43034:7;;43043;;-1:-1:-1;42512:547:0;-1:-1:-1;42512:547:0:o;37925:439::-;38008:16;;;;;;;38007:17;37999:65;;;;-1:-1:-1;;;37999:65:0;;23623:2:1;37999:65:0;;;23605:21:1;23662:2;23642:18;;;23635:30;23701:34;23681:18;;;23674:62;23772:5;23752:18;;;23745:33;23795:19;;37999:65:0;23421:399:1;37999:65:0;38080:20;38091:4;38097:2;38080:10;:20::i;:::-;38079:21;:37;;;;-1:-1:-1;38110:6:0;;-1:-1:-1;;;;;38104:12:0;;;38110:6;;38104:12;38079:37;38075:282;;;-1:-1:-1;;;;;38133:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;38133:30:0;38159:4;38133:30;;;;;;38178:16;:23;;-1:-1:-1;;38178:23:0;;;;;38231:15;38216:12;:30;38263:21;:28;;;;-1:-1:-1;;;38263:28:0;;;38311:34;;;;;;1933:14:1;;1926:22;1908:41;;1896:2;1881:18;;1768:187;38311:34:0;;;;;;;;37925:439;;:::o;40871:1464::-;40966:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40966:18:0;40997:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40997:25:0;41033:19;41055:10;:8;:10::i;:::-;41033:32;-1:-1:-1;41095:21:0;41033:32;41095:7;:21;:::i;:::-;41078:14;;;:38;41129:1071;;;;-1:-1:-1;;;;;41160:11:0;;;;;;:7;:11;;;;;;;;41156:561;;;41206:15;;41192:11;:29;41256:17;;41240:13;:33;41308:17;;41292:13;:33;41156:561;;;-1:-1:-1;;;;;41351:13:0;;;;;;:7;:13;;;;;;;;41347:370;;;41399:14;;41385:11;:28;41448:16;;41432:13;:32;41499:16;;41483:13;:32;41347:370;;;41570:19;;41556:11;:33;41624:21;;41608:13;:37;41680:21;;41664:13;:37;41347:370;41773:16;;41758:11;;41748:21;;:7;:21;:::i;:::-;41747:42;;;;:::i;:::-;41733:11;;;:56;41870:16;;41852:13;;41836;;:29;;41852:13;41836:29;:::i;:::-;41825:41;;:7;:41;:::i;:::-;41824:62;;;;:::i;:::-;41804:17;;;:82;;;41937:11;;;;:31;;41804:82;41937:31;:::i;:::-;41926:43;;:7;:43;:::i;:::-;41901:68;;42000:11;;;;:25;;42014:11;;42000:25;:::i;:::-;41986:11;;;:39;41129:1071;;;42072:1;42058:11;;;:15;;;42088:17;;;:21;;;42124:32;;;42173:11;;;:15;41129:1071;42290:11;42270:6;:17;;;:31;;;;:::i;:::-;42255:6;:11;;;:47;;;;:::i;:::-;42237:6;:14;;;:66;;;;:::i;:::-;42212:22;;;:91;-1:-1:-1;42212:22:0;40871:1464;-1:-1:-1;;;;;40871:1464:0:o;43341:461::-;43421:19;43444:10;:8;:10::i;:::-;43421:33;-1:-1:-1;43465:18:0;43486:24;43421:33;43486:10;:24;:::i;:::-;43562:4;43546:22;;;;:7;:22;;;;;;43465:45;;-1:-1:-1;43546:35:0;;43465:45;;43546:35;:::i;:::-;43537:4;43521:22;;;;:7;:22;;;;;;;;:60;;;;43595:11;:26;;;;;;43592:104;;;43677:4;43661:22;;;;:7;:22;;;;;;:35;;43686:10;;43661:35;:::i;:::-;43652:4;43636:22;;;;:7;:22;;;;;:60;43592:104;43712:43;;2106:25:1;;;43737:4:0;;-1:-1:-1;;;;;43712:43:0;;;;;2094:2:1;2079:18;43712:43:0;;;;;;;43410:392;;43341:461;;:::o;43071:143::-;43161:4;43151:7;;:14;;;;:::i;:::-;43141:7;:24;43189:10;;:17;;43202:4;;43189:17;:::i;:::-;43176:10;:30;-1:-1:-1;;43071:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:597:1;357:4;386:2;415;404:9;397:21;447:6;441:13;490:6;485:2;474:9;470:18;463:34;515:1;525:140;539:6;536:1;533:13;525:140;;;634:14;;;630:23;;624:30;600:17;;;619:2;596:26;589:66;554:10;;525:140;;;683:6;680:1;677:13;674:91;;;753:1;748:2;739:6;728:9;724:22;720:31;713:42;674:91;-1:-1:-1;826:2:1;805:15;-1:-1:-1;;801:29:1;786:45;;;;833:2;782:54;;245:597;-1:-1:-1;;;245:597:1:o;1104:180::-;1163:6;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;-1:-1:-1;1255:23:1;;1104:180;-1:-1:-1;1104:180:1:o;1289:154::-;-1:-1:-1;;;;;1368:5:1;1364:54;1357:5;1354:65;1344:93;;1433:1;1430;1423:12;1448:315;1516:6;1524;1577:2;1565:9;1556:7;1552:23;1548:32;1545:52;;;1593:1;1590;1583:12;1545:52;1632:9;1619:23;1651:31;1676:5;1651:31;:::i;:::-;1701:5;1753:2;1738:18;;;;1725:32;;-1:-1:-1;;;1448:315:1:o;2142:160::-;2207:20;;2263:13;;2256:21;2246:32;;2236:60;;2292:1;2289;2282:12;2236:60;2142:160;;;:::o;2307:315::-;2372:6;2380;2433:2;2421:9;2412:7;2408:23;2404:32;2401:52;;;2449:1;2446;2439:12;2401:52;2488:9;2475:23;2507:31;2532:5;2507:31;:::i;:::-;2557:5;-1:-1:-1;2581:35:1;2612:2;2597:18;;2581:35;:::i;:::-;2571:45;;2307:315;;;;;:::o;2627:456::-;2704:6;2712;2720;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2828:9;2815:23;2847:31;2872:5;2847:31;:::i;:::-;2897:5;-1:-1:-1;2954:2:1;2939:18;;2926:32;2967:33;2926:32;2967:33;:::i;:::-;2627:456;;3019:7;;-1:-1:-1;;;3073:2:1;3058:18;;;;3045:32;;2627:456::o;3088:248::-;3156:6;3164;3217:2;3205:9;3196:7;3192:23;3188:32;3185:52;;;3233:1;3230;3223:12;3185:52;-1:-1:-1;;3256:23:1;;;3326:2;3311:18;;;3298:32;;-1:-1:-1;3088:248:1:o;3530:247::-;3589:6;3642:2;3630:9;3621:7;3617:23;3613:32;3610:52;;;3658:1;3655;3648:12;3610:52;3697:9;3684:23;3716:31;3741:5;3716:31;:::i;3782:184::-;-1:-1:-1;;;3831:1:1;3824:88;3931:4;3928:1;3921:15;3955:4;3952:1;3945:15;3971:275;4042:2;4036:9;4107:2;4088:13;;-1:-1:-1;;4084:27:1;4072:40;;4142:18;4127:34;;4163:22;;;4124:62;4121:88;;;4189:18;;:::i;:::-;4225:2;4218:22;3971:275;;-1:-1:-1;3971:275:1:o;4251:531::-;4294:5;4347:3;4340:4;4332:6;4328:17;4324:27;4314:55;;4365:1;4362;4355:12;4314:55;4401:6;4388:20;4427:18;4423:2;4420:26;4417:52;;;4449:18;;:::i;:::-;4493:55;4536:2;4517:13;;-1:-1:-1;;4513:27:1;4542:4;4509:38;4493:55;:::i;:::-;4573:2;4564:7;4557:19;4619:3;4612:4;4607:2;4599:6;4595:15;4591:26;4588:35;4585:55;;;4636:1;4633;4626:12;4585:55;4701:2;4694:4;4686:6;4682:17;4675:4;4666:7;4662:18;4649:55;4749:1;4724:16;;;4742:4;4720:27;4713:38;;;;4728:7;4251:531;-1:-1:-1;;;4251:531:1:o;4787:921::-;4908:6;4916;4924;4932;4940;4993:3;4981:9;4972:7;4968:23;4964:33;4961:53;;;5010:1;5007;5000:12;4961:53;5049:9;5036:23;5068:31;5093:5;5068:31;:::i;:::-;5118:5;-1:-1:-1;5174:2:1;5159:18;;5146:32;5197:18;5227:14;;;5224:34;;;5254:1;5251;5244:12;5224:34;5277:50;5319:7;5310:6;5299:9;5295:22;5277:50;:::i;:::-;5267:60;;5380:2;5369:9;5365:18;5352:32;5336:48;;5409:2;5399:8;5396:16;5393:36;;;5425:1;5422;5415:12;5393:36;;5448:52;5492:7;5481:8;5470:9;5466:24;5448:52;:::i;:::-;5438:62;;;5552:2;5541:9;5537:18;5524:32;5600:4;5591:7;5587:18;5578:7;5575:31;5565:59;;5620:1;5617;5610:12;5565:59;4787:921;;;;-1:-1:-1;4787:921:1;;5697:3;5682:19;5669:33;;4787:921;-1:-1:-1;;4787:921:1:o;5713:316::-;5790:6;5798;5806;5859:2;5847:9;5838:7;5834:23;5830:32;5827:52;;;5875:1;5872;5865:12;5827:52;-1:-1:-1;;5898:23:1;;;5968:2;5953:18;;5940:32;;-1:-1:-1;6019:2:1;6004:18;;;5991:32;;5713:316;-1:-1:-1;5713:316:1:o;6294:1091::-;6384:6;6392;6445:2;6433:9;6424:7;6420:23;6416:32;6413:52;;;6461:1;6458;6451:12;6413:52;6501:9;6488:23;6530:18;6571:2;6563:6;6560:14;6557:34;;;6587:1;6584;6577:12;6557:34;6625:6;6614:9;6610:22;6600:32;;6670:7;6663:4;6659:2;6655:13;6651:27;6641:55;;6692:1;6689;6682:12;6641:55;6728:2;6715:16;6750:4;6773:2;6769;6766:10;6763:36;;;6779:18;;:::i;:::-;6825:2;6822:1;6818:10;6808:20;;6848:28;6872:2;6868;6864:11;6848:28;:::i;:::-;6910:15;;;6980:11;;;6976:20;;;6941:12;;;;7008:19;;;7005:39;;;7040:1;7037;7030:12;7005:39;7064:11;;;;7084:217;7100:6;7095:3;7092:15;7084:217;;;7180:3;7167:17;7154:30;;7197:31;7222:5;7197:31;:::i;:::-;7241:18;;;7117:12;;;;7279;;;;7084:217;;;7320:5;-1:-1:-1;7344:35:1;;-1:-1:-1;7360:18:1;;;7344:35;:::i;:::-;7334:45;;;;;;6294:1091;;;;;:::o;7390:316::-;7458:6;7466;7474;7527:2;7515:9;7506:7;7502:23;7498:32;7495:52;;;7543:1;7540;7533:12;7495:52;7566:26;7582:9;7566:26;:::i;:::-;7556:36;;7611:35;7642:2;7631:9;7627:18;7611:35;:::i;:::-;7601:45;;7665:35;7696:2;7685:9;7681:18;7665:35;:::i;:::-;7655:45;;7390:316;;;;;:::o;7711:180::-;7767:6;7820:2;7808:9;7799:7;7795:23;7791:32;7788:52;;;7836:1;7833;7826:12;7788:52;7859:26;7875:9;7859:26;:::i;7896:388::-;7964:6;7972;8025:2;8013:9;8004:7;8000:23;7996:32;7993:52;;;8041:1;8038;8031:12;7993:52;8080:9;8067:23;8099:31;8124:5;8099:31;:::i;:::-;8149:5;-1:-1:-1;8206:2:1;8191:18;;8178:32;8219:33;8178:32;8219:33;:::i;:::-;8271:7;8261:17;;;7896:388;;;;;:::o;8289:385::-;8375:6;8383;8391;8399;8452:3;8440:9;8431:7;8427:23;8423:33;8420:53;;;8469:1;8466;8459:12;8420:53;-1:-1:-1;;8492:23:1;;;8562:2;8547:18;;8534:32;;-1:-1:-1;8613:2:1;8598:18;;8585:32;;8664:2;8649:18;8636:32;;-1:-1:-1;8289:385:1;-1:-1:-1;8289:385:1:o;8679:437::-;8758:1;8754:12;;;;8801;;;8822:61;;8876:4;8868:6;8864:17;8854:27;;8822:61;8929:2;8921:6;8918:14;8898:18;8895:38;8892:218;;;-1:-1:-1;;;8963:1:1;8956:88;9067:4;9064:1;9057:15;9095:4;9092:1;9085:15;8892:218;;8679:437;;;:::o;9827:184::-;-1:-1:-1;;;9876:1:1;9869:88;9976:4;9973:1;9966:15;10000:4;9997:1;9990:15;10016:168;10056:7;10122:1;10118;10114:6;10110:14;10107:1;10104:21;10099:1;10092:9;10085:17;10081:45;10078:71;;;10129:18;;:::i;:::-;-1:-1:-1;10169:9:1;;10016:168::o;10903:184::-;-1:-1:-1;;;10952:1:1;10945:88;11052:4;11049:1;11042:15;11076:4;11073:1;11066:15;11092:125;11132:4;11160:1;11157;11154:8;11151:34;;;11165:18;;:::i;:::-;-1:-1:-1;11202:9:1;;11092:125::o;11222:184::-;-1:-1:-1;;;11271:1:1;11264:88;11371:4;11368:1;11361:15;11395:4;11392:1;11385:15;11411:135;11450:3;-1:-1:-1;;11471:17:1;;11468:43;;;11491:18;;:::i;:::-;-1:-1:-1;11538:1:1;11527:13;;11411:135::o;11551:184::-;-1:-1:-1;;;11600:1:1;11593:88;11700:4;11697:1;11690:15;11724:4;11721:1;11714:15;11740:120;11780:1;11806;11796:35;;11811:18;;:::i;:::-;-1:-1:-1;11845:9:1;;11740:120::o;12695:128::-;12735:3;12766:1;12762:6;12759:1;12756:13;12753:39;;;12772:18;;:::i;:::-;-1:-1:-1;12808:9:1;;12695:128::o;13682:422::-;13771:1;13814:5;13771:1;13828:270;13849:7;13839:8;13836:21;13828:270;;;13908:4;13904:1;13900:6;13896:17;13890:4;13887:27;13884:53;;;13917:18;;:::i;:::-;13967:7;13957:8;13953:22;13950:55;;;13987:16;;;;13950:55;14066:22;;;;14026:15;;;;13828:270;;;13832:3;13682:422;;;;;:::o;14109:806::-;14158:5;14188:8;14178:80;;-1:-1:-1;14229:1:1;14243:5;;14178:80;14277:4;14267:76;;-1:-1:-1;14314:1:1;14328:5;;14267:76;14359:4;14377:1;14372:59;;;;14445:1;14440:130;;;;14352:218;;14372:59;14402:1;14393:10;;14416:5;;;14440:130;14477:3;14467:8;14464:17;14461:43;;;14484:18;;:::i;:::-;-1:-1:-1;;14540:1:1;14526:16;;14555:5;;14352:218;;14654:2;14644:8;14641:16;14635:3;14629:4;14626:13;14622:36;14616:2;14606:8;14603:16;14598:2;14592:4;14589:12;14585:35;14582:77;14579:159;;;-1:-1:-1;14691:19:1;;;14723:5;;14579:159;14770:34;14795:8;14789:4;14770:34;:::i;:::-;14840:6;14836:1;14832:6;14828:19;14819:7;14816:32;14813:58;;;14851:18;;:::i;:::-;14889:20;;14109:806;-1:-1:-1;;;14109:806:1:o;14920:131::-;14980:5;15009:36;15036:8;15030:4;15009:36;:::i;15056:112::-;15088:1;15114;15104:35;;15119:18;;:::i;:::-;-1:-1:-1;15153:9:1;;15056:112::o;15173:251::-;15243:6;15296:2;15284:9;15275:7;15271:23;15267:32;15264:52;;;15312:1;15309;15302:12;15264:52;15344:9;15338:16;15363:31;15388:5;15363:31;:::i;16396:306::-;16484:6;16492;16500;16553:2;16541:9;16532:7;16528:23;16524:32;16521:52;;;16569:1;16566;16559:12;16521:52;16598:9;16592:16;16582:26;;16648:2;16637:9;16633:18;16627:25;16617:35;;16692:2;16681:9;16677:18;16671:25;16661:35;;16396:306;;;;;:::o;21323:1026::-;21585:4;21633:3;21622:9;21618:19;21664:6;21653:9;21646:25;21690:2;21728:6;21723:2;21712:9;21708:18;21701:34;21771:3;21766:2;21755:9;21751:18;21744:31;21795:6;21830;21824:13;21861:6;21853;21846:22;21899:3;21888:9;21884:19;21877:26;;21938:2;21930:6;21926:15;21912:29;;21959:1;21969:218;21983:6;21980:1;21977:13;21969:218;;;22048:13;;-1:-1:-1;;;;;22044:62:1;22032:75;;22162:15;;;;22127:12;;;;22005:1;21998:9;21969:218;;;-1:-1:-1;;;;;;;22243:55:1;;;;22238:2;22223:18;;22216:83;-1:-1:-1;;;22330:3:1;22315:19;22308:35;22204:3;21323:1026;-1:-1:-1;;;21323:1026:1:o

Swarm Source

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