Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
1,000,000,000,000 DIRTY
Holders
1,000 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
41,721,809.937354279680368528 DIRTYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DirtyFinance
Compiler Version
v0.7.4+commit.3f05b770
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/*//////////////////////////////////////////////////////////////////////////////////////////////////////////// ╓╥H@▓▒▒╓ $$\ $$\ $$\ ╓g╬╜░g╣Ñ▒▒░▒▒@ $$ |\__| $$ | ╣▒▒▄Ñ╜` ╙▒▒▒▒▒╕ $$$$$$$ |$$\ $$$$$$\ $$$$$$\ $$\ $$\ ▐▓▒╙░ ╓Ç, ╙▒╓▒╫N, $$ __$$ |$$ |$$ __$$\ \_$$ _| $$ | $$ | ,╥▓▒╖▓@g▄ '╙▀ ░░▒``,╥ $$ / $$ |$$ |$$ | \__| $$ | $$ | $$ | ▓╣▓▓▓▓▓▓`) . =. ▐▓@]▒ $$ | $$ |$$ |$$ | $$ |$$\ $$ | $$ | ╙▓▓▓▓@╠▓╖▒▓²,╜ ` ╢▒╣╛ \$$$$$$$ |$$ |$$ | \$$$$ |\$$$$$$$ | "▓▓╢▓╫▓▓▓▒░,╓` ▒▒H╓ \_______|\__|\__| \____/ \____$$ | ╙▓▒╨╫▀▀▀▒,r║▒░, ░╖ $$\ $$ | ▒ ,▒╓p▒░░░░░░░░░░▒ \$$$$$$ | ,m░░░░░░░ ░░░░░░░▒▓ \______/ g╣░░ (,,,, ░░ ░░░▒▒ ╓∩∩╥∩∩∩╓ ▓╖,▓█▓▓▓H░░░▒╖ [ ░░▒▌ ╓` ╓░ ▒╓ ▓▓▓▓▓▓▓▓@▒▒╠▄░▓,░ ░▒▒ Æ ╓░ ▒╓ `▀▓▓▓▓▓▓▓▓▓▓▓▓▓ ░▒▓ ╣ ╒ , ▒┐ ▓▓▓▓▓▓▀░░░░▓╣ ░▒╢ ▒ ▒ ▒ ▒ ▓▓▓▓▓@╦~░▒▒▒║ ░▒ ,▒ ▒░ ░▒▌ \▐▓▓▓╢▒▒▒▒░░▒║░ ░╢ ▒ ╣ ,▒▓▓ ▓▓▓╣╢▒▒▒▒▒▒▌▒ ▒╢ ╣░ ╢ ╓╢▓▓╣░ ╙╣▒▒▒▒▒▒▒▒▓░ ░║ ╣░ ╢░ ,▒╫▓▓▓╣▒░ ▓▒╖░░░▒╢▓╢ ░▒ ║░ ╔▒ ,╓╩ ▓╢▓▓╣▒░ ╙▓Ñ▒@╢╢▌╘▒ ▒ ╔░ ╓░ ╓╝ ╘╣╣╢▓╣▒░ ╣╖╙▓╣▓ ▒ ] ╣░ ║░ ,╜ ╙╣╣▓▓╣╣▒░ ▓▒╟╢▓ ║░░▒ ,▒──,╜░ ╓` ╙╣╣╣▓╣╣▒░ ╢▒▒╢▓ ▒░▒ ╓░ ╓▒%─ `╨ ╙▓╣╬▓╣╣▒░░ ▓╢╫▓` ▒░▒ ╗ ╢░▒ ╓▓ ▀╣▓▓█╣▒░░ ▐▓▓▓╜ ▒▓▓▓ ╢░ ╣▒ ░╜` ┐ $$$$$$\ $$\ ▀███╣▒▒░░░ á▓▓▀ ▓▒▒▒'░░░▒▒▒∩, /╜'░╟▒░ ░ ╓,$$ __$$\ \__| ╚╩╩╩╩▀▀ "" `` ╔² )╜`'`*╚▀ $$ / \__|$$\ $$$$$$$\ $$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$\ ╢▒▒═,N ▒▓ 4╫ $$$$\ $$ |$$ __$$\ \____$$\ $$ __$$\ $$ _____|$$ __$$\ Γ"╙M4▒▒b æ ╙╙╨ $$ _| $$ |$$ | $$ | $$$$$$$ |$$ | $$ |$$ / $$$$$$$$ | $$ | $$ |$$ | $$ |$$ __$$ |$$ | $$ |$$ | $$ ____| $$\ $$ | $$ |$$ | $$ |\$$$$$$$ |$$ | $$ |\$$$$$$$\ \$$$$$$$\ \__|\__| \__|\__| \__| \_______|\__| \__| \_______| \_______| *//////////////////////////////////////////////////////////////////////////////////////////////////////////// // SPDX-License-Identifier: MIT pragma solidity 0.7.4; import "@openzeppelin/contracts/GSN/Context.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract DirtyFinance is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; string private constant NAME = "dirty.finance"; string private constant SYMBOL = "DIRTY"; uint8 private constant DECIMALS = 18; mapping(address => uint256) private rewards; mapping(address => uint256) private actual; mapping(address => mapping(address => uint256)) private allowances; mapping(address => bool) private excludedFromFees; mapping(address => bool) private excludedFromRewards; address[] private rewardExcluded; uint256 private constant MAX = ~uint256(0); uint256 private constant ACTUAL_TOTAL = 1000000 * 10**6 * 10**18; //1 Trillion uint256 private rewardsTotal = (MAX - (MAX % ACTUAL_TOTAL)); uint256 private holderFeeTotal; uint256 private regenFeeTotal; uint256 private burnFeeTotal; //dev reward wallets //1% admin, 2% holders and 2% burn uint256 public taxPercentage = 5; uint256 public holderTaxAlloc = 20; uint256 public regenTaxAlloc = 10; uint256 public burnTaxAlloc = 20; uint256 public totalTaxAlloc = regenTaxAlloc.add(holderTaxAlloc).add(burnTaxAlloc); address public regenAddress; address public burnAddress; constructor(address _regenAddress) { rewards[_regenAddress] = rewardsTotal; emit Transfer(address(0), _regenAddress, ACTUAL_TOTAL); regenAddress = _regenAddress; excludeFromRewards(_msgSender()); excludeFromFees(_regenAddress); if (_regenAddress != _msgSender()) { excludeFromRewards(_regenAddress); excludeFromFees(_msgSender()); } excludeFromFees(address(0x000000000000000000000000000000000000dEaD)); } function name() external pure returns (string memory) { return NAME; } function symbol() external pure returns (string memory) { return SYMBOL; } function decimals() external pure returns (uint8) { return DECIMALS; } function totalSupply() external pure override returns (uint256) { return ACTUAL_TOTAL; } function balanceOf(address _account) public view override returns (uint256) { if (excludedFromRewards[_account]) { return actual[_account]; } return tokenWithRewards(rewards[_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 isExcludedFromRewards(address _account) external view returns (bool) { return excludedFromRewards[_account]; } function isExcludedFromFees(address _account) external view returns (bool) { return excludedFromFees[_account]; } function totalFees() external view returns (uint256) { return holderFeeTotal.add(regenFeeTotal).add(burnFeeTotal); } function totalHolderFees() external view returns (uint256) { return holderFeeTotal; } function totalRegenFees() external view returns (uint256) { return regenFeeTotal; } function totalBurnFees() external view returns (uint256) { return burnFeeTotal; } function distribute(uint256 _actualAmount) public { address sender = _msgSender(); require(!excludedFromRewards[sender], "Excluded addresses cannot call this function"); (uint256 rewardAmount, , , , ) = _getValues(_actualAmount); rewards[sender] = rewards[sender].sub(rewardAmount); rewardsTotal = rewardsTotal.sub(rewardAmount); holderFeeTotal = holderFeeTotal.add(_actualAmount); } function excludeFromFees(address _account) public onlyOwner() { require(!excludedFromFees[_account], "Account is already excluded from fee"); excludedFromFees[_account] = true; } function includeInFees(address _account) public onlyOwner() { require(excludedFromFees[_account], "Account is already included in fee"); excludedFromFees[_account] = false; } function excludeFromRewards(address _account) public onlyOwner() { require(!excludedFromRewards[_account], "Account is already excluded from reward"); if (rewards[_account] > 0) { actual[_account] = tokenWithRewards(rewards[_account]); } excludedFromRewards[_account] = true; rewardExcluded.push(_account); } function includeInRewards(address _account) public onlyOwner() { require(excludedFromRewards[_account], "Account is already included in rewards"); for (uint256 i = 0; i < rewardExcluded.length; i++) { if (rewardExcluded[i] == _account) { rewardExcluded[i] = rewardExcluded[rewardExcluded.length - 1]; actual[_account] = 0; excludedFromRewards[_account] = false; rewardExcluded.pop(); break; } } } 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 _sender, address _recipient, uint256 _amount ) private { require(_sender != address(0), "ERC20: transfer from the zero address"); require(_recipient != address(0), "ERC20: transfer to the zero address"); require(_amount > 0, "Transfer amount must be greater than zero"); uint256 currentTaxPercentage = taxPercentage; if (excludedFromFees[_sender] || excludedFromFees[_recipient]) { taxPercentage = 0; } else { uint256 fee = _getFee(_amount); uint256 regenFee = _getRegenFee(fee); uint256 burnFee = _getBurnFee(fee); _updateRegenFee(regenFee); _updateBurnFee(burnFee); } if (excludedFromRewards[_sender] && !excludedFromRewards[_recipient]) { _transferWithoutSenderRewards(_sender, _recipient, _amount); } else if (!excludedFromRewards[_sender] && excludedFromRewards[_recipient]) { _transferWithRecipientRewards(_sender, _recipient, _amount); } else if (!excludedFromRewards[_sender] && !excludedFromRewards[_recipient]) { _transferWithRewards(_sender, _recipient, _amount); } else if (excludedFromRewards[_sender] && excludedFromRewards[_recipient]) { _transferWithoutRewards(_sender, _recipient, _amount); } else { _transferWithRewards(_sender, _recipient, _amount); } if (currentTaxPercentage != taxPercentage) { taxPercentage = currentTaxPercentage; } } function _transferWithRewards( address _sender, address _recipient, uint256 _actualAmount ) private { ( uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, uint256 actualFee ) = _getValues(_actualAmount); rewards[_sender] = rewards[_sender].sub(rewardAmount); rewards[_recipient] = rewards[_recipient].add(rewardTransferAmount); _updateHolderFee(rewardFee, actualFee); emit Transfer(_sender, _recipient, actualTransferAmount); } function _transferWithRecipientRewards( address _sender, address _recipient, uint256 _actualAmount ) private { ( uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, uint256 actualFee ) = _getValues(_actualAmount); rewards[_sender] = rewards[_sender].sub(rewardAmount); actual[_recipient] = actual[_recipient].add(actualTransferAmount); rewards[_recipient] = rewards[_recipient].add(rewardTransferAmount); _updateHolderFee(rewardFee, actualFee); emit Transfer(_sender, _recipient, actualTransferAmount); } function _transferWithoutSenderRewards( address _sender, address _recipient, uint256 _actualAmount ) private { ( uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, uint256 actualFee ) = _getValues(_actualAmount); actual[_sender] = actual[_sender].sub(_actualAmount); rewards[_sender] = rewards[_sender].sub(rewardAmount); rewards[_recipient] = rewards[_recipient].add(rewardTransferAmount); _updateHolderFee(rewardFee, actualFee); emit Transfer(_sender, _recipient, actualTransferAmount); } function _transferWithoutRewards( address _sender, address _recipient, uint256 _actualAmount ) private { ( uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, uint256 actualFee ) = _getValues(_actualAmount); actual[_sender] = actual[_sender].sub(_actualAmount); rewards[_sender] = rewards[_sender].sub(rewardAmount); actual[_recipient] = actual[_recipient].add(actualTransferAmount); rewards[_recipient] = rewards[_recipient].add(rewardTransferAmount); _updateHolderFee(rewardFee, actualFee); emit Transfer(_sender, _recipient, actualTransferAmount); } function _updateHolderFee(uint256 _rewardFee, uint256 _actualFee) private { rewardsTotal = rewardsTotal.sub(_rewardFee); holderFeeTotal = holderFeeTotal.add(_actualFee); } function _updateRegenFee(uint256 _regenFee) private { if (regenAddress == address(0)) { return; } uint256 rewardsRate = _getRewardsRate(); uint256 rewardRegenFee = _regenFee.mul(rewardsRate); regenFeeTotal = regenFeeTotal.add(_regenFee); rewards[regenAddress] = rewards[regenAddress].add(rewardRegenFee); if (excludedFromRewards[regenAddress]) { actual[regenAddress] = actual[regenAddress].add(_regenFee); } } function _updateBurnFee(uint256 _burnFee) private { if (burnAddress == address(0)) { return; } uint256 rewardsRate = _getRewardsRate(); uint256 rewardBurnFee = _burnFee.mul(rewardsRate); burnFeeTotal = burnFeeTotal.add(_burnFee); rewards[burnAddress] = rewards[burnAddress].add(rewardBurnFee); if (excludedFromRewards[burnAddress]) { actual[burnAddress] = actual[burnAddress].add(_burnFee); } } function rewardsFromToken(uint256 _actualAmount, bool _deductTransferFee) public view returns (uint256) { require(_actualAmount <= ACTUAL_TOTAL, "Amount must be less than supply"); if (!_deductTransferFee) { (uint256 rewardAmount, , , , ) = _getValues(_actualAmount); return rewardAmount; } else { (, uint256 rewardTransferAmount, , , ) = _getValues(_actualAmount); return rewardTransferAmount; } } function tokenWithRewards(uint256 _rewardAmount) public view returns (uint256) { require(_rewardAmount <= rewardsTotal, "Amount must be less than total rewards"); uint256 rewardsRate = _getRewardsRate(); return _rewardAmount.div(rewardsRate); } function _getValues(uint256 _actualAmount) private view returns ( uint256, uint256, uint256, uint256, uint256 ) { (uint256 actualTransferAmount, uint256 actualFee) = _getActualValues(_actualAmount); uint256 rewardsRate = _getRewardsRate(); ( uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee ) = _getRewardValues(_actualAmount, actualFee, rewardsRate); return (rewardAmount, rewardTransferAmount, rewardFee, actualTransferAmount, actualFee); } function _getActualValues(uint256 _actualAmount) private view returns (uint256, uint256) { uint256 actualFee = _getFee(_actualAmount); uint256 actualHolderFee = _getHolderFee(actualFee); uint256 actualTransferAmount = _actualAmount.sub(actualFee); return (actualTransferAmount, actualHolderFee); } function _getRewardValues( uint256 _actualAmount, uint256 _actualHolderFee, uint256 _rewardsRate ) private view returns ( uint256, uint256, uint256 ) { uint256 actualFee = _getFee(_actualAmount).mul(_rewardsRate); uint256 rewardAmount = _actualAmount.mul(_rewardsRate); uint256 rewardTransferAmount = rewardAmount.sub(actualFee); uint256 rewardFee = _actualHolderFee.mul(_rewardsRate); return (rewardAmount, rewardTransferAmount, rewardFee); } function _getRewardsRate() private view returns (uint256) { (uint256 rewardsSupply, uint256 actualSupply) = _getCurrentSupply(); return rewardsSupply.div(actualSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rewardsSupply = rewardsTotal; uint256 actualSupply = ACTUAL_TOTAL; for (uint256 i = 0; i < rewardExcluded.length; i++) { if (rewards[rewardExcluded[i]] > rewardsSupply || actual[rewardExcluded[i]] > actualSupply) { return (rewardsTotal, ACTUAL_TOTAL); } rewardsSupply = rewardsSupply.sub(rewards[rewardExcluded[i]]); actualSupply = actualSupply.sub(actual[rewardExcluded[i]]); } if (rewardsSupply < rewardsTotal.div(ACTUAL_TOTAL)) { return (rewardsTotal, ACTUAL_TOTAL); } return (rewardsSupply, actualSupply); } function _getFee(uint256 _amount) private view returns (uint256) { return _amount.mul(taxPercentage).div(100); } function _getHolderFee(uint256 _tax) private view returns (uint256) { return _tax.mul(holderTaxAlloc).div(totalTaxAlloc); } function _getRegenFee(uint256 _tax) private view returns (uint256) { return _tax.mul(regenTaxAlloc).div(totalTaxAlloc); } function _getBurnFee(uint256 _tax) private view returns (uint256) { return _tax.mul(burnTaxAlloc).div(totalTaxAlloc); } function setTaxPercentage(uint256 _taxPercentage) external onlyOwner { require(_taxPercentage >= 1 && _taxPercentage <= 10, "Value is outside of range 1-10"); taxPercentage = _taxPercentage; } function setTaxAllocations( uint256 _holderTaxAlloc, uint256 _regenTaxAlloc, uint256 _burnTaxAlloc ) external onlyOwner { totalTaxAlloc = _holderTaxAlloc.add(_regenTaxAlloc).add(_burnTaxAlloc); require(_holderTaxAlloc >= 5 && _holderTaxAlloc <= 20, "_holderTaxAlloc is outside of range 5-20"); require(_burnTaxAlloc >= 5 && _burnTaxAlloc <= 20, "_burnTaxAlloc is outside of range 5-20"); require(_regenTaxAlloc <= 10, "_regenTaxAlloc is greater than 10"); holderTaxAlloc = _holderTaxAlloc; regenTaxAlloc = _regenTaxAlloc; burnTaxAlloc = _burnTaxAlloc; } function setRegenAddress(address _regenAddress) external onlyOwner { regenAddress = _regenAddress; } function setBurnAddress(address _burnAddress) external onlyOwner { burnAddress = _burnAddress; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; import "../GSN/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_regenAddress","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTaxAlloc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"_actualAmount","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"holderTaxAlloc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"includeInRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"regenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"regenTaxAlloc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_actualAmount","type":"uint256"},{"internalType":"bool","name":"_deductTransferFee","type":"bool"}],"name":"rewardsFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_burnAddress","type":"address"}],"name":"setBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_regenAddress","type":"address"}],"name":"setRegenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holderTaxAlloc","type":"uint256"},{"internalType":"uint256","name":"_regenTaxAlloc","type":"uint256"},{"internalType":"uint256","name":"_burnTaxAlloc","type":"uint256"}],"name":"setTaxAllocations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxPercentage","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardAmount","type":"uint256"}],"name":"tokenWithRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnFees","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":"totalHolderFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRegenFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalTaxAlloc","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"}]
Contract Creation Code
60806040526c0c9f2c9cd04674edea40000000600019816200001d57fe5b06600019036007556005600b556014600c55600a600d556014600e5562000072600e546200005e600c54600d546200032360201b620027fd1790919060201c565b6200032360201b620027fd1790919060201c565b600f553480156200008257600080fd5b506040516200582c3803806200582c83398181016040526020811015620000a857600080fd5b81019080805190602001909291905050506000620000cb620003ac60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600754600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6c0c9f2c9cd04674edea400000006040518082815260200191505060405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200028362000277620003ac60201b60201c565b620003b460201b60201c565b6200029481620006c560201b60201c565b620002a4620003ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146200030957620002e881620003b460201b60201c565b62000308620002fc620003ac60201b60201c565b620006c560201b60201c565b5b6200031c61dead620006c560201b60201c565b5062000e75565b600080828401905083811015620003a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b620003c4620003ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000485576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156200052a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180620057bb6027913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156200060757620005c3600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200089660201b60201c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620006d5620003ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156200083b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180620058086024913960400191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600754821115620008f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620057e26026913960400191505060405180910390fd5b6000620009076200092b60201b60201c565b90506200092381846200096560201b620028851790919060201c565b915050919050565b600080600062000940620009b760201b60201c565b915091506200095e81836200096560201b620028851790919060201c565b9250505090565b6000620009af83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c9460201b60201c565b905092915050565b6000806000600754905060006c0c9f2c9cd04674edea40000000905060005b60068054905081101562000c3857826001600060068481548110620009f757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000ae0575081600260006006848154811062000a7857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000b04576007546c0c9f2c9cd04674edea400000009450945050505062000c90565b62000b95600160006006848154811062000b1a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548462000d5f60201b620028cf1790919060201c565b925062000c28600260006006848154811062000bad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000d5f60201b620028cf1790919060201c565b91508080600101915050620009d6565b5062000c626c0c9f2c9cd04674edea400000006007546200096560201b620028851790919060201c565b82101562000c87576007546c0c9f2c9cd04674edea4000000093509350505062000c90565b81819350935050505b9091565b6000808311829062000d44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000d0857808201518184015260208101905062000ceb565b50505050905090810190601f16801562000d365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000d5157fe5b049050809150509392505050565b600062000da983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000db160201b60201c565b905092915050565b600083831115829062000e62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000e2657808201518184015260208101905062000e09565b50505050905090810190601f16801562000e545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6149368062000e856000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063715018a611610130578063a9059cbb116100b8578063e1aa36151161007c578063e1aa361514610ada578063e57f14e114610af8578063f2fde38b14610b3c578063f854336214610b80578063fcbd247f14610b9e57610232565b8063a9059cbb1461097e578063ae7b6d16146109e2578063b609995e14610a00578063dd62ed3e14610a44578063e19fe02d14610abc57610232565b80638baa3fd4116100ff5780638baa3fd4146107f35780638da5cb5b1461083557806391c05b0b1461086957806395d89b4114610897578063a457c2d71461091a57610232565b8063715018a61461076957806374e47a1e1461077357806377b8259d146107915780637c31efb1146107d557610232565b8063313ce567116101be5780634b0e7216116101825780634b0e7216146106115780634fbee19314610655578063699abb3c146106af57806370a08231146106dd57806370d5ae051461073557610232565b8063313ce56714610502578063317653e0146105235780633557ee7714610541578063395093511461058f57806340e7bdf4146105f357610232565b806313114a9d1161020557806313114a9d146103bc57806313647dc8146103da57806316a2f82a1461041c57806318160ddd1461046057806323b872dd1461047e57610232565b806306fdde0314610237578063095ea7b3146102ba5780630e8322731461031e578063111e037614610378575b600080fd5b61023f610bd2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610306600480360360408110156102d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c0f565b60405180821515815260200191505060405180910390f35b6103606004803603602081101561033457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2d565b60405180821515815260200191505060405180910390f35b6103ba6004803603602081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c83565b005b6103c4610f80565b6040518082815260200191505060405180910390f35b61041a600480360360608110156103f057600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610fb2565b005b61045e6004803603602081101561043257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e7565b005b6104686113ac565b6040518082815260200191505060405180910390f35b6104ea6004803603606081101561049457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113c1565b60405180821515815260200191505060405180910390f35b61050a61149a565b604051808260ff16815260200191505060405180910390f35b61052b6114a3565b6040518082815260200191505060405180910390f35b6105796004803603604081101561055757600080fd5b81019080803590602001909291908035151590602001909291905050506114ad565b6040518082815260200191505060405180910390f35b6105db600480360360408110156105a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061156d565b60405180821515815260200191505060405180910390f35b6105fb611620565b6040518082815260200191505060405180910390f35b6106536004803603602081101561062757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611626565b005b6106976004803603602081101561066b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611732565b60405180821515815260200191505060405180910390f35b6106db600480360360208110156106c557600080fd5b8101908080359060200190929190505050611788565b005b61071f600480360360208110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118de565b6040518082815260200191505060405180910390f35b61073d6119c9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107716119ef565b005b61077b611b75565b6040518082815260200191505060405180910390f35b6107d3600480360360208110156107a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b7b565b005b6107dd611c87565b6040518082815260200191505060405180910390f35b61081f6004803603602081101561080957600080fd5b8101908080359060200190929190505050611c91565b6040518082815260200191505060405180910390f35b61083d611d15565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108956004803603602081101561087f57600080fd5b8101908080359060200190929190505050611d3e565b005b61089f611ece565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108df5780820151818401526020810190506108c4565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109666004803603604081101561093057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f0b565b60405180821515815260200191505060405180910390f35b6109ca6004803603604081101561099457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fd8565b60405180821515815260200191505060405180910390f35b6109ea611ff6565b6040518082815260200191505060405180910390f35b610a4260048036036020811015610a1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ffc565b005b610aa660048036036040811015610a5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612369565b6040518082815260200191505060405180910390f35b610ac46123f0565b6040518082815260200191505060405180910390f35b610ae26123f6565b6040518082815260200191505060405180910390f35b610b3a60048036036020811015610b0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612400565b005b610b7e60048036036020811015610b5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125c6565b005b610b886127d1565b6040518082815260200191505060405180910390f35b610ba66127d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60606040518060400160405280600d81526020017f64697274792e66696e616e636500000000000000000000000000000000000000815250905090565b6000610c23610c1c612919565b8484612921565b6001905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c8b612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806146856027913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ec257610e7e600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c91565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fad600a54610f9f6009546008546127fd90919063ffffffff16565b6127fd90919063ffffffff16565b905090565b610fba612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61109f8161109184866127fd90919063ffffffff16565b6127fd90919063ffffffff16565b600f81905550600583101580156110b7575060148311155b61110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147a66028913960400191505060405180910390fd5b6005811015801561111e575060148111155b611173576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806147ce6026913960400191505060405180910390fd5b600a8211156111cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061473c6021913960400191505060405180910390fd5b82600c8190555081600d8190555080600e81905550505050565b6111ef612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806146d26022913960400191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006c0c9f2c9cd04674edea40000000905090565b60006113ce848484612b18565b61148f846113da612919565b61148a8560405180606001604052806028815260200161477e60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611440612919565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307a9092919063ffffffff16565b612921565b600190509392505050565b60006012905090565b6000600a54905090565b60006c0c9f2c9cd04674edea40000000831115611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816115515760006115428461313a565b50505050905080915050611567565b600061155c8461313a565b505050915050809150505b92915050565b600061161661157a612919565b84611611856003600061158b612919565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b612921565b6001905092915050565b600f5481565b61162e612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611790612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156118625750600a8111155b6118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56616c7565206973206f757473696465206f662072616e676520312d3130000081525060200191505060405180910390fd5b80600b8190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561197957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119c4565b6119c1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c91565b90505b919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119f7612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b611b83612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854905090565b6000600754821115611cee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148666026913960400191505060405180910390fd5b6000611cf8613192565b9050611d0d818461288590919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611d48612919565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ded576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806148b0602c913960400191505060405180910390fd5b6000611df88361313a565b505050509050611e5081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ea8816007546128cf90919063ffffffff16565b600781905550611ec3836008546127fd90919063ffffffff16565b600881905550505050565b60606040518060400160405280600581526020017f4449525459000000000000000000000000000000000000000000000000000000815250905090565b6000611fce611f18612919565b84611fc9856040518060600160405280602581526020016148dc6025913960036000611f42612919565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307a9092919063ffffffff16565b612921565b6001905092915050565b6000611fec611fe5612919565b8484612b18565b6001905092915050565b600b5481565b612004612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146ac6026913960400191505060405180910390fd5b60005b600680549050811015612365578173ffffffffffffffffffffffffffffffffffffffff166006828154811061219a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612358576006600160068054905003815481106121f657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061222e57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061231e57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612365565b8080600101915050612169565b5050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6000600954905090565b612408612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061488c6024913960400191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6125ce612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612714576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146f46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082840190508381101561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006128c783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131bd565b905092915050565b600061291183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061307a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806148426024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061471a6022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061481d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146626023913960400191505060405180910390fd5b60008111612c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806147f46029913960400191505060405180910390fd5b6000600b549050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d255750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d37576000600b81905550612d74565b6000612d4283613283565b90506000612d4f826132b4565b90506000612d5c836132e6565b9050612d6782613318565b612d70816135df565b5050505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e175750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2c57612e278484846138a6565b613063565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ecf5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ee457612edf848484613af9565b613062565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f885750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9d57612f98848484613d4c565b613061565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130545761304f848484613f0a565b613060565b61305f848484613d4c565b5b5b5b5b600b5481146130745780600b819055505b50505050565b6000838311158290613127576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130ec5780820151818401526020810190506130d1565b50505050905090810190601f1680156131195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600080600080600061314e886141f2565b91509150600061315c613192565b9050600080600061316e8c8686614234565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600080600061319f6142b2565b915091506131b6818361288590919063ffffffff16565b9250505090565b60008083118290613269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561322e578082015181840152602081019050613213565b50505050905090810190601f16801561325b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161327557fe5b049050809150509392505050565b60006132ad606461329f600b548561456f90919063ffffffff16565b61288590919063ffffffff16565b9050919050565b60006132df600f546132d1600d548561456f90919063ffffffff16565b61288590919063ffffffff16565b9050919050565b6000613311600f54613303600e548561456f90919063ffffffff16565b61288590919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613374576135dc565b600061337e613192565b90506000613395828461456f90919063ffffffff16565b90506133ac836009546127fd90919063ffffffff16565b6009819055506134268160016000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60016000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135d9576135738360026000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60026000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561363b576138a3565b6000613645613192565b9050600061365c828461456f90919063ffffffff16565b905061367383600a546127fd90919063ffffffff16565b600a819055506136ed8160016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138a05761383a8360026000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60026000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b60008060008060006138b78661313a565b9450945094509450945061391386600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139a885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8a83826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613b0a8661313a565b94509450945094509450613b6685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bfb82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cdd83826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613d5d8661313a565b94509450945094509450613db985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e4e84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9b83826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613f1b8661313a565b94509450945094509450613f7786600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400c85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a182600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413684600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418383826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b600080600061420084613283565b9050600061420d8261462f565b9050600061422483876128cf90919063ffffffff16565b9050808294509450505050915091565b6000806000806142558561424789613283565b61456f90919063ffffffff16565b9050600061426c868961456f90919063ffffffff16565b9050600061428383836128cf90919063ffffffff16565b9050600061429a888a61456f90919063ffffffff16565b90508282829650965096505050505093509350939050565b6000806000600754905060006c0c9f2c9cd04674edea40000000905060005b60068054905081101561451c578260016000600684815481106142f057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806143d7575081600260006006848154811061436f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156143f9576007546c0c9f2c9cd04674edea400000009450945050505061456b565b614482600160006006848154811061440d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846128cf90919063ffffffff16565b925061450d600260006006848154811061449857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128cf90919063ffffffff16565b915080806001019150506142d1565b5061453f6c0c9f2c9cd04674edea4000000060075461288590919063ffffffff16565b821015614562576007546c0c9f2c9cd04674edea4000000093509350505061456b565b81819350935050505b9091565b60008083141561458257600090506145ef565b600082840290508284828161459357fe5b04146145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061475d6021913960400191505060405180910390fd5b809150505b92915050565b61460a826007546128cf90919063ffffffff16565b600781905550614625816008546127fd90919063ffffffff16565b6008819055505050565b600061465a600f5461464c600c548561456f90919063ffffffff16565b61288590919063ffffffff16565b905091905056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734163636f756e7420697320616c7265616479206578636c756465642066726f6d207265776172644163636f756e7420697320616c726561647920696e636c7564656420696e20726577617264734163636f756e7420697320616c726561647920696e636c7564656420696e206665654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735f726567656e546178416c6c6f632069732067726561746572207468616e203130536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f686f6c646572546178416c6c6f63206973206f757473696465206f662072616e676520352d32305f6275726e546178416c6c6f63206973206f757473696465206f662072616e676520352d32305472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c20726577617264734163636f756e7420697320616c7265616479206578636c756465642066726f6d206665654578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122002bb29b2ab0e63412be5b65c87b657b3d27c4061be41fef03efcbfede8b933c664736f6c634300070400334163636f756e7420697320616c7265616479206578636c756465642066726f6d20726577617264416d6f756e74206d757374206265206c657373207468616e20746f74616c20726577617264734163636f756e7420697320616c7265616479206578636c756465642066726f6d2066656500000000000000000000000049aeaddc7890feec5b84b9fe62bff6a3b0575174
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063715018a611610130578063a9059cbb116100b8578063e1aa36151161007c578063e1aa361514610ada578063e57f14e114610af8578063f2fde38b14610b3c578063f854336214610b80578063fcbd247f14610b9e57610232565b8063a9059cbb1461097e578063ae7b6d16146109e2578063b609995e14610a00578063dd62ed3e14610a44578063e19fe02d14610abc57610232565b80638baa3fd4116100ff5780638baa3fd4146107f35780638da5cb5b1461083557806391c05b0b1461086957806395d89b4114610897578063a457c2d71461091a57610232565b8063715018a61461076957806374e47a1e1461077357806377b8259d146107915780637c31efb1146107d557610232565b8063313ce567116101be5780634b0e7216116101825780634b0e7216146106115780634fbee19314610655578063699abb3c146106af57806370a08231146106dd57806370d5ae051461073557610232565b8063313ce56714610502578063317653e0146105235780633557ee7714610541578063395093511461058f57806340e7bdf4146105f357610232565b806313114a9d1161020557806313114a9d146103bc57806313647dc8146103da57806316a2f82a1461041c57806318160ddd1461046057806323b872dd1461047e57610232565b806306fdde0314610237578063095ea7b3146102ba5780630e8322731461031e578063111e037614610378575b600080fd5b61023f610bd2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610306600480360360408110156102d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c0f565b60405180821515815260200191505060405180910390f35b6103606004803603602081101561033457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2d565b60405180821515815260200191505060405180910390f35b6103ba6004803603602081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c83565b005b6103c4610f80565b6040518082815260200191505060405180910390f35b61041a600480360360608110156103f057600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610fb2565b005b61045e6004803603602081101561043257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111e7565b005b6104686113ac565b6040518082815260200191505060405180910390f35b6104ea6004803603606081101561049457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113c1565b60405180821515815260200191505060405180910390f35b61050a61149a565b604051808260ff16815260200191505060405180910390f35b61052b6114a3565b6040518082815260200191505060405180910390f35b6105796004803603604081101561055757600080fd5b81019080803590602001909291908035151590602001909291905050506114ad565b6040518082815260200191505060405180910390f35b6105db600480360360408110156105a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061156d565b60405180821515815260200191505060405180910390f35b6105fb611620565b6040518082815260200191505060405180910390f35b6106536004803603602081101561062757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611626565b005b6106976004803603602081101561066b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611732565b60405180821515815260200191505060405180910390f35b6106db600480360360208110156106c557600080fd5b8101908080359060200190929190505050611788565b005b61071f600480360360208110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118de565b6040518082815260200191505060405180910390f35b61073d6119c9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107716119ef565b005b61077b611b75565b6040518082815260200191505060405180910390f35b6107d3600480360360208110156107a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b7b565b005b6107dd611c87565b6040518082815260200191505060405180910390f35b61081f6004803603602081101561080957600080fd5b8101908080359060200190929190505050611c91565b6040518082815260200191505060405180910390f35b61083d611d15565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108956004803603602081101561087f57600080fd5b8101908080359060200190929190505050611d3e565b005b61089f611ece565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108df5780820151818401526020810190506108c4565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109666004803603604081101561093057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f0b565b60405180821515815260200191505060405180910390f35b6109ca6004803603604081101561099457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fd8565b60405180821515815260200191505060405180910390f35b6109ea611ff6565b6040518082815260200191505060405180910390f35b610a4260048036036020811015610a1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ffc565b005b610aa660048036036040811015610a5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612369565b6040518082815260200191505060405180910390f35b610ac46123f0565b6040518082815260200191505060405180910390f35b610ae26123f6565b6040518082815260200191505060405180910390f35b610b3a60048036036020811015610b0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612400565b005b610b7e60048036036020811015610b5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125c6565b005b610b886127d1565b6040518082815260200191505060405180910390f35b610ba66127d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60606040518060400160405280600d81526020017f64697274792e66696e616e636500000000000000000000000000000000000000815250905090565b6000610c23610c1c612919565b8484612921565b6001905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c8b612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806146856027913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ec257610e7e600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c91565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fad600a54610f9f6009546008546127fd90919063ffffffff16565b6127fd90919063ffffffff16565b905090565b610fba612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61109f8161109184866127fd90919063ffffffff16565b6127fd90919063ffffffff16565b600f81905550600583101580156110b7575060148311155b61110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147a66028913960400191505060405180910390fd5b6005811015801561111e575060148111155b611173576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806147ce6026913960400191505060405180910390fd5b600a8211156111cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061473c6021913960400191505060405180910390fd5b82600c8190555081600d8190555080600e81905550505050565b6111ef612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806146d26022913960400191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006c0c9f2c9cd04674edea40000000905090565b60006113ce848484612b18565b61148f846113da612919565b61148a8560405180606001604052806028815260200161477e60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611440612919565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307a9092919063ffffffff16565b612921565b600190509392505050565b60006012905090565b6000600a54905090565b60006c0c9f2c9cd04674edea40000000831115611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816115515760006115428461313a565b50505050905080915050611567565b600061155c8461313a565b505050915050809150505b92915050565b600061161661157a612919565b84611611856003600061158b612919565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b612921565b6001905092915050565b600f5481565b61162e612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611790612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156118625750600a8111155b6118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56616c7565206973206f757473696465206f662072616e676520312d3130000081525060200191505060405180910390fd5b80600b8190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561197957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506119c4565b6119c1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c91565b90505b919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119f7612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b611b83612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854905090565b6000600754821115611cee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148666026913960400191505060405180910390fd5b6000611cf8613192565b9050611d0d818461288590919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611d48612919565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ded576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806148b0602c913960400191505060405180910390fd5b6000611df88361313a565b505050509050611e5081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ea8816007546128cf90919063ffffffff16565b600781905550611ec3836008546127fd90919063ffffffff16565b600881905550505050565b60606040518060400160405280600581526020017f4449525459000000000000000000000000000000000000000000000000000000815250905090565b6000611fce611f18612919565b84611fc9856040518060600160405280602581526020016148dc6025913960036000611f42612919565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307a9092919063ffffffff16565b612921565b6001905092915050565b6000611fec611fe5612919565b8484612b18565b6001905092915050565b600b5481565b612004612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146ac6026913960400191505060405180910390fd5b60005b600680549050811015612365578173ffffffffffffffffffffffffffffffffffffffff166006828154811061219a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612358576006600160068054905003815481106121f657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061222e57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061231e57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612365565b8080600101915050612169565b5050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6000600954905090565b612408612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061488c6024913960400191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6125ce612919565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612714576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146f46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082840190508381101561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006128c783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131bd565b905092915050565b600061291183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061307a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806148426024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061471a6022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061481d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146626023913960400191505060405180910390fd5b60008111612c7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806147f46029913960400191505060405180910390fd5b6000600b549050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d255750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d37576000600b81905550612d74565b6000612d4283613283565b90506000612d4f826132b4565b90506000612d5c836132e6565b9050612d6782613318565b612d70816135df565b5050505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e175750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2c57612e278484846138a6565b613063565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ecf5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ee457612edf848484613af9565b613062565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f885750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9d57612f98848484613d4c565b613061565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130545761304f848484613f0a565b613060565b61305f848484613d4c565b5b5b5b5b600b5481146130745780600b819055505b50505050565b6000838311158290613127576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130ec5780820151818401526020810190506130d1565b50505050905090810190601f1680156131195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600080600080600061314e886141f2565b91509150600061315c613192565b9050600080600061316e8c8686614234565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600080600061319f6142b2565b915091506131b6818361288590919063ffffffff16565b9250505090565b60008083118290613269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561322e578082015181840152602081019050613213565b50505050905090810190601f16801561325b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161327557fe5b049050809150509392505050565b60006132ad606461329f600b548561456f90919063ffffffff16565b61288590919063ffffffff16565b9050919050565b60006132df600f546132d1600d548561456f90919063ffffffff16565b61288590919063ffffffff16565b9050919050565b6000613311600f54613303600e548561456f90919063ffffffff16565b61288590919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613374576135dc565b600061337e613192565b90506000613395828461456f90919063ffffffff16565b90506133ac836009546127fd90919063ffffffff16565b6009819055506134268160016000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60016000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135d9576135738360026000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60026000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561363b576138a3565b6000613645613192565b9050600061365c828461456f90919063ffffffff16565b905061367383600a546127fd90919063ffffffff16565b600a819055506136ed8160016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138a05761383a8360026000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b60026000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b60008060008060006138b78661313a565b9450945094509450945061391386600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139a885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8a83826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613b0a8661313a565b94509450945094509450613b6685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bfb82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cdd83826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613d5d8661313a565b94509450945094509450613db985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e4e84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9b83826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613f1b8661313a565b94509450945094509450613f7786600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400c85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128cf90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a182600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413684600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fd90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418383826145f5565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b600080600061420084613283565b9050600061420d8261462f565b9050600061422483876128cf90919063ffffffff16565b9050808294509450505050915091565b6000806000806142558561424789613283565b61456f90919063ffffffff16565b9050600061426c868961456f90919063ffffffff16565b9050600061428383836128cf90919063ffffffff16565b9050600061429a888a61456f90919063ffffffff16565b90508282829650965096505050505093509350939050565b6000806000600754905060006c0c9f2c9cd04674edea40000000905060005b60068054905081101561451c578260016000600684815481106142f057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806143d7575081600260006006848154811061436f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156143f9576007546c0c9f2c9cd04674edea400000009450945050505061456b565b614482600160006006848154811061440d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846128cf90919063ffffffff16565b925061450d600260006006848154811061449857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836128cf90919063ffffffff16565b915080806001019150506142d1565b5061453f6c0c9f2c9cd04674edea4000000060075461288590919063ffffffff16565b821015614562576007546c0c9f2c9cd04674edea4000000093509350505061456b565b81819350935050505b9091565b60008083141561458257600090506145ef565b600082840290508284828161459357fe5b04146145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061475d6021913960400191505060405180910390fd5b809150505b92915050565b61460a826007546128cf90919063ffffffff16565b600781905550614625816008546127fd90919063ffffffff16565b6008819055505050565b600061465a600f5461464c600c548561456f90919063ffffffff16565b61288590919063ffffffff16565b905091905056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734163636f756e7420697320616c7265616479206578636c756465642066726f6d207265776172644163636f756e7420697320616c726561647920696e636c7564656420696e20726577617264734163636f756e7420697320616c726561647920696e636c7564656420696e206665654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735f726567656e546178416c6c6f632069732067726561746572207468616e203130536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f686f6c646572546178416c6c6f63206973206f757473696465206f662072616e676520352d32305f6275726e546178416c6c6f63206973206f757473696465206f662072616e676520352d32305472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c20726577617264734163636f756e7420697320616c7265616479206578636c756465642066726f6d206665654578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122002bb29b2ab0e63412be5b65c87b657b3d27c4061be41fef03efcbfede8b933c664736f6c63430007040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000049aeaddc7890feec5b84b9fe62bff6a3b0575174
-----Decoded View---------------
Arg [0] : _regenAddress (address): 0x49AEaDDc7890FEeC5b84B9fe62BFf6A3b0575174
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000049aeaddc7890feec5b84b9fe62bff6a3b0575174
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.