[ Download CSV Export ]
OVERVIEW
Wault Finance is dedicated to making an effective and user-friendly yield generators and lending aggregators.
Latest 25 internal transaction
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
WaultFinance
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-02-16 */ // SPDX-License-Identifier: MIT pragma solidity 0.7.6; /* * @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; } } /** * @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); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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; } } /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev 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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { 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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract WaultFinance is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private rewardsBalance; mapping(address => uint256) private actualBalance; mapping(address => mapping(address => uint256)) private allowances; mapping(address => bool) private isExcludedFromFees; mapping(address => bool) private isExcludedFromRewards; address[] private excluded; uint256 private constant MAX = ~uint256(0); uint256 private constant TOTAL_SUPPLY = 1000000 ether; uint256 private rewardsTotal = (MAX - (MAX % TOTAL_SUPPLY)); string public constant name = "Wault Finance"; string public constant symbol = "WAULT"; uint8 public constant decimals = 18; uint256 public totalTaxPermille = 30; uint256 public liquidityMiningTaxPermille = 12; uint256 public stakingTaxPermille = 5; uint256 public holdersTaxPermille = 8; uint256 public marketingTaxPermille = 5; address public liquidityMiningAddress; address public stakingAddress; address public marketingAddress; constructor(address _liquidityMiningAddress, address _stakingAddress, address _marketingAddress, address _factoryAddress, address _weth) { liquidityMiningAddress = _liquidityMiningAddress; stakingAddress = _stakingAddress; marketingAddress = _marketingAddress; rewardsBalance[_msgSender()] = rewardsTotal; emit Transfer(address(0), _msgSender(), TOTAL_SUPPLY); excludeFromFees(liquidityMiningAddress); excludeFromRewards(liquidityMiningAddress); excludeFromFees(stakingAddress); excludeFromRewards(stakingAddress); excludeFromFees(marketingAddress); excludeFromRewards(marketingAddress); excludeFromFees(_msgSender()); excludeFromRewards(_msgSender()); transfer(liquidityMiningAddress, 400000 ether); transfer(stakingAddress, 100000 ether); transfer(marketingAddress, 40000 ether); address pairAddress = IFactory(_factoryAddress).createPair(_weth, address(this)); excludeFromRewards(pairAddress); } function totalSupply() external pure override returns (uint256) { return TOTAL_SUPPLY; } function balanceOf(address account) public view override returns (uint256) { if (isExcludedFromRewards[account]) { return actualBalance[account]; } return calculateRewards(rewardsBalance[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 excludeFromFees(address account) public onlyOwner() { require(!isExcludedFromFees[account], "Account is already excluded from fees"); isExcludedFromFees[account] = true; } function includeInFees(address account) public onlyOwner() { require(isExcludedFromFees[account], "Account is already included in fees"); isExcludedFromFees[account] = false; } function excludeFromRewards(address account) public onlyOwner() { require(!isExcludedFromRewards[account], "Account is already excluded from rewards"); if (rewardsBalance[account] > 0) { actualBalance[account] = calculateRewards(rewardsBalance[account]); } isExcludedFromRewards[account] = true; excluded.push(account); } function includeInRewards(address account) public onlyOwner() { require(isExcludedFromRewards[account], "Account is already included in rewards"); for (uint256 i = 0; i < excluded.length; i++) { if (excluded[i] == account) { excluded[i] = excluded[excluded.length - 1]; actualBalance[account] = 0; isExcludedFromRewards[account] = false; excluded.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 _totalTaxPermille = totalTaxPermille; if (isExcludedFromFees[sender] || isExcludedFromFees[recipient]) { totalTaxPermille = 0; } else { uint256 liquidityMiningFee = amount.mul(liquidityMiningTaxPermille).div(1000); uint256 stakingFee = amount.mul(stakingTaxPermille).div(1000); uint256 marketingFee = amount.mul(marketingTaxPermille).div(1000); actualBalance[liquidityMiningAddress] = actualBalance[liquidityMiningAddress].add(liquidityMiningFee); actualBalance[stakingAddress] = actualBalance[stakingAddress].add(stakingFee); actualBalance[marketingAddress] = actualBalance[marketingAddress].add(marketingFee); } if (isExcludedFromRewards[sender] && !isExcludedFromRewards[recipient]) { transferWithoutSenderRewards(sender, recipient, amount); } else if (!isExcludedFromRewards[sender] && isExcludedFromRewards[recipient]) { transferWithRecipientRewards(sender, recipient, amount); } else if (!isExcludedFromRewards[sender] && !isExcludedFromRewards[recipient]) { transferWithRewards(sender, recipient, amount); } else if (isExcludedFromRewards[sender] && isExcludedFromRewards[recipient]) { transferWithoutRewards(sender, recipient, amount); } else { transferWithRewards(sender, recipient, amount); } if (_totalTaxPermille != totalTaxPermille) { totalTaxPermille = _totalTaxPermille; } } function transferWithRewards(address sender, address recipient, uint256 actualAmount) private { (uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, ) = getValues(actualAmount); rewardsBalance[sender] = rewardsBalance[sender].sub(rewardAmount); rewardsBalance[recipient] = rewardsBalance[recipient].add(rewardTransferAmount); rewardsTotal = rewardsTotal.sub(rewardFee); emit Transfer(sender, recipient, actualTransferAmount); } function transferWithRecipientRewards(address sender, address recipient, uint256 actualAmount) private { (uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, ) = getValues(actualAmount); rewardsBalance[sender] = rewardsBalance[sender].sub(rewardAmount); actualBalance[recipient] = actualBalance[recipient].add(actualTransferAmount); rewardsBalance[recipient] = rewardsBalance[recipient].add(rewardTransferAmount); rewardsTotal = rewardsTotal.sub(rewardFee); emit Transfer(sender, recipient, actualTransferAmount); } function transferWithoutSenderRewards(address sender, address recipient, uint256 actualAmount) private { (uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, ) = getValues(actualAmount); actualBalance[sender] = actualBalance[sender].sub(actualAmount); rewardsBalance[sender] = rewardsBalance[sender].sub(rewardAmount); rewardsBalance[recipient] = rewardsBalance[recipient].add(rewardTransferAmount); rewardsTotal = rewardsTotal.sub(rewardFee); emit Transfer(sender, recipient, actualTransferAmount); } function transferWithoutRewards(address sender, address recipient, uint256 actualAmount) private { (uint256 rewardAmount, uint256 rewardTransferAmount, uint256 rewardFee, uint256 actualTransferAmount, ) = getValues(actualAmount); actualBalance[sender] = actualBalance[sender].sub(actualAmount); rewardsBalance[sender] = rewardsBalance[sender].sub(rewardAmount); actualBalance[recipient] = actualBalance[recipient].add(actualTransferAmount); rewardsBalance[recipient] = rewardsBalance[recipient].add(rewardTransferAmount); rewardsTotal = rewardsTotal.sub(rewardFee); emit Transfer(sender, recipient, actualTransferAmount); } function calculateRewards(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 = actualAmount.mul(totalTaxPermille).div(1000); uint256 actualHolderFee = actualAmount.mul(holdersTaxPermille).div(1000); uint256 actualTransferAmount = actualAmount.sub(actualFee); return (actualTransferAmount, actualHolderFee); } function getRewardValues(uint256 actualAmount, uint256 actualHolderFee, uint256 rewardsRate) private view returns (uint256, uint256, uint256) { uint256 actualFee = actualAmount.mul(totalTaxPermille).div(1000).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 = TOTAL_SUPPLY; for (uint256 i = 0; i < excluded.length; i++) { if (rewardsBalance[excluded[i]] > rewardsSupply || actualBalance[excluded[i]] > actualSupply) { return (rewardsTotal, TOTAL_SUPPLY); } rewardsSupply = rewardsSupply.sub(rewardsBalance[excluded[i]]); actualSupply = actualSupply.sub(actualBalance[excluded[i]]); } if (rewardsSupply < rewardsTotal.div(TOTAL_SUPPLY)) { return (rewardsTotal, TOTAL_SUPPLY); } return (rewardsSupply, actualSupply); } }
[{"inputs":[{"internalType":"address","name":"_liquidityMiningAddress","type":"address"},{"internalType":"address","name":"_stakingAddress","type":"address"},{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_factoryAddress","type":"address"},{"internalType":"address","name":"_weth","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":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"calculateRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"holdersTaxPermille","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":[],"name":"liquidityMiningAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityMiningTaxPermille","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxPermille","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingTaxPermille","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalTaxPermille","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
608060405269d3c21bcecceda1000000600019816200001a57fe5b0660001903600755601e600855600c6009556005600a556008600b556005600c553480156200004857600080fd5b5060405162005f5838038062005f58833981810160405260a08110156200006e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050506000620000b96200060360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075460016000620002316200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200027f6200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda10000006040518082815260200191505060405180910390a362000321600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200060b60201b60201c565b62000354600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620007cb60201b60201c565b62000387600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200060b60201b60201c565b620003ba600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620007cb60201b60201c565b620003ed600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200060b60201b60201c565b62000420600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620007cb60201b60201c565b62000440620004346200060360201b60201c565b6200060b60201b60201c565b62000460620004546200060360201b60201c565b620007cb60201b60201c565b6200049e600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166954b40b1f852bda00000062000acb60201b60201c565b50620004dd600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669152d02c7e14af680000062000acb60201b60201c565b506200051c600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16690878678326eac900000062000acb60201b60201c565b5060008273ffffffffffffffffffffffffffffffffffffffff1663c9c6539683306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620005a757600080fd5b505af1158015620005bc573d6000803e3d6000fd5b505050506040513d6020811015620005d357600080fd5b81019080805190602001909291905050509050620005f781620007cb60201b60201c565b5050505050506200258a565b600033905090565b6200061b6200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200064162000af960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018062005e9e6025913960400191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b620007db6200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200080162000af960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200088b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018062005e766028913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111562000a0d57620009c9600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2260201b60201c565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600062000aef62000ae16200060360201b60201c565b848462000bb760201b60201c565b6001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060075482111562000b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018062005f326026913960400191505060405180910390fd5b600062000b936200146f60201b60201c565b905062000baf8184620014a960201b62001b9a1790919060201c565b915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000c3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018062005f0d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018062005e536023913960400191505060405180910390fd5b6000811162000d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018062005ee46029913960400191505060405180910390fd5b60006008549050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062000dcb5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1562000ddf57600060088190555062001134565b600062000e186103e862000e04600954866200153460201b62001c231790919060201c565b620014a960201b62001b9a1790919060201c565b9050600062000e536103e862000e3f600a54876200153460201b62001c231790919060201c565b620014a960201b62001b9a1790919060201c565b9050600062000e8e6103e862000e7a600c54886200153460201b62001c231790919060201c565b620014a960201b62001b9a1790919060201c565b905062000f0b8360026000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b60026000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000feb8260026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b60026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620010cb8160026000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b60026000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015620011d85750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15620011f757620011f18484846200164860201b60201c565b62001457565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156200129b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15620012ba57620012b4848484620018cc60201b60201c565b62001456565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156200135f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156200137e576200137884848462001b5060201b60201c565b62001455565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015620014215750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1562001440576200143a84848462001d3860201b60201c565b62001454565b6200145384848462001b5060201b60201c565b5b5b5b5b60085481146200146957806008819055505b50505050565b6000806000620014846200205860201b60201c565b91509150620014a28183620014a960201b62001b9a1790919060201c565b9250505090565b600080821162001521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816200152b57fe5b04905092915050565b600080831415620015495760009050620015b9565b60008284029050828482816200155b57fe5b0414620015b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062005ec36021913960400191505060405180910390fd5b809150505b92915050565b6000808284019050838110156200163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806200165f856200232960201b60201c565b509350935093509350620016c185600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200239960201b62001d311790919060201c565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200175d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200239960201b62001d311790919060201c565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620017f983600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001858826007546200239960201b62001d311790919060201c565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b600080600080620018e3856200232960201b60201c565b5093509350935093506200194584600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200239960201b62001d311790919060201c565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620019e181600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001a7d83600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001adc826007546200239960201b62001d311790919060201c565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b60008060008062001b67856200232960201b60201c565b50935093509350935062001bc984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200239960201b62001d311790919060201c565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001c6583600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001cc4826007546200239960201b62001d311790919060201c565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b60008060008062001d4f856200232960201b60201c565b50935093509350935062001db185600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200239960201b62001d311790919060201c565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001e4d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200239960201b62001d311790919060201c565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001ee981600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001f8583600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620015bf60201b62001ca91790919060201c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001fe4826007546200239960201b62001d311790919060201c565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b60008060006007549050600069d3c21bcecceda1000000905060005b600680549050811015620022d3578260016000600684815481106200209557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806200217e57508160026000600684815481106200211657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156200219f5760075469d3c21bcecceda10000009450945050505062002325565b620022306001600060068481548110620021b557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200239960201b62001d311790919060201c565b9250620022c360026000600684815481106200224857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836200239960201b62001d311790919060201c565b9150808060010191505062002074565b50620022fa69d3c21bcecceda1000000600754620014a960201b62001b9a1790919060201c565b8210156200231c5760075469d3c21bcecceda100000093509350505062002325565b81819350935050505b9091565b600080600080600080600062002345886200241d60201b60201c565b9150915060006200235b6200146f60201b60201c565b90506000806000620023758c8686620024c260201b60201c565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60008282111562002412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000806000620024596103e862002445600854876200153460201b62001c231790919060201c565b620014a960201b62001b9a1790919060201c565b90506000620024946103e862002480600b54886200153460201b62001c231790919060201c565b620014a960201b62001b9a1790919060201c565b90506000620024b283876200239960201b62001d311790919060201c565b9050808294509450505050915091565b6000806000806200251885620025046103e8620024f06008548c6200153460201b62001c231790919060201c565b620014a960201b62001b9a1790919060201c565b6200153460201b62001c231790919060201c565b905060006200253686896200153460201b62001c231790919060201c565b905060006200255483836200239960201b62001d311790919060201c565b9050600062002572888a6200153460201b62001c231790919060201c565b90508282829650965096505050505093509350939050565b6138b9806200259a6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80638ee6c4e6116100f9578063d3ea435011610097578063e57f14e111610071578063e57f14e114610819578063f2e0f1391461085d578063f2fde38b1461087b578063fb4d2fc3146108bf576101a9565b8063d3ea43501461072b578063d7b4be241461076d578063dd62ed3e146107a1576101a9565b8063a457c2d7116100d3578063a457c2d7146105eb578063a5ece9411461064f578063a9059cbb14610683578063b609995e146106e7576101a9565b80638ee6c4e61461051657806392d1ec081461054a57806395d89b4114610568576101a9565b8063313ce5671161016657806370a082311161014057806370a0823114610462578063715018a6146104ba57806384d31fbe146104c45780638da5cb5b146104e2576101a9565b8063313ce567146103bf57806339509351146103e05780636c84228314610444576101a9565b806306fdde03146101ae578063095ea7b314610231578063111e03761461029557806316a2f82a146102d957806318160ddd1461031d57806323b872dd1461033b575b600080fd5b6101b66108dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610916565b60405180821515815260200191505060405180910390f35b6102d7600480360360208110156102ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610934565b005b61031b600480360360208110156102ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c18565b005b610325610dc4565b6040518082815260200191505060405180910390f35b6103a76004803603606081101561035157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dd6565b60405180821515815260200191505060405180910390f35b6103c7610eaf565b604051808260ff16815260200191505060405180910390f35b61042c600480360360408110156103f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eb4565b60405180821515815260200191505060405180910390f35b61044c610f67565b6040518082815260200191505060405180910390f35b6104a46004803603602081101561047857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f6d565b6040518082815260200191505060405180910390f35b6104c2611058565b005b6104cc6111c5565b6040518082815260200191505060405180910390f35b6104ea6111cb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61051e6111f4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61055261121a565b6040518082815260200191505060405180910390f35b610570611220565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105b0578082015181840152602081019050610595565b50505050905090810190601f1680156105dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106376004803603604081101561060157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b60405180821515815260200191505060405180910390f35b610657611326565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106cf6004803603604081101561069957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061134c565b60405180821515815260200191505060405180910390f35b610729600480360360208110156106fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061136a565b005b6107576004803603602081101561074157600080fd5b81019080803590602001909291905050506116be565b6040518082815260200191505060405180910390f35b610775611742565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610803600480360360408110156107b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611768565b6040518082815260200191505060405180910390f35b61085b6004803603602081101561082f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117ef565b005b61086561199c565b6040518082815260200191505060405180910390f35b6108bd6004803603602081101561089157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a2565b005b6108c7611b94565b6040518082815260200191505060405180910390f35b6040518060400160405280600d81526020017f5761756c742046696e616e63650000000000000000000000000000000000000081525081565b600061092a610923611db4565b8484611dbc565b6001905092915050565b61093c611db4565b73ffffffffffffffffffffffffffffffffffffffff1661095a6111cb565b73ffffffffffffffffffffffffffffffffffffffff16146109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806136a06028913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610b5a57610b16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116be565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c20611db4565b73ffffffffffffffffffffffffffffffffffffffff16610c3e6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061383c6023913960400191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600069d3c21bcecceda1000000905090565b6000610de3848484611fb3565b610ea484610def611db4565b610e9f8560405180606001604052806028815260200161377c60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e55611db4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ee9092919063ffffffff16565b611dbc565b600190509392505050565b601281565b6000610f5d610ec1611db4565b84610f588560036000610ed2611db4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b611dbc565b6001905092915050565b60095481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561100857600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611053565b611050600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116be565b90505b919050565b611060611db4565b73ffffffffffffffffffffffffffffffffffffffff1661107e6111cb565b73ffffffffffffffffffffffffffffffffffffffff1614611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6040518060400160405280600581526020017f5741554c5400000000000000000000000000000000000000000000000000000081525081565b600061131c611266611db4565b846113178560405180606001604052806025815260200161385f6025913960036000611290611db4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127ee9092919063ffffffff16565b611dbc565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611360611359611db4565b8484611fb3565b6001905092915050565b611372611db4565b73ffffffffffffffffffffffffffffffffffffffff166113906111cb565b73ffffffffffffffffffffffffffffffffffffffff1614611419576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136c86026913960400191505060405180910390fd5b60005b6006805490508110156116ba578173ffffffffffffffffffffffffffffffffffffffff16600682815481106114ef57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116ad5760066001600680549050038154811061154b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061158357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061167357fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556116ba565b80806001019150506114be565b5050565b600060075482111561171b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138166026913960400191505060405180910390fd5b60006117256128a8565b905061173a8184611b9a90919063ffffffff16565b915050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117f7611db4565b73ffffffffffffffffffffffffffffffffffffffff166118156111cb565b73ffffffffffffffffffffffffffffffffffffffff161461189e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806137366025913960400191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b5481565b6119aa611db4565b73ffffffffffffffffffffffffffffffffffffffff166119c86111cb565b73ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ad7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136ee6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6000808211611c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b818381611c1a57fe5b04905092915050565b600080831415611c365760009050611ca3565b6000828402905082848281611c4757fe5b0414611c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061375b6021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015611d27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115611da9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137f26024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137146022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806137cd6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061367d6023913960400191505060405180910390fd5b60008111612118576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806137a46029913960400191505060405180910390fd5b60006008549050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121c05750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121d25760006008819055506124e8565b60006121fd6103e86121ef60095486611c2390919063ffffffff16565b611b9a90919063ffffffff16565b9050600061222a6103e861221c600a5487611c2390919063ffffffff16565b611b9a90919063ffffffff16565b905060006122576103e8612249600c5488611c2390919063ffffffff16565b611b9a90919063ffffffff16565b90506122cd8360026000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b60026000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123a68260026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b60026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061247f8160026000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b60026000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561258b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125a05761259b8484846128d3565b6127d7565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126435750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561265857612653848484612b33565b6127d6565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126fc5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127115761270c848484612d93565b6127d5565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127b35750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127c8576127c3848484612f5e565b6127d4565b6127d3848484612d93565b5b5b5b5b60085481146127e857806008819055505b50505050565b600083831115829061289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612860578082015181840152602081019050612845565b50505050905090810190601f16801561288d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b60008060006128b5613253565b915091506128cc8183611b9a90919063ffffffff16565b9250505090565b6000806000806128e285613504565b50935093509350935061293d85600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d3190919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129d284600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d3190919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a6783600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612abf82600754611d3190919063ffffffff16565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b600080600080612b4285613504565b509350935093509350612b9d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d3190919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c3281600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cc783600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d1f82600754611d3190919063ffffffff16565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b600080600080612da285613504565b509350935093509350612dfd84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d3190919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e9283600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eea82600754611d3190919063ffffffff16565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b600080600080612f6d85613504565b509350935093509350612fc885600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d3190919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061305d84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d3190919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130f281600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061318783600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca990919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131df82600754611d3190919063ffffffff16565b6007819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505050505050565b60008060006007549050600069d3c21bcecceda1000000905060005b6006805490508110156134b75782600160006006848154811061328e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613375575081600260006006848154811061330d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156133945760075469d3c21bcecceda100000094509450505050613500565b61341d60016000600684815481106133a857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611d3190919063ffffffff16565b92506134a8600260006006848154811061343357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611d3190919063ffffffff16565b9150808060010191505061326f565b506134d769d3c21bcecceda1000000600754611b9a90919063ffffffff16565b8210156134f75760075469d3c21bcecceda1000000935093505050613500565b81819350935050505b9091565b60008060008060008060006135188861355c565b9150915060006135266128a8565b905060008060006135388c86866135de565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600080600061358a6103e861357c60085487611c2390919063ffffffff16565b611b9a90919063ffffffff16565b905060006135b76103e86135a9600b5488611c2390919063ffffffff16565b611b9a90919063ffffffff16565b905060006135ce8387611d3190919063ffffffff16565b9050808294509450505050915091565b60008060008061361f856136116103e86136036008548c611c2390919063ffffffff16565b611b9a90919063ffffffff16565b611c2390919063ffffffff16565b905060006136368689611c2390919063ffffffff16565b9050600061364d8383611d3190919063ffffffff16565b90506000613664888a611c2390919063ffffffff16565b9050828282965096509650505050509350935093905056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734163636f756e7420697320616c7265616479206578636c756465642066726f6d20726577617264734163636f756e7420697320616c726561647920696e636c7564656420696e20726577617264734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734163636f756e7420697320616c7265616479206578636c756465642066726f6d2066656573536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c20726577617264734163636f756e7420697320616c726561647920696e636c7564656420696e206665657345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201f6dac7c6dc235c587cc90a775e15e63f7510299f59f5aeef11d825f25a8b34564736f6c6343000706003345524332303a207472616e7366657220746f20746865207a65726f20616464726573734163636f756e7420697320616c7265616479206578636c756465642066726f6d20726577617264734163636f756e7420697320616c7265616479206578636c756465642066726f6d2066656573536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c20726577617264730000000000000000000000006f7a2b868a3babd26415fd4e8e2fee2630c9a74d00000000000000000000000052a2b3beafa46ba51a4792793a7447396d09423f0000000000000000000000003ca77ad191e1181b7cc9b0f8a05d5aa3d20da075000000000000000000000000bcfccbde45ce874adcb698cc183debcf17952812000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006f7a2b868a3babd26415fd4e8e2fee2630c9a74d00000000000000000000000052a2b3beafa46ba51a4792793a7447396d09423f0000000000000000000000003ca77ad191e1181b7cc9b0f8a05d5aa3d20da075000000000000000000000000bcfccbde45ce874adcb698cc183debcf17952812000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006f7a2b868a3babd26415fd4e8e2fee2630c9a74d
Arg [1] : 00000000000000000000000052a2b3beafa46ba51a4792793a7447396d09423f
Arg [2] : 0000000000000000000000003ca77ad191e1181b7cc9b0f8a05d5aa3d20da075
Arg [3] : 000000000000000000000000bcfccbde45ce874adcb698cc183debcf17952812
Arg [4] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed ByteCode Sourcemap
24955:12638:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25602:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27896:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29304:386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29097:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27209:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28065:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25700:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28385:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25787:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27319:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5339:148;;;:::i;:::-;;25928:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4688:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25976:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25744:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25654:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28610:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26056:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27571:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29698:511;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34961:272;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26020:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27746:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28886:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25884:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5642:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25840:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25602:45;;;;;;;;;;;;;;;;;;;:::o;27896:161::-;27971:4;27988:39;27997:12;:10;:12::i;:::-;28011:7;28020:6;27988:8;:39::i;:::-;28045:4;28038:11;;27896:161;;;;:::o;29304:386::-;4919:12;:10;:12::i;:::-;4908:23;;:7;:5;:7::i;:::-;:23;;;4900:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29388:21:::1;:30;29410:7;29388:30;;;;;;;;;;;;;;;;;;;;;;;;;29387:31;29379:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29504:1;29478:14;:23;29493:7;29478:23;;;;;;;;;;;;;;;;:27;29474:126;;;29547:41;29564:14;:23;29579:7;29564:23;;;;;;;;;;;;;;;;29547:16;:41::i;:::-;29522:13;:22;29536:7;29522:22;;;;;;;;;;;;;;;:66;;;;29474:126;29645:4;29612:21;:30;29634:7;29612:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29660:8;29674:7;29660:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29304:386:::0;:::o;29097:199::-;4919:12;:10;:12::i;:::-;4908:23;;:7;:5;:7::i;:::-;:23;;;4900:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29175:18:::1;:27;29194:7;29175:27;;;;;;;;;;;;;;;;;;;;;;;;;29167:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29283:5;29253:18;:27;29272:7;29253:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;29097:199:::0;:::o;27209:102::-;27264:7;25510:13;27284:19;;27209:102;:::o;28065:312::-;28163:4;28180:36;28190:6;28198:9;28209:6;28180:9;:36::i;:::-;28227:120;28236:6;28244:12;:10;:12::i;:::-;28258:88;28295:6;28258:88;;;;;;;;;;;;;;;;;:10;:18;28269:6;28258:18;;;;;;;;;;;;;;;:32;28277:12;:10;:12::i;:::-;28258:32;;;;;;;;;;;;;;;;:36;;:88;;;;;:::i;:::-;28227:8;:120::i;:::-;28365:4;28358:11;;28065:312;;;;;:::o;25700:35::-;25733:2;25700:35;:::o;28385:217::-;28473:4;28490:82;28499:12;:10;:12::i;:::-;28513:7;28522:49;28560:10;28522;:24;28533:12;:10;:12::i;:::-;28522:24;;;;;;;;;;;;;;;:33;28547:7;28522:33;;;;;;;;;;;;;;;;:37;;:49;;;;:::i;:::-;28490:8;:82::i;:::-;28590:4;28583:11;;28385:217;;;;:::o;25787:46::-;;;;:::o;27319:244::-;27385:7;27409:21;:30;27431:7;27409:30;;;;;;;;;;;;;;;;;;;;;;;;;27405:92;;;27463:13;:22;27477:7;27463:22;;;;;;;;;;;;;;;;27456:29;;;;27405:92;27514:41;27531:14;:23;27546:7;27531:23;;;;;;;;;;;;;;;;27514:16;:41::i;:::-;27507:48;;27319:244;;;;:::o;5339:148::-;4919:12;:10;:12::i;:::-;4908:23;;:7;:5;:7::i;:::-;:23;;;4900:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5446:1:::1;5409:40;;5430:6;::::0;::::1;;;;;;;;5409:40;;;;;;;;;;;;5477:1;5460:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5339:148::o:0;25928:39::-;;;;:::o;4688:87::-;4734:7;4761:6;;;;;;;;;;;4754:13;;4688:87;:::o;25976:37::-;;;;;;;;;;;;;:::o;25744:36::-;;;;:::o;25654:39::-;;;;;;;;;;;;;;;;;;;:::o;28610:268::-;28703:4;28720:128;28729:12;:10;:12::i;:::-;28743:7;28752:95;28790:15;28752:95;;;;;;;;;;;;;;;;;:10;:24;28763:12;:10;:12::i;:::-;28752:24;;;;;;;;;;;;;;;:33;28777:7;28752:33;;;;;;;;;;;;;;;;:37;;:95;;;;;:::i;:::-;28720:8;:128::i;:::-;28866:4;28859:11;;28610:268;;;;:::o;26056:31::-;;;;;;;;;;;;;:::o;27571:167::-;27649:4;27666:42;27676:12;:10;:12::i;:::-;27690:9;27701:6;27666:9;:42::i;:::-;27726:4;27719:11;;27571:167;;;;:::o;29698:511::-;4919:12;:10;:12::i;:::-;4908:23;;:7;:5;:7::i;:::-;:23;;;4900:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29779:21:::1;:30;29801:7;29779:30;;;;;;;;;;;;;;;;;;;;;;;;;29771:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29870:9;29865:337;29889:8;:15;;;;29885:1;:19;29865:337;;;29945:7;29930:22;;:8;29939:1;29930:11;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;29926:265;;;29987:8;30014:1;29996:8;:15;;;;:19;29987:29;;;;;;;;;;;;;;;;;;;;;;;;;29973:8;29982:1;29973:11;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;30060:1;30035:13;:22;30049:7;30035:22;;;;;;;;;;;;;;;:26;;;;30113:5;30080:21;:30;30102:7;30080:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30137:8;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30170:5;;29926:265;29906:3;;;;;;;29865:337;;;;29698:511:::0;:::o;34961:272::-;35030:7;35074:12;;35058;:28;;35050:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35140:19;35162:16;:14;:16::i;:::-;35140:38;;35196:29;35213:11;35196:12;:16;;:29;;;;:::i;:::-;35189:36;;;34961:272;;;:::o;26020:29::-;;;;;;;;;;;;;:::o;27746:142::-;27827:7;27854:10;:17;27865:5;27854:17;;;;;;;;;;;;;;;:26;27872:7;27854:26;;;;;;;;;;;;;;;;27847:33;;27746:142;;;;:::o;28886:203::-;4919:12;:10;:12::i;:::-;4908:23;;:7;:5;:7::i;:::-;:23;;;4900:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28967:18:::1;:27;28986:7;28967:27;;;;;;;;;;;;;;;;;;;;;;;;;28966:28;28958:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29077:4;29047:18;:27;29066:7;29047:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28886:203:::0;:::o;25884:37::-;;;;:::o;5642:244::-;4919:12;:10;:12::i;:::-;4908:23;;:7;:5;:7::i;:::-;:23;;;4900:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5751:1:::1;5731:22;;:8;:22;;;;5723:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5841:8;5812:38;;5833:6;::::0;::::1;;;;;;;;5812:38;;;;;;;;;;;;5870:8;5861:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5642:244:::0;:::o;25840:37::-;;;;:::o;18116:153::-;18174:7;18206:1;18202;:5;18194:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18260:1;18256;:5;;;;;;18249:12;;18116:153;;;;:::o;17418:220::-;17476:7;17505:1;17500;:6;17496:20;;;17515:1;17508:8;;;;17496:20;17527:9;17543:1;17539;:5;17527:17;;17572:1;17567;17563;:5;;;;;;:10;17555:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17629:1;17622:8;;;17418:220;;;;;:::o;16539:179::-;16597:7;16617:9;16633:1;16629;:5;16617:17;;16658:1;16653;:6;;16645:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16709:1;16702:8;;;16539:179;;;;:::o;17001:158::-;17059:7;17092:1;17087;:6;;17079:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17150:1;17146;:5;17139:12;;17001:158;;;;:::o;604:106::-;657:15;692:10;685:17;;604:106;:::o;30217:336::-;30327:1;30310:19;;:5;:19;;;;30302:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30408:1;30389:21;;:7;:21;;;;30381:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30491:6;30462:10;:17;30473:5;30462:17;;;;;;;;;;;;;;;:26;30480:7;30462:26;;;;;;;;;;;;;;;:35;;;;30529:7;30513:32;;30522:5;30513:32;;;30538:6;30513:32;;;;;;;;;;;;;;;;;;30217:336;;;:::o;30561:1903::-;30676:1;30658:20;;:6;:20;;;;30650:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30760:1;30739:23;;:9;:23;;;;30731:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30830:1;30821:6;:10;30813:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30890:25;30918:16;;30890:44;;30949:18;:26;30968:6;30949:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;30979:18;:29;30998:9;30979:29;;;;;;;;;;;;;;;;;;;;;;;;;30949:59;30945:684;;;31044:1;31025:16;:20;;;;30945:684;;;31078:26;31107:48;31150:4;31107:38;31118:26;;31107:6;:10;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;31078:77;;31170:18;31191:40;31226:4;31191:30;31202:18;;31191:6;:10;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;31170:61;;31246:20;31269:42;31306:4;31269:32;31280:20;;31269:6;:10;;:32;;;;:::i;:::-;:36;;:42;;;;:::i;:::-;31246:65;;31366:61;31408:18;31366:13;:37;31380:22;;;;;;;;;;;31366:37;;;;;;;;;;;;;;;;:41;;:61;;;;:::i;:::-;31326:13;:37;31340:22;;;;;;;;;;;31326:37;;;;;;;;;;;;;;;:101;;;;31474:45;31508:10;31474:13;:29;31488:14;;;;;;;;;;;31474:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;31442:13;:29;31456:14;;;;;;;;;;;31442:29;;;;;;;;;;;;;;;:77;;;;31568:49;31604:12;31568:13;:31;31582:16;;;;;;;;;;;31568:31;;;;;;;;;;;;;;;;:35;;:49;;;;:::i;:::-;31534:13;:31;31548:16;;;;;;;;;;;31534:31;;;;;;;;;;;;;;;:83;;;;30945:684;;;;31645:21;:29;31667:6;31645:29;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;31679:21;:32;31701:9;31679:32;;;;;;;;;;;;;;;;;;;;;;;;;31678:33;31645:66;31641:698;;;31728:55;31757:6;31765:9;31776:6;31728:28;:55::i;:::-;31641:698;;;31806:21;:29;31828:6;31806:29;;;;;;;;;;;;;;;;;;;;;;;;;31805:30;:66;;;;;31839:21;:32;31861:9;31839:32;;;;;;;;;;;;;;;;;;;;;;;;;31805:66;31801:538;;;31888:55;31917:6;31925:9;31936:6;31888:28;:55::i;:::-;31801:538;;;31966:21;:29;31988:6;31966:29;;;;;;;;;;;;;;;;;;;;;;;;;31965:30;:67;;;;;32000:21;:32;32022:9;32000:32;;;;;;;;;;;;;;;;;;;;;;;;;31999:33;31965:67;31961:378;;;32049:46;32069:6;32077:9;32088:6;32049:19;:46::i;:::-;31961:378;;;32117:21;:29;32139:6;32117:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;32150:21;:32;32172:9;32150:32;;;;;;;;;;;;;;;;;;;;;;;;;32117:65;32113:226;;;32199:49;32222:6;32230:9;32241:6;32199:22;:49::i;:::-;32113:226;;;32281:46;32301:6;32309:9;32320:6;32281:19;:46::i;:::-;32113:226;31961:378;31801:538;31641:698;32376:16;;32355:17;:37;32351:106;;32428:17;32409:16;:36;;;;32351:106;30561:1903;;;;:::o;19366:166::-;19452:7;19485:1;19480;:6;;19488:12;19472:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19523:1;19519;:5;19512:12;;19366:166;;;;;:::o;36646:191::-;36694:7;36715:21;36738:20;36762:18;:16;:18::i;:::-;36714:66;;;;36798:31;36816:12;36798:13;:17;;:31;;;;:::i;:::-;36791:38;;;;36646:191;:::o;33641:611::-;33756:20;33778:28;33808:17;33827:28;33861:23;33871:12;33861:9;:23::i;:::-;33755:129;;;;;;;;;33921:39;33947:12;33921:13;:21;33935:6;33921:21;;;;;;;;;;;;;;;;:25;;:39;;;;:::i;:::-;33897:13;:21;33911:6;33897:21;;;;;;;;;;;;;;;:63;;;;33996:40;34023:12;33996:14;:22;34011:6;33996:22;;;;;;;;;;;;;;;;:26;;:40;;;;:::i;:::-;33971:14;:22;33986:6;33971:22;;;;;;;;;;;;;;;:65;;;;34075:51;34105:20;34075:14;:25;34090:9;34075:25;;;;;;;;;;;;;;;;:29;;:51;;;;:::i;:::-;34047:14;:25;34062:9;34047:25;;;;;;;;;;;;;;;:79;;;;34152:27;34169:9;34152:12;;:16;;:27;;;;:::i;:::-;34137:12;:42;;;;34212:9;34195:49;;34204:6;34195:49;;;34223:20;34195:49;;;;;;;;;;;;;;;;;;33641:611;;;;;;;:::o;33008:625::-;33123:20;33145:28;33175:17;33194:28;33228:23;33238:12;33228:9;:23::i;:::-;33122:129;;;;;;;;;33289:40;33316:12;33289:14;:22;33304:6;33289:22;;;;;;;;;;;;;;;;:26;;:40;;;;:::i;:::-;33264:14;:22;33279:6;33264:22;;;;;;;;;;;;;;;:65;;;;33367:50;33396:20;33367:13;:24;33381:9;33367:24;;;;;;;;;;;;;;;;:28;;:50;;;;:::i;:::-;33340:13;:24;33354:9;33340:24;;;;;;;;;;;;;;;:77;;;;33456:51;33486:20;33456:14;:25;33471:9;33456:25;;;;;;;;;;;;;;;;:29;;:51;;;;:::i;:::-;33428:14;:25;33443:9;33428:25;;;;;;;;;;;;;;;:79;;;;33533:27;33550:9;33533:12;;:16;;:27;;;;:::i;:::-;33518:12;:42;;;;33593:9;33576:49;;33585:6;33576:49;;;33604:20;33576:49;;;;;;;;;;;;;;;;;;33008:625;;;;;;;:::o;32472:528::-;32578:20;32600:28;32630:17;32649:28;32683:23;32693:12;32683:9;:23::i;:::-;32577:129;;;;;;;;;32744:40;32771:12;32744:14;:22;32759:6;32744:22;;;;;;;;;;;;;;;;:26;;:40;;;;:::i;:::-;32719:14;:22;32734:6;32719:22;;;;;;;;;;;;;;;:65;;;;32823:51;32853:20;32823:14;:25;32838:9;32823:25;;;;;;;;;;;;;;;;:29;;:51;;;;:::i;:::-;32795:14;:25;32810:9;32795:25;;;;;;;;;;;;;;;:79;;;;32900:27;32917:9;32900:12;;:16;;:27;;;;:::i;:::-;32885:12;:42;;;;32960:9;32943:49;;32952:6;32943:49;;;32971:20;32943:49;;;;;;;;;;;;;;;;;;32472:528;;;;;;;:::o;34260:693::-;34369:20;34391:28;34421:17;34440:28;34474:23;34484:12;34474:9;:23::i;:::-;34368:129;;;;;;;;;34534:39;34560:12;34534:13;:21;34548:6;34534:21;;;;;;;;;;;;;;;;:25;;:39;;;;:::i;:::-;34510:13;:21;34524:6;34510:21;;;;;;;;;;;;;;;:63;;;;34609:40;34636:12;34609:14;:22;34624:6;34609:22;;;;;;;;;;;;;;;;:26;;:40;;;;:::i;:::-;34584:14;:22;34599:6;34584:22;;;;;;;;;;;;;;;:65;;;;34687:50;34716:20;34687:13;:24;34701:9;34687:24;;;;;;;;;;;;;;;;:28;;:50;;;;:::i;:::-;34660:13;:24;34674:9;34660:24;;;;;;;;;;;;;;;:77;;;;34776:51;34806:20;34776:14;:25;34791:9;34776:25;;;;;;;;;;;;;;;;:29;;:51;;;;:::i;:::-;34748:14;:25;34763:9;34748:25;;;;;;;;;;;;;;;:79;;;;34853:27;34870:9;34853:12;;:16;;:27;;;;:::i;:::-;34838:12;:42;;;;34913:9;34896:49;;34905:6;34896:49;;;34924:20;34896:49;;;;;;;;;;;;;;;;;;34260:693;;;;;;;:::o;36845:745::-;36895:7;36904;36924:21;36948:12;;36924:36;;36971:20;25510:13;36971:35;;37024:9;37019:389;37043:8;:15;;;;37039:1;:19;37019:389;;;37114:13;37084:14;:27;37099:8;37108:1;37099:11;;;;;;;;;;;;;;;;;;;;;;;;;37084:27;;;;;;;;;;;;;;;;:43;:88;;;;37160:12;37131:13;:26;37145:8;37154:1;37145:11;;;;;;;;;;;;;;;;;;;;;;;;;37131:26;;;;;;;;;;;;;;;;:41;37084:88;37080:164;;;37201:12;;25510:13;37193:35;;;;;;;;;37080:164;37276:46;37294:14;:27;37309:8;37318:1;37309:11;;;;;;;;;;;;;;;;;;;;;;;;;37294:27;;;;;;;;;;;;;;;;37276:13;:17;;:46;;;;:::i;:::-;37260:62;;37352:44;37369:13;:26;37383:8;37392:1;37383:11;;;;;;;;;;;;;;;;;;;;;;;;;37369:26;;;;;;;;;;;;;;;;37352:12;:16;;:44;;;;:::i;:::-;37337:59;;37060:3;;;;;;;37019:389;;;;37440:30;25510:13;37440:12;;:16;;:30;;;;:::i;:::-;37424:13;:46;37420:114;;;37495:12;;25510:13;37487:35;;;;;;;;37420:114;37554:13;37569:12;37546:36;;;;;;36845:745;;;:::o;35241:495::-;35304:7;35313;35322;35331;35340;35361:28;35391:17;35412:29;35428:12;35412:15;:29::i;:::-;35360:81;;;;35452:19;35474:16;:14;:16::i;:::-;35452:38;;35502:20;35524:28;35554:17;35575:53;35591:12;35605:9;35616:11;35575:15;:53::i;:::-;35501:127;;;;;;35649:12;35663:20;35685:9;35696:20;35718:9;35641:87;;;;;;;;;;;;;;;;35241:495;;;;;;;:::o;35744:379::-;35813:7;35822;35842:17;35862:44;35901:4;35862:34;35879:16;;35862:12;:16;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;35842:64;;35917:23;35943:46;35984:4;35943:36;35960:18;;35943:12;:16;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;35917:72;;36000:28;36031:27;36048:9;36031:12;:16;;:27;;;;:::i;:::-;36000:58;;36077:20;36099:15;36069:46;;;;;;;35744:379;;;:::o;36131:507::-;36246:7;36255;36264;36289:17;36309:61;36358:11;36309:44;36348:4;36309:34;36326:16;;36309:12;:16;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;:48;;:61;;;;:::i;:::-;36289:81;;36381:20;36404:29;36421:11;36404:12;:16;;:29;;;;:::i;:::-;36381:52;;36444:28;36475:27;36492:9;36475:12;:16;;:27;;;;:::i;:::-;36444:58;;36513:17;36533:32;36553:11;36533:15;:19;;:32;;;;:::i;:::-;36513:52;;36584:12;36598:20;36620:9;36576:54;;;;;;;;;;36131:507;;;;;;;:::o
Swarm Source
ipfs://1f6dac7c6dc235c587cc90a775e15e63f7510299f59f5aeef11d825f25a8b345
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.