ETH Price: $2,308.15 (-0.45%)

Token

Dracarys (DRAC)
 

Overview

Max Total Supply

1,000,000,000,000 DRAC

Holders

247

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
11,001,831,839.762771419 DRAC

Value
$0.00
0x82A6E7738757a80F23D5956c2CC30a0c52f4c646
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:
Dracarys

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-26
*/

pragma solidity ^0.8.10;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    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);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

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


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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}



interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


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

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

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

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

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

contract Dracarys is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000 * 10 ** 6 * 10 ** 9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Dracarys";
    string private _symbol = "DRAC";
    uint8 private _decimals = 9;

    uint256 public taxFee = 1;
    uint256 private _previousTaxFee = taxFee;

    uint256 public liquidityFee = 5;
    uint256 private _previousLiquidityFee = liquidityFee;

    uint256 public distributionSharePercentage = 50;
    uint256 public marketingFeePercent = 40;
    uint256 public charityFeePercent = 40;
    uint256 public dracFeePercent  = 20;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 9000000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 9000000000 * 10**9;

    address public charityWallet = 0xAFee5205cE38E3DC54BC1829094246541BA1f244;
    address public marketingWallet = 0x4073e060dcbd9Ff47fd3E3d479405A079093aCfD;
    address public dracWallet = 0xAD39e894B4b9cE593815122a8429e6E41a67c0AB;

    uint256 public lockPeriod = 1648310400;  //March 26 2022 12:00 PM EST
    bool public failSafeEnabled = false;
    mapping(address => bool) public _lockedAddresses;  //only for team tokens

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[charityWallet] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[dracWallet] = true;
        _isExcludedFromFee[0x95938133445DF1783B0Aa8F0bA9b01Ca0f5BC811] = true; //charity multisig
        _isExcludedFromFee[0x6d9b2E1B8F7144D673E1B33c021794652d7F1B43] = true; //marketing multisig
        _isExcludedFromFee[0x86CcBfb75A05CD22e33646Bb74cFE84418D46529] = true; //drac multisig
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //team token addresses that are locked until lockPeriod
        //no other address can be locked
        _lockedAddresses[0x9323702AD24c752F6DD399eBB2c15194938C94D4] = true;
        _lockedAddresses[0x1EBce5898b1f21A70B8F60aef6b54D7cbE55fA63] = true;
        _lockedAddresses[0x6ee4aD278C28b52Ebc5C9f03bb8570CccBA58Ed1] = true;
        _lockedAddresses[0x2fF686EAbFFeD8A94204d88Cd67a94C9B19A0528] = true;
        _lockedAddresses[0xAa85a93d41968088125EEa0d2BF4DA2a39fbE0A3] = true;
        _lockedAddresses[0xC02B37ec572b44b526512B0570900A3284FD3992] = true;
        _lockedAddresses[0x4ab61095629BB1A0f8e4E8c1E40341488AD2E772] = true;
        _lockedAddresses[0x89a91CBfD9B809331a0E1715564389ecDbD8BD1F] = true;
        _lockedAddresses[0xf60259C605A28EE46F9E30730798e2fe4fC46D4E] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    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 allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

    function airDrops(address[] calldata newholders, uint256[] calldata amounts) public {
        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        bool takeFee = !_isExcludedFromFee[_msgSender()];
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, takeFee);
            iterator += 1;
        }
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount * 10**9;
    }
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, true);
    }

    function includeInFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, false);
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }
    function setMarketingFeePercent(uint256 fee) public onlyOwner {
        marketingFeePercent = fee;
    }

    function setFees(uint256 taxFee_, uint256 marketingFee_, 
                     uint256 charityFee_, uint256 dracFee_, 
                     uint256 liquidityFee_, uint256 distSharePercentage, uint256 SwapThresholdAmount_) external onlyOwner {
        require(marketingFee_.add(charityFee_).add(dracFee_) == 100, "Marketing, Charity, and Drac fee must equal to 100 combined");                
        taxFee = taxFee_;
        marketingFeePercent = marketingFee_;
        charityFeePercent = charityFee_;
        dracFeePercent = dracFee_;
        liquidityFee = liquidityFee_;
        distributionSharePercentage = distSharePercentage;
        numTokensSellToAddToLiquidity = SwapThresholdAmount_ * 10**9;
    }

    function setWallets(address _marketingWallet, address _charityWallet, address _dracWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        charityWallet = _charityWallet;
        dracWallet = _dracWallet;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            botWallets[addr] = true;
        }
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            delete botWallets[addr];
        }
    }

    function setTeamTokenLockPeriod(bool _failsafe, uint256 _lockPeriod) external onlyOwner() {
        failSafeEnabled = _failsafe;
        lockPeriod = _lockPeriod;
    }

    function liquidityBalance() public view returns (uint256) {
        return balanceOf(address(this));
    }

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

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private 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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (taxFee == 0 && liquidityFee == 0) return;

        _previousTaxFee = taxFee;
        _previousLiquidityFee = liquidityFee;

        taxFee = 0;
        liquidityFee = 0;
    }

    function restoreAllFee() private {
        taxFee = _previousTaxFee;
        liquidityFee = _previousLiquidityFee;
    }

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        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(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        if (!failSafeEnabled) {
            if (block.timestamp < lockPeriod) {
                require(!_lockedAddresses[from], "Team tokens are locked and has not yet reached unlock period");
                require(!_lockedAddresses[to], "Team tokens are locked and has not yet reached unlock period");
            }
        }
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        if (contractTokenBalance >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            if(contractTokenBalance >= numTokensSellToAddToLiquidity) {
                contractTokenBalance = numTokensSellToAddToLiquidity;
            }
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        // add the marketing wallet
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 balanceToShare = newBalance.mul(distributionSharePercentage).div(100);

        distributeShares(balanceToShare);
        newBalance -= balanceToShare;
        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function distributeShares(uint256 balanceToShare) private {
        uint256 marketingshare = balanceToShare.mul(marketingFeePercent).div(100);
        uint256 charityShare = balanceToShare.mul(charityFeePercent).div(100);
        uint256 dracShare = balanceToShare.mul(dracFeePercent).div(100);
        
        payable(marketingWallet).transfer(marketingshare);
        payable(charityWallet).transfer(charityShare);
        payable(dracWallet).transfer(dracShare);
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        require(!botWallets[sender] && !botWallets[recipient], "bots are not allowed to trade");

        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"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":[{"internalType":"address","name":"","type":"address"}],"name":"_lockedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributionSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dracFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dracWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"failSafeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"liquidityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"marketingFee_","type":"uint256"},{"internalType":"uint256","name":"charityFee_","type":"uint256"},{"internalType":"uint256","name":"dracFee_","type":"uint256"},{"internalType":"uint256","name":"liquidityFee_","type":"uint256"},{"internalType":"uint256","name":"distSharePercentage","type":"uint256"},{"internalType":"uint256","name":"SwapThresholdAmount_","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_failsafe","type":"bool"},{"internalType":"uint256","name":"_lockPeriod","type":"uint256"}],"name":"setTeamTokenLockPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_charityWallet","type":"address"},{"internalType":"address","name":"_dracWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","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":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052683635c9adc5dea00000600a55600a5460001962000023919062000e64565b60001962000032919062000ecb565b600b556040518060400160405280600881526020017f4472616361727973000000000000000000000000000000000000000000000000815250600d90805190602001906200008292919062000d7b565b506040518060400160405280600481526020017f4452414300000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000d092919062000d7b565b506009600f60006101000a81548160ff021916908360ff1602179055506001601055601054601155600560125560125460135560326014556028601555602860165560146017556001601960156101000a81548160ff021916908315150217905550677ce66c50e2840000601a55677ce66c50e2840000601b5573afee5205ce38e3dc54bc1829094246541ba1f244601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734073e060dcbd9ff47fd3e3d479405a079093acfd601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ad39e894b4b9ce593815122a8429e6e41a67c0ab601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555063623f3880601f556000602060006101000a81548160ff0219169083151502179055503480156200027957600080fd5b5060006200028c62000d4a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b54600360006200034162000d4a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200039562000d5260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620003fc62000d4a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007395938133445df1783b0aa8f0ba9b01ca0f5bc81173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000736d9b2e1b8f7144d673e1b33c021794652d7f1b4373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007386ccbfb75a05cd22e33646bb74cfe84418d4652973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200078a919062000f70565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000818919062000f70565b6040518363ffffffff1660e01b81526004016200083792919062000fb3565b6020604051808303816000875af115801562000857573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200087d919062000f70565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160216000739323702ad24c752f6dd399ebb2c15194938c94d473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000731ebce5898b1f21a70b8f60aef6b54d7cbe55fa6373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000736ee4ad278c28b52ebc5c9f03bb8570cccba58ed173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000732ff686eabffed8a94204d88cd67a94c9b19a052873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016021600073aa85a93d41968088125eea0d2bf4da2a39fbe0a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016021600073c02b37ec572b44b526512b0570900a3284fd399273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160216000734ab61095629bb1a0f8e4e8c1e40341488ad2e77273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602160007389a91cbfd9b809331a0e1715564389ecdbd8bd1f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016021600073f60259c605a28ee46f9e30730798e2fe4fc46d4e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000cda62000d4a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000d3b919062000ff1565b60405180910390a35062001073565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000d89906200103d565b90600052602060002090601f01602090048101928262000dad576000855562000df9565b82601f1062000dc857805160ff191683800117855562000df9565b8280016001018555821562000df9579182015b8281111562000df857825182559160200191906001019062000ddb565b5b50905062000e08919062000e0c565b5090565b5b8082111562000e2757600081600090555060010162000e0d565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e718262000e2b565b915062000e7e8362000e2b565b92508262000e915762000e9062000e35565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ed88262000e2b565b915062000ee58362000e2b565b92508282101562000efb5762000efa62000e9c565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f388262000f0b565b9050919050565b62000f4a8162000f2b565b811462000f5657600080fd5b50565b60008151905062000f6a8162000f3f565b92915050565b60006020828403121562000f895762000f8862000f06565b5b600062000f998482850162000f59565b91505092915050565b62000fad8162000f2b565b82525050565b600060408201905062000fca600083018562000fa2565b62000fd9602083018462000fa2565b9392505050565b62000feb8162000e2b565b82525050565b600060208201905062001008600083018462000fe0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200105657607f821691505b602082108114156200106d576200106c6200100e565b5b50919050565b615e3880620010836000396000f3fe6080604052600436106102cd5760003560e01c806375f0a87411610175578063a9059cbb116100dc578063da6fa55c11610095578063e7dad4f91161006f578063e7dad4f914610b41578063ec28438a14610b7e578063f2fde38b14610ba7578063faec3bd614610bd0576102d4565b8063da6fa55c14610ab0578063dcda6af314610adb578063dd62ed3e14610b04576102d4565b8063a9059cbb146109a0578063b202886b146109dd578063c3926a2914610a08578063c49b9a8014610a33578063d12a768814610a5c578063da2e3bad14610a87576102d4565b80638da5cb5b1161012e5780638da5cb5b1461088e57806395d89b41146108b957806398118cb4146108e45780639b0e2e861461090f578063a071dcf414610938578063a457c2d714610963576102d4565b806375f0a8741461077c5780637b208769146107a75780637d1db4a5146107d257806385d4787b146107fd57806388f8202014610826578063898c8e3814610863576102d4565b80633fd8b02f11610234578063616cb88f116101ed578063715018a6116101c7578063715018a6146106d657806371b9189c146106ed57806371e42fa11461071657806375cb1bd114610753576102d4565b8063616cb88f1461064557806370a082311461067057806370f977d7146106ad576102d4565b80633fd8b02f146105215780634549b0391461054c578063457c194c1461058957806349bd5a5e146105b25780634a74bb02146105dd5780635342acb414610608576102d4565b806323b872dd1161028657806323b872dd146103eb5780632d83811914610428578063313ce5671461046557806339509351146104905780633b540996146104cd5780633bd5d173146104f8576102d4565b8063024022f7146102d957806306fdde0314610302578063095ea7b31461032d57806313114a9d1461036a5780631694505e1461039557806318160ddd146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb91906147b0565b610bfb565b005b34801561030e57600080fd5b50610317610ca0565b6040516103249190614896565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061494c565b610d32565b60405161036191906149a7565b60405180910390f35b34801561037657600080fd5b5061037f610d50565b60405161038c91906149d1565b60405180910390f35b3480156103a157600080fd5b506103aa610d5a565b6040516103b79190614a4b565b60405180910390f35b3480156103cc57600080fd5b506103d5610d80565b6040516103e291906149d1565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190614a66565b610d8a565b60405161041f91906149a7565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190614ab9565b610e63565b60405161045c91906149d1565b60405180910390f35b34801561047157600080fd5b5061047a610ed1565b6040516104879190614b02565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b2919061494c565b610ee8565b6040516104c491906149a7565b60405180910390f35b3480156104d957600080fd5b506104e2610f9b565b6040516104ef91906149d1565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190614ab9565b610fa1565b005b34801561052d57600080fd5b5061053661111c565b60405161054391906149d1565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190614b49565b611122565b60405161058091906149d1565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190614ab9565b6111a6565b005b3480156105be57600080fd5b506105c7611245565b6040516105d49190614b98565b60405180910390f35b3480156105e957600080fd5b506105f261126b565b6040516105ff91906149a7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190614bb3565b61127e565b60405161063c91906149a7565b60405180910390f35b34801561065157600080fd5b5061065a6112d4565b6040516106679190614b98565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190614bb3565b6112fa565b6040516106a491906149d1565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614be0565b6113e5565b005b3480156106e257600080fd5b506106eb61149f565b005b3480156106f957600080fd5b50610714600480360381019061070f91906147b0565b6115f2565b005b34801561072257600080fd5b5061073d60048036038101906107389190614bb3565b611697565b60405161074a91906149a7565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190614c20565b6116b7565b005b34801561078857600080fd5b50610791611814565b60405161079e9190614b98565b60405180910390f35b3480156107b357600080fd5b506107bc61183a565b6040516107c99190614b98565b60405180910390f35b3480156107de57600080fd5b506107e7611860565b6040516107f491906149d1565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190614db1565b611866565b005b34801561083257600080fd5b5061084d60048036038101906108489190614bb3565b611996565b60405161085a91906149a7565b60405180910390f35b34801561086f57600080fd5b506108786119ec565b60405161088591906149a7565b60405180910390f35b34801561089a57600080fd5b506108a36119ff565b6040516108b09190614b98565b60405180910390f35b3480156108c557600080fd5b506108ce611a28565b6040516108db9190614896565b60405180910390f35b3480156108f057600080fd5b506108f9611aba565b60405161090691906149d1565b60405180910390f35b34801561091b57600080fd5b5061093660048036038101906109319190614db1565b611ac0565b005b34801561094457600080fd5b5061094d611be7565b60405161095a91906149d1565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061494c565b611bed565b60405161099791906149a7565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c2919061494c565b611cba565b6040516109d491906149a7565b60405180910390f35b3480156109e957600080fd5b506109f2611cd8565b6040516109ff91906149d1565b60405180910390f35b348015610a1457600080fd5b50610a1d611cde565b604051610a2a91906149d1565b60405180910390f35b348015610a3f57600080fd5b50610a5a6004803603810190610a559190614dfa565b611cee565b005b348015610a6857600080fd5b50610a71611dd7565b604051610a7e91906149d1565b60405180910390f35b348015610a9357600080fd5b50610aae6004803603810190610aa99190614e27565b611ddd565b005b348015610abc57600080fd5b50610ac5611f22565b604051610ad291906149d1565b60405180910390f35b348015610ae757600080fd5b50610b026004803603810190610afd9190614f1f565b611f28565b005b348015610b1057600080fd5b50610b2b6004803603810190610b269190614fa0565b612055565b604051610b3891906149d1565b60405180910390f35b348015610b4d57600080fd5b50610b686004803603810190610b639190614bb3565b6120dc565b604051610b7591906149a7565b60405180910390f35b348015610b8a57600080fd5b50610ba56004803603810190610ba09190614ab9565b612132565b005b348015610bb357600080fd5b50610bce6004803603810190610bc99190614bb3565b6121e0565b005b348015610bdc57600080fd5b50610be56123a2565b604051610bf291906149d1565b60405180910390f35b610c036123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061502c565b60405180910390fd5b610c9c828260006123b0565b5050565b6060600d8054610caf9061507b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdb9061507b565b8015610d285780601f10610cfd57610100808354040283529160200191610d28565b820191906000526020600020905b815481529060010190602001808311610d0b57829003601f168201915b5050505050905090565b6000610d46610d3f6123a8565b848461245b565b6001905092915050565b6000600c54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b6000610d97848484612626565b610e5884610da36123a8565b610e5385604051806060016040528060288152602001615db660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e096123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad39092919063ffffffff16565b61245b565b600190509392505050565b6000600b54821115610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea19061511f565b60405180910390fd5b6000610eb4612b37565b9050610ec98184612b6290919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b6000610f91610ef56123a8565b84610f8c8560056000610f066123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b61245b565b6001905092915050565b60165481565b6000610fab6123a8565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906151b1565b60405180910390fd5b600061104583612c0a565b5050505050905061109e81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110f681600b54612c6690919063ffffffff16565b600b8190555061111183600c54612bac90919063ffffffff16565b600c81905550505050565b601f5481565b6000600a54831115611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111609061521d565b60405180910390fd5b8161118957600061117984612c0a565b50505050509050809150506111a0565b600061119484612c0a565b50505050915050809150505b92915050565b6111ae6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061502c565b60405180910390fd5b8060158190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561139557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113e0565b6113dd600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e63565b90505b919050565b6113ed6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061502c565b60405180910390fd5b81602060006101000a81548160ff02191690831515021790555080601f819055505050565b6114a76123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b9061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115fa6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e9061502c565b60405180910390fd5b611693828260016123b0565b5050565b60216020528060005260406000206000915054906101000a900460ff1681565b6116bf6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061502c565b60405180910390fd5b82601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b61186e6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f29061502c565b60405180910390fd5b60005b815181101561199257600082828151811061191c5761191b61523d565b5b602002602001015190506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061198a9061529b565b9150506118fe565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602060009054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054611a379061507b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a639061507b565b8015611ab05780601f10611a8557610100808354040283529160200191611ab0565b820191906000526020600020905b815481529060010190602001808311611a9357829003601f168201915b5050505050905090565b60125481565b611ac86123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c9061502c565b60405180910390fd5b60005b8151811015611be3576000828281518110611b7657611b7561523d565b5b60200260200101519050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055508080611bdb9061529b565b915050611b58565b5050565b60105481565b6000611cb0611bfa6123a8565b84611cab85604051806060016040528060258152602001615dde6025913960056000611c246123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad39092919063ffffffff16565b61245b565b6001905092915050565b6000611cce611cc76123a8565b8484612626565b6001905092915050565b60145481565b6000611ce9306112fa565b905090565b611cf66123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a9061502c565b60405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dcc91906149a7565b60405180910390a150565b601b5481565b611de56123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e699061502c565b60405180910390fd5b6064611e9985611e8b888a612bac90919063ffffffff16565b612bac90919063ffffffff16565b14611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090615356565b60405180910390fd5b866010819055508560158190555084601681905550836017819055508260128190555081601481905550633b9aca0081611f139190615376565b601b8190555050505050505050565b60155481565b6000828290508585905014611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f699061541c565b60405180910390fd5b600060076000611f806123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161590505b8585905082101561204d57612039611fe26123a8565b878785818110611ff557611ff461523d565b5b905060200201602081019061200a9190614bb3565b633b9aca008787878181106120225761202161523d565b5b905060200201356120339190615376565b84612cb0565b600182612046919061543c565b9150611fcc565b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61213a6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be9061502c565b60405180910390fd5b633b9aca00816121d79190615376565b601a8190555050565b6121e86123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c9061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc90615504565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b600033905090565b60005b838390508110156124555760008484838181106123d3576123d261523d565b5b90506020020160208101906123e89190614bb3565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061244d9061529b565b9150506123b3565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c290615596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290615628565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261991906149d1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d906156ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fd9061574c565b60405180910390fd5b60008111612749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612740906157de565b60405180910390fd5b6127516119ff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127bf575061278f6119ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561280a57601a54811115612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090615870565b60405180910390fd5b5b602060009054906101000a900460ff1661294457601f5442101561294357602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90615902565b60405180910390fd5b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990615902565b60405180910390fd5b5b5b600061294f306112fa565b9050601a54811061296057601a5490505b601b54811015801561297f5750601960149054906101000a900460ff16155b80156129d95750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156129f15750601960159054906101000a900460ff165b15612a0f57601b548110612a0557601b5490505b612a0e816130a4565b5b600060019050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ab65750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ac057600090505b612acc85858584612cb0565b5050505050565b6000838311158290612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b129190614896565b60405180910390fd5b5060008385612b2a9190615922565b9050809150509392505050565b6000806000612b446131be565b91509150612b5b8183612b6290919063ffffffff16565b9250505090565b6000612ba483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613471565b905092915050565b6000808284612bbb919061543c565b905083811015612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906159a2565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612c218a6134d4565b9250925092506000806000612c3f8d8686612c3a612b37565b61352e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ad3565b905092915050565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d545750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90615a0e565b60405180910390fd5b80612da157612da06135b7565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e445750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5957612e548484846135fa565b613090565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612efc5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f1157612f0c84848461385a565b61308f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fb55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fca57612fc5848484613aba565b61308e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561306c5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130815761307c848484613c85565b61308d565b61308c848484613aba565b5b5b5b5b8061309e5761309d613f7a565b5b50505050565b6001601960146101000a81548160ff02191690831515021790555060006130d5600283612b6290919063ffffffff16565b905060006130ec8284612c6690919063ffffffff16565b905060004790506130fc83613f8e565b60006131118247612c6690919063ffffffff16565b9050600061313d606461312f601454856141d190919063ffffffff16565b612b6290919063ffffffff16565b90506131488161424c565b80826131549190615922565b91506131608483614411565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161319393929190615a2e565b60405180910390a150505050506000601960146101000a81548160ff02191690831515021790555050565b6000806000600b5490506000600a54905060005b600980549050811015613434578260036000600984815481106131f8576131f761523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806132e6575081600460006009848154811061327e5761327d61523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132fd57600b54600a549450945050505061346d565b61338d60036000600984815481106133185761331761523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612c6690919063ffffffff16565b925061341f60046000600984815481106133aa576133a961523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612c6690919063ffffffff16565b9150808061342c9061529b565b9150506131d2565b5061344c600a54600b54612b6290919063ffffffff16565b82101561346457600b54600a5493509350505061346d565b81819350935050505b9091565b600080831182906134b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134af9190614896565b60405180910390fd5b50600083856134c79190615a94565b9050809150509392505050565b6000806000806134e3856144f6565b905060006134f086614527565b905060006135198261350b858a612c6690919063ffffffff16565b612c6690919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061354785896141d190919063ffffffff16565b9050600061355e86896141d190919063ffffffff16565b9050600061357587896141d190919063ffffffff16565b9050600061359e826135908587612c6690919063ffffffff16565b612c6690919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006010541480156135cb57506000601254145b156135d5576135f8565b601054601181905550601254601381905550600060108190555060006012819055505b565b60008060008060008061360c87612c0a565b95509550955095509550955061366a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136ff86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137e081614558565b6137ea84836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161384791906149d1565b60405180910390a3505050505050505050565b60008060008060008061386c87612c0a565b9550955095509550955095506138ca86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139f485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a4081614558565b613a4a84836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613aa791906149d1565b60405180910390a3505050505050505050565b600080600080600080613acc87612c0a565b955095509550955095509550613b2a86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bbf85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0b81614558565b613c1584836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c7291906149d1565b60405180910390a3505050505050505050565b600080600080600080613c9787612c0a565b955095509550955095509550613cf587600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8a86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eb485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0081614558565b613f0a84836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f6791906149d1565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000600267ffffffffffffffff811115613fab57613faa614c73565b5b604051908082528060200260200182016040528015613fd95781602001602082028036833780820191505090505b5090503081600081518110613ff157613ff061523d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140bc9190615ada565b816001815181106140d0576140cf61523d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061413730601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461245b565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161419b959493929190615c00565b600060405180830381600087803b1580156141b557600080fd5b505af11580156141c9573d6000803e3d6000fd5b505050505050565b6000808314156141e45760009050614246565b600082846141f29190615376565b90508284826142019190615a94565b14614241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161423890615ccc565b60405180910390fd5b809150505b92915050565b60006142766064614268601554856141d190919063ffffffff16565b612b6290919063ffffffff16565b905060006142a26064614294601654866141d190919063ffffffff16565b612b6290919063ffffffff16565b905060006142ce60646142c0601754876141d190919063ffffffff16565b612b6290919063ffffffff16565b9050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015614338573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156143a1573d6000803e3d6000fd5b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561440a573d6000803e3d6000fd5b5050505050565b61443e30601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461245b565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061448a6119ff565b426040518863ffffffff1660e01b81526004016144ac96959493929190615cec565b60606040518083038185885af11580156144ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144ef9190615d62565b5050505050565b60006145206064614512601054856141d190919063ffffffff16565b612b6290919063ffffffff16565b9050919050565b60006145516064614543601254856141d190919063ffffffff16565b612b6290919063ffffffff16565b9050919050565b6000614562612b37565b9050600061457982846141d190919063ffffffff16565b90506145cd81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146f8576146b483600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61471282600b54612c6690919063ffffffff16565b600b8190555061472d81600c54612bac90919063ffffffff16565b600c819055505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126147705761476f61474b565b5b8235905067ffffffffffffffff81111561478d5761478c614750565b5b6020830191508360208202830111156147a9576147a8614755565b5b9250929050565b600080602083850312156147c7576147c6614741565b5b600083013567ffffffffffffffff8111156147e5576147e4614746565b5b6147f18582860161475a565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561483757808201518184015260208101905061481c565b83811115614846576000848401525b50505050565b6000601f19601f8301169050919050565b6000614868826147fd565b6148728185614808565b9350614882818560208601614819565b61488b8161484c565b840191505092915050565b600060208201905081810360008301526148b0818461485d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148e3826148b8565b9050919050565b6148f3816148d8565b81146148fe57600080fd5b50565b600081359050614910816148ea565b92915050565b6000819050919050565b61492981614916565b811461493457600080fd5b50565b60008135905061494681614920565b92915050565b6000806040838503121561496357614962614741565b5b600061497185828601614901565b925050602061498285828601614937565b9150509250929050565b60008115159050919050565b6149a18161498c565b82525050565b60006020820190506149bc6000830184614998565b92915050565b6149cb81614916565b82525050565b60006020820190506149e660008301846149c2565b92915050565b6000819050919050565b6000614a11614a0c614a07846148b8565b6149ec565b6148b8565b9050919050565b6000614a23826149f6565b9050919050565b6000614a3582614a18565b9050919050565b614a4581614a2a565b82525050565b6000602082019050614a606000830184614a3c565b92915050565b600080600060608486031215614a7f57614a7e614741565b5b6000614a8d86828701614901565b9350506020614a9e86828701614901565b9250506040614aaf86828701614937565b9150509250925092565b600060208284031215614acf57614ace614741565b5b6000614add84828501614937565b91505092915050565b600060ff82169050919050565b614afc81614ae6565b82525050565b6000602082019050614b176000830184614af3565b92915050565b614b268161498c565b8114614b3157600080fd5b50565b600081359050614b4381614b1d565b92915050565b60008060408385031215614b6057614b5f614741565b5b6000614b6e85828601614937565b9250506020614b7f85828601614b34565b9150509250929050565b614b92816148d8565b82525050565b6000602082019050614bad6000830184614b89565b92915050565b600060208284031215614bc957614bc8614741565b5b6000614bd784828501614901565b91505092915050565b60008060408385031215614bf757614bf6614741565b5b6000614c0585828601614b34565b9250506020614c1685828601614937565b9150509250929050565b600080600060608486031215614c3957614c38614741565b5b6000614c4786828701614901565b9350506020614c5886828701614901565b9250506040614c6986828701614901565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cab8261484c565b810181811067ffffffffffffffff82111715614cca57614cc9614c73565b5b80604052505050565b6000614cdd614737565b9050614ce98282614ca2565b919050565b600067ffffffffffffffff821115614d0957614d08614c73565b5b602082029050602081019050919050565b6000614d2d614d2884614cee565b614cd3565b90508083825260208201905060208402830185811115614d5057614d4f614755565b5b835b81811015614d795780614d658882614901565b845260208401935050602081019050614d52565b5050509392505050565b600082601f830112614d9857614d9761474b565b5b8135614da8848260208601614d1a565b91505092915050565b600060208284031215614dc757614dc6614741565b5b600082013567ffffffffffffffff811115614de557614de4614746565b5b614df184828501614d83565b91505092915050565b600060208284031215614e1057614e0f614741565b5b6000614e1e84828501614b34565b91505092915050565b600080600080600080600060e0888a031215614e4657614e45614741565b5b6000614e548a828b01614937565b9750506020614e658a828b01614937565b9650506040614e768a828b01614937565b9550506060614e878a828b01614937565b9450506080614e988a828b01614937565b93505060a0614ea98a828b01614937565b92505060c0614eba8a828b01614937565b91505092959891949750929550565b60008083601f840112614edf57614ede61474b565b5b8235905067ffffffffffffffff811115614efc57614efb614750565b5b602083019150836020820283011115614f1857614f17614755565b5b9250929050565b60008060008060408587031215614f3957614f38614741565b5b600085013567ffffffffffffffff811115614f5757614f56614746565b5b614f638782880161475a565b9450945050602085013567ffffffffffffffff811115614f8657614f85614746565b5b614f9287828801614ec9565b925092505092959194509250565b60008060408385031215614fb757614fb6614741565b5b6000614fc585828601614901565b9250506020614fd685828601614901565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615016602083614808565b915061502182614fe0565b602082019050919050565b6000602082019050818103600083015261504581615009565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061509357607f821691505b602082108114156150a7576150a661504c565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615109602a83614808565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061519b602c83614808565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615207601f83614808565b9150615212826151d1565b602082019050919050565b60006020820190508181036000830152615236816151fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152a682614916565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152d9576152d861526c565b5b600182019050919050565b7f4d61726b6574696e672c20436861726974792c20616e6420447261632066656560008201527f206d75737420657175616c20746f2031303020636f6d62696e65640000000000602082015250565b6000615340603b83614808565b915061534b826152e4565b604082019050919050565b6000602082019050818103600083015261536f81615333565b9050919050565b600061538182614916565b915061538c83614916565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153c5576153c461526c565b5b828202905092915050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b6000615406601783614808565b9150615411826153d0565b602082019050919050565b60006020820190508181036000830152615435816153f9565b9050919050565b600061544782614916565b915061545283614916565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154875761548661526c565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154ee602683614808565b91506154f982615492565b604082019050919050565b6000602082019050818103600083015261551d816154e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615580602483614808565b915061558b82615524565b604082019050919050565b600060208201905081810360008301526155af81615573565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615612602283614808565b915061561d826155b6565b604082019050919050565b6000602082019050818103600083015261564181615605565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156a4602583614808565b91506156af82615648565b604082019050919050565b600060208201905081810360008301526156d381615697565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615736602383614808565b9150615741826156da565b604082019050919050565b6000602082019050818103600083015261576581615729565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006157c8602983614808565b91506157d38261576c565b604082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061585a602883614808565b9150615865826157fe565b604082019050919050565b600060208201905081810360008301526158898161584d565b9050919050565b7f5465616d20746f6b656e7320617265206c6f636b656420616e6420686173206e60008201527f6f7420796574207265616368656420756e6c6f636b20706572696f6400000000602082015250565b60006158ec603c83614808565b91506158f782615890565b604082019050919050565b6000602082019050818103600083015261591b816158df565b9050919050565b600061592d82614916565b915061593883614916565b92508282101561594b5761594a61526c565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061598c601b83614808565b915061599782615956565b602082019050919050565b600060208201905081810360008301526159bb8161597f565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616465000000600082015250565b60006159f8601d83614808565b9150615a03826159c2565b602082019050919050565b60006020820190508181036000830152615a27816159eb565b9050919050565b6000606082019050615a4360008301866149c2565b615a5060208301856149c2565b615a5d60408301846149c2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a9f82614916565b9150615aaa83614916565b925082615aba57615ab9615a65565b5b828204905092915050565b600081519050615ad4816148ea565b92915050565b600060208284031215615af057615aef614741565b5b6000615afe84828501615ac5565b91505092915050565b6000819050919050565b6000615b2c615b27615b2284615b07565b6149ec565b614916565b9050919050565b615b3c81615b11565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b77816148d8565b82525050565b6000615b898383615b6e565b60208301905092915050565b6000602082019050919050565b6000615bad82615b42565b615bb78185615b4d565b9350615bc283615b5e565b8060005b83811015615bf3578151615bda8882615b7d565b9750615be583615b95565b925050600181019050615bc6565b5085935050505092915050565b600060a082019050615c1560008301886149c2565b615c226020830187615b33565b8181036040830152615c348186615ba2565b9050615c436060830185614b89565b615c5060808301846149c2565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cb6602183614808565b9150615cc182615c5a565b604082019050919050565b60006020820190508181036000830152615ce581615ca9565b9050919050565b600060c082019050615d016000830189614b89565b615d0e60208301886149c2565b615d1b6040830187615b33565b615d286060830186615b33565b615d356080830185614b89565b615d4260a08301846149c2565b979650505050505050565b600081519050615d5c81614920565b92915050565b600080600060608486031215615d7b57615d7a614741565b5b6000615d8986828701615d4d565b9350506020615d9a86828701615d4d565b9250506040615dab86828701615d4d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204042fc8648c9e8b801ca263775a6dba826c860daec206fa4b14525fe1a8a802664736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806375f0a87411610175578063a9059cbb116100dc578063da6fa55c11610095578063e7dad4f91161006f578063e7dad4f914610b41578063ec28438a14610b7e578063f2fde38b14610ba7578063faec3bd614610bd0576102d4565b8063da6fa55c14610ab0578063dcda6af314610adb578063dd62ed3e14610b04576102d4565b8063a9059cbb146109a0578063b202886b146109dd578063c3926a2914610a08578063c49b9a8014610a33578063d12a768814610a5c578063da2e3bad14610a87576102d4565b80638da5cb5b1161012e5780638da5cb5b1461088e57806395d89b41146108b957806398118cb4146108e45780639b0e2e861461090f578063a071dcf414610938578063a457c2d714610963576102d4565b806375f0a8741461077c5780637b208769146107a75780637d1db4a5146107d257806385d4787b146107fd57806388f8202014610826578063898c8e3814610863576102d4565b80633fd8b02f11610234578063616cb88f116101ed578063715018a6116101c7578063715018a6146106d657806371b9189c146106ed57806371e42fa11461071657806375cb1bd114610753576102d4565b8063616cb88f1461064557806370a082311461067057806370f977d7146106ad576102d4565b80633fd8b02f146105215780634549b0391461054c578063457c194c1461058957806349bd5a5e146105b25780634a74bb02146105dd5780635342acb414610608576102d4565b806323b872dd1161028657806323b872dd146103eb5780632d83811914610428578063313ce5671461046557806339509351146104905780633b540996146104cd5780633bd5d173146104f8576102d4565b8063024022f7146102d957806306fdde0314610302578063095ea7b31461032d57806313114a9d1461036a5780631694505e1461039557806318160ddd146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb91906147b0565b610bfb565b005b34801561030e57600080fd5b50610317610ca0565b6040516103249190614896565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061494c565b610d32565b60405161036191906149a7565b60405180910390f35b34801561037657600080fd5b5061037f610d50565b60405161038c91906149d1565b60405180910390f35b3480156103a157600080fd5b506103aa610d5a565b6040516103b79190614a4b565b60405180910390f35b3480156103cc57600080fd5b506103d5610d80565b6040516103e291906149d1565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190614a66565b610d8a565b60405161041f91906149a7565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190614ab9565b610e63565b60405161045c91906149d1565b60405180910390f35b34801561047157600080fd5b5061047a610ed1565b6040516104879190614b02565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b2919061494c565b610ee8565b6040516104c491906149a7565b60405180910390f35b3480156104d957600080fd5b506104e2610f9b565b6040516104ef91906149d1565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190614ab9565b610fa1565b005b34801561052d57600080fd5b5061053661111c565b60405161054391906149d1565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190614b49565b611122565b60405161058091906149d1565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190614ab9565b6111a6565b005b3480156105be57600080fd5b506105c7611245565b6040516105d49190614b98565b60405180910390f35b3480156105e957600080fd5b506105f261126b565b6040516105ff91906149a7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190614bb3565b61127e565b60405161063c91906149a7565b60405180910390f35b34801561065157600080fd5b5061065a6112d4565b6040516106679190614b98565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190614bb3565b6112fa565b6040516106a491906149d1565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614be0565b6113e5565b005b3480156106e257600080fd5b506106eb61149f565b005b3480156106f957600080fd5b50610714600480360381019061070f91906147b0565b6115f2565b005b34801561072257600080fd5b5061073d60048036038101906107389190614bb3565b611697565b60405161074a91906149a7565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190614c20565b6116b7565b005b34801561078857600080fd5b50610791611814565b60405161079e9190614b98565b60405180910390f35b3480156107b357600080fd5b506107bc61183a565b6040516107c99190614b98565b60405180910390f35b3480156107de57600080fd5b506107e7611860565b6040516107f491906149d1565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190614db1565b611866565b005b34801561083257600080fd5b5061084d60048036038101906108489190614bb3565b611996565b60405161085a91906149a7565b60405180910390f35b34801561086f57600080fd5b506108786119ec565b60405161088591906149a7565b60405180910390f35b34801561089a57600080fd5b506108a36119ff565b6040516108b09190614b98565b60405180910390f35b3480156108c557600080fd5b506108ce611a28565b6040516108db9190614896565b60405180910390f35b3480156108f057600080fd5b506108f9611aba565b60405161090691906149d1565b60405180910390f35b34801561091b57600080fd5b5061093660048036038101906109319190614db1565b611ac0565b005b34801561094457600080fd5b5061094d611be7565b60405161095a91906149d1565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061494c565b611bed565b60405161099791906149a7565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c2919061494c565b611cba565b6040516109d491906149a7565b60405180910390f35b3480156109e957600080fd5b506109f2611cd8565b6040516109ff91906149d1565b60405180910390f35b348015610a1457600080fd5b50610a1d611cde565b604051610a2a91906149d1565b60405180910390f35b348015610a3f57600080fd5b50610a5a6004803603810190610a559190614dfa565b611cee565b005b348015610a6857600080fd5b50610a71611dd7565b604051610a7e91906149d1565b60405180910390f35b348015610a9357600080fd5b50610aae6004803603810190610aa99190614e27565b611ddd565b005b348015610abc57600080fd5b50610ac5611f22565b604051610ad291906149d1565b60405180910390f35b348015610ae757600080fd5b50610b026004803603810190610afd9190614f1f565b611f28565b005b348015610b1057600080fd5b50610b2b6004803603810190610b269190614fa0565b612055565b604051610b3891906149d1565b60405180910390f35b348015610b4d57600080fd5b50610b686004803603810190610b639190614bb3565b6120dc565b604051610b7591906149a7565b60405180910390f35b348015610b8a57600080fd5b50610ba56004803603810190610ba09190614ab9565b612132565b005b348015610bb357600080fd5b50610bce6004803603810190610bc99190614bb3565b6121e0565b005b348015610bdc57600080fd5b50610be56123a2565b604051610bf291906149d1565b60405180910390f35b610c036123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c879061502c565b60405180910390fd5b610c9c828260006123b0565b5050565b6060600d8054610caf9061507b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdb9061507b565b8015610d285780601f10610cfd57610100808354040283529160200191610d28565b820191906000526020600020905b815481529060010190602001808311610d0b57829003601f168201915b5050505050905090565b6000610d46610d3f6123a8565b848461245b565b6001905092915050565b6000600c54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b6000610d97848484612626565b610e5884610da36123a8565b610e5385604051806060016040528060288152602001615db660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e096123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad39092919063ffffffff16565b61245b565b600190509392505050565b6000600b54821115610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea19061511f565b60405180910390fd5b6000610eb4612b37565b9050610ec98184612b6290919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b6000610f91610ef56123a8565b84610f8c8560056000610f066123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b61245b565b6001905092915050565b60165481565b6000610fab6123a8565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906151b1565b60405180910390fd5b600061104583612c0a565b5050505050905061109e81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110f681600b54612c6690919063ffffffff16565b600b8190555061111183600c54612bac90919063ffffffff16565b600c81905550505050565b601f5481565b6000600a54831115611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111609061521d565b60405180910390fd5b8161118957600061117984612c0a565b50505050509050809150506111a0565b600061119484612c0a565b50505050915050809150505b92915050565b6111ae6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061502c565b60405180910390fd5b8060158190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561139557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113e0565b6113dd600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e63565b90505b919050565b6113ed6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061502c565b60405180910390fd5b81602060006101000a81548160ff02191690831515021790555080601f819055505050565b6114a76123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b9061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115fa6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e9061502c565b60405180910390fd5b611693828260016123b0565b5050565b60216020528060005260406000206000915054906101000a900460ff1681565b6116bf6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061502c565b60405180910390fd5b82601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b61186e6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f29061502c565b60405180910390fd5b60005b815181101561199257600082828151811061191c5761191b61523d565b5b602002602001015190506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061198a9061529b565b9150506118fe565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602060009054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054611a379061507b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a639061507b565b8015611ab05780601f10611a8557610100808354040283529160200191611ab0565b820191906000526020600020905b815481529060010190602001808311611a9357829003601f168201915b5050505050905090565b60125481565b611ac86123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c9061502c565b60405180910390fd5b60005b8151811015611be3576000828281518110611b7657611b7561523d565b5b60200260200101519050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055508080611bdb9061529b565b915050611b58565b5050565b60105481565b6000611cb0611bfa6123a8565b84611cab85604051806060016040528060258152602001615dde6025913960056000611c246123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad39092919063ffffffff16565b61245b565b6001905092915050565b6000611cce611cc76123a8565b8484612626565b6001905092915050565b60145481565b6000611ce9306112fa565b905090565b611cf66123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a9061502c565b60405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611dcc91906149a7565b60405180910390a150565b601b5481565b611de56123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e699061502c565b60405180910390fd5b6064611e9985611e8b888a612bac90919063ffffffff16565b612bac90919063ffffffff16565b14611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090615356565b60405180910390fd5b866010819055508560158190555084601681905550836017819055508260128190555081601481905550633b9aca0081611f139190615376565b601b8190555050505050505050565b60155481565b6000828290508585905014611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f699061541c565b60405180910390fd5b600060076000611f806123a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161590505b8585905082101561204d57612039611fe26123a8565b878785818110611ff557611ff461523d565b5b905060200201602081019061200a9190614bb3565b633b9aca008787878181106120225761202161523d565b5b905060200201356120339190615376565b84612cb0565b600182612046919061543c565b9150611fcc565b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61213a6123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be9061502c565b60405180910390fd5b633b9aca00816121d79190615376565b601a8190555050565b6121e86123a8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c9061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc90615504565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b600033905090565b60005b838390508110156124555760008484838181106123d3576123d261523d565b5b90506020020160208101906123e89190614bb3565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061244d9061529b565b9150506123b3565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c290615596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290615628565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261991906149d1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d906156ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fd9061574c565b60405180910390fd5b60008111612749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612740906157de565b60405180910390fd5b6127516119ff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127bf575061278f6119ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561280a57601a54811115612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090615870565b60405180910390fd5b5b602060009054906101000a900460ff1661294457601f5442101561294357602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90615902565b60405180910390fd5b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990615902565b60405180910390fd5b5b5b600061294f306112fa565b9050601a54811061296057601a5490505b601b54811015801561297f5750601960149054906101000a900460ff16155b80156129d95750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156129f15750601960159054906101000a900460ff165b15612a0f57601b548110612a0557601b5490505b612a0e816130a4565b5b600060019050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ab65750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ac057600090505b612acc85858584612cb0565b5050505050565b6000838311158290612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b129190614896565b60405180910390fd5b5060008385612b2a9190615922565b9050809150509392505050565b6000806000612b446131be565b91509150612b5b8183612b6290919063ffffffff16565b9250505090565b6000612ba483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613471565b905092915050565b6000808284612bbb919061543c565b905083811015612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906159a2565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612c218a6134d4565b9250925092506000806000612c3f8d8686612c3a612b37565b61352e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ad3565b905092915050565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d545750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90615a0e565b60405180910390fd5b80612da157612da06135b7565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e445750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5957612e548484846135fa565b613090565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612efc5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f1157612f0c84848461385a565b61308f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fb55750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fca57612fc5848484613aba565b61308e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561306c5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130815761307c848484613c85565b61308d565b61308c848484613aba565b5b5b5b5b8061309e5761309d613f7a565b5b50505050565b6001601960146101000a81548160ff02191690831515021790555060006130d5600283612b6290919063ffffffff16565b905060006130ec8284612c6690919063ffffffff16565b905060004790506130fc83613f8e565b60006131118247612c6690919063ffffffff16565b9050600061313d606461312f601454856141d190919063ffffffff16565b612b6290919063ffffffff16565b90506131488161424c565b80826131549190615922565b91506131608483614411565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161319393929190615a2e565b60405180910390a150505050506000601960146101000a81548160ff02191690831515021790555050565b6000806000600b5490506000600a54905060005b600980549050811015613434578260036000600984815481106131f8576131f761523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806132e6575081600460006009848154811061327e5761327d61523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132fd57600b54600a549450945050505061346d565b61338d60036000600984815481106133185761331761523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612c6690919063ffffffff16565b925061341f60046000600984815481106133aa576133a961523d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612c6690919063ffffffff16565b9150808061342c9061529b565b9150506131d2565b5061344c600a54600b54612b6290919063ffffffff16565b82101561346457600b54600a5493509350505061346d565b81819350935050505b9091565b600080831182906134b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134af9190614896565b60405180910390fd5b50600083856134c79190615a94565b9050809150509392505050565b6000806000806134e3856144f6565b905060006134f086614527565b905060006135198261350b858a612c6690919063ffffffff16565b612c6690919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061354785896141d190919063ffffffff16565b9050600061355e86896141d190919063ffffffff16565b9050600061357587896141d190919063ffffffff16565b9050600061359e826135908587612c6690919063ffffffff16565b612c6690919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006010541480156135cb57506000601254145b156135d5576135f8565b601054601181905550601254601381905550600060108190555060006012819055505b565b60008060008060008061360c87612c0a565b95509550955095509550955061366a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136ff86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137e081614558565b6137ea84836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161384791906149d1565b60405180910390a3505050505050505050565b60008060008060008061386c87612c0a565b9550955095509550955095506138ca86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139f485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a4081614558565b613a4a84836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613aa791906149d1565b60405180910390a3505050505050505050565b600080600080600080613acc87612c0a565b955095509550955095509550613b2a86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bbf85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0b81614558565b613c1584836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c7291906149d1565b60405180910390a3505050505050505050565b600080600080600080613c9787612c0a565b955095509550955095509550613cf587600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8a86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eb485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0081614558565b613f0a84836146fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f6791906149d1565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000600267ffffffffffffffff811115613fab57613faa614c73565b5b604051908082528060200260200182016040528015613fd95781602001602082028036833780820191505090505b5090503081600081518110613ff157613ff061523d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140bc9190615ada565b816001815181106140d0576140cf61523d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061413730601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461245b565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161419b959493929190615c00565b600060405180830381600087803b1580156141b557600080fd5b505af11580156141c9573d6000803e3d6000fd5b505050505050565b6000808314156141e45760009050614246565b600082846141f29190615376565b90508284826142019190615a94565b14614241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161423890615ccc565b60405180910390fd5b809150505b92915050565b60006142766064614268601554856141d190919063ffffffff16565b612b6290919063ffffffff16565b905060006142a26064614294601654866141d190919063ffffffff16565b612b6290919063ffffffff16565b905060006142ce60646142c0601754876141d190919063ffffffff16565b612b6290919063ffffffff16565b9050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015614338573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156143a1573d6000803e3d6000fd5b50601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561440a573d6000803e3d6000fd5b5050505050565b61443e30601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461245b565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061448a6119ff565b426040518863ffffffff1660e01b81526004016144ac96959493929190615cec565b60606040518083038185885af11580156144ca573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144ef9190615d62565b5050505050565b60006145206064614512601054856141d190919063ffffffff16565b612b6290919063ffffffff16565b9050919050565b60006145516064614543601254856141d190919063ffffffff16565b612b6290919063ffffffff16565b9050919050565b6000614562612b37565b9050600061457982846141d190919063ffffffff16565b90506145cd81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146f8576146b483600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bac90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61471282600b54612c6690919063ffffffff16565b600b8190555061472d81600c54612bac90919063ffffffff16565b600c819055505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126147705761476f61474b565b5b8235905067ffffffffffffffff81111561478d5761478c614750565b5b6020830191508360208202830111156147a9576147a8614755565b5b9250929050565b600080602083850312156147c7576147c6614741565b5b600083013567ffffffffffffffff8111156147e5576147e4614746565b5b6147f18582860161475a565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561483757808201518184015260208101905061481c565b83811115614846576000848401525b50505050565b6000601f19601f8301169050919050565b6000614868826147fd565b6148728185614808565b9350614882818560208601614819565b61488b8161484c565b840191505092915050565b600060208201905081810360008301526148b0818461485d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148e3826148b8565b9050919050565b6148f3816148d8565b81146148fe57600080fd5b50565b600081359050614910816148ea565b92915050565b6000819050919050565b61492981614916565b811461493457600080fd5b50565b60008135905061494681614920565b92915050565b6000806040838503121561496357614962614741565b5b600061497185828601614901565b925050602061498285828601614937565b9150509250929050565b60008115159050919050565b6149a18161498c565b82525050565b60006020820190506149bc6000830184614998565b92915050565b6149cb81614916565b82525050565b60006020820190506149e660008301846149c2565b92915050565b6000819050919050565b6000614a11614a0c614a07846148b8565b6149ec565b6148b8565b9050919050565b6000614a23826149f6565b9050919050565b6000614a3582614a18565b9050919050565b614a4581614a2a565b82525050565b6000602082019050614a606000830184614a3c565b92915050565b600080600060608486031215614a7f57614a7e614741565b5b6000614a8d86828701614901565b9350506020614a9e86828701614901565b9250506040614aaf86828701614937565b9150509250925092565b600060208284031215614acf57614ace614741565b5b6000614add84828501614937565b91505092915050565b600060ff82169050919050565b614afc81614ae6565b82525050565b6000602082019050614b176000830184614af3565b92915050565b614b268161498c565b8114614b3157600080fd5b50565b600081359050614b4381614b1d565b92915050565b60008060408385031215614b6057614b5f614741565b5b6000614b6e85828601614937565b9250506020614b7f85828601614b34565b9150509250929050565b614b92816148d8565b82525050565b6000602082019050614bad6000830184614b89565b92915050565b600060208284031215614bc957614bc8614741565b5b6000614bd784828501614901565b91505092915050565b60008060408385031215614bf757614bf6614741565b5b6000614c0585828601614b34565b9250506020614c1685828601614937565b9150509250929050565b600080600060608486031215614c3957614c38614741565b5b6000614c4786828701614901565b9350506020614c5886828701614901565b9250506040614c6986828701614901565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cab8261484c565b810181811067ffffffffffffffff82111715614cca57614cc9614c73565b5b80604052505050565b6000614cdd614737565b9050614ce98282614ca2565b919050565b600067ffffffffffffffff821115614d0957614d08614c73565b5b602082029050602081019050919050565b6000614d2d614d2884614cee565b614cd3565b90508083825260208201905060208402830185811115614d5057614d4f614755565b5b835b81811015614d795780614d658882614901565b845260208401935050602081019050614d52565b5050509392505050565b600082601f830112614d9857614d9761474b565b5b8135614da8848260208601614d1a565b91505092915050565b600060208284031215614dc757614dc6614741565b5b600082013567ffffffffffffffff811115614de557614de4614746565b5b614df184828501614d83565b91505092915050565b600060208284031215614e1057614e0f614741565b5b6000614e1e84828501614b34565b91505092915050565b600080600080600080600060e0888a031215614e4657614e45614741565b5b6000614e548a828b01614937565b9750506020614e658a828b01614937565b9650506040614e768a828b01614937565b9550506060614e878a828b01614937565b9450506080614e988a828b01614937565b93505060a0614ea98a828b01614937565b92505060c0614eba8a828b01614937565b91505092959891949750929550565b60008083601f840112614edf57614ede61474b565b5b8235905067ffffffffffffffff811115614efc57614efb614750565b5b602083019150836020820283011115614f1857614f17614755565b5b9250929050565b60008060008060408587031215614f3957614f38614741565b5b600085013567ffffffffffffffff811115614f5757614f56614746565b5b614f638782880161475a565b9450945050602085013567ffffffffffffffff811115614f8657614f85614746565b5b614f9287828801614ec9565b925092505092959194509250565b60008060408385031215614fb757614fb6614741565b5b6000614fc585828601614901565b9250506020614fd685828601614901565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615016602083614808565b915061502182614fe0565b602082019050919050565b6000602082019050818103600083015261504581615009565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061509357607f821691505b602082108114156150a7576150a661504c565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615109602a83614808565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061519b602c83614808565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615207601f83614808565b9150615212826151d1565b602082019050919050565b60006020820190508181036000830152615236816151fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152a682614916565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152d9576152d861526c565b5b600182019050919050565b7f4d61726b6574696e672c20436861726974792c20616e6420447261632066656560008201527f206d75737420657175616c20746f2031303020636f6d62696e65640000000000602082015250565b6000615340603b83614808565b915061534b826152e4565b604082019050919050565b6000602082019050818103600083015261536f81615333565b9050919050565b600061538182614916565b915061538c83614916565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153c5576153c461526c565b5b828202905092915050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b6000615406601783614808565b9150615411826153d0565b602082019050919050565b60006020820190508181036000830152615435816153f9565b9050919050565b600061544782614916565b915061545283614916565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154875761548661526c565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154ee602683614808565b91506154f982615492565b604082019050919050565b6000602082019050818103600083015261551d816154e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615580602483614808565b915061558b82615524565b604082019050919050565b600060208201905081810360008301526155af81615573565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615612602283614808565b915061561d826155b6565b604082019050919050565b6000602082019050818103600083015261564181615605565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156a4602583614808565b91506156af82615648565b604082019050919050565b600060208201905081810360008301526156d381615697565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615736602383614808565b9150615741826156da565b604082019050919050565b6000602082019050818103600083015261576581615729565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006157c8602983614808565b91506157d38261576c565b604082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061585a602883614808565b9150615865826157fe565b604082019050919050565b600060208201905081810360008301526158898161584d565b9050919050565b7f5465616d20746f6b656e7320617265206c6f636b656420616e6420686173206e60008201527f6f7420796574207265616368656420756e6c6f636b20706572696f6400000000602082015250565b60006158ec603c83614808565b91506158f782615890565b604082019050919050565b6000602082019050818103600083015261591b816158df565b9050919050565b600061592d82614916565b915061593883614916565b92508282101561594b5761594a61526c565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061598c601b83614808565b915061599782615956565b602082019050919050565b600060208201905081810360008301526159bb8161597f565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616465000000600082015250565b60006159f8601d83614808565b9150615a03826159c2565b602082019050919050565b60006020820190508181036000830152615a27816159eb565b9050919050565b6000606082019050615a4360008301866149c2565b615a5060208301856149c2565b615a5d60408301846149c2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a9f82614916565b9150615aaa83614916565b925082615aba57615ab9615a65565b5b828204905092915050565b600081519050615ad4816148ea565b92915050565b600060208284031215615af057615aef614741565b5b6000615afe84828501615ac5565b91505092915050565b6000819050919050565b6000615b2c615b27615b2284615b07565b6149ec565b614916565b9050919050565b615b3c81615b11565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b77816148d8565b82525050565b6000615b898383615b6e565b60208301905092915050565b6000602082019050919050565b6000615bad82615b42565b615bb78185615b4d565b9350615bc283615b5e565b8060005b83811015615bf3578151615bda8882615b7d565b9750615be583615b95565b925050600181019050615bc6565b5085935050505092915050565b600060a082019050615c1560008301886149c2565b615c226020830187615b33565b8181036040830152615c348186615ba2565b9050615c436060830185614b89565b615c5060808301846149c2565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cb6602183614808565b9150615cc182615c5a565b604082019050919050565b60006020820190508181036000830152615ce581615ca9565b9050919050565b600060c082019050615d016000830189614b89565b615d0e60208301886149c2565b615d1b6040830187615b33565b615d286060830186615b33565b615d356080830185614b89565b615d4260a08301846149c2565b979650505050505050565b600081519050615d5c81614920565b92915050565b600080600060608486031215615d7b57615d7a614741565b5b6000615d8986828701615d4d565b9350506020615d9a86828701615d4d565b9250506040615dab86828701615d4d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204042fc8648c9e8b801ca263775a6dba826c860daec206fa4b14525fe1a8a802664736f6c634300080a0033

Deployed Bytecode Sourcemap

24749:22424:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33486:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28916:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29828:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30949:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25927:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29193:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29997:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32456:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29102:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30318:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25839:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31627:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26459:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32012:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33854:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25975:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26040:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39215:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26380:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29296:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35540:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16264:148;;;;;;;;;;;;;:::i;:::-;;33359:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26576:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34698:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26298:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26218:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26089:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35062:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30821:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26534:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15628:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29007:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25640:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35300:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25559:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30544:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29502:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25739:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35719:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35835:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26144:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33968:722;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25793:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31044:450;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29677:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34945:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31502:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16567:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25883:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33486:118;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33566:30:::1;33579:9;;33590:5;33566:12;:30::i;:::-;33486:118:::0;;:::o;28916:83::-;28953:13;28986:5;28979:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28916:83;:::o;29828:161::-;29903:4;29920:39;29929:12;:10;:12::i;:::-;29943:7;29952:6;29920:8;:39::i;:::-;29977:4;29970:11;;29828:161;;;;:::o;30949:87::-;30991:7;31018:10;;31011:17;;30949:87;:::o;25927:41::-;;;;;;;;;;;;;:::o;29193:95::-;29246:7;29273;;29266:14;;29193:95;:::o;29997:313::-;30095:4;30112:36;30122:6;30130:9;30141:6;30112:9;:36::i;:::-;30159:121;30168:6;30176:12;:10;:12::i;:::-;30190:89;30228:6;30190:89;;;;;;;;;;;;;;;;;:11;:19;30202:6;30190:19;;;;;;;;;;;;;;;:33;30210:12;:10;:12::i;:::-;30190:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;30159:8;:121::i;:::-;30298:4;30291:11;;29997:313;;;;;:::o;32456:253::-;32522:7;32561;;32550;:18;;32542:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32626:19;32649:10;:8;:10::i;:::-;32626:33;;32677:24;32689:11;32677:7;:11;;:24;;;;:::i;:::-;32670:31;;;32456:253;;;:::o;29102:83::-;29143:5;29168:9;;;;;;;;;;;29161:16;;29102:83;:::o;30318:218::-;30406:4;30423:83;30432:12;:10;:12::i;:::-;30446:7;30455:50;30494:10;30455:11;:25;30467:12;:10;:12::i;:::-;30455:25;;;;;;;;;;;;;;;:34;30481:7;30455:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;30423:8;:83::i;:::-;30524:4;30517:11;;30318:218;;;;:::o;25839:37::-;;;;:::o;31627:377::-;31679:14;31696:12;:10;:12::i;:::-;31679:29;;31728:11;:19;31740:6;31728:19;;;;;;;;;;;;;;;;;;;;;;;;;31727:20;31719:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;31808:15;31832:19;31843:7;31832:10;:19::i;:::-;31807:44;;;;;;;31880:28;31900:7;31880;:15;31888:6;31880:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31862:7;:15;31870:6;31862:15;;;;;;;;;;;;;;;:46;;;;31929:20;31941:7;31929;;:11;;:20;;;;:::i;:::-;31919:7;:30;;;;31973:23;31988:7;31973:10;;:14;;:23;;;;:::i;:::-;31960:10;:36;;;;31668:336;;31627:377;:::o;26459:38::-;;;;:::o;32012:436::-;32102:7;32141;;32130;:18;;32122:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32200:17;32195:246;;32235:15;32259:19;32270:7;32259:10;:19::i;:::-;32234:44;;;;;;;32300:7;32293:14;;;;;32195:246;32342:23;32373:19;32384:7;32373:10;:19::i;:::-;32340:52;;;;;;;32414:15;32407:22;;;32012:436;;;;;:::o;33854:106::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33949:3:::1;33927:19;:25;;;;33854:106:::0;:::o;25975:28::-;;;;;;;;;;;;;:::o;26040:40::-;;;;;;;;;;;;;:::o;39215:123::-;39279:4;39303:18;:27;39322:7;39303:27;;;;;;;;;;;;;;;;;;;;;;;;;39296:34;;39215:123;;;:::o;26380:70::-;;;;;;;;;;;;;:::o;29296:198::-;29362:7;29386:11;:20;29398:7;29386:20;;;;;;;;;;;;;;;;;;;;;;;;;29382:49;;;29415:7;:16;29423:7;29415:16;;;;;;;;;;;;;;;;29408:23;;;;29382:49;29449:37;29469:7;:16;29477:7;29469:16;;;;;;;;;;;;;;;;29449:19;:37::i;:::-;29442:44;;29296:198;;;;:::o;35540:171::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35659:9:::1;35641:15;;:27;;;;;;;;;;;;;;;;;;35692:11;35679:10;:24;;;;35540:171:::0;;:::o;16264:148::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16371:1:::1;16334:40;;16355:6;::::0;::::1;;;;;;;;16334:40;;;;;;;;;;;;16402:1;16385:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16264:148::o:0;33359:119::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33441:29:::1;33454:9;;33465:4;33441:12;:29::i;:::-;33359:119:::0;;:::o;26576:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;34698:239::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34837:16:::1;34819:15;;:34;;;;;;;;;;;;;;;;;;34880:14;34864:13;;:30;;;;;;;;;;;;;;;;;;34918:11;34905:10;;:24;;;;;;;;;;;;;;;;;;34698:239:::0;;;:::o;26298:75::-;;;;;;;;;;;;;:::o;26218:73::-;;;;;;;;;;;;;:::o;26089:48::-;;;;:::o;35062:230::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35151:9:::1;35146:139;35170:9;:16;35166:1;:20;35146:139;;;35208:12;35223:9;35233:1;35223:12;;;;;;;;:::i;:::-;;;;;;;;35208:27;;35269:4;35250:10;:16;35261:4;35250:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35193:92;35188:3;;;;;:::i;:::-;;;;35146:139;;;;35062:230:::0;:::o;30821:120::-;30889:4;30913:11;:20;30925:7;30913:20;;;;;;;;;;;;;;;;;;;;;;;;;30906:27;;30821:120;;;:::o;26534:35::-;;;;;;;;;;;;;:::o;15628:79::-;15666:7;15693:6;;;;;;;;;;;15686:13;;15628:79;:::o;29007:87::-;29046:13;29079:7;29072:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29007:87;:::o;25640:31::-;;;;:::o;35300:232::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35391:9:::1;35386:139;35410:9;:16;35406:1;:20;35386:139;;;35448:12;35463:9;35473:1;35463:12;;;;;;;;:::i;:::-;;;;;;;;35448:27;;35497:10;:16;35508:4;35497:16;;;;;;;;;;;;;;;;35490:23;;;;;;;;;;;35433:92;35428:3;;;;;:::i;:::-;;;;35386:139;;;;35300:232:::0;:::o;25559:25::-;;;;:::o;30544:269::-;30637:4;30654:129;30663:12;:10;:12::i;:::-;30677:7;30686:96;30725:15;30686:96;;;;;;;;;;;;;;;;;:11;:25;30698:12;:10;:12::i;:::-;30686:25;;;;;;;;;;;;;;;:34;30712:7;30686:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;30654:8;:129::i;:::-;30801:4;30794:11;;30544:269;;;;:::o;29502:167::-;29580:4;29597:42;29607:12;:10;:12::i;:::-;29621:9;29632:6;29597:9;:42::i;:::-;29657:4;29650:11;;29502:167;;;;:::o;25739:47::-;;;;:::o;35719:108::-;35768:7;35795:24;35813:4;35795:9;:24::i;:::-;35788:31;;35719:108;:::o;35835:171::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35936:8:::1;35912:21;;:32;;;;;;;;;;;;;;;;;;35960:38;35989:8;35960:38;;;;;;:::i;:::-;;;;;;;;35835:171:::0;:::o;26144:65::-;;;;:::o;33968:722::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34278:3:::1;34230:44;34265:8;34230:30;34248:11;34230:13;:17;;:30;;;;:::i;:::-;:34;;:44;;;;:::i;:::-;:51;34222:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;34381:7;34372:6;:16;;;;34421:13;34399:19;:35;;;;34465:11;34445:17;:31;;;;34504:8;34487:14;:25;;;;34538:13;34523:12;:28;;;;34592:19;34562:27;:49;;;;34677:5;34654:20;:28;;;;:::i;:::-;34622:29;:60;;;;33968:722:::0;;;;;;;:::o;25793:39::-;;;;:::o;31044:450::-;31139:16;31199:7;;:14;;31178:10;;:17;;:35;31170:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31252:12;31268:18;:32;31287:12;:10;:12::i;:::-;31268:32;;;;;;;;;;;;;;;;;;;;;;;;;31267:33;31252:48;;31311:176;31328:10;;:17;;31317:8;:28;31311:176;;;31361:86;31376:12;:10;:12::i;:::-;31390:10;;31401:8;31390:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31432:5;31412:7;;31420:8;31412:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;31439:7;31361:14;:86::i;:::-;31474:1;31462:13;;;;;:::i;:::-;;;31311:176;;;31128:366;;31044:450;;;;:::o;29677:143::-;29758:7;29785:11;:18;29797:5;29785:18;;;;;;;;;;;;;;;:27;29804:7;29785:27;;;;;;;;;;;;;;;;29778:34;;29677:143;;;;:::o;34945:109::-;35006:4;35030:10;:16;35041:4;35030:16;;;;;;;;;;;;;;;;;;;;;;;;;35023:23;;34945:109;;;:::o;31502:119::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31608:5:::1;31594:11;:19;;;;:::i;:::-;31579:12;:34;;;;31502:119:::0;:::o;16567:244::-;15850:12;:10;:12::i;:::-;15840:22;;:6;;;;;;;;;;:22;;;15832:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16676:1:::1;16656:22;;:8;:22;;;;16648:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16766:8;16737:38;;16758:6;::::0;::::1;;;;;;;;16737:38;;;;;;;;;;;;16795:8;16786:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16567:244:::0;:::o;25883:35::-;;;;:::o;8051:98::-;8104:7;8131:10;8124:17;;8051:98;:::o;33612:236::-;33699:9;33694:147;33718:9;;:16;;33714:1;:20;33694:147;;;33756:12;33771:9;;33781:1;33771:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33756:27;;33825:4;33798:18;:24;33817:4;33798:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;33741:100;33736:3;;;;;:::i;:::-;;;;33694:147;;;;33612:236;;;:::o;39346:337::-;39456:1;39439:19;;:5;:19;;;;39431:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39537:1;39518:21;;:7;:21;;;;39510:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39621:6;39591:11;:18;39603:5;39591:18;;;;;;;;;;;;;;;:27;39610:7;39591:27;;;;;;;;;;;;;;;:36;;;;39659:7;39643:32;;39652:5;39643:32;;;39668:6;39643:32;;;;;;:::i;:::-;;;;;;;;39346:337;;;:::o;39691:2014::-;39829:1;39813:18;;:4;:18;;;;39805:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39906:1;39892:16;;:2;:16;;;;39884:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39976:1;39967:6;:10;39959:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40045:7;:5;:7::i;:::-;40037:15;;:4;:15;;;;:32;;;;;40062:7;:5;:7::i;:::-;40056:13;;:2;:13;;;;40037:32;40034:125;;;40102:12;;40092:6;:22;;40084:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40034:125;40177:15;;;;;;;;;;;40172:326;;40231:10;;40213:15;:28;40209:278;;;40271:16;:22;40288:4;40271:22;;;;;;;;;;;;;;;;;;;;;;;;;40270:23;40262:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40386:16;:20;40403:2;40386:20;;;;;;;;;;;;;;;;;;;;;;;;;40385:21;40377:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;40209:278;40172:326;40790:28;40821:24;40839:4;40821:9;:24::i;:::-;40790:55;;40885:12;;40861:20;:36;40858:112;;40946:12;;40923:35;;40858:112;41008:29;;40984:20;:53;;:74;;;;;41042:16;;;;;;;;;;;41041:17;40984:74;:99;;;;;41070:13;;;;;;;;;;;41062:21;;:4;:21;;;;40984:99;:124;;;;;41087:21;;;;;;;;;;;40984:124;40980:381;;;41152:29;;41128:20;:53;41125:145;;41225:29;;41202:52;;41125:145;41313:36;41328:20;41313:14;:36::i;:::-;40980:381;41434:12;41449:4;41434:19;;41553:18;:24;41572:4;41553:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;41581:18;:22;41600:2;41581:22;;;;;;;;;;;;;;;;;;;;;;;;;41553:50;41550:96;;;41629:5;41619:15;;41550:96;41656:41;41671:4;41677:2;41681:6;41689:7;41656:14;:41::i;:::-;39794:1911;;39691:2014;;;:::o;4382:192::-;4468:7;4501:1;4496;:6;;4504:12;4488:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4528:9;4544:1;4540;:5;;;;:::i;:::-;4528:17;;4565:1;4558:8;;;4382:192;;;;;:::o;37464:163::-;37505:7;37526:15;37543;37562:19;:17;:19::i;:::-;37525:56;;;;37599:20;37611:7;37599;:11;;:20;;;;:::i;:::-;37592:27;;;;37464:163;:::o;5780:132::-;5838:7;5865:39;5869:1;5872;5865:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5858:46;;5780:132;;;;:::o;3479:181::-;3537:7;3557:9;3573:1;3569;:5;;;;:::i;:::-;3557:17;;3598:1;3593;:6;;3585:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3651:1;3644:8;;;3479:181;;;;:::o;36262:419::-;36321:7;36330;36339;36348;36357;36366;36387:23;36412:12;36426:18;36448:20;36460:7;36448:11;:20::i;:::-;36386:82;;;;;;36480:15;36497:23;36522:12;36538:50;36550:7;36559:4;36565:10;36577;:8;:10::i;:::-;36538:11;:50::i;:::-;36479:109;;;;;;36607:7;36616:15;36633:4;36639:15;36656:4;36662:10;36599:74;;;;;;;;;;;;;;;;;;36262:419;;;;;;;:::o;3943:136::-;4001:7;4028:43;4032:1;4035;4028:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4021:50;;3943:136;;;;:::o;44584:920::-;44702:10;:18;44713:6;44702:18;;;;;;;;;;;;;;;;;;;;;;;;;44701:19;:45;;;;;44725:10;:21;44736:9;44725:21;;;;;;;;;;;;;;;;;;;;;;;;;44724:22;44701:45;44693:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44797:7;44793:40;;44819:14;:12;:14::i;:::-;44793:40;44850:11;:19;44862:6;44850:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;44874:11;:22;44886:9;44874:22;;;;;;;;;;;;;;;;;;;;;;;;;44873:23;44850:46;44846:597;;;44913:48;44935:6;44943:9;44954:6;44913:21;:48::i;:::-;44846:597;;;44984:11;:19;44996:6;44984:19;;;;;;;;;;;;;;;;;;;;;;;;;44983:20;:46;;;;;45007:11;:22;45019:9;45007:22;;;;;;;;;;;;;;;;;;;;;;;;;44983:46;44979:464;;;45046:46;45066:6;45074:9;45085:6;45046:19;:46::i;:::-;44979:464;;;45115:11;:19;45127:6;45115:19;;;;;;;;;;;;;;;;;;;;;;;;;45114:20;:47;;;;;45139:11;:22;45151:9;45139:22;;;;;;;;;;;;;;;;;;;;;;;;;45138:23;45114:47;45110:333;;;45178:44;45196:6;45204:9;45215:6;45178:17;:44::i;:::-;45110:333;;;45244:11;:19;45256:6;45244:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;45267:11;:22;45279:9;45267:22;;;;;;;;;;;;;;;;;;;;;;;;;45244:45;45240:203;;;45306:48;45328:6;45336:9;45347:6;45306:21;:48::i;:::-;45240:203;;;45387:44;45405:6;45413:9;45424:6;45387:17;:44::i;:::-;45240:203;45110:333;44979:464;44846:597;45459:7;45455:41;;45481:15;:13;:15::i;:::-;45455:41;44584:920;;;;:::o;41713:1184::-;26966:4;26947:16;;:23;;;;;;;;;;;;;;;;;;41886:12:::1;41901:27;41926:1;41901:20;:24;;:27;;;;:::i;:::-;41886:42;;41939:17;41959:30;41984:4;41959:20;:24;;:30;;;;:::i;:::-;41939:50;;42267:22;42292:21;42267:46;;42358:22;42375:4;42358:16;:22::i;:::-;42511:18;42532:41;42558:14;42532:21;:25;;:41;;;;:::i;:::-;42511:62;;42584:22;42609:52;42657:3;42609:43;42624:27;;42609:10;:14;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;42584:77;;42674:32;42691:14;42674:16;:32::i;:::-;42731:14;42717:28;;;;;:::i;:::-;;;42793:35;42806:9;42817:10;42793:12;:35::i;:::-;42846:43;42861:4;42867:10;42879:9;42846:43;;;;;;;;:::i;:::-;;;;;;;;41787:1110;;;;;27012:5:::0;26993:16;;:24;;;;;;;;;;;;;;;;;;41713:1184;:::o;37635:555::-;37685:7;37694;37714:15;37732:7;;37714:25;;37750:15;37768:7;;37750:25;;37791:9;37786:289;37810:9;:16;;;;37806:1;:20;37786:289;;;37876:7;37852;:21;37860:9;37870:1;37860:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37852:21;;;;;;;;;;;;;;;;:31;:66;;;;37911:7;37887;:21;37895:9;37905:1;37895:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37887:21;;;;;;;;;;;;;;;;:31;37852:66;37848:97;;;37928:7;;37937;;37920:25;;;;;;;;;37848:97;37970:34;37982:7;:21;37990:9;38000:1;37990:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37982:21;;;;;;;;;;;;;;;;37970:7;:11;;:34;;;;:::i;:::-;37960:44;;38029:34;38041:7;:21;38049:9;38059:1;38049:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38041:21;;;;;;;;;;;;;;;;38029:7;:11;;:34;;;;:::i;:::-;38019:44;;37828:3;;;;;:::i;:::-;;;;37786:289;;;;38099:20;38111:7;;38099;;:11;;:20;;;;:::i;:::-;38089:7;:30;38085:61;;;38129:7;;38138;;38121:25;;;;;;;;38085:61;38165:7;38174;38157:25;;;;;;37635:555;;;:::o;6408:278::-;6494:7;6526:1;6522;:5;6529:12;6514:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6553:9;6569:1;6565;:5;;;;:::i;:::-;6553:17;;6677:1;6670:8;;;6408:278;;;;;:::o;36689:330::-;36749:7;36758;36767;36787:12;36802:24;36818:7;36802:15;:24::i;:::-;36787:39;;36837:18;36858:30;36880:7;36858:21;:30::i;:::-;36837:51;;36899:23;36925:33;36947:10;36925:17;36937:4;36925:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36899:59;;36977:15;36994:4;37000:10;36969:42;;;;;;;;;36689:330;;;;;:::o;37027:429::-;37142:7;37151;37160;37180:15;37198:24;37210:11;37198:7;:11;;:24;;;;:::i;:::-;37180:42;;37233:12;37248:21;37257:11;37248:4;:8;;:21;;;;:::i;:::-;37233:36;;37280:18;37301:27;37316:11;37301:10;:14;;:27;;;;:::i;:::-;37280:48;;37339:23;37365:33;37387:10;37365:17;37377:4;37365:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;37339:59;;37417:7;37426:15;37443:4;37409:39;;;;;;;;;;37027:429;;;;;;;;:::o;38847:229::-;38904:1;38894:6;;:11;:32;;;;;38925:1;38909:12;;:17;38894:32;38890:45;;;38928:7;;38890:45;38965:6;;38947:15;:24;;;;39006:12;;38982:21;:36;;;;39040:1;39031:6;:10;;;;39067:1;39052:12;:16;;;;38847:229;:::o;46605:563::-;46708:15;46725:23;46750:12;46764:23;46789:12;46803:18;46825:19;46836:7;46825:10;:19::i;:::-;46707:137;;;;;;;;;;;;46873:28;46893:7;46873;:15;46881:6;46873:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46855:7;:15;46863:6;46855:15;;;;;;;;;;;;;;;:46;;;;46930:28;46950:7;46930;:15;46938:6;46930:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46912:7;:15;46920:6;46912:15;;;;;;;;;;;;;;;:46;;;;46990:39;47013:15;46990:7;:18;46998:9;46990:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46969:7;:18;46977:9;46969:18;;;;;;;;;;;;;;;:60;;;;47040:26;47055:10;47040:14;:26::i;:::-;47077:23;47089:4;47095;47077:11;:23::i;:::-;47133:9;47116:44;;47125:6;47116:44;;;47144:15;47116:44;;;;;;:::i;:::-;;;;;;;;46696:472;;;;;;46605:563;;;:::o;46022:575::-;46123:15;46140:23;46165:12;46179:23;46204:12;46218:18;46240:19;46251:7;46240:10;:19::i;:::-;46122:137;;;;;;;;;;;;46288:28;46308:7;46288;:15;46296:6;46288:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46270:7;:15;46278:6;46270:15;;;;;;;;;;;;;;;:46;;;;46348:39;46371:15;46348:7;:18;46356:9;46348:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46327:7;:18;46335:9;46327:18;;;;;;;;;;;;;;;:60;;;;46419:39;46442:15;46419:7;:18;46427:9;46419:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46398:7;:18;46406:9;46398:18;;;;;;;;;;;;;;;:60;;;;46469:26;46484:10;46469:14;:26::i;:::-;46506:23;46518:4;46524;46506:11;:23::i;:::-;46562:9;46545:44;;46554:6;46545:44;;;46573:15;46545:44;;;;;;:::i;:::-;;;;;;;;46111:486;;;;;;46022:575;;;:::o;45512:502::-;45611:15;45628:23;45653:12;45667:23;45692:12;45706:18;45728:19;45739:7;45728:10;:19::i;:::-;45610:137;;;;;;;;;;;;45776:28;45796:7;45776;:15;45784:6;45776:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45758:7;:15;45766:6;45758:15;;;;;;;;;;;;;;;:46;;;;45836:39;45859:15;45836:7;:18;45844:9;45836:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45815:7;:18;45823:9;45815:18;;;;;;;;;;;;;;;:60;;;;45886:26;45901:10;45886:14;:26::i;:::-;45923:23;45935:4;45941;45923:11;:23::i;:::-;45979:9;45962:44;;45971:6;45962:44;;;45990:15;45962:44;;;;;;:::i;:::-;;;;;;;;45599:415;;;;;;45512:502;;;:::o;32717:634::-;32820:15;32837:23;32862:12;32876:23;32901:12;32915:18;32937:19;32948:7;32937:10;:19::i;:::-;32819:137;;;;;;;;;;;;32985:28;33005:7;32985;:15;32993:6;32985:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32967:7;:15;32975:6;32967:15;;;;;;;;;;;;;;;:46;;;;33042:28;33062:7;33042;:15;33050:6;33042:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33024:7;:15;33032:6;33024:15;;;;;;;;;;;;;;;:46;;;;33102:39;33125:15;33102:7;:18;33110:9;33102:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33081:7;:18;33089:9;33081:18;;;;;;;;;;;;;;;:60;;;;33173:39;33196:15;33173:7;:18;33181:9;33173:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33152:7;:18;33160:9;33152:18;;;;;;;;;;;;;;;:60;;;;33223:26;33238:10;33223:14;:26::i;:::-;33260:23;33272:4;33278;33260:11;:23::i;:::-;33316:9;33299:44;;33308:6;33299:44;;;33327:15;33299:44;;;;;;:::i;:::-;;;;;;;;32808:543;;;;;;32717:634;;;:::o;39084:123::-;39137:15;;39128:6;:24;;;;39178:21;;39163:12;:36;;;;39084:123::o;43393:589::-;43519:21;43557:1;43543:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43519:40;;43588:4;43570;43575:1;43570:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43614:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43604:4;43609:1;43604:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43649:62;43666:4;43681:15;;;;;;;;;;;43699:11;43649:8;:62::i;:::-;43750:15;;;;;;;;;;;:66;;;43831:11;43857:1;43901:4;43928;43948:15;43750:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43448:534;43393:589;:::o;4833:471::-;4891:7;5141:1;5136;:6;5132:47;;;5166:1;5159:8;;;;5132:47;5191:9;5207:1;5203;:5;;;;:::i;:::-;5191:17;;5236:1;5231;5227;:5;;;;:::i;:::-;:10;5219:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5295:1;5288:8;;;4833:471;;;;;:::o;42905:480::-;42974:22;42999:48;43043:3;42999:39;43018:19;;42999:14;:18;;:39;;;;:::i;:::-;:43;;:48;;;;:::i;:::-;42974:73;;43058:20;43081:46;43123:3;43081:37;43100:17;;43081:14;:18;;:37;;;;:::i;:::-;:41;;:46;;;;:::i;:::-;43058:69;;43138:17;43158:43;43197:3;43158:34;43177:14;;43158;:18;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;43138:63;;43230:15;;;;;;;;;;;43222:33;;:49;43256:14;43222:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43290:13;;;;;;;;;;;43282:31;;:45;43314:12;43282:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43346:10;;;;;;;;;;;43338:28;;:39;43367:9;43338:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42963:422;;;42905:480;:::o;43990:513::-;44138:62;44155:4;44170:15;;;;;;;;;;;44188:11;44138:8;:62::i;:::-;44243:15;;;;;;;;;;;:31;;;44282:9;44315:4;44335:11;44361:1;44404;44447:7;:5;:7::i;:::-;44469:15;44243:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43990:513;;:::o;38561:129::-;38625:7;38652:30;38676:5;38652:19;38664:6;;38652:7;:11;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;38645:37;;38561:129;;;:::o;38698:141::-;38768:7;38795:36;38825:5;38795:25;38807:12;;38795:7;:11;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;38788:43;;38698:141;;;:::o;38198:355::-;38261:19;38284:10;:8;:10::i;:::-;38261:33;;38305:18;38326:27;38341:11;38326:10;:14;;:27;;;;:::i;:::-;38305:48;;38389:38;38416:10;38389:7;:22;38405:4;38389:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;38364:7;:22;38380:4;38364:22;;;;;;;;;;;;;;;:63;;;;38441:11;:26;38461:4;38441:26;;;;;;;;;;;;;;;;;;;;;;;;;38438:107;;;38507:38;38534:10;38507:7;:22;38523:4;38507:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;38482:7;:22;38498:4;38482:22;;;;;;;;;;;;;;;:63;;;;38438:107;38250:303;;38198:355;:::o;36107:147::-;36185:17;36197:4;36185:7;;:11;;:17;;;;:::i;:::-;36175:7;:27;;;;36226:20;36241:4;36226:10;;:14;;:20;;;;:::i;:::-;36213:10;:33;;;;36107:147;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1294:559::-;1380:6;1388;1437:2;1425:9;1416:7;1412:23;1408:32;1405:119;;;1443:79;;:::i;:::-;1405:119;1591:1;1580:9;1576:17;1563:31;1621:18;1613:6;1610:30;1607:117;;;1643:79;;:::i;:::-;1607:117;1756:80;1828:7;1819:6;1808:9;1804:22;1756:80;:::i;:::-;1738:98;;;;1534:312;1294:559;;;;;:::o;1859:99::-;1911:6;1945:5;1939:12;1929:22;;1859:99;;;:::o;1964:169::-;2048:11;2082:6;2077:3;2070:19;2122:4;2117:3;2113:14;2098:29;;1964:169;;;;:::o;2139:307::-;2207:1;2217:113;2231:6;2228:1;2225:13;2217:113;;;2316:1;2311:3;2307:11;2301:18;2297:1;2292:3;2288:11;2281:39;2253:2;2250:1;2246:10;2241:15;;2217:113;;;2348:6;2345:1;2342:13;2339:101;;;2428:1;2419:6;2414:3;2410:16;2403:27;2339:101;2188:258;2139:307;;;:::o;2452:102::-;2493:6;2544:2;2540:7;2535:2;2528:5;2524:14;2520:28;2510:38;;2452:102;;;:::o;2560:364::-;2648:3;2676:39;2709:5;2676:39;:::i;:::-;2731:71;2795:6;2790:3;2731:71;:::i;:::-;2724:78;;2811:52;2856:6;2851:3;2844:4;2837:5;2833:16;2811:52;:::i;:::-;2888:29;2910:6;2888:29;:::i;:::-;2883:3;2879:39;2872:46;;2652:272;2560:364;;;;:::o;2930:313::-;3043:4;3081:2;3070:9;3066:18;3058:26;;3130:9;3124:4;3120:20;3116:1;3105:9;3101:17;3094:47;3158:78;3231:4;3222:6;3158:78;:::i;:::-;3150:86;;2930:313;;;;:::o;3249:126::-;3286:7;3326:42;3319:5;3315:54;3304:65;;3249:126;;;:::o;3381:96::-;3418:7;3447:24;3465:5;3447:24;:::i;:::-;3436:35;;3381:96;;;:::o;3483:122::-;3556:24;3574:5;3556:24;:::i;:::-;3549:5;3546:35;3536:63;;3595:1;3592;3585:12;3536:63;3483:122;:::o;3611:139::-;3657:5;3695:6;3682:20;3673:29;;3711:33;3738:5;3711:33;:::i;:::-;3611:139;;;;:::o;3756:77::-;3793:7;3822:5;3811:16;;3756:77;;;:::o;3839:122::-;3912:24;3930:5;3912:24;:::i;:::-;3905:5;3902:35;3892:63;;3951:1;3948;3941:12;3892:63;3839:122;:::o;3967:139::-;4013:5;4051:6;4038:20;4029:29;;4067:33;4094:5;4067:33;:::i;:::-;3967:139;;;;:::o;4112:474::-;4180:6;4188;4237:2;4225:9;4216:7;4212:23;4208:32;4205:119;;;4243:79;;:::i;:::-;4205:119;4363:1;4388:53;4433:7;4424:6;4413:9;4409:22;4388:53;:::i;:::-;4378:63;;4334:117;4490:2;4516:53;4561:7;4552:6;4541:9;4537:22;4516:53;:::i;:::-;4506:63;;4461:118;4112:474;;;;;:::o;4592:90::-;4626:7;4669:5;4662:13;4655:21;4644:32;;4592:90;;;:::o;4688:109::-;4769:21;4784:5;4769:21;:::i;:::-;4764:3;4757:34;4688:109;;:::o;4803:210::-;4890:4;4928:2;4917:9;4913:18;4905:26;;4941:65;5003:1;4992:9;4988:17;4979:6;4941:65;:::i;:::-;4803:210;;;;:::o;5019:118::-;5106:24;5124:5;5106:24;:::i;:::-;5101:3;5094:37;5019:118;;:::o;5143:222::-;5236:4;5274:2;5263:9;5259:18;5251:26;;5287:71;5355:1;5344:9;5340:17;5331:6;5287:71;:::i;:::-;5143:222;;;;:::o;5371:60::-;5399:3;5420:5;5413:12;;5371:60;;;:::o;5437:142::-;5487:9;5520:53;5538:34;5547:24;5565:5;5547:24;:::i;:::-;5538:34;:::i;:::-;5520:53;:::i;:::-;5507:66;;5437:142;;;:::o;5585:126::-;5635:9;5668:37;5699:5;5668:37;:::i;:::-;5655:50;;5585:126;;;:::o;5717:153::-;5794:9;5827:37;5858:5;5827:37;:::i;:::-;5814:50;;5717:153;;;:::o;5876:185::-;5990:64;6048:5;5990:64;:::i;:::-;5985:3;5978:77;5876:185;;:::o;6067:276::-;6187:4;6225:2;6214:9;6210:18;6202:26;;6238:98;6333:1;6322:9;6318:17;6309:6;6238:98;:::i;:::-;6067:276;;;;:::o;6349:619::-;6426:6;6434;6442;6491:2;6479:9;6470:7;6466:23;6462:32;6459:119;;;6497:79;;:::i;:::-;6459:119;6617:1;6642:53;6687:7;6678:6;6667:9;6663:22;6642:53;:::i;:::-;6632:63;;6588:117;6744:2;6770:53;6815:7;6806:6;6795:9;6791:22;6770:53;:::i;:::-;6760:63;;6715:118;6872:2;6898:53;6943:7;6934:6;6923:9;6919:22;6898:53;:::i;:::-;6888:63;;6843:118;6349:619;;;;;:::o;6974:329::-;7033:6;7082:2;7070:9;7061:7;7057:23;7053:32;7050:119;;;7088:79;;:::i;:::-;7050:119;7208:1;7233:53;7278:7;7269:6;7258:9;7254:22;7233:53;:::i;:::-;7223:63;;7179:117;6974:329;;;;:::o;7309:86::-;7344:7;7384:4;7377:5;7373:16;7362:27;;7309:86;;;:::o;7401:112::-;7484:22;7500:5;7484:22;:::i;:::-;7479:3;7472:35;7401:112;;:::o;7519:214::-;7608:4;7646:2;7635:9;7631:18;7623:26;;7659:67;7723:1;7712:9;7708:17;7699:6;7659:67;:::i;:::-;7519:214;;;;:::o;7739:116::-;7809:21;7824:5;7809:21;:::i;:::-;7802:5;7799:32;7789:60;;7845:1;7842;7835:12;7789:60;7739:116;:::o;7861:133::-;7904:5;7942:6;7929:20;7920:29;;7958:30;7982:5;7958:30;:::i;:::-;7861:133;;;;:::o;8000:468::-;8065:6;8073;8122:2;8110:9;8101:7;8097:23;8093:32;8090:119;;;8128:79;;:::i;:::-;8090:119;8248:1;8273:53;8318:7;8309:6;8298:9;8294:22;8273:53;:::i;:::-;8263:63;;8219:117;8375:2;8401:50;8443:7;8434:6;8423:9;8419:22;8401:50;:::i;:::-;8391:60;;8346:115;8000:468;;;;;:::o;8474:118::-;8561:24;8579:5;8561:24;:::i;:::-;8556:3;8549:37;8474:118;;:::o;8598:222::-;8691:4;8729:2;8718:9;8714:18;8706:26;;8742:71;8810:1;8799:9;8795:17;8786:6;8742:71;:::i;:::-;8598:222;;;;:::o;8826:329::-;8885:6;8934:2;8922:9;8913:7;8909:23;8905:32;8902:119;;;8940:79;;:::i;:::-;8902:119;9060:1;9085:53;9130:7;9121:6;9110:9;9106:22;9085:53;:::i;:::-;9075:63;;9031:117;8826:329;;;;:::o;9161:468::-;9226:6;9234;9283:2;9271:9;9262:7;9258:23;9254:32;9251:119;;;9289:79;;:::i;:::-;9251:119;9409:1;9434:50;9476:7;9467:6;9456:9;9452:22;9434:50;:::i;:::-;9424:60;;9380:114;9533:2;9559:53;9604:7;9595:6;9584:9;9580:22;9559:53;:::i;:::-;9549:63;;9504:118;9161:468;;;;;:::o;9635:619::-;9712:6;9720;9728;9777:2;9765:9;9756:7;9752:23;9748:32;9745:119;;;9783:79;;:::i;:::-;9745:119;9903:1;9928:53;9973:7;9964:6;9953:9;9949:22;9928:53;:::i;:::-;9918:63;;9874:117;10030:2;10056:53;10101:7;10092:6;10081:9;10077:22;10056:53;:::i;:::-;10046:63;;10001:118;10158:2;10184:53;10229:7;10220:6;10209:9;10205:22;10184:53;:::i;:::-;10174:63;;10129:118;9635:619;;;;;:::o;10260:180::-;10308:77;10305:1;10298:88;10405:4;10402:1;10395:15;10429:4;10426:1;10419:15;10446:281;10529:27;10551:4;10529:27;:::i;:::-;10521:6;10517:40;10659:6;10647:10;10644:22;10623:18;10611:10;10608:34;10605:62;10602:88;;;10670:18;;:::i;:::-;10602:88;10710:10;10706:2;10699:22;10489:238;10446:281;;:::o;10733:129::-;10767:6;10794:20;;:::i;:::-;10784:30;;10823:33;10851:4;10843:6;10823:33;:::i;:::-;10733:129;;;:::o;10868:311::-;10945:4;11035:18;11027:6;11024:30;11021:56;;;11057:18;;:::i;:::-;11021:56;11107:4;11099:6;11095:17;11087:25;;11167:4;11161;11157:15;11149:23;;10868:311;;;:::o;11202:710::-;11298:5;11323:81;11339:64;11396:6;11339:64;:::i;:::-;11323:81;:::i;:::-;11314:90;;11424:5;11453:6;11446:5;11439:21;11487:4;11480:5;11476:16;11469:23;;11540:4;11532:6;11528:17;11520:6;11516:30;11569:3;11561:6;11558:15;11555:122;;;11588:79;;:::i;:::-;11555:122;11703:6;11686:220;11720:6;11715:3;11712:15;11686:220;;;11795:3;11824:37;11857:3;11845:10;11824:37;:::i;:::-;11819:3;11812:50;11891:4;11886:3;11882:14;11875:21;;11762:144;11746:4;11741:3;11737:14;11730:21;;11686:220;;;11690:21;11304:608;;11202:710;;;;;:::o;11935:370::-;12006:5;12055:3;12048:4;12040:6;12036:17;12032:27;12022:122;;12063:79;;:::i;:::-;12022:122;12180:6;12167:20;12205:94;12295:3;12287:6;12280:4;12272:6;12268:17;12205:94;:::i;:::-;12196:103;;12012:293;11935:370;;;;:::o;12311:539::-;12395:6;12444:2;12432:9;12423:7;12419:23;12415:32;12412:119;;;12450:79;;:::i;:::-;12412:119;12598:1;12587:9;12583:17;12570:31;12628:18;12620:6;12617:30;12614:117;;;12650:79;;:::i;:::-;12614:117;12755:78;12825:7;12816:6;12805:9;12801:22;12755:78;:::i;:::-;12745:88;;12541:302;12311:539;;;;:::o;12856:323::-;12912:6;12961:2;12949:9;12940:7;12936:23;12932:32;12929:119;;;12967:79;;:::i;:::-;12929:119;13087:1;13112:50;13154:7;13145:6;13134:9;13130:22;13112:50;:::i;:::-;13102:60;;13058:114;12856:323;;;;:::o;13185:1203::-;13298:6;13306;13314;13322;13330;13338;13346;13395:3;13383:9;13374:7;13370:23;13366:33;13363:120;;;13402:79;;:::i;:::-;13363:120;13522:1;13547:53;13592:7;13583:6;13572:9;13568:22;13547:53;:::i;:::-;13537:63;;13493:117;13649:2;13675:53;13720:7;13711:6;13700:9;13696:22;13675:53;:::i;:::-;13665:63;;13620:118;13777:2;13803:53;13848:7;13839:6;13828:9;13824:22;13803:53;:::i;:::-;13793:63;;13748:118;13905:2;13931:53;13976:7;13967:6;13956:9;13952:22;13931:53;:::i;:::-;13921:63;;13876:118;14033:3;14060:53;14105:7;14096:6;14085:9;14081:22;14060:53;:::i;:::-;14050:63;;14004:119;14162:3;14189:53;14234:7;14225:6;14214:9;14210:22;14189:53;:::i;:::-;14179:63;;14133:119;14291:3;14318:53;14363:7;14354:6;14343:9;14339:22;14318:53;:::i;:::-;14308:63;;14262:119;13185:1203;;;;;;;;;;:::o;14411:568::-;14484:8;14494:6;14544:3;14537:4;14529:6;14525:17;14521:27;14511:122;;14552:79;;:::i;:::-;14511:122;14665:6;14652:20;14642:30;;14695:18;14687:6;14684:30;14681:117;;;14717:79;;:::i;:::-;14681:117;14831:4;14823:6;14819:17;14807:29;;14885:3;14877:4;14869:6;14865:17;14855:8;14851:32;14848:41;14845:128;;;14892:79;;:::i;:::-;14845:128;14411:568;;;;;:::o;14985:934::-;15107:6;15115;15123;15131;15180:2;15168:9;15159:7;15155:23;15151:32;15148:119;;;15186:79;;:::i;:::-;15148:119;15334:1;15323:9;15319:17;15306:31;15364:18;15356:6;15353:30;15350:117;;;15386:79;;:::i;:::-;15350:117;15499:80;15571:7;15562:6;15551:9;15547:22;15499:80;:::i;:::-;15481:98;;;;15277:312;15656:2;15645:9;15641:18;15628:32;15687:18;15679:6;15676:30;15673:117;;;15709:79;;:::i;:::-;15673:117;15822:80;15894:7;15885:6;15874:9;15870:22;15822:80;:::i;:::-;15804:98;;;;15599:313;14985:934;;;;;;;:::o;15925:474::-;15993:6;16001;16050:2;16038:9;16029:7;16025:23;16021:32;16018:119;;;16056:79;;:::i;:::-;16018:119;16176:1;16201:53;16246:7;16237:6;16226:9;16222:22;16201:53;:::i;:::-;16191:63;;16147:117;16303:2;16329:53;16374:7;16365:6;16354:9;16350:22;16329:53;:::i;:::-;16319:63;;16274:118;15925:474;;;;;:::o;16405:182::-;16545:34;16541:1;16533:6;16529:14;16522:58;16405:182;:::o;16593:366::-;16735:3;16756:67;16820:2;16815:3;16756:67;:::i;:::-;16749:74;;16832:93;16921:3;16832:93;:::i;:::-;16950:2;16945:3;16941:12;16934:19;;16593:366;;;:::o;16965:419::-;17131:4;17169:2;17158:9;17154:18;17146:26;;17218:9;17212:4;17208:20;17204:1;17193:9;17189:17;17182:47;17246:131;17372:4;17246:131;:::i;:::-;17238:139;;16965:419;;;:::o;17390:180::-;17438:77;17435:1;17428:88;17535:4;17532:1;17525:15;17559:4;17556:1;17549:15;17576:320;17620:6;17657:1;17651:4;17647:12;17637:22;;17704:1;17698:4;17694:12;17725:18;17715:81;;17781:4;17773:6;17769:17;17759:27;;17715:81;17843:2;17835:6;17832:14;17812:18;17809:38;17806:84;;;17862:18;;:::i;:::-;17806:84;17627:269;17576:320;;;:::o;17902:229::-;18042:34;18038:1;18030:6;18026:14;18019:58;18111:12;18106:2;18098:6;18094:15;18087:37;17902:229;:::o;18137:366::-;18279:3;18300:67;18364:2;18359:3;18300:67;:::i;:::-;18293:74;;18376:93;18465:3;18376:93;:::i;:::-;18494:2;18489:3;18485:12;18478:19;;18137:366;;;:::o;18509:419::-;18675:4;18713:2;18702:9;18698:18;18690:26;;18762:9;18756:4;18752:20;18748:1;18737:9;18733:17;18726:47;18790:131;18916:4;18790:131;:::i;:::-;18782:139;;18509:419;;;:::o;18934:231::-;19074:34;19070:1;19062:6;19058:14;19051:58;19143:14;19138:2;19130:6;19126:15;19119:39;18934:231;:::o;19171:366::-;19313:3;19334:67;19398:2;19393:3;19334:67;:::i;:::-;19327:74;;19410:93;19499:3;19410:93;:::i;:::-;19528:2;19523:3;19519:12;19512:19;;19171:366;;;:::o;19543:419::-;19709:4;19747:2;19736:9;19732:18;19724:26;;19796:9;19790:4;19786:20;19782:1;19771:9;19767:17;19760:47;19824:131;19950:4;19824:131;:::i;:::-;19816:139;;19543:419;;;:::o;19968:181::-;20108:33;20104:1;20096:6;20092:14;20085:57;19968:181;:::o;20155:366::-;20297:3;20318:67;20382:2;20377:3;20318:67;:::i;:::-;20311:74;;20394:93;20483:3;20394:93;:::i;:::-;20512:2;20507:3;20503:12;20496:19;;20155:366;;;:::o;20527:419::-;20693:4;20731:2;20720:9;20716:18;20708:26;;20780:9;20774:4;20770:20;20766:1;20755:9;20751:17;20744:47;20808:131;20934:4;20808:131;:::i;:::-;20800:139;;20527:419;;;:::o;20952:180::-;21000:77;20997:1;20990:88;21097:4;21094:1;21087:15;21121:4;21118:1;21111:15;21138:180;21186:77;21183:1;21176:88;21283:4;21280:1;21273:15;21307:4;21304:1;21297:15;21324:233;21363:3;21386:24;21404:5;21386:24;:::i;:::-;21377:33;;21432:66;21425:5;21422:77;21419:103;;;21502:18;;:::i;:::-;21419:103;21549:1;21542:5;21538:13;21531:20;;21324:233;;;:::o;21563:246::-;21703:34;21699:1;21691:6;21687:14;21680:58;21772:29;21767:2;21759:6;21755:15;21748:54;21563:246;:::o;21815:366::-;21957:3;21978:67;22042:2;22037:3;21978:67;:::i;:::-;21971:74;;22054:93;22143:3;22054:93;:::i;:::-;22172:2;22167:3;22163:12;22156:19;;21815:366;;;:::o;22187:419::-;22353:4;22391:2;22380:9;22376:18;22368:26;;22440:9;22434:4;22430:20;22426:1;22415:9;22411:17;22404:47;22468:131;22594:4;22468:131;:::i;:::-;22460:139;;22187:419;;;:::o;22612:348::-;22652:7;22675:20;22693:1;22675:20;:::i;:::-;22670:25;;22709:20;22727:1;22709:20;:::i;:::-;22704:25;;22897:1;22829:66;22825:74;22822:1;22819:81;22814:1;22807:9;22800:17;22796:105;22793:131;;;22904:18;;:::i;:::-;22793:131;22952:1;22949;22945:9;22934:20;;22612:348;;;;:::o;22966:173::-;23106:25;23102:1;23094:6;23090:14;23083:49;22966:173;:::o;23145:366::-;23287:3;23308:67;23372:2;23367:3;23308:67;:::i;:::-;23301:74;;23384:93;23473:3;23384:93;:::i;:::-;23502:2;23497:3;23493:12;23486:19;;23145:366;;;:::o;23517:419::-;23683:4;23721:2;23710:9;23706:18;23698:26;;23770:9;23764:4;23760:20;23756:1;23745:9;23741:17;23734:47;23798:131;23924:4;23798:131;:::i;:::-;23790:139;;23517:419;;;:::o;23942:305::-;23982:3;24001:20;24019:1;24001:20;:::i;:::-;23996:25;;24035:20;24053:1;24035:20;:::i;:::-;24030:25;;24189:1;24121:66;24117:74;24114:1;24111:81;24108:107;;;24195:18;;:::i;:::-;24108:107;24239:1;24236;24232:9;24225:16;;23942:305;;;;:::o;24253:225::-;24393:34;24389:1;24381:6;24377:14;24370:58;24462:8;24457:2;24449:6;24445:15;24438:33;24253:225;:::o;24484:366::-;24626:3;24647:67;24711:2;24706:3;24647:67;:::i;:::-;24640:74;;24723:93;24812:3;24723:93;:::i;:::-;24841:2;24836:3;24832:12;24825:19;;24484:366;;;:::o;24856:419::-;25022:4;25060:2;25049:9;25045:18;25037:26;;25109:9;25103:4;25099:20;25095:1;25084:9;25080:17;25073:47;25137:131;25263:4;25137:131;:::i;:::-;25129:139;;24856:419;;;:::o;25281:223::-;25421:34;25417:1;25409:6;25405:14;25398:58;25490:6;25485:2;25477:6;25473:15;25466:31;25281:223;:::o;25510:366::-;25652:3;25673:67;25737:2;25732:3;25673:67;:::i;:::-;25666:74;;25749:93;25838:3;25749:93;:::i;:::-;25867:2;25862:3;25858:12;25851:19;;25510:366;;;:::o;25882:419::-;26048:4;26086:2;26075:9;26071:18;26063:26;;26135:9;26129:4;26125:20;26121:1;26110:9;26106:17;26099:47;26163:131;26289:4;26163:131;:::i;:::-;26155:139;;25882:419;;;:::o;26307:221::-;26447:34;26443:1;26435:6;26431:14;26424:58;26516:4;26511:2;26503:6;26499:15;26492:29;26307:221;:::o;26534:366::-;26676:3;26697:67;26761:2;26756:3;26697:67;:::i;:::-;26690:74;;26773:93;26862:3;26773:93;:::i;:::-;26891:2;26886:3;26882:12;26875:19;;26534:366;;;:::o;26906:419::-;27072:4;27110:2;27099:9;27095:18;27087:26;;27159:9;27153:4;27149:20;27145:1;27134:9;27130:17;27123:47;27187:131;27313:4;27187:131;:::i;:::-;27179:139;;26906:419;;;:::o;27331:224::-;27471:34;27467:1;27459:6;27455:14;27448:58;27540:7;27535:2;27527:6;27523:15;27516:32;27331:224;:::o;27561:366::-;27703:3;27724:67;27788:2;27783:3;27724:67;:::i;:::-;27717:74;;27800:93;27889:3;27800:93;:::i;:::-;27918:2;27913:3;27909:12;27902:19;;27561:366;;;:::o;27933:419::-;28099:4;28137:2;28126:9;28122:18;28114:26;;28186:9;28180:4;28176:20;28172:1;28161:9;28157:17;28150:47;28214:131;28340:4;28214:131;:::i;:::-;28206:139;;27933:419;;;:::o;28358:222::-;28498:34;28494:1;28486:6;28482:14;28475:58;28567:5;28562:2;28554:6;28550:15;28543:30;28358:222;:::o;28586:366::-;28728:3;28749:67;28813:2;28808:3;28749:67;:::i;:::-;28742:74;;28825:93;28914:3;28825:93;:::i;:::-;28943:2;28938:3;28934:12;28927:19;;28586:366;;;:::o;28958:419::-;29124:4;29162:2;29151:9;29147:18;29139:26;;29211:9;29205:4;29201:20;29197:1;29186:9;29182:17;29175:47;29239:131;29365:4;29239:131;:::i;:::-;29231:139;;28958:419;;;:::o;29383:228::-;29523:34;29519:1;29511:6;29507:14;29500:58;29592:11;29587:2;29579:6;29575:15;29568:36;29383:228;:::o;29617:366::-;29759:3;29780:67;29844:2;29839:3;29780:67;:::i;:::-;29773:74;;29856:93;29945:3;29856:93;:::i;:::-;29974:2;29969:3;29965:12;29958:19;;29617:366;;;:::o;29989:419::-;30155:4;30193:2;30182:9;30178:18;30170:26;;30242:9;30236:4;30232:20;30228:1;30217:9;30213:17;30206:47;30270:131;30396:4;30270:131;:::i;:::-;30262:139;;29989:419;;;:::o;30414:227::-;30554:34;30550:1;30542:6;30538:14;30531:58;30623:10;30618:2;30610:6;30606:15;30599:35;30414:227;:::o;30647:366::-;30789:3;30810:67;30874:2;30869:3;30810:67;:::i;:::-;30803:74;;30886:93;30975:3;30886:93;:::i;:::-;31004:2;30999:3;30995:12;30988:19;;30647:366;;;:::o;31019:419::-;31185:4;31223:2;31212:9;31208:18;31200:26;;31272:9;31266:4;31262:20;31258:1;31247:9;31243:17;31236:47;31300:131;31426:4;31300:131;:::i;:::-;31292:139;;31019:419;;;:::o;31444:247::-;31584:34;31580:1;31572:6;31568:14;31561:58;31653:30;31648:2;31640:6;31636:15;31629:55;31444:247;:::o;31697:366::-;31839:3;31860:67;31924:2;31919:3;31860:67;:::i;:::-;31853:74;;31936:93;32025:3;31936:93;:::i;:::-;32054:2;32049:3;32045:12;32038:19;;31697:366;;;:::o;32069:419::-;32235:4;32273:2;32262:9;32258:18;32250:26;;32322:9;32316:4;32312:20;32308:1;32297:9;32293:17;32286:47;32350:131;32476:4;32350:131;:::i;:::-;32342:139;;32069:419;;;:::o;32494:191::-;32534:4;32554:20;32572:1;32554:20;:::i;:::-;32549:25;;32588:20;32606:1;32588:20;:::i;:::-;32583:25;;32627:1;32624;32621:8;32618:34;;;32632:18;;:::i;:::-;32618:34;32677:1;32674;32670:9;32662:17;;32494:191;;;;:::o;32691:177::-;32831:29;32827:1;32819:6;32815:14;32808:53;32691:177;:::o;32874:366::-;33016:3;33037:67;33101:2;33096:3;33037:67;:::i;:::-;33030:74;;33113:93;33202:3;33113:93;:::i;:::-;33231:2;33226:3;33222:12;33215:19;;32874:366;;;:::o;33246:419::-;33412:4;33450:2;33439:9;33435:18;33427:26;;33499:9;33493:4;33489:20;33485:1;33474:9;33470:17;33463:47;33527:131;33653:4;33527:131;:::i;:::-;33519:139;;33246:419;;;:::o;33671:179::-;33811:31;33807:1;33799:6;33795:14;33788:55;33671:179;:::o;33856:366::-;33998:3;34019:67;34083:2;34078:3;34019:67;:::i;:::-;34012:74;;34095:93;34184:3;34095:93;:::i;:::-;34213:2;34208:3;34204:12;34197:19;;33856:366;;;:::o;34228:419::-;34394:4;34432:2;34421:9;34417:18;34409:26;;34481:9;34475:4;34471:20;34467:1;34456:9;34452:17;34445:47;34509:131;34635:4;34509:131;:::i;:::-;34501:139;;34228:419;;;:::o;34653:442::-;34802:4;34840:2;34829:9;34825:18;34817:26;;34853:71;34921:1;34910:9;34906:17;34897:6;34853:71;:::i;:::-;34934:72;35002:2;34991:9;34987:18;34978:6;34934:72;:::i;:::-;35016;35084:2;35073:9;35069:18;35060:6;35016:72;:::i;:::-;34653:442;;;;;;:::o;35101:180::-;35149:77;35146:1;35139:88;35246:4;35243:1;35236:15;35270:4;35267:1;35260:15;35287:185;35327:1;35344:20;35362:1;35344:20;:::i;:::-;35339:25;;35378:20;35396:1;35378:20;:::i;:::-;35373:25;;35417:1;35407:35;;35422:18;;:::i;:::-;35407:35;35464:1;35461;35457:9;35452:14;;35287:185;;;;:::o;35478:143::-;35535:5;35566:6;35560:13;35551:22;;35582:33;35609:5;35582:33;:::i;:::-;35478:143;;;;:::o;35627:351::-;35697:6;35746:2;35734:9;35725:7;35721:23;35717:32;35714:119;;;35752:79;;:::i;:::-;35714:119;35872:1;35897:64;35953:7;35944:6;35933:9;35929:22;35897:64;:::i;:::-;35887:74;;35843:128;35627:351;;;;:::o;35984:85::-;36029:7;36058:5;36047:16;;35984:85;;;:::o;36075:158::-;36133:9;36166:61;36184:42;36193:32;36219:5;36193:32;:::i;:::-;36184:42;:::i;:::-;36166:61;:::i;:::-;36153:74;;36075:158;;;:::o;36239:147::-;36334:45;36373:5;36334:45;:::i;:::-;36329:3;36322:58;36239:147;;:::o;36392:114::-;36459:6;36493:5;36487:12;36477:22;;36392:114;;;:::o;36512:184::-;36611:11;36645:6;36640:3;36633:19;36685:4;36680:3;36676:14;36661:29;;36512:184;;;;:::o;36702:132::-;36769:4;36792:3;36784:11;;36822:4;36817:3;36813:14;36805:22;;36702:132;;;:::o;36840:108::-;36917:24;36935:5;36917:24;:::i;:::-;36912:3;36905:37;36840:108;;:::o;36954:179::-;37023:10;37044:46;37086:3;37078:6;37044:46;:::i;:::-;37122:4;37117:3;37113:14;37099:28;;36954:179;;;;:::o;37139:113::-;37209:4;37241;37236:3;37232:14;37224:22;;37139:113;;;:::o;37288:732::-;37407:3;37436:54;37484:5;37436:54;:::i;:::-;37506:86;37585:6;37580:3;37506:86;:::i;:::-;37499:93;;37616:56;37666:5;37616:56;:::i;:::-;37695:7;37726:1;37711:284;37736:6;37733:1;37730:13;37711:284;;;37812:6;37806:13;37839:63;37898:3;37883:13;37839:63;:::i;:::-;37832:70;;37925:60;37978:6;37925:60;:::i;:::-;37915:70;;37771:224;37758:1;37755;37751:9;37746:14;;37711:284;;;37715:14;38011:3;38004:10;;37412:608;;;37288:732;;;;:::o;38026:831::-;38289:4;38327:3;38316:9;38312:19;38304:27;;38341:71;38409:1;38398:9;38394:17;38385:6;38341:71;:::i;:::-;38422:80;38498:2;38487:9;38483:18;38474:6;38422:80;:::i;:::-;38549:9;38543:4;38539:20;38534:2;38523:9;38519:18;38512:48;38577:108;38680:4;38671:6;38577:108;:::i;:::-;38569:116;;38695:72;38763:2;38752:9;38748:18;38739:6;38695:72;:::i;:::-;38777:73;38845:3;38834:9;38830:19;38821:6;38777:73;:::i;:::-;38026:831;;;;;;;;:::o;38863:220::-;39003:34;38999:1;38991:6;38987:14;38980:58;39072:3;39067:2;39059:6;39055:15;39048:28;38863:220;:::o;39089:366::-;39231:3;39252:67;39316:2;39311:3;39252:67;:::i;:::-;39245:74;;39328:93;39417:3;39328:93;:::i;:::-;39446:2;39441:3;39437:12;39430:19;;39089:366;;;:::o;39461:419::-;39627:4;39665:2;39654:9;39650:18;39642:26;;39714:9;39708:4;39704:20;39700:1;39689:9;39685:17;39678:47;39742:131;39868:4;39742:131;:::i;:::-;39734:139;;39461:419;;;:::o;39886:807::-;40135:4;40173:3;40162:9;40158:19;40150:27;;40187:71;40255:1;40244:9;40240:17;40231:6;40187:71;:::i;:::-;40268:72;40336:2;40325:9;40321:18;40312:6;40268:72;:::i;:::-;40350:80;40426:2;40415:9;40411:18;40402:6;40350:80;:::i;:::-;40440;40516:2;40505:9;40501:18;40492:6;40440:80;:::i;:::-;40530:73;40598:3;40587:9;40583:19;40574:6;40530:73;:::i;:::-;40613;40681:3;40670:9;40666:19;40657:6;40613:73;:::i;:::-;39886:807;;;;;;;;;:::o;40699:143::-;40756:5;40787:6;40781:13;40772:22;;40803:33;40830:5;40803:33;:::i;:::-;40699:143;;;;:::o;40848:663::-;40936:6;40944;40952;41001:2;40989:9;40980:7;40976:23;40972:32;40969:119;;;41007:79;;:::i;:::-;40969:119;41127:1;41152:64;41208:7;41199:6;41188:9;41184:22;41152:64;:::i;:::-;41142:74;;41098:128;41265:2;41291:64;41347:7;41338:6;41327:9;41323:22;41291:64;:::i;:::-;41281:74;;41236:129;41404:2;41430:64;41486:7;41477:6;41466:9;41462:22;41430:64;:::i;:::-;41420:74;;41375:129;40848:663;;;;;:::o

Swarm Source

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