ERC-20
Overview
Max Total Supply
10,000,000 DTM
Holders
29
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2.779269403903713702 DTMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DumbMoney
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-26 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @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://consensys.net/diligence/blog/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.8.0/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"); (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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: contracts/DumbMoney.sol pragma solidity ^0.8.18; // import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut); function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn); function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /* 1% burn for each buy and sell transaction. 1% allocated to marketing for each buy and sell transaction. 1% contributed back to liquidity for each buy and sell transaction. 1% Reflection Token Details: Token Name: Dumbmoney Token Symbol: DTM Total Supply: 10,000,000 */ contract DumbMoney 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 _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 public _tTotal = 10000000 * 10 ** 18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string public constant _symbol = "DTM"; string public constant _name = "Dumbmoney"; uint8 public _decimals = 18; uint256 public _tokenHolderPercentage = 100; //expressed in multiple of 100s uint256 private _previousTokenHolderPercentage = _tokenHolderPercentage; uint256 public _liquidityFee = 100; //expressed in multiple of 100s uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _burnFee = 100; //expressed in multiple of 100s uint256 private _previousBurnFee = _burnFee; uint256 public _marketingPercentage = 100; //expressed in multiple of 100s uint256 private _previousMarketingPercentage = _marketingPercentage; address public marketingWallet; // IuniswapRouter02 public immutable uniswapRouter; IUniswapV2Router02 public uniswapRouter; address public uniswapPair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 private numTokensSellToAddToLiquidity = 1000000 * 10 ** 18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor(address _marketingWallet) { marketingWallet = _marketingWallet; _rOwned[_msgSender()] = _rTotal; uniswapRouter = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswapPair pair for this new token uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair( address(this), uniswapRouter.WETH() ); //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure 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 isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function setMarketingFeePercent( uint256 newMarketingFee ) external onlyOwner { _marketingPercentage = newMarketingFee; } function setTokenHolderPercent( uint256 tokenHolderPercentage ) external onlyOwner { _tokenHolderPercentage = tokenHolderPercentage; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner { _liquidityFee = liquidityFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner { _burnFee = burnFee; } 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 excludeFromReward(address account) public onlyOwner { require( account != 0x10ED43C718714eb63d5aA57B78B54704E256024E, "We can not exclude Pancake router." ); require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _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); } //to recieve ETH from uniswapRouter 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 = calculateHolderPercentage(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 calculateHolderPercentage( uint256 _amount ) private view returns (uint256) { return _amount.mul(_tokenHolderPercentage).div(10 ** 4); } function calculateLiquidityFee( uint256 _amount ) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10 ** 4); } function removeAllFee() private { _tokenHolderPercentage = 0; _liquidityFee = 0; _burnFee = 0; _marketingPercentage = 0; } function restoreAllFee() private { _tokenHolderPercentage = _previousTokenHolderPercentage; _liquidityFee = _previousLiquidityFee; _burnFee = _previousBurnFee; _marketingPercentage = _previousMarketingPercentage; } 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"); // 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)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapPair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves 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); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } 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] = uniswapRouter.WETH(); _approve(address(this), address(uniswapRouter), tokenAmount); // make the swap uniswapRouter.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(uniswapRouter), tokenAmount); // add the liquidity uniswapRouter.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 ) private { if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { removeAllFee(); } //Calculate burn amount and marketingPercentage amount uint256 burnAmt = amount.mul(_burnFee).div(10000); uint256 marketingAmt = amount.mul(_marketingPercentage).div(10000); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded( sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)) ); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded( sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)) ); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard( sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)) ); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded( sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)) ); } else { _transferStandard( sender, recipient, (amount.sub(burnAmt).sub(marketingAmt)) ); } //Temporarily remove fees to transfer to burn address and marketing wallet _tokenHolderPercentage = 0; _liquidityFee = 0; //Send transfers to burn and marketing wallet _transferStandard(sender, address(0), burnAmt); _transferStandard(sender, marketingWallet, marketingAmt); //Restore tax and liquidity fees _tokenHolderPercentage = _previousTokenHolderPercentage; _liquidityFee = _previousLiquidityFee; if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) 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); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setmarketingWallet(address newWallet) external onlyOwner { marketingWallet = newWallet; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"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":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenHolderPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenHolderPercentage","type":"uint256"}],"name":"setTokenHolderPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","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":"pure","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":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526a084595161401484a0000006007556007546000196200002591906200063b565b600019620000349190620006a2565b6008556012600a60006101000a81548160ff021916908360ff1602179055506064600b55600b54600c556064600d55600d54600e556064600f55600f54601055606460115560115460125560006015806101000a81548160ff02191690831515021790555069d3c21bcecceda1000000601655348015620000b457600080fd5b506040516200522b3803806200522b8339818101604052810190620000da919062000747565b620000fa620000ee6200050d60201b60201c565b6200051560201b60201c565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085460016000620001526200050d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000279919062000747565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000329919062000747565b6040518363ffffffff1660e01b8152600401620003489291906200078a565b6020604051808303816000875af115801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e919062000747565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620003e4620005d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200049d6200050d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620004fe9190620007c8565b60405180910390a350620007e5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620006488262000602565b9150620006558362000602565b9250826200066857620006676200060c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620006af8262000602565b9150620006bc8362000602565b9250828203905081811115620006d757620006d662000673565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200070f82620006e2565b9050919050565b620007218162000702565b81146200072d57600080fd5b50565b600081519050620007418162000716565b92915050565b60006020828403121562000760576200075f620006dd565b5b6000620007708482850162000730565b91505092915050565b620007848162000702565b82525050565b6000604082019050620007a1600083018562000779565b620007b0602083018462000779565b9392505050565b620007c28162000602565b82525050565b6000602082019050620007df6000830184620007b7565b92915050565b614a3680620007f56000396000f3fe6080604052600436106102555760003560e01c8063715018a611610139578063a9059cbb116100b6578063c816841b1161007a578063c816841b146108fb578063cea2695814610926578063d28d88521461094f578063dd62ed3e1461097a578063ea2f0b37146109b7578063f2fde38b146109e05761025c565b8063a9059cbb14610814578063af465a2714610851578063b09f12661461087c578063c0b0fda2146108a7578063c49b9a80146108d25761025c565b80638da5cb5b116100fd5780638da5cb5b1461072f5780638ee88c531461075a57806395d89b41146107835780639ef340ea146107ae578063a457c2d7146107d75761025c565b8063715018a61461065a578063735de9f71461067157806375f0a8741461069c578063762c3915146106c757806388f82020146106f25761025c565b806339509351116101d25780634a74bb02116101965780634a74bb021461053657806352390c02146105615780635342acb41461058a57806359f26ff6146105c75780636bc87c3a146105f257806370a082311461061d5761025c565b806339509351146104415780633bd5d1731461047e578063437823ec146104a75780634549b039146104d0578063457c194c1461050d5761025c565b806323b872dd1161021957806323b872dd146103485780632d83811914610385578063313ce567146103c257806332424aa3146103ed5780633685d419146104185761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c957806318160ddd146102f4578063224611731461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a09565b6040516102839190613aee565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613ba9565b610a46565b6040516102c09190613c04565b60405180910390f35b3480156102d557600080fd5b506102de610a64565b6040516102eb9190613c2e565b60405180910390f35b34801561030057600080fd5b50610309610a6e565b6040516103169190613c2e565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613c49565b610a78565b005b34801561035457600080fd5b5061036f600480360381019061036a9190613c76565b610ac4565b60405161037c9190613c04565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613cc9565b610b9d565b6040516103b99190613c2e565b60405180910390f35b3480156103ce57600080fd5b506103d7610c0b565b6040516103e49190613d12565b60405180910390f35b3480156103f957600080fd5b50610402610c22565b60405161040f9190613d12565b60405180910390f35b34801561042457600080fd5b5061043f600480360381019061043a9190613c49565b610c35565b005b34801561044d57600080fd5b5061046860048036038101906104639190613ba9565b610ef6565b6040516104759190613c04565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190613cc9565b610fa9565b005b3480156104b357600080fd5b506104ce60048036038101906104c99190613c49565b611124565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190613d59565b611187565b6040516105049190613c2e565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613cc9565b61120b565b005b34801561054257600080fd5b5061054b61121d565b6040516105589190613c04565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190613c49565b61122e565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613c49565b6114d7565b6040516105be9190613c04565b60405180910390f35b3480156105d357600080fd5b506105dc61152d565b6040516105e99190613c2e565b60405180910390f35b3480156105fe57600080fd5b50610607611533565b6040516106149190613c2e565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613c49565b611539565b6040516106519190613c2e565b60405180910390f35b34801561066657600080fd5b5061066f611624565b005b34801561067d57600080fd5b50610686611638565b6040516106939190613df8565b60405180910390f35b3480156106a857600080fd5b506106b161165e565b6040516106be9190613e22565b60405180910390f35b3480156106d357600080fd5b506106dc611684565b6040516106e99190613c2e565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613c49565b61168a565b6040516107269190613c04565b60405180910390f35b34801561073b57600080fd5b506107446116e0565b6040516107519190613e22565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190613cc9565b611709565b005b34801561078f57600080fd5b5061079861171b565b6040516107a59190613aee565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613cc9565b611758565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613ba9565b61176a565b60405161080b9190613c04565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190613ba9565b611837565b6040516108489190613c04565b60405180910390f35b34801561085d57600080fd5b50610866611855565b6040516108739190613c2e565b60405180910390f35b34801561088857600080fd5b5061089161185b565b60405161089e9190613aee565b60405180910390f35b3480156108b357600080fd5b506108bc611894565b6040516108c99190613c2e565b60405180910390f35b3480156108de57600080fd5b506108f960048036038101906108f49190613e3d565b61189a565b005b34801561090757600080fd5b506109106118f5565b60405161091d9190613e22565b60405180910390f35b34801561093257600080fd5b5061094d60048036038101906109489190613cc9565b61191b565b005b34801561095b57600080fd5b5061096461192d565b6040516109719190613aee565b60405180910390f35b34801561098657600080fd5b506109a1600480360381019061099c9190613e6a565b611966565b6040516109ae9190613c2e565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190613c49565b6119ed565b005b3480156109ec57600080fd5b50610a076004803603810190610a029190613c49565b611a50565b005b60606040518060400160405280600981526020017f44756d626d6f6e65790000000000000000000000000000000000000000000000815250905090565b6000610a5a610a53611ad3565b8484611adb565b6001905092915050565b6000600954905090565b6000600754905090565b610a80611ca4565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610ad1848484611d22565b610b9284610add611ad3565b610b8d856040518060600160405280602881526020016149b460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b43611ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f0a9092919063ffffffff16565b611adb565b600190509392505050565b6000600854821115610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90613f1c565b60405180910390fd5b6000610bee611f5f565b9050610c038184611f8a90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b600a60009054906101000a900460ff1681565b610c3d611ca4565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090613f88565b60405180910390fd5b60005b600680549050811015610ef2578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d0457610d03613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610edf5760066001600680549050610d5e9190614006565b81548110610d6f57610d6e613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610dae57610dad613fa8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610ea557610ea461403a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610ef2565b8080610eea90614069565b915050610ccc565b5050565b6000610f9f610f03611ad3565b84610f9a8560036000610f14611ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b611adb565b6001905092915050565b6000610fb3611ad3565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614123565b60405180910390fd5b600061104d83611fb6565b505050505090506110a681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110fe8160085461201290919063ffffffff16565b60088190555061111983600954611fa090919063ffffffff16565b600981905550505050565b61112c611ca4565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006007548311156111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c59061418f565b60405180910390fd5b816111ee5760006111de84611fb6565b5050505050905080915050611205565b60006111f984611fb6565b50505050915050809150505b92915050565b611213611ca4565b8060118190555050565b60158054906101000a900460ff1681565b611236611ca4565b7310ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90614221565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613f88565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611419576113d5600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b600d5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061161f565b61161c600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9d565b90505b919050565b61162c611ca4565b6116366000612028565b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611711611ca4565b80600d8190555050565b60606040518060400160405280600381526020017f44544d0000000000000000000000000000000000000000000000000000000000815250905090565b611760611ca4565b80600b8190555050565b600061182d611777611ad3565b84611828856040518060600160405280602581526020016149dc60259139600360006117a1611ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f0a9092919063ffffffff16565b611adb565b6001905092915050565b600061184b611844611ad3565b8484611d22565b6001905092915050565b60075481565b6040518060400160405280600381526020017f44544d000000000000000000000000000000000000000000000000000000000081525081565b600f5481565b6118a2611ca4565b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516118ea9190613c04565b60405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611923611ca4565b80600f8190555050565b6040518060400160405280600981526020017f44756d626d6f6e6579000000000000000000000000000000000000000000000081525081565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119f5611ca4565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a58611ca4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe906142b3565b60405180910390fd5b611ad081612028565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190614345565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb0906143d7565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c979190613c2e565b60405180910390a3505050565b611cac611ad3565b73ffffffffffffffffffffffffffffffffffffffff16611cca6116e0565b73ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790614443565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d88906144d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790614567565b60405180910390fd5b60008111611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a906145f9565b60405180910390fd5b6000611e4e30611539565b905060006016548210159050808015611e745750601560149054906101000a900460ff16155b8015611ece5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611ee4575060158054906101000a900460ff165b15611ef8576016549150611ef7826120ec565b5b611f038585856121c2565b5050505050565b6000838311158290611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f499190613aee565b60405180910390fd5b5082840390509392505050565b6000806000611f6c61277f565b91509150611f838183611f8a90919063ffffffff16565b9250505090565b60008183611f989190614648565b905092915050565b60008183611fae9190614679565b905092915050565b6000806000806000806000806000611fcd8a612a32565b9250925092506000806000611feb8d8686611fe6611f5f565b612a8c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600081836120209190614006565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601560146101000a81548160ff021916908315150217905550600061211d600283611f8a90919063ffffffff16565b90506000612134828461201290919063ffffffff16565b9050600047905061214483612b15565b6000612159824761201290919063ffffffff16565b90506121658382612d58565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612198939291906146ad565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122635750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561227157612270612e3d565b5b600061229c61271061228e600f5485612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b905060006122c96127106122bb60115486612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561236e5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123a7576123a2858561239d8461238f878961201290919063ffffffff16565b61201290919063ffffffff16565b612e75565b61266e565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561244a5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124835761247e85856124798461246b878961201290919063ffffffff16565b61201290919063ffffffff16565b6130d5565b61266d565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125275750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125605761255b858561255684612548878961201290919063ffffffff16565b61201290919063ffffffff16565b613335565b61266c565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126025750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561263b57612636858561263184612623878961201290919063ffffffff16565b61201290919063ffffffff16565b613500565b61266b565b61266a858561266584612657878961201290919063ffffffff16565b61201290919063ffffffff16565b613335565b5b5b5b5b6000600b819055506000600d8190555061268a85600084613335565b6126b785601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613335565b600c54600b81905550600e54600d81905550600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276a5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612778576127776137f5565b5b5050505050565b600080600060085490506000600754905060005b6006805490508110156129f5578260016000600684815481106127b9576127b8613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806128a7575081600260006006848154811061283f5761283e613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128be5760085460075494509450505050612a2e565b61294e60016000600684815481106128d9576128d8613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461201290919063ffffffff16565b92506129e0600260006006848154811061296b5761296a613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361201290919063ffffffff16565b915080806129ed90614069565b915050612793565b50612a0d600754600854611f8a90919063ffffffff16565b821015612a2557600854600754935093505050612a2e565b81819350935050505b9091565b600080600080612a418561381b565b90506000612a4e8661384d565b90506000612a7782612a69858a61201290919063ffffffff16565b61201290919063ffffffff16565b90508083839550955095505050509193909250565b600080600080612aa58589612e5f90919063ffffffff16565b90506000612abc8689612e5f90919063ffffffff16565b90506000612ad38789612e5f90919063ffffffff16565b90506000612afc82612aee858761201290919063ffffffff16565b61201290919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115612b3257612b316146e4565b5b604051908082528060200260200182016040528015612b605781602001602082028036833780820191505090505b5090503081600081518110612b7857612b77613fa8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c439190614728565b81600181518110612c5757612c56613fa8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cbe30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611adb565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d2295949392919061484e565b600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505050565b612d8530601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611adb565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612dd16116e0565b426040518863ffffffff1660e01b8152600401612df3969594939291906148a8565b60606040518083038185885af1158015612e11573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e36919061491e565b5050505050565b6000600b819055506000600d819055506000600f819055506000601181905550565b60008183612e6d9190614971565b905092915050565b600080600080600080612e8787611fb6565b955095509550955095509550612ee587600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f7a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061305b8161387f565b6130658483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130c29190613c2e565b60405180910390a3505050505050505050565b6000806000806000806130e787611fb6565b95509550955095509550955061314586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131da83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132bb8161387f565b6132c58483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133229190613c2e565b60405180910390a3505050505050505050565b60008060008060008061334787611fb6565b9550955095509550955095506133a586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134868161387f565b6134908483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134ed9190613c2e565b60405180910390a3505050505050505050565b60008060008060008061351287611fb6565b95509550955095509550955061357087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377b8161387f565b6137858483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137e29190613c2e565b60405180910390a3505050505050505050565b600c54600b81905550600e54600d81905550601054600f81905550601254601181905550565b6000613846612710613838600b5485612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b9050919050565b600061387861271061386a600d5485612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b9050919050565b6000613889611f5f565b905060006138a08284612e5f90919063ffffffff16565b90506138f481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a1f576139db83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613a398260085461201290919063ffffffff16565b600881905550613a5481600954611fa090919063ffffffff16565b6009819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a98578082015181840152602081019050613a7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ac082613a5e565b613aca8185613a69565b9350613ada818560208601613a7a565b613ae381613aa4565b840191505092915050565b60006020820190508181036000830152613b088184613ab5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b4082613b15565b9050919050565b613b5081613b35565b8114613b5b57600080fd5b50565b600081359050613b6d81613b47565b92915050565b6000819050919050565b613b8681613b73565b8114613b9157600080fd5b50565b600081359050613ba381613b7d565b92915050565b60008060408385031215613bc057613bbf613b10565b5b6000613bce85828601613b5e565b9250506020613bdf85828601613b94565b9150509250929050565b60008115159050919050565b613bfe81613be9565b82525050565b6000602082019050613c196000830184613bf5565b92915050565b613c2881613b73565b82525050565b6000602082019050613c436000830184613c1f565b92915050565b600060208284031215613c5f57613c5e613b10565b5b6000613c6d84828501613b5e565b91505092915050565b600080600060608486031215613c8f57613c8e613b10565b5b6000613c9d86828701613b5e565b9350506020613cae86828701613b5e565b9250506040613cbf86828701613b94565b9150509250925092565b600060208284031215613cdf57613cde613b10565b5b6000613ced84828501613b94565b91505092915050565b600060ff82169050919050565b613d0c81613cf6565b82525050565b6000602082019050613d276000830184613d03565b92915050565b613d3681613be9565b8114613d4157600080fd5b50565b600081359050613d5381613d2d565b92915050565b60008060408385031215613d7057613d6f613b10565b5b6000613d7e85828601613b94565b9250506020613d8f85828601613d44565b9150509250929050565b6000819050919050565b6000613dbe613db9613db484613b15565b613d99565b613b15565b9050919050565b6000613dd082613da3565b9050919050565b6000613de282613dc5565b9050919050565b613df281613dd7565b82525050565b6000602082019050613e0d6000830184613de9565b92915050565b613e1c81613b35565b82525050565b6000602082019050613e376000830184613e13565b92915050565b600060208284031215613e5357613e52613b10565b5b6000613e6184828501613d44565b91505092915050565b60008060408385031215613e8157613e80613b10565b5b6000613e8f85828601613b5e565b9250506020613ea085828601613b5e565b9150509250929050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613f06602a83613a69565b9150613f1182613eaa565b604082019050919050565b60006020820190508181036000830152613f3581613ef9565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000613f72601b83613a69565b9150613f7d82613f3c565b602082019050919050565b60006020820190508181036000830152613fa181613f65565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061401182613b73565b915061401c83613b73565b925082820390508181111561403457614033613fd7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061407482613b73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140a6576140a5613fd7565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061410d602c83613a69565b9150614118826140b1565b604082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614179601f83613a69565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f57652063616e206e6f74206578636c7564652050616e63616b6520726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b600061420b602283613a69565b9150614216826141af565b604082019050919050565b6000602082019050818103600083015261423a816141fe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061429d602683613a69565b91506142a882614241565b604082019050919050565b600060208201905081810360008301526142cc81614290565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061432f602483613a69565b915061433a826142d3565b604082019050919050565b6000602082019050818103600083015261435e81614322565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c1602283613a69565b91506143cc82614365565b604082019050919050565b600060208201905081810360008301526143f0816143b4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061442d602083613a69565b9150614438826143f7565b602082019050919050565b6000602082019050818103600083015261445c81614420565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144bf602583613a69565b91506144ca82614463565b604082019050919050565b600060208201905081810360008301526144ee816144b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614551602383613a69565b915061455c826144f5565b604082019050919050565b6000602082019050818103600083015261458081614544565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006145e3602983613a69565b91506145ee82614587565b604082019050919050565b60006020820190508181036000830152614612816145d6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061465382613b73565b915061465e83613b73565b92508261466e5761466d614619565b5b828204905092915050565b600061468482613b73565b915061468f83613b73565b92508282019050808211156146a7576146a6613fd7565b5b92915050565b60006060820190506146c26000830186613c1f565b6146cf6020830185613c1f565b6146dc6040830184613c1f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061472281613b47565b92915050565b60006020828403121561473e5761473d613b10565b5b600061474c84828501614713565b91505092915050565b6000819050919050565b600061477a61477561477084614755565b613d99565b613b73565b9050919050565b61478a8161475f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147c581613b35565b82525050565b60006147d783836147bc565b60208301905092915050565b6000602082019050919050565b60006147fb82614790565b614805818561479b565b9350614810836147ac565b8060005b8381101561484157815161482888826147cb565b9750614833836147e3565b925050600181019050614814565b5085935050505092915050565b600060a0820190506148636000830188613c1f565b6148706020830187614781565b818103604083015261488281866147f0565b90506148916060830185613e13565b61489e6080830184613c1f565b9695505050505050565b600060c0820190506148bd6000830189613e13565b6148ca6020830188613c1f565b6148d76040830187614781565b6148e46060830186614781565b6148f16080830185613e13565b6148fe60a0830184613c1f565b979650505050505050565b60008151905061491881613b7d565b92915050565b60008060006060848603121561493757614936613b10565b5b600061494586828701614909565b935050602061495686828701614909565b925050604061496786828701614909565b9150509250925092565b600061497c82613b73565b915061498783613b73565b925082820261499581613b73565b915082820484148315176149ac576149ab613fd7565b5b509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207528416058bde7f09ad04b23dd91072bd6898af9c60f4b3202465c9f552a0bd564736f6c63430008120033000000000000000000000000d497bc9dbf4839a8a262faa19e87eb48267c5087
Deployed Bytecode
0x6080604052600436106102555760003560e01c8063715018a611610139578063a9059cbb116100b6578063c816841b1161007a578063c816841b146108fb578063cea2695814610926578063d28d88521461094f578063dd62ed3e1461097a578063ea2f0b37146109b7578063f2fde38b146109e05761025c565b8063a9059cbb14610814578063af465a2714610851578063b09f12661461087c578063c0b0fda2146108a7578063c49b9a80146108d25761025c565b80638da5cb5b116100fd5780638da5cb5b1461072f5780638ee88c531461075a57806395d89b41146107835780639ef340ea146107ae578063a457c2d7146107d75761025c565b8063715018a61461065a578063735de9f71461067157806375f0a8741461069c578063762c3915146106c757806388f82020146106f25761025c565b806339509351116101d25780634a74bb02116101965780634a74bb021461053657806352390c02146105615780635342acb41461058a57806359f26ff6146105c75780636bc87c3a146105f257806370a082311461061d5761025c565b806339509351146104415780633bd5d1731461047e578063437823ec146104a75780634549b039146104d0578063457c194c1461050d5761025c565b806323b872dd1161021957806323b872dd146103485780632d83811914610385578063313ce567146103c257806332424aa3146103ed5780633685d419146104185761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c957806318160ddd146102f4578063224611731461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a09565b6040516102839190613aee565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613ba9565b610a46565b6040516102c09190613c04565b60405180910390f35b3480156102d557600080fd5b506102de610a64565b6040516102eb9190613c2e565b60405180910390f35b34801561030057600080fd5b50610309610a6e565b6040516103169190613c2e565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613c49565b610a78565b005b34801561035457600080fd5b5061036f600480360381019061036a9190613c76565b610ac4565b60405161037c9190613c04565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613cc9565b610b9d565b6040516103b99190613c2e565b60405180910390f35b3480156103ce57600080fd5b506103d7610c0b565b6040516103e49190613d12565b60405180910390f35b3480156103f957600080fd5b50610402610c22565b60405161040f9190613d12565b60405180910390f35b34801561042457600080fd5b5061043f600480360381019061043a9190613c49565b610c35565b005b34801561044d57600080fd5b5061046860048036038101906104639190613ba9565b610ef6565b6040516104759190613c04565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190613cc9565b610fa9565b005b3480156104b357600080fd5b506104ce60048036038101906104c99190613c49565b611124565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190613d59565b611187565b6040516105049190613c2e565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613cc9565b61120b565b005b34801561054257600080fd5b5061054b61121d565b6040516105589190613c04565b60405180910390f35b34801561056d57600080fd5b5061058860048036038101906105839190613c49565b61122e565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613c49565b6114d7565b6040516105be9190613c04565b60405180910390f35b3480156105d357600080fd5b506105dc61152d565b6040516105e99190613c2e565b60405180910390f35b3480156105fe57600080fd5b50610607611533565b6040516106149190613c2e565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613c49565b611539565b6040516106519190613c2e565b60405180910390f35b34801561066657600080fd5b5061066f611624565b005b34801561067d57600080fd5b50610686611638565b6040516106939190613df8565b60405180910390f35b3480156106a857600080fd5b506106b161165e565b6040516106be9190613e22565b60405180910390f35b3480156106d357600080fd5b506106dc611684565b6040516106e99190613c2e565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613c49565b61168a565b6040516107269190613c04565b60405180910390f35b34801561073b57600080fd5b506107446116e0565b6040516107519190613e22565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190613cc9565b611709565b005b34801561078f57600080fd5b5061079861171b565b6040516107a59190613aee565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613cc9565b611758565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613ba9565b61176a565b60405161080b9190613c04565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190613ba9565b611837565b6040516108489190613c04565b60405180910390f35b34801561085d57600080fd5b50610866611855565b6040516108739190613c2e565b60405180910390f35b34801561088857600080fd5b5061089161185b565b60405161089e9190613aee565b60405180910390f35b3480156108b357600080fd5b506108bc611894565b6040516108c99190613c2e565b60405180910390f35b3480156108de57600080fd5b506108f960048036038101906108f49190613e3d565b61189a565b005b34801561090757600080fd5b506109106118f5565b60405161091d9190613e22565b60405180910390f35b34801561093257600080fd5b5061094d60048036038101906109489190613cc9565b61191b565b005b34801561095b57600080fd5b5061096461192d565b6040516109719190613aee565b60405180910390f35b34801561098657600080fd5b506109a1600480360381019061099c9190613e6a565b611966565b6040516109ae9190613c2e565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190613c49565b6119ed565b005b3480156109ec57600080fd5b50610a076004803603810190610a029190613c49565b611a50565b005b60606040518060400160405280600981526020017f44756d626d6f6e65790000000000000000000000000000000000000000000000815250905090565b6000610a5a610a53611ad3565b8484611adb565b6001905092915050565b6000600954905090565b6000600754905090565b610a80611ca4565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610ad1848484611d22565b610b9284610add611ad3565b610b8d856040518060600160405280602881526020016149b460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b43611ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f0a9092919063ffffffff16565b611adb565b600190509392505050565b6000600854821115610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90613f1c565b60405180910390fd5b6000610bee611f5f565b9050610c038184611f8a90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b600a60009054906101000a900460ff1681565b610c3d611ca4565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090613f88565b60405180910390fd5b60005b600680549050811015610ef2578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d0457610d03613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610edf5760066001600680549050610d5e9190614006565b81548110610d6f57610d6e613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610dae57610dad613fa8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610ea557610ea461403a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610ef2565b8080610eea90614069565b915050610ccc565b5050565b6000610f9f610f03611ad3565b84610f9a8560036000610f14611ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b611adb565b6001905092915050565b6000610fb3611ad3565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614123565b60405180910390fd5b600061104d83611fb6565b505050505090506110a681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110fe8160085461201290919063ffffffff16565b60088190555061111983600954611fa090919063ffffffff16565b600981905550505050565b61112c611ca4565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006007548311156111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c59061418f565b60405180910390fd5b816111ee5760006111de84611fb6565b5050505050905080915050611205565b60006111f984611fb6565b50505050915050809150505b92915050565b611213611ca4565b8060118190555050565b60158054906101000a900460ff1681565b611236611ca4565b7310ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90614221565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613f88565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611419576113d5600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b600d5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061161f565b61161c600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b9d565b90505b919050565b61162c611ca4565b6116366000612028565b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611711611ca4565b80600d8190555050565b60606040518060400160405280600381526020017f44544d0000000000000000000000000000000000000000000000000000000000815250905090565b611760611ca4565b80600b8190555050565b600061182d611777611ad3565b84611828856040518060600160405280602581526020016149dc60259139600360006117a1611ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f0a9092919063ffffffff16565b611adb565b6001905092915050565b600061184b611844611ad3565b8484611d22565b6001905092915050565b60075481565b6040518060400160405280600381526020017f44544d000000000000000000000000000000000000000000000000000000000081525081565b600f5481565b6118a2611ca4565b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516118ea9190613c04565b60405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611923611ca4565b80600f8190555050565b6040518060400160405280600981526020017f44756d626d6f6e6579000000000000000000000000000000000000000000000081525081565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119f5611ca4565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a58611ca4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe906142b3565b60405180910390fd5b611ad081612028565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190614345565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb0906143d7565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c979190613c2e565b60405180910390a3505050565b611cac611ad3565b73ffffffffffffffffffffffffffffffffffffffff16611cca6116e0565b73ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790614443565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d88906144d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790614567565b60405180910390fd5b60008111611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a906145f9565b60405180910390fd5b6000611e4e30611539565b905060006016548210159050808015611e745750601560149054906101000a900460ff16155b8015611ece5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611ee4575060158054906101000a900460ff165b15611ef8576016549150611ef7826120ec565b5b611f038585856121c2565b5050505050565b6000838311158290611f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f499190613aee565b60405180910390fd5b5082840390509392505050565b6000806000611f6c61277f565b91509150611f838183611f8a90919063ffffffff16565b9250505090565b60008183611f989190614648565b905092915050565b60008183611fae9190614679565b905092915050565b6000806000806000806000806000611fcd8a612a32565b9250925092506000806000611feb8d8686611fe6611f5f565b612a8c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600081836120209190614006565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601560146101000a81548160ff021916908315150217905550600061211d600283611f8a90919063ffffffff16565b90506000612134828461201290919063ffffffff16565b9050600047905061214483612b15565b6000612159824761201290919063ffffffff16565b90506121658382612d58565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612198939291906146ad565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122635750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561227157612270612e3d565b5b600061229c61271061228e600f5485612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b905060006122c96127106122bb60115486612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561236e5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123a7576123a2858561239d8461238f878961201290919063ffffffff16565b61201290919063ffffffff16565b612e75565b61266e565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561244a5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124835761247e85856124798461246b878961201290919063ffffffff16565b61201290919063ffffffff16565b6130d5565b61266d565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125275750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125605761255b858561255684612548878961201290919063ffffffff16565b61201290919063ffffffff16565b613335565b61266c565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126025750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561263b57612636858561263184612623878961201290919063ffffffff16565b61201290919063ffffffff16565b613500565b61266b565b61266a858561266584612657878961201290919063ffffffff16565b61201290919063ffffffff16565b613335565b5b5b5b5b6000600b819055506000600d8190555061268a85600084613335565b6126b785601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613335565b600c54600b81905550600e54600d81905550600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276a5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612778576127776137f5565b5b5050505050565b600080600060085490506000600754905060005b6006805490508110156129f5578260016000600684815481106127b9576127b8613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806128a7575081600260006006848154811061283f5761283e613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128be5760085460075494509450505050612a2e565b61294e60016000600684815481106128d9576128d8613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461201290919063ffffffff16565b92506129e0600260006006848154811061296b5761296a613fa8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361201290919063ffffffff16565b915080806129ed90614069565b915050612793565b50612a0d600754600854611f8a90919063ffffffff16565b821015612a2557600854600754935093505050612a2e565b81819350935050505b9091565b600080600080612a418561381b565b90506000612a4e8661384d565b90506000612a7782612a69858a61201290919063ffffffff16565b61201290919063ffffffff16565b90508083839550955095505050509193909250565b600080600080612aa58589612e5f90919063ffffffff16565b90506000612abc8689612e5f90919063ffffffff16565b90506000612ad38789612e5f90919063ffffffff16565b90506000612afc82612aee858761201290919063ffffffff16565b61201290919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115612b3257612b316146e4565b5b604051908082528060200260200182016040528015612b605781602001602082028036833780820191505090505b5090503081600081518110612b7857612b77613fa8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c439190614728565b81600181518110612c5757612c56613fa8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cbe30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611adb565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d2295949392919061484e565b600060405180830381600087803b158015612d3c57600080fd5b505af1158015612d50573d6000803e3d6000fd5b505050505050565b612d8530601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611adb565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612dd16116e0565b426040518863ffffffff1660e01b8152600401612df3969594939291906148a8565b60606040518083038185885af1158015612e11573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e36919061491e565b5050505050565b6000600b819055506000600d819055506000600f819055506000601181905550565b60008183612e6d9190614971565b905092915050565b600080600080600080612e8787611fb6565b955095509550955095509550612ee587600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f7a86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061305b8161387f565b6130658483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130c29190613c2e565b60405180910390a3505050505050505050565b6000806000806000806130e787611fb6565b95509550955095509550955061314586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131da83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132bb8161387f565b6132c58483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133229190613c2e565b60405180910390a3505050505050505050565b60008060008060008061334787611fb6565b9550955095509550955095506133a586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134868161387f565b6134908483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134ed9190613c2e565b60405180910390a3505050505050505050565b60008060008060008061351287611fb6565b95509550955095509550955061357087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061377b8161387f565b6137858483613a24565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137e29190613c2e565b60405180910390a3505050505050505050565b600c54600b81905550600e54600d81905550601054600f81905550601254601181905550565b6000613846612710613838600b5485612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b9050919050565b600061387861271061386a600d5485612e5f90919063ffffffff16565b611f8a90919063ffffffff16565b9050919050565b6000613889611f5f565b905060006138a08284612e5f90919063ffffffff16565b90506138f481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a1f576139db83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613a398260085461201290919063ffffffff16565b600881905550613a5481600954611fa090919063ffffffff16565b6009819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a98578082015181840152602081019050613a7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ac082613a5e565b613aca8185613a69565b9350613ada818560208601613a7a565b613ae381613aa4565b840191505092915050565b60006020820190508181036000830152613b088184613ab5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b4082613b15565b9050919050565b613b5081613b35565b8114613b5b57600080fd5b50565b600081359050613b6d81613b47565b92915050565b6000819050919050565b613b8681613b73565b8114613b9157600080fd5b50565b600081359050613ba381613b7d565b92915050565b60008060408385031215613bc057613bbf613b10565b5b6000613bce85828601613b5e565b9250506020613bdf85828601613b94565b9150509250929050565b60008115159050919050565b613bfe81613be9565b82525050565b6000602082019050613c196000830184613bf5565b92915050565b613c2881613b73565b82525050565b6000602082019050613c436000830184613c1f565b92915050565b600060208284031215613c5f57613c5e613b10565b5b6000613c6d84828501613b5e565b91505092915050565b600080600060608486031215613c8f57613c8e613b10565b5b6000613c9d86828701613b5e565b9350506020613cae86828701613b5e565b9250506040613cbf86828701613b94565b9150509250925092565b600060208284031215613cdf57613cde613b10565b5b6000613ced84828501613b94565b91505092915050565b600060ff82169050919050565b613d0c81613cf6565b82525050565b6000602082019050613d276000830184613d03565b92915050565b613d3681613be9565b8114613d4157600080fd5b50565b600081359050613d5381613d2d565b92915050565b60008060408385031215613d7057613d6f613b10565b5b6000613d7e85828601613b94565b9250506020613d8f85828601613d44565b9150509250929050565b6000819050919050565b6000613dbe613db9613db484613b15565b613d99565b613b15565b9050919050565b6000613dd082613da3565b9050919050565b6000613de282613dc5565b9050919050565b613df281613dd7565b82525050565b6000602082019050613e0d6000830184613de9565b92915050565b613e1c81613b35565b82525050565b6000602082019050613e376000830184613e13565b92915050565b600060208284031215613e5357613e52613b10565b5b6000613e6184828501613d44565b91505092915050565b60008060408385031215613e8157613e80613b10565b5b6000613e8f85828601613b5e565b9250506020613ea085828601613b5e565b9150509250929050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613f06602a83613a69565b9150613f1182613eaa565b604082019050919050565b60006020820190508181036000830152613f3581613ef9565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000613f72601b83613a69565b9150613f7d82613f3c565b602082019050919050565b60006020820190508181036000830152613fa181613f65565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061401182613b73565b915061401c83613b73565b925082820390508181111561403457614033613fd7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061407482613b73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140a6576140a5613fd7565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061410d602c83613a69565b9150614118826140b1565b604082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614179601f83613a69565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f57652063616e206e6f74206578636c7564652050616e63616b6520726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b600061420b602283613a69565b9150614216826141af565b604082019050919050565b6000602082019050818103600083015261423a816141fe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061429d602683613a69565b91506142a882614241565b604082019050919050565b600060208201905081810360008301526142cc81614290565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061432f602483613a69565b915061433a826142d3565b604082019050919050565b6000602082019050818103600083015261435e81614322565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c1602283613a69565b91506143cc82614365565b604082019050919050565b600060208201905081810360008301526143f0816143b4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061442d602083613a69565b9150614438826143f7565b602082019050919050565b6000602082019050818103600083015261445c81614420565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144bf602583613a69565b91506144ca82614463565b604082019050919050565b600060208201905081810360008301526144ee816144b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614551602383613a69565b915061455c826144f5565b604082019050919050565b6000602082019050818103600083015261458081614544565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006145e3602983613a69565b91506145ee82614587565b604082019050919050565b60006020820190508181036000830152614612816145d6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061465382613b73565b915061465e83613b73565b92508261466e5761466d614619565b5b828204905092915050565b600061468482613b73565b915061468f83613b73565b92508282019050808211156146a7576146a6613fd7565b5b92915050565b60006060820190506146c26000830186613c1f565b6146cf6020830185613c1f565b6146dc6040830184613c1f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061472281613b47565b92915050565b60006020828403121561473e5761473d613b10565b5b600061474c84828501614713565b91505092915050565b6000819050919050565b600061477a61477561477084614755565b613d99565b613b73565b9050919050565b61478a8161475f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147c581613b35565b82525050565b60006147d783836147bc565b60208301905092915050565b6000602082019050919050565b60006147fb82614790565b614805818561479b565b9350614810836147ac565b8060005b8381101561484157815161482888826147cb565b9750614833836147e3565b925050600181019050614814565b5085935050505092915050565b600060a0820190506148636000830188613c1f565b6148706020830187614781565b818103604083015261488281866147f0565b90506148916060830185613e13565b61489e6080830184613c1f565b9695505050505050565b600060c0820190506148bd6000830189613e13565b6148ca6020830188613c1f565b6148d76040830187614781565b6148e46060830186614781565b6148f16080830185613e13565b6148fe60a0830184613c1f565b979650505050505050565b60008151905061491881613b7d565b92915050565b60008060006060848603121561493757614936613b10565b5b600061494586828701614909565b935050602061495686828701614909565b925050604061496786828701614909565b9150509250925092565b600061497c82613b73565b915061498783613b73565b925082820261499581613b73565b915082820484148315176149ac576149ab613fd7565b5b509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207528416058bde7f09ad04b23dd91072bd6898af9c60f4b3202465c9f552a0bd564736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d497bc9dbf4839a8a262faa19e87eb48267c5087
-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0xD497BC9DBf4839A8A262FaA19E87eB48267c5087
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d497bc9dbf4839a8a262faa19e87eb48267c5087
Deployed Bytecode Sourcemap
43301:21036:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46020:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46982:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48592:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46297:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64043:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47176:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50157:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46206:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44028:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50959:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47630:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49250:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63806:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49677:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48687:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44840:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50471:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48460:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44064:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44226:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46400:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12379:103;;;;;;;;;;;;;:::i;:::-;;44731:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44635:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44481:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48332:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11738:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49014:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46111:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48844:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47931:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46606:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43792:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43934:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44361:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64163:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44777:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49142:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43979:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46806:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63925:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12637:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46020:83;46057:13;46090:5;;;;;;;;;;;;;;;;;46083:12;;46020:83;:::o;46982:186::-;47082:4;47099:39;47108:12;:10;:12::i;:::-;47122:7;47131:6;47099:8;:39::i;:::-;47156:4;47149:11;;46982:186;;;;:::o;48592:87::-;48634:7;48661:10;;48654:17;;48592:87;:::o;46297:95::-;46350:7;46377;;46370:14;;46297:95;:::o;64043:112::-;11624:13;:11;:13::i;:::-;64138:9:::1;64120:15;;:27;;;;;;;;;;;;;;;;;;64043:112:::0;:::o;47176:446::-;47308:4;47325:36;47335:6;47343:9;47354:6;47325:9;:36::i;:::-;47372:220;47395:6;47416:12;:10;:12::i;:::-;47443:138;47499:6;47443:138;;;;;;;;;;;;;;;;;:11;:19;47455:6;47443:19;;;;;;;;;;;;;;;:33;47463:12;:10;:12::i;:::-;47443:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;47372:8;:220::i;:::-;47610:4;47603:11;;47176:446;;;;;:::o;50157:306::-;50240:7;50293;;50282;:18;;50260:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;50381:19;50403:10;:8;:10::i;:::-;50381:32;;50431:24;50443:11;50431:7;:11;;:24;;;;:::i;:::-;50424:31;;;50157:306;;;:::o;46206:83::-;46247:5;46272:9;;;;;;;;;;;46265:16;;46206:83;:::o;44028:27::-;;;;;;;;;;;;;:::o;50959:477::-;11624:13;:11;:13::i;:::-;51039:11:::1;:20;51051:7;51039:20;;;;;;;;;;;;;;;;;;;;;;;;;51031:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;51107:9;51102:327;51126:9;:16;;;;51122:1;:20;51102:327;;;51184:7;51168:23;;:9;51178:1;51168:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;51164:254:::1;;51227:9;51256:1;51237:9;:16;;;;:20;;;;:::i;:::-;51227:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51212:9;51222:1;51212:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;51296:1;51277:7;:16;51285:7;51277:16;;;;;;;;;;;;;;;:20;;;;51339:5;51316:11;:20;51328:7;51316:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;51363:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;51397:5;;51164:254;51144:3;;;;;:::i;:::-;;;;51102:327;;;;50959:477:::0;:::o;47630:293::-;47743:4;47760:133;47783:12;:10;:12::i;:::-;47810:7;47832:50;47871:10;47832:11;:25;47844:12;:10;:12::i;:::-;47832:25;;;;;;;;;;;;;;;:34;47858:7;47832:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;47760:8;:133::i;:::-;47911:4;47904:11;;47630:293;;;;:::o;49250:419::-;49302:14;49319:12;:10;:12::i;:::-;49302:29;;49365:11;:19;49377:6;49365:19;;;;;;;;;;;;;;;;;;;;;;;;;49364:20;49342:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;49468:15;49497:19;49508:7;49497:10;:19::i;:::-;49467:49;;;;;;;49545:28;49565:7;49545;:15;49553:6;49545:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49527:7;:15;49535:6;49527:15;;;;;;;;;;;;;;;:46;;;;49594:20;49606:7;49594;;:11;;:20;;;;:::i;:::-;49584:7;:30;;;;49638:23;49653:7;49638:10;;:14;;:23;;;;:::i;:::-;49625:10;:36;;;;49291:378;;49250:419;:::o;63806:111::-;11624:13;:11;:13::i;:::-;63905:4:::1;63875:18;:27;63894:7;63875:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;63806:111:::0;:::o;49677:472::-;49793:7;49832;;49821;:18;;49813:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49891:17;49886:256;;49926:15;49955:19;49966:7;49955:10;:19::i;:::-;49925:49;;;;;;;49996:7;49989:14;;;;;49886:256;50039:23;50074:19;50085:7;50074:10;:19::i;:::-;50036:57;;;;;;;50115:15;50108:22;;;49677:472;;;;;:::o;48687:149::-;11624:13;:11;:13::i;:::-;48813:15:::1;48790:20;:38;;;;48687:149:::0;:::o;44840:41::-;;;;;;;;;;;;:::o;50471:480::-;11624:13;:11;:13::i;:::-;50576:42:::1;50565:53;;:7;:53;;::::0;50543:137:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;50700:11;:20;50712:7;50700:20;;;;;;;;;;;;;;;;;;;;;;;;;50699:21;50691:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;50786:1;50767:7;:16;50775:7;50767:16;;;;;;;;;;;;;;;;:20;50763:109;;;50823:37;50843:7;:16;50851:7;50843:16;;;;;;;;;;;;;;;;50823:19;:37::i;:::-;50804:7;:16;50812:7;50804:16;;;;;;;;;;;;;;;:56;;;;50763:109;50905:4;50882:11;:20;50894:7;50882:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;50920:9;50935:7;50920:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50471:480:::0;:::o;48460:124::-;48525:4;48549:18;:27;48568:7;48549:27;;;;;;;;;;;;;;;;;;;;;;;;;48542:34;;48460:124;;;:::o;44064:43::-;;;;:::o;44226:34::-;;;;:::o;46400:198::-;46466:7;46490:11;:20;46502:7;46490:20;;;;;;;;;;;;;;;;;;;;;;;;;46486:49;;;46519:7;:16;46527:7;46519:16;;;;;;;;;;;;;;;;46512:23;;;;46486:49;46553:37;46573:7;:16;46581:7;46573:16;;;;;;;;;;;;;;;;46553:19;:37::i;:::-;46546:44;;46400:198;;;;:::o;12379:103::-;11624:13;:11;:13::i;:::-;12444:30:::1;12471:1;12444:18;:30::i;:::-;12379:103::o:0;44731:39::-;;;;;;;;;;;;;:::o;44635:30::-;;;;;;;;;;;;;:::o;44481:41::-;;;;:::o;48332:120::-;48400:4;48424:11;:20;48436:7;48424:20;;;;;;;;;;;;;;;;;;;;;;;;;48417:27;;48332:120;;;:::o;11738:87::-;11784:7;11811:6;;;;;;;;;;;11804:13;;11738:87;:::o;49014:120::-;11624:13;:11;:13::i;:::-;49114:12:::1;49098:13;:28;;;;49014:120:::0;:::o;46111:87::-;46150:13;46183:7;;;;;;;;;;;;;;;;;46176:14;;46111:87;:::o;48844:162::-;11624:13;:11;:13::i;:::-;48977:21:::1;48952:22;:46;;;;48844:162:::0;:::o;47931:393::-;48049:4;48066:228;48089:12;:10;:12::i;:::-;48116:7;48138:145;48195:15;48138:145;;;;;;;;;;;;;;;;;:11;:25;48150:12;:10;:12::i;:::-;48138:25;;;;;;;;;;;;;;;:34;48164:7;48138:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;48066:8;:228::i;:::-;48312:4;48305:11;;47931:393;;;;:::o;46606:192::-;46709:4;46726:42;46736:12;:10;:12::i;:::-;46750:9;46761:6;46726:9;:42::i;:::-;46786:4;46779:11;;46606:192;;;;:::o;43792:44::-;;;;:::o;43934:38::-;;;;;;;;;;;;;;;;;;;:::o;44361:29::-;;;;:::o;64163:171::-;11624:13;:11;:13::i;:::-;64264:8:::1;64240:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;64288:38;64317:8;64288:38;;;;;;:::i;:::-;;;;;;;;64163:171:::0;:::o;44777:26::-;;;;;;;;;;;;;:::o;49142:100::-;11624:13;:11;:13::i;:::-;49227:7:::1;49216:8;:18;;;;49142:100:::0;:::o;43979:42::-;;;;;;;;;;;;;;;;;;;:::o;46806:168::-;46912:7;46939:11;:18;46951:5;46939:18;;;;;;;;;;;;;;;:27;46958:7;46939:27;;;;;;;;;;;;;;;;46932:34;;46806:168;;;;:::o;63925:110::-;11624:13;:11;:13::i;:::-;64022:5:::1;63992:18;:27;64011:7;63992:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;63925:110:::0;:::o;12637:201::-;11624:13;:11;:13::i;:::-;12746:1:::1;12726:22;;:8;:22;;::::0;12718:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12802:28;12821:8;12802:18;:28::i;:::-;12637:201:::0;:::o;10289:98::-;10342:7;10369:10;10362:17;;10289:98;:::o;55907:337::-;56017:1;56000:19;;:5;:19;;;55992:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56098:1;56079:21;;:7;:21;;;56071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56182:6;56152:11;:18;56164:5;56152:18;;;;;;;;;;;;;;;:27;56171:7;56152:27;;;;;;;;;;;;;;;:36;;;;56220:7;56204:32;;56213:5;56204:32;;;56229:6;56204:32;;;;;;:::i;:::-;;;;;;;;55907:337;;;:::o;11903:132::-;11978:12;:10;:12::i;:::-;11967:23;;:7;:5;:7::i;:::-;:23;;;11959:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11903:132::o;56252:1197::-;56356:1;56340:18;;:4;:18;;;56332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56433:1;56419:16;;:2;:16;;;56411:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;56503:1;56494:6;:10;56486:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;56845:28;56876:24;56894:4;56876:9;:24::i;:::-;56845:55;;56911:24;56975:29;;56938:20;:66;;56911:93;;57033:19;:53;;;;;57070:16;;;;;;;;;;;57069:17;57033:53;:89;;;;;57111:11;;;;;;;;;;;57103:19;;:4;:19;;;;57033:89;:127;;;;;57139:21;;;;;;;;;;57033:127;57015:316;;;57210:29;;57187:52;;57283:36;57298:20;57283:14;:36::i;:::-;57015:316;57409:32;57424:4;57430:2;57434:6;57409:14;:32::i;:::-;56321:1128;;56252:1197;;;:::o;35072:206::-;35158:7;35216:1;35211;:6;;35219:12;35203:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;35258:1;35254;:5;35247:12;;35072:206;;;;;:::o;53976:164::-;54018:7;54039:15;54056;54075:19;:17;:19::i;:::-;54038:56;;;;54112:20;54124:7;54112;:11;;:20;;;;:::i;:::-;54105:27;;;;53976:164;:::o;33930:98::-;33988:7;34019:1;34015;:5;;;;:::i;:::-;34008:12;;33930:98;;;;:::o;32793:::-;32851:7;32882:1;32878;:5;;;;:::i;:::-;32871:12;;32793:98;;;;:::o;52455:669::-;52557:7;52566;52575;52584;52593;52602;52642:23;52680:12;52707:18;52739:20;52751:7;52739:11;:20::i;:::-;52627:132;;;;;;52771:15;52788:23;52813:12;52829:113;52855:7;52877:4;52896:10;52921;:8;:10::i;:::-;52829:11;:113::i;:::-;52770:172;;;;;;52975:7;52997:15;53027:4;53046:15;53076:4;53095:10;52953:163;;;;;;;;;;;;;;;;;;52455:669;;;;;;;:::o;33174:98::-;33232:7;33263:1;33259;:5;;;;:::i;:::-;33252:12;;33174:98;;;;:::o;12998:191::-;13072:16;13091:6;;;;;;;;;;;13072:25;;13117:8;13108:6;;:17;;;;;;;;;;;;;;;;;;13172:8;13141:40;;13162:8;13141:40;;;;;;;;;;;;13061:128;12998:191;:::o;57457:977::-;45276:4;45257:16;;:23;;;;;;;;;;;;;;;;;;57593:12:::1;57608:27;57633:1;57608:20;:24;;:27;;;;:::i;:::-;57593:42;;57646:17;57666:30;57691:4;57666:20;:24;;:30;;;;:::i;:::-;57646:50;;57974:22;57999:21;57974:46;;58065:22;58082:4;58065:16;:22::i;:::-;58218:18;58239:41;58265:14;58239:21;:25;;:41;;;;:::i;:::-;58218:62;;58330:35;58343:9;58354:10;58330:12;:35::i;:::-;58383:43;58398:4;58404:10;58416:9;58383:43;;;;;;;;:::i;:::-;;;;;;;;57531:903;;;;45322:5:::0;45303:16;;:24;;;;;;;;;;;;;;;;;;57457:977;:::o;59623:2142::-;59755:18;:26;59774:6;59755:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;59785:18;:29;59804:9;59785:29;;;;;;;;;;;;;;;;;;;;;;;;;59755:59;59751:106;;;59831:14;:12;:14::i;:::-;59751:106;59931:15;59949:31;59974:5;59949:20;59960:8;;59949:6;:10;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;59931:49;;59991:20;60014:43;60051:5;60014:32;60025:20;;60014:6;:10;;:32;;;;:::i;:::-;:36;;:43;;;;:::i;:::-;59991:66;;60074:11;:19;60086:6;60074:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;60098:11;:22;60110:9;60098:22;;;;;;;;;;;;;;;;;;;;;;;;;60097:23;60074:46;60070:1092;;;60137:147;60177:6;60202:9;60231:37;60255:12;60231:19;60242:7;60231:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;60137:21;:147::i;:::-;60070:1092;;;60307:11;:19;60319:6;60307:19;;;;;;;;;;;;;;;;;;;;;;;;;60306:20;:46;;;;;60330:11;:22;60342:9;60330:22;;;;;;;;;;;;;;;;;;;;;;;;;60306:46;60302:860;;;60369:145;60407:6;60432:9;60461:37;60485:12;60461:19;60472:7;60461:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;60369:19;:145::i;:::-;60302:860;;;60537:11;:19;60549:6;60537:19;;;;;;;;;;;;;;;;;;;;;;;;;60536:20;:47;;;;;60561:11;:22;60573:9;60561:22;;;;;;;;;;;;;;;;;;;;;;;;;60560:23;60536:47;60532:630;;;60600:143;60636:6;60661:9;60690:37;60714:12;60690:19;60701:7;60690:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;60600:17;:143::i;:::-;60532:630;;;60765:11;:19;60777:6;60765:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;60788:11;:22;60800:9;60788:22;;;;;;;;;;;;;;;;;;;;;;;;;60765:45;60761:401;;;60827:147;60867:6;60892:9;60921:37;60945:12;60921:19;60932:7;60921:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;60827:21;:147::i;:::-;60761:401;;;61007:143;61043:6;61068:9;61097:37;61121:12;61097:19;61108:7;61097:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;61007:17;:143::i;:::-;60761:401;60532:630;60302:860;60070:1092;61283:1;61258:22;:26;;;;61311:1;61295:13;:17;;;;61380:46;61398:6;61414:1;61418:7;61380:17;:46::i;:::-;61437:56;61455:6;61463:15;;;;;;;;;;;61480:12;61437:17;:56::i;:::-;61573:30;;61548:22;:55;;;;61630:21;;61614:13;:37;;;;61668:18;:26;61687:6;61668:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;61698:18;:29;61717:9;61698:29;;;;;;;;;;;;;;;;;;;;;;;;;61668:59;61664:93;;;61742:15;:13;:15::i;:::-;61664:93;59740:2025;;59623:2142;;;:::o;54148:605::-;54199:7;54208;54228:15;54246:7;;54228:25;;54264:15;54282:7;;54264:25;;54305:9;54300:338;54324:9;:16;;;;54320:1;:20;54300:338;;;54408:7;54384;:21;54392:9;54402:1;54392:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;54384:21;;;;;;;;;;;;;;;;:31;:83;;;;54460:7;54436;:21;54444:9;54454:1;54444:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;54436:21;;;;;;;;;;;;;;;;:31;54384:83;54362:146;;;54491:7;;54500;;54483:25;;;;;;;;;54362:146;54533:34;54545:7;:21;54553:9;54563:1;54553:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;54545:21;;;;;;;;;;;;;;;;54533:7;:11;;:34;;;;:::i;:::-;54523:44;;54592:34;54604:7;:21;54612:9;54622:1;54612:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;54604:21;;;;;;;;;;;;;;;;54592:7;:11;;:34;;;;:::i;:::-;54582:44;;54342:3;;;;;:::i;:::-;;;;54300:338;;;;54662:20;54674:7;;54662;;:11;;:20;;;;:::i;:::-;54652:7;:30;54648:61;;;54692:7;;54701;;54684:25;;;;;;;;54648:61;54728:7;54737;54720:25;;;;;;54148:605;;;:::o;53132:356::-;53208:7;53217;53226;53246:12;53261:34;53287:7;53261:25;:34::i;:::-;53246:49;;53306:18;53327:30;53349:7;53327:21;:30::i;:::-;53306:51;;53368:23;53394:33;53416:10;53394:17;53406:4;53394:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;53368:59;;53446:15;53463:4;53469:10;53438:42;;;;;;;;;53132:356;;;;;:::o;53496:472::-;53654:7;53663;53672;53692:15;53710:24;53722:11;53710:7;:11;;:24;;;;:::i;:::-;53692:42;;53745:12;53760:21;53769:11;53760:4;:8;;:21;;;;:::i;:::-;53745:36;;53792:18;53813:27;53828:11;53813:10;:14;;:27;;;;:::i;:::-;53792:48;;53851:23;53877:33;53899:10;53877:17;53889:4;53877:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;53851:59;;53929:7;53938:15;53955:4;53921:39;;;;;;;;;;53496:472;;;;;;;;:::o;58442:583::-;58568:21;58606:1;58592:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58568:40;;58637:4;58619;58624:1;58619:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;58663:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58653:4;58658:1;58653:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;58696:60;58713:4;58728:13;;;;;;;;;;;58744:11;58696:8;:60::i;:::-;58795:13;;;;;;;;;;;:64;;;58874:11;58900:1;58944:4;58971;58991:15;58795:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58497:528;58442:583;:::o;59033:509::-;59181:60;59198:4;59213:13;;;;;;;;;;;59229:11;59181:8;:60::i;:::-;59284:13;;;;;;;;;;;:29;;;59321:9;59354:4;59374:11;59400:1;59443;59486:7;:5;:7::i;:::-;59508:15;59284:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;59033:509;;:::o;55473:163::-;55541:1;55516:22;:26;;;;55569:1;55553:13;:17;;;;55592:1;55581:8;:12;;;;55627:1;55604:20;:24;;;;55473:163::o;33531:98::-;33589:7;33620:1;33616;:5;;;;:::i;:::-;33609:12;;33531:98;;;;:::o;63112:686::-;63263:15;63293:23;63331:12;63358:23;63396:12;63423:18;63455:19;63466:7;63455:10;:19::i;:::-;63248:226;;;;;;;;;;;;63503:28;63523:7;63503;:15;63511:6;63503:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;63485:7;:15;63493:6;63485:15;;;;;;;;;;;;;;;:46;;;;63560:28;63580:7;63560;:15;63568:6;63560:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;63542:7;:15;63550:6;63542:15;;;;;;;;;;;;;;;:46;;;;63620:39;63643:15;63620:7;:18;63628:9;63620:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;63599:7;:18;63607:9;63599:18;;;;;;;;;;;;;;;:60;;;;63670:26;63685:10;63670:14;:26::i;:::-;63707:23;63719:4;63725;63707:11;:23::i;:::-;63763:9;63746:44;;63755:6;63746:44;;;63774:15;63746:44;;;;;;:::i;:::-;;;;;;;;63237:561;;;;;;63112:686;;;:::o;62406:698::-;62555:15;62585:23;62623:12;62650:23;62688:12;62715:18;62747:19;62758:7;62747:10;:19::i;:::-;62540:226;;;;;;;;;;;;62795:28;62815:7;62795;:15;62803:6;62795:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;62777:7;:15;62785:6;62777:15;;;;;;;;;;;;;;;:46;;;;62855:39;62878:15;62855:7;:18;62863:9;62855:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;62834:7;:18;62842:9;62834:18;;;;;;;;;;;;;;;:60;;;;62926:39;62949:15;62926:7;:18;62934:9;62926:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;62905:7;:18;62913:9;62905:18;;;;;;;;;;;;;;;:60;;;;62976:26;62991:10;62976:14;:26::i;:::-;63013:23;63025:4;63031;63013:11;:23::i;:::-;63069:9;63052:44;;63061:6;63052:44;;;63080:15;63052:44;;;;;;:::i;:::-;;;;;;;;62529:575;;;;;;62406:698;;;:::o;61773:625::-;61920:15;61950:23;61988:12;62015:23;62053:12;62080:18;62112:19;62123:7;62112:10;:19::i;:::-;61905:226;;;;;;;;;;;;62160:28;62180:7;62160;:15;62168:6;62160:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;62142:7;:15;62150:6;62142:15;;;;;;;;;;;;;;;:46;;;;62220:39;62243:15;62220:7;:18;62228:9;62220:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;62199:7;:18;62207:9;62199:18;;;;;;;;;;;;;;;:60;;;;62270:26;62285:10;62270:14;:26::i;:::-;62307:23;62319:4;62325;62307:11;:23::i;:::-;62363:9;62346:44;;62355:6;62346:44;;;62374:15;62346:44;;;;;;:::i;:::-;;;;;;;;61894:504;;;;;;61773:625;;;:::o;51444:757::-;51595:15;51625:23;51663:12;51690:23;51728:12;51755:18;51787:19;51798:7;51787:10;:19::i;:::-;51580:226;;;;;;;;;;;;51835:28;51855:7;51835;:15;51843:6;51835:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51817:7;:15;51825:6;51817:15;;;;;;;;;;;;;;;:46;;;;51892:28;51912:7;51892;:15;51900:6;51892:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51874:7;:15;51882:6;51874:15;;;;;;;;;;;;;;;:46;;;;51952:39;51975:15;51952:7;:18;51960:9;51952:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51931:7;:18;51939:9;51931:18;;;;;;;;;;;;;;;:60;;;;52023:39;52046:15;52023:7;:18;52031:9;52023:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;52002:7;:18;52010:9;52002:18;;;;;;;;;;;;;;;:60;;;;52073:26;52088:10;52073:14;:26::i;:::-;52110:23;52122:4;52128;52110:11;:23::i;:::-;52166:9;52149:44;;52158:6;52149:44;;;52177:15;52149:44;;;;;;:::i;:::-;;;;;;;;51569:632;;;;;;51444:757;;;:::o;55644:255::-;55713:30;;55688:22;:55;;;;55770:21;;55754:13;:37;;;;55813:16;;55802:8;:27;;;;55863:28;;55840:20;:51;;;;55644:255::o;55124:173::-;55214:7;55241:48;55281:7;55241:35;55253:22;;55241:7;:11;;:35;;;;:::i;:::-;:39;;:48;;;;:::i;:::-;55234:55;;55124:173;;;:::o;55305:160::-;55391:7;55418:39;55449:7;55418:26;55430:13;;55418:7;:11;;:26;;;;:::i;:::-;:30;;:39;;;;:::i;:::-;55411:46;;55305:160;;;:::o;54761:355::-;54824:19;54846:10;:8;:10::i;:::-;54824:32;;54867:18;54888:27;54903:11;54888:10;:14;;:27;;;;:::i;:::-;54867:48;;54951:38;54978:10;54951:7;:22;54967:4;54951:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;54926:7;:22;54942:4;54926:22;;;;;;;;;;;;;;;:63;;;;55004:11;:26;55024:4;55004:26;;;;;;;;;;;;;;;;;;;;;;;;;55000:108;;;55070:38;55097:10;55070:7;:22;55086:4;55070:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;55045:7;:22;55061:4;55045:22;;;;;;;;;;;;;;;:63;;;;55000:108;54813:303;;54761:355;:::o;52300:147::-;52378:17;52390:4;52378:7;;:11;;:17;;;;:::i;:::-;52368:7;:27;;;;52419:20;52434:4;52419:10;;:14;;:20;;;;:::i;:::-;52406:10;:33;;;;52300:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:329::-;4817:6;4866:2;4854:9;4845:7;4841:23;4837:32;4834:119;;;4872:79;;:::i;:::-;4834:119;4992:1;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4963:117;4758:329;;;;:::o;5093:86::-;5128:7;5168:4;5161:5;5157:16;5146:27;;5093:86;;;:::o;5185:112::-;5268:22;5284:5;5268:22;:::i;:::-;5263:3;5256:35;5185:112;;:::o;5303:214::-;5392:4;5430:2;5419:9;5415:18;5407:26;;5443:67;5507:1;5496:9;5492:17;5483:6;5443:67;:::i;:::-;5303:214;;;;:::o;5523:116::-;5593:21;5608:5;5593:21;:::i;:::-;5586:5;5583:32;5573:60;;5629:1;5626;5619:12;5573:60;5523:116;:::o;5645:133::-;5688:5;5726:6;5713:20;5704:29;;5742:30;5766:5;5742:30;:::i;:::-;5645:133;;;;:::o;5784:468::-;5849:6;5857;5906:2;5894:9;5885:7;5881:23;5877:32;5874:119;;;5912:79;;:::i;:::-;5874:119;6032:1;6057:53;6102:7;6093:6;6082:9;6078:22;6057:53;:::i;:::-;6047:63;;6003:117;6159:2;6185:50;6227:7;6218:6;6207:9;6203:22;6185:50;:::i;:::-;6175:60;;6130:115;5784:468;;;;;:::o;6258:60::-;6286:3;6307:5;6300:12;;6258:60;;;:::o;6324:142::-;6374:9;6407:53;6425:34;6434:24;6452:5;6434:24;:::i;:::-;6425:34;:::i;:::-;6407:53;:::i;:::-;6394:66;;6324:142;;;:::o;6472:126::-;6522:9;6555:37;6586:5;6555:37;:::i;:::-;6542:50;;6472:126;;;:::o;6604:153::-;6681:9;6714:37;6745:5;6714:37;:::i;:::-;6701:50;;6604:153;;;:::o;6763:185::-;6877:64;6935:5;6877:64;:::i;:::-;6872:3;6865:77;6763:185;;:::o;6954:276::-;7074:4;7112:2;7101:9;7097:18;7089:26;;7125:98;7220:1;7209:9;7205:17;7196:6;7125:98;:::i;:::-;6954:276;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:229::-;8537:34;8533:1;8525:6;8521:14;8514:58;8606:12;8601:2;8593:6;8589:15;8582:37;8397:229;:::o;8632:366::-;8774:3;8795:67;8859:2;8854:3;8795:67;:::i;:::-;8788:74;;8871:93;8960:3;8871:93;:::i;:::-;8989:2;8984:3;8980:12;8973:19;;8632:366;;;:::o;9004:419::-;9170:4;9208:2;9197:9;9193:18;9185:26;;9257:9;9251:4;9247:20;9243:1;9232:9;9228:17;9221:47;9285:131;9411:4;9285:131;:::i;:::-;9277:139;;9004:419;;;:::o;9429:177::-;9569:29;9565:1;9557:6;9553:14;9546:53;9429:177;:::o;9612:366::-;9754:3;9775:67;9839:2;9834:3;9775:67;:::i;:::-;9768:74;;9851:93;9940:3;9851:93;:::i;:::-;9969:2;9964:3;9960:12;9953:19;;9612:366;;;:::o;9984:419::-;10150:4;10188:2;10177:9;10173:18;10165:26;;10237:9;10231:4;10227:20;10223:1;10212:9;10208:17;10201:47;10265:131;10391:4;10265:131;:::i;:::-;10257:139;;9984:419;;;:::o;10409:180::-;10457:77;10454:1;10447:88;10554:4;10551:1;10544:15;10578:4;10575:1;10568:15;10595:180;10643:77;10640:1;10633:88;10740:4;10737:1;10730:15;10764:4;10761:1;10754:15;10781:194;10821:4;10841:20;10859:1;10841:20;:::i;:::-;10836:25;;10875:20;10893:1;10875:20;:::i;:::-;10870:25;;10919:1;10916;10912:9;10904:17;;10943:1;10937:4;10934:11;10931:37;;;10948:18;;:::i;:::-;10931:37;10781:194;;;;:::o;10981:180::-;11029:77;11026:1;11019:88;11126:4;11123:1;11116:15;11150:4;11147:1;11140:15;11167:233;11206:3;11229:24;11247:5;11229:24;:::i;:::-;11220:33;;11275:66;11268:5;11265:77;11262:103;;11345:18;;:::i;:::-;11262:103;11392:1;11385:5;11381:13;11374:20;;11167:233;;;:::o;11406:231::-;11546:34;11542:1;11534:6;11530:14;11523:58;11615:14;11610:2;11602:6;11598:15;11591:39;11406:231;:::o;11643:366::-;11785:3;11806:67;11870:2;11865:3;11806:67;:::i;:::-;11799:74;;11882:93;11971:3;11882:93;:::i;:::-;12000:2;11995:3;11991:12;11984:19;;11643:366;;;:::o;12015:419::-;12181:4;12219:2;12208:9;12204:18;12196:26;;12268:9;12262:4;12258:20;12254:1;12243:9;12239:17;12232:47;12296:131;12422:4;12296:131;:::i;:::-;12288:139;;12015:419;;;:::o;12440:181::-;12580:33;12576:1;12568:6;12564:14;12557:57;12440:181;:::o;12627:366::-;12769:3;12790:67;12854:2;12849:3;12790:67;:::i;:::-;12783:74;;12866:93;12955:3;12866:93;:::i;:::-;12984:2;12979:3;12975:12;12968:19;;12627:366;;;:::o;12999:419::-;13165:4;13203:2;13192:9;13188:18;13180:26;;13252:9;13246:4;13242:20;13238:1;13227:9;13223:17;13216:47;13280:131;13406:4;13280:131;:::i;:::-;13272:139;;12999:419;;;:::o;13424:221::-;13564:34;13560:1;13552:6;13548:14;13541:58;13633:4;13628:2;13620:6;13616:15;13609:29;13424:221;:::o;13651:366::-;13793:3;13814:67;13878:2;13873:3;13814:67;:::i;:::-;13807:74;;13890:93;13979:3;13890:93;:::i;:::-;14008:2;14003:3;13999:12;13992:19;;13651:366;;;:::o;14023:419::-;14189:4;14227:2;14216:9;14212:18;14204:26;;14276:9;14270:4;14266:20;14262:1;14251:9;14247:17;14240:47;14304:131;14430:4;14304:131;:::i;:::-;14296:139;;14023:419;;;:::o;14448:225::-;14588:34;14584:1;14576:6;14572:14;14565:58;14657:8;14652:2;14644:6;14640:15;14633:33;14448:225;:::o;14679:366::-;14821:3;14842:67;14906:2;14901:3;14842:67;:::i;:::-;14835:74;;14918:93;15007:3;14918:93;:::i;:::-;15036:2;15031:3;15027:12;15020:19;;14679:366;;;:::o;15051:419::-;15217:4;15255:2;15244:9;15240:18;15232:26;;15304:9;15298:4;15294:20;15290:1;15279:9;15275:17;15268:47;15332:131;15458:4;15332:131;:::i;:::-;15324:139;;15051:419;;;:::o;15476:223::-;15616:34;15612:1;15604:6;15600:14;15593:58;15685:6;15680:2;15672:6;15668:15;15661:31;15476:223;:::o;15705:366::-;15847:3;15868:67;15932:2;15927:3;15868:67;:::i;:::-;15861:74;;15944:93;16033:3;15944:93;:::i;:::-;16062:2;16057:3;16053:12;16046:19;;15705:366;;;:::o;16077:419::-;16243:4;16281:2;16270:9;16266:18;16258:26;;16330:9;16324:4;16320:20;16316:1;16305:9;16301:17;16294:47;16358:131;16484:4;16358:131;:::i;:::-;16350:139;;16077:419;;;:::o;16502:221::-;16642:34;16638:1;16630:6;16626:14;16619:58;16711:4;16706:2;16698:6;16694:15;16687:29;16502:221;:::o;16729:366::-;16871:3;16892:67;16956:2;16951:3;16892:67;:::i;:::-;16885:74;;16968:93;17057:3;16968:93;:::i;:::-;17086:2;17081:3;17077:12;17070:19;;16729:366;;;:::o;17101:419::-;17267:4;17305:2;17294:9;17290:18;17282:26;;17354:9;17348:4;17344:20;17340:1;17329:9;17325:17;17318:47;17382:131;17508:4;17382:131;:::i;:::-;17374:139;;17101:419;;;:::o;17526:182::-;17666:34;17662:1;17654:6;17650:14;17643:58;17526:182;:::o;17714:366::-;17856:3;17877:67;17941:2;17936:3;17877:67;:::i;:::-;17870:74;;17953:93;18042:3;17953:93;:::i;:::-;18071:2;18066:3;18062:12;18055:19;;17714:366;;;:::o;18086:419::-;18252:4;18290:2;18279:9;18275:18;18267:26;;18339:9;18333:4;18329:20;18325:1;18314:9;18310:17;18303:47;18367:131;18493:4;18367:131;:::i;:::-;18359:139;;18086:419;;;:::o;18511:224::-;18651:34;18647:1;18639:6;18635:14;18628:58;18720:7;18715:2;18707:6;18703:15;18696:32;18511:224;:::o;18741:366::-;18883:3;18904:67;18968:2;18963:3;18904:67;:::i;:::-;18897:74;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18741:366;;;:::o;19113:419::-;19279:4;19317:2;19306:9;19302:18;19294:26;;19366:9;19360:4;19356:20;19352:1;19341:9;19337:17;19330:47;19394:131;19520:4;19394:131;:::i;:::-;19386:139;;19113:419;;;:::o;19538:222::-;19678:34;19674:1;19666:6;19662:14;19655:58;19747:5;19742:2;19734:6;19730:15;19723:30;19538:222;:::o;19766:366::-;19908:3;19929:67;19993:2;19988:3;19929:67;:::i;:::-;19922:74;;20005:93;20094:3;20005:93;:::i;:::-;20123:2;20118:3;20114:12;20107:19;;19766:366;;;:::o;20138:419::-;20304:4;20342:2;20331:9;20327:18;20319:26;;20391:9;20385:4;20381:20;20377:1;20366:9;20362:17;20355:47;20419:131;20545:4;20419:131;:::i;:::-;20411:139;;20138:419;;;:::o;20563:228::-;20703:34;20699:1;20691:6;20687:14;20680:58;20772:11;20767:2;20759:6;20755:15;20748:36;20563:228;:::o;20797:366::-;20939:3;20960:67;21024:2;21019:3;20960:67;:::i;:::-;20953:74;;21036:93;21125:3;21036:93;:::i;:::-;21154:2;21149:3;21145:12;21138:19;;20797:366;;;:::o;21169:419::-;21335:4;21373:2;21362:9;21358:18;21350:26;;21422:9;21416:4;21412:20;21408:1;21397:9;21393:17;21386:47;21450:131;21576:4;21450:131;:::i;:::-;21442:139;;21169:419;;;:::o;21594:180::-;21642:77;21639:1;21632:88;21739:4;21736:1;21729:15;21763:4;21760:1;21753:15;21780:185;21820:1;21837:20;21855:1;21837:20;:::i;:::-;21832:25;;21871:20;21889:1;21871:20;:::i;:::-;21866:25;;21910:1;21900:35;;21915:18;;:::i;:::-;21900:35;21957:1;21954;21950:9;21945:14;;21780:185;;;;:::o;21971:191::-;22011:3;22030:20;22048:1;22030:20;:::i;:::-;22025:25;;22064:20;22082:1;22064:20;:::i;:::-;22059:25;;22107:1;22104;22100:9;22093:16;;22128:3;22125:1;22122:10;22119:36;;;22135:18;;:::i;:::-;22119:36;21971:191;;;;:::o;22168:442::-;22317:4;22355:2;22344:9;22340:18;22332:26;;22368:71;22436:1;22425:9;22421:17;22412:6;22368:71;:::i;:::-;22449:72;22517:2;22506:9;22502:18;22493:6;22449:72;:::i;:::-;22531;22599:2;22588:9;22584:18;22575:6;22531:72;:::i;:::-;22168:442;;;;;;:::o;22616:180::-;22664:77;22661:1;22654:88;22761:4;22758:1;22751:15;22785:4;22782:1;22775:15;22802:143;22859:5;22890:6;22884:13;22875:22;;22906:33;22933:5;22906:33;:::i;:::-;22802:143;;;;:::o;22951:351::-;23021:6;23070:2;23058:9;23049:7;23045:23;23041:32;23038:119;;;23076:79;;:::i;:::-;23038:119;23196:1;23221:64;23277:7;23268:6;23257:9;23253:22;23221:64;:::i;:::-;23211:74;;23167:128;22951:351;;;;:::o;23308:85::-;23353:7;23382:5;23371:16;;23308:85;;;:::o;23399:158::-;23457:9;23490:61;23508:42;23517:32;23543:5;23517:32;:::i;:::-;23508:42;:::i;:::-;23490:61;:::i;:::-;23477:74;;23399:158;;;:::o;23563:147::-;23658:45;23697:5;23658:45;:::i;:::-;23653:3;23646:58;23563:147;;:::o;23716:114::-;23783:6;23817:5;23811:12;23801:22;;23716:114;;;:::o;23836:184::-;23935:11;23969:6;23964:3;23957:19;24009:4;24004:3;24000:14;23985:29;;23836:184;;;;:::o;24026:132::-;24093:4;24116:3;24108:11;;24146:4;24141:3;24137:14;24129:22;;24026:132;;;:::o;24164:108::-;24241:24;24259:5;24241:24;:::i;:::-;24236:3;24229:37;24164:108;;:::o;24278:179::-;24347:10;24368:46;24410:3;24402:6;24368:46;:::i;:::-;24446:4;24441:3;24437:14;24423:28;;24278:179;;;;:::o;24463:113::-;24533:4;24565;24560:3;24556:14;24548:22;;24463:113;;;:::o;24612:732::-;24731:3;24760:54;24808:5;24760:54;:::i;:::-;24830:86;24909:6;24904:3;24830:86;:::i;:::-;24823:93;;24940:56;24990:5;24940:56;:::i;:::-;25019:7;25050:1;25035:284;25060:6;25057:1;25054:13;25035:284;;;25136:6;25130:13;25163:63;25222:3;25207:13;25163:63;:::i;:::-;25156:70;;25249:60;25302:6;25249:60;:::i;:::-;25239:70;;25095:224;25082:1;25079;25075:9;25070:14;;25035:284;;;25039:14;25335:3;25328:10;;24736:608;;;24612:732;;;;:::o;25350:831::-;25613:4;25651:3;25640:9;25636:19;25628:27;;25665:71;25733:1;25722:9;25718:17;25709:6;25665:71;:::i;:::-;25746:80;25822:2;25811:9;25807:18;25798:6;25746:80;:::i;:::-;25873:9;25867:4;25863:20;25858:2;25847:9;25843:18;25836:48;25901:108;26004:4;25995:6;25901:108;:::i;:::-;25893:116;;26019:72;26087:2;26076:9;26072:18;26063:6;26019:72;:::i;:::-;26101:73;26169:3;26158:9;26154:19;26145:6;26101:73;:::i;:::-;25350:831;;;;;;;;:::o;26187:807::-;26436:4;26474:3;26463:9;26459:19;26451:27;;26488:71;26556:1;26545:9;26541:17;26532:6;26488:71;:::i;:::-;26569:72;26637:2;26626:9;26622:18;26613:6;26569:72;:::i;:::-;26651:80;26727:2;26716:9;26712:18;26703:6;26651:80;:::i;:::-;26741;26817:2;26806:9;26802:18;26793:6;26741:80;:::i;:::-;26831:73;26899:3;26888:9;26884:19;26875:6;26831:73;:::i;:::-;26914;26982:3;26971:9;26967:19;26958:6;26914:73;:::i;:::-;26187:807;;;;;;;;;:::o;27000:143::-;27057:5;27088:6;27082:13;27073:22;;27104:33;27131:5;27104:33;:::i;:::-;27000:143;;;;:::o;27149:663::-;27237:6;27245;27253;27302:2;27290:9;27281:7;27277:23;27273:32;27270:119;;;27308:79;;:::i;:::-;27270:119;27428:1;27453:64;27509:7;27500:6;27489:9;27485:22;27453:64;:::i;:::-;27443:74;;27399:128;27566:2;27592:64;27648:7;27639:6;27628:9;27624:22;27592:64;:::i;:::-;27582:74;;27537:129;27705:2;27731:64;27787:7;27778:6;27767:9;27763:22;27731:64;:::i;:::-;27721:74;;27676:129;27149:663;;;;;:::o;27818:410::-;27858:7;27881:20;27899:1;27881:20;:::i;:::-;27876:25;;27915:20;27933:1;27915:20;:::i;:::-;27910:25;;27970:1;27967;27963:9;27992:30;28010:11;27992:30;:::i;:::-;27981:41;;28171:1;28162:7;28158:15;28155:1;28152:22;28132:1;28125:9;28105:83;28082:139;;28201:18;;:::i;:::-;28082:139;27866:362;27818:410;;;;:::o
Swarm Source
ipfs://7528416058bde7f09ad04b23dd91072bd6898af9c60f4b3202465c9f552a0bd5
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.