Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
PhenixMysteryBox
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-11-19 */ // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/PhenixMysteryBox.sol pragma solidity ^0.8.9; contract PhenixMysteryBox is Ownable { using SafeMath for uint256; uint256 constant FXP_BASE = 100000; bool public isEnabled; address public tokenERC20Address; address public tokenERC721Address; address public routerAddress; uint256 public tokenERC721Discount; uint256 public tokenERC721DiscountMaximum; uint256 public boxRequestFee; uint256 public maxBoxQuantity; mapping(address => bool) public adminMapping; mapping(uint256 => Box) public boxes; mapping(address => bool) public boxFeeExempt; BoxRequest[] public boxRequests; enum BoxRequestStatus { PENDING, DISTRIBUTED, FAILED } struct Box { uint256 boxIndex; // The Box Index uint256 boxCostETH; // Cost of Box in ETH uint256 boxCostERC20; // Cost of Box in ERC20 bool useETHPrice; // Whether ERC20 Price should be based on ETH Price address rewardERC20Address; // ERC20 Token Reward Address address rewardERC721Address; // ERC721 Token Reward Address uint256 minimumERC20Holdings; // Minimum Token Holdings Required to Acesss bool boxEnabled; } struct BoxCost { uint256 ethPrice; uint256 erc20Price; } struct BoxRequest { uint256 boxRequestIndex; uint256 boxIndex; uint256 boxQuantity; BoxRequestStatus boxStatus; address recipient; uint256 rewardERC20Amount; uint256 rewardETHAmount; uint256[] rewardERC721Tokens; } constructor( address _admin, address _tokenERC20Address, address _tokenERC721Address ) { adminMapping[_admin] = true; boxFeeExempt[msg.sender] = true; tokenERC20Address = _tokenERC20Address; tokenERC721Address = _tokenERC721Address; boxRequestFee = 1 ether; // routerAddress = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30; // MMF routerAddress = 0x51aBA405De2b25E5506DeA32A6697F450cEB1a17; // PhotoSwap (Testnet) tokenERC721Discount = (1 * FXP_BASE) / 100; tokenERC721DiscountMaximum = (5 * FXP_BASE) / 100; isEnabled = true; maxBoxQuantity = 500; // Initialize Starting Boxes _setBox( 0, 0 ether, 0 ether, true, _tokenERC20Address, _tokenERC721Address, 0, true ); _setBox( 1, 2 ether, 2 ether, true, _tokenERC20Address, _tokenERC721Address, 0, true ); _setBox( 2, 5 ether, 5 ether, true, _tokenERC20Address, _tokenERC721Address, 0, true ); _setBox( 3, 10 ether, 10 ether, true, _tokenERC20Address, _tokenERC721Address, 0, true ); } event RequestBox( uint256 indexed boxIndex, uint256 indexed boxQuantity, address indexed recipient ); modifier enabled() { require(isEnabled == true, "Boxes are disabled."); _; } modifier isAdmin() { require( adminMapping[msg.sender] == true || msg.sender == owner(), "Not admin." ); _; } modifier isValidBox(uint256 _boxIndex) { require(boxes[_boxIndex].boxEnabled == true, "Box index is invalid."); _; } modifier enoughTokens(uint256 _boxIndex) { require( IERC20(tokenERC20Address).balanceOf(msg.sender) >= boxes[_boxIndex].minimumERC20Holdings, "Not Enough Tokens Held." ); _; } function setEnabledStatus(bool _status) external onlyOwner { isEnabled = _status; } function setUserAdmin(address _user, bool _status) external onlyOwner { adminMapping[_user] = _status; } function setBoxFeeExemptUser(address _address, bool _status) external onlyOwner { boxFeeExempt[_address] = _status; } function setMaxBoxQuantity(uint256 _maxBoxQuantity) external onlyOwner { maxBoxQuantity = _maxBoxQuantity; } function setERC721Discount(uint256 _numerator, uint256 _denominator) external onlyOwner { tokenERC721Discount = FXP_BASE.mul(_numerator).div(_denominator); } function setERC721DiscountMaximum(uint256 _numerator, uint256 _denominator) external onlyOwner { tokenERC721DiscountMaximum = FXP_BASE.mul(_numerator).div(_denominator); } function setERC721Address(address _tokenAddress) external onlyOwner { tokenERC721Address = _tokenAddress; } function setERC20Address(address _tokenAddress) external onlyOwner { tokenERC20Address = _tokenAddress; } function setBoxRequestFee(uint256 _boxRequestFee) external onlyOwner { boxRequestFee = _boxRequestFee; } function setRouterAddress(address _address) external onlyOwner { routerAddress = _address; } function setBox( uint256 _boxIndex, uint256 _boxCostETH, uint256 _boxCostERC20, bool _useETHPrice, address _rewardERC20Address, address _rewardERC721Address, uint256 _minimumERC20Holdings, bool _boxEnabled ) external onlyOwner { _setBox( _boxIndex, _boxCostETH, _boxCostERC20, _useETHPrice, _rewardERC20Address, _rewardERC721Address, _minimumERC20Holdings, _boxEnabled ); } function _setBox( uint256 _boxIndex, uint256 _boxCostETH, uint256 _boxCostERC20, bool _useETHPrice, address _rewardERC20Address, address _rewardERC721Address, uint256 _minimumERC20Holdings, bool _boxEnabled ) internal { boxes[_boxIndex] = Box( _boxIndex, _boxCostETH, _boxCostERC20, _useETHPrice, _rewardERC20Address, _rewardERC721Address, _minimumERC20Holdings, _boxEnabled ); } function withdrawERC721Tokens( address _erc721Address, uint256[] memory _tokenIds ) external onlyOwner { for (uint256 i = 0; i < _tokenIds.length; i++) { IERC721(_erc721Address).transferFrom( address(this), msg.sender, _tokenIds[i] ); } } function withdrawERC20Token(address _tokenAddress, uint256 _amount) external onlyOwner { require( IERC20(_tokenAddress).balanceOf(address(this)) >= _amount, "Not enough tokens to withdraw." ); IERC20(_tokenAddress).transfer(msg.sender, _amount); } function withdrawETH(uint256 _amount) external onlyOwner { require(address(this).balance >= _amount, "Not enough ETH to withdraw"); (bool success, ) = address(msg.sender).call{value: _amount}(""); require(success, "Failed to withdraw ETH."); } function boxCostOf(uint256 _boxValue, address _user) public view returns (uint256) { uint256 userERC721Balance = IERC721(tokenERC721Address).balanceOf( _user ); if (userERC721Balance > 0) { uint256 discountNumerator = (tokenERC721Discount * userERC721Balance) > tokenERC721DiscountMaximum ? tokenERC721DiscountMaximum : (tokenERC721Discount * userERC721Balance); uint256 discountAmount = _boxValue.mul(discountNumerator).div( FXP_BASE ); return _boxValue.sub(discountAmount); } else { return _boxValue; } } function getFeeTokenAmount(uint256 _ethAmount) public view returns (uint256) { if (_ethAmount > 0) { address[] memory path = new address[](2); path[0] = IUniswapV2Router02(routerAddress).WETH(); path[1] = tokenERC20Address; uint256[] memory amountsOut = IUniswapV2Router02(routerAddress) .getAmountsOut(_ethAmount, path); return amountsOut[1]; } else { return 0; } } function getBalance() external view returns (uint256) { return address(this).balance; } function getBoxRequestsCount() external view returns (uint256) { return boxRequests.length; } function getBoxRequests(uint256 _count) external view returns (BoxRequest[] memory) { uint256 _boxRequestsCount = _count >= boxRequests.length || _count == 0 ? boxRequests.length : _count; BoxRequest[] memory _boxRequests = new BoxRequest[](_boxRequestsCount); for (uint256 i = _boxRequestsCount; i > 0; i--) { _boxRequests[i - 1] = boxRequests[(boxRequests.length - i)]; } return _boxRequests; } function getBoxes(uint256 _count) external view returns (Box[] memory) { Box[] memory _boxes = new Box[](_count); for (uint256 i = 0; i < _count; i++) { _boxes[i] = boxes[i]; } return _boxes; } function getBoxPrices(uint256 _count) external view returns (BoxCost[] memory) { BoxCost[] memory _boxCosts = new BoxCost[](_count); for (uint256 i = 0; i < _count; i++) { _boxCosts[i] = BoxCost( boxes[i].boxCostETH, boxes[i].useETHPrice ? getFeeTokenAmount(boxes[i].boxCostERC20) : boxes[i].boxCostERC20 ); } return _boxCosts; } function requestBoxAdmin( address _recipient, uint256 _boxIndex, uint256 _boxQuantity ) external isAdmin isValidBox(_boxIndex) { _requestBox(_recipient, _boxIndex, _boxQuantity); } function requestBoxWithETH(uint256 _boxIndex, uint256 _boxQuantity) external payable isValidBox(_boxIndex) enoughTokens(_boxIndex) enabled { require(_boxQuantity <= maxBoxQuantity, "Max Quantity Exceeded!"); if (boxFeeExempt[msg.sender] == false) { uint256 requestCost = boxCostOf( boxes[_boxIndex].boxCostETH, msg.sender ) * _boxQuantity; require( msg.value >= requestCost.add(boxRequestFee), "Not enough ETH to pay." ); } _requestBox(msg.sender, _boxIndex, _boxQuantity); } function requestBoxWithToken(uint256 _boxIndex, uint256 _boxQuantity) external payable isValidBox(_boxIndex) enoughTokens(_boxIndex) enabled { require(_boxQuantity <= maxBoxQuantity, "Max Quantity Exceeded!"); if (boxFeeExempt[msg.sender] == false) { uint256 requestCost = boxes[_boxIndex].useETHPrice ? getFeeTokenAmount( boxCostOf(boxes[_boxIndex].boxCostERC20, msg.sender) * _boxQuantity ) : boxCostOf(boxes[_boxIndex].boxCostERC20, msg.sender) * _boxQuantity; require(msg.value >= boxRequestFee, "Not enough ETH to pay fee."); require( IERC20(tokenERC20Address).balanceOf(msg.sender) >= requestCost, "Not enough tokens to pay." ); IERC20(tokenERC20Address).transferFrom( msg.sender, address(this), requestCost ); } _requestBox(msg.sender, _boxIndex, _boxQuantity); } function _requestBox( address _recipient, uint256 _boxIndex, uint256 _boxQuantity ) internal { boxRequests.push( BoxRequest( boxRequests.length, _boxIndex, _boxQuantity, BoxRequestStatus.PENDING, _recipient, 0, 0, new uint256[](0) ) ); emit RequestBox(_boxIndex, _boxQuantity, msg.sender); } function updateBoxRequestStatus( uint256 _boxRequestIndex, BoxRequestStatus _status ) external isAdmin { require( _boxRequestIndex <= boxRequests.length, "Invalid Box request Index." ); boxRequests[_boxRequestIndex].boxStatus = _status; } function distributeBox( uint256 _boxRequestIndex, uint256 _rewardETHAmount, uint256 _rewardERC20Amount, uint256[] memory _rewardERC721Tokens ) external isAdmin { require( _boxRequestIndex <= boxRequests.length && boxRequests[_boxRequestIndex].boxStatus == BoxRequestStatus.PENDING, "Box request cannot be distributed." ); if (_rewardETHAmount > 0) { (bool sent, ) = address(boxRequests[_boxRequestIndex].recipient) .call{value: _rewardETHAmount}(""); require(sent, "Failed to send ETH reward."); } if (_rewardERC20Amount > 0) { IERC20( boxes[boxRequests[_boxRequestIndex].boxIndex].rewardERC20Address ).transfer( boxRequests[_boxRequestIndex].recipient, _rewardERC20Amount ); } for (uint256 i = 0; i < _rewardERC721Tokens.length; i++) { IERC721( boxes[boxRequests[_boxRequestIndex].boxIndex] .rewardERC721Address ).transferFrom( address(this), boxRequests[_boxRequestIndex].recipient, _rewardERC721Tokens[i] ); } boxRequests[_boxRequestIndex] = BoxRequest( boxRequests[_boxRequestIndex].boxRequestIndex, boxRequests[_boxRequestIndex].boxIndex, boxRequests[_boxRequestIndex].boxQuantity, BoxRequestStatus.DISTRIBUTED, boxRequests[_boxRequestIndex].recipient, _rewardERC20Amount, _rewardETHAmount, _rewardERC721Tokens ); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_tokenERC20Address","type":"address"},{"internalType":"address","name":"_tokenERC721Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"uint256","name":"boxIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"boxQuantity","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"RequestBox","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adminMapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxValue","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"boxCostOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boxFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boxRequestFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"boxRequests","outputs":[{"internalType":"uint256","name":"boxRequestIndex","type":"uint256"},{"internalType":"uint256","name":"boxIndex","type":"uint256"},{"internalType":"uint256","name":"boxQuantity","type":"uint256"},{"internalType":"enum PhenixMysteryBox.BoxRequestStatus","name":"boxStatus","type":"uint8"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"rewardERC20Amount","type":"uint256"},{"internalType":"uint256","name":"rewardETHAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"boxes","outputs":[{"internalType":"uint256","name":"boxIndex","type":"uint256"},{"internalType":"uint256","name":"boxCostETH","type":"uint256"},{"internalType":"uint256","name":"boxCostERC20","type":"uint256"},{"internalType":"bool","name":"useETHPrice","type":"bool"},{"internalType":"address","name":"rewardERC20Address","type":"address"},{"internalType":"address","name":"rewardERC721Address","type":"address"},{"internalType":"uint256","name":"minimumERC20Holdings","type":"uint256"},{"internalType":"bool","name":"boxEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxRequestIndex","type":"uint256"},{"internalType":"uint256","name":"_rewardETHAmount","type":"uint256"},{"internalType":"uint256","name":"_rewardERC20Amount","type":"uint256"},{"internalType":"uint256[]","name":"_rewardERC721Tokens","type":"uint256[]"}],"name":"distributeBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"getBoxPrices","outputs":[{"components":[{"internalType":"uint256","name":"ethPrice","type":"uint256"},{"internalType":"uint256","name":"erc20Price","type":"uint256"}],"internalType":"struct PhenixMysteryBox.BoxCost[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"getBoxRequests","outputs":[{"components":[{"internalType":"uint256","name":"boxRequestIndex","type":"uint256"},{"internalType":"uint256","name":"boxIndex","type":"uint256"},{"internalType":"uint256","name":"boxQuantity","type":"uint256"},{"internalType":"enum PhenixMysteryBox.BoxRequestStatus","name":"boxStatus","type":"uint8"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"rewardERC20Amount","type":"uint256"},{"internalType":"uint256","name":"rewardETHAmount","type":"uint256"},{"internalType":"uint256[]","name":"rewardERC721Tokens","type":"uint256[]"}],"internalType":"struct PhenixMysteryBox.BoxRequest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBoxRequestsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"getBoxes","outputs":[{"components":[{"internalType":"uint256","name":"boxIndex","type":"uint256"},{"internalType":"uint256","name":"boxCostETH","type":"uint256"},{"internalType":"uint256","name":"boxCostERC20","type":"uint256"},{"internalType":"bool","name":"useETHPrice","type":"bool"},{"internalType":"address","name":"rewardERC20Address","type":"address"},{"internalType":"address","name":"rewardERC721Address","type":"address"},{"internalType":"uint256","name":"minimumERC20Holdings","type":"uint256"},{"internalType":"bool","name":"boxEnabled","type":"bool"}],"internalType":"struct PhenixMysteryBox.Box[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAmount","type":"uint256"}],"name":"getFeeTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBoxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_boxIndex","type":"uint256"},{"internalType":"uint256","name":"_boxQuantity","type":"uint256"}],"name":"requestBoxAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"},{"internalType":"uint256","name":"_boxQuantity","type":"uint256"}],"name":"requestBoxWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"},{"internalType":"uint256","name":"_boxQuantity","type":"uint256"}],"name":"requestBoxWithToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxIndex","type":"uint256"},{"internalType":"uint256","name":"_boxCostETH","type":"uint256"},{"internalType":"uint256","name":"_boxCostERC20","type":"uint256"},{"internalType":"bool","name":"_useETHPrice","type":"bool"},{"internalType":"address","name":"_rewardERC20Address","type":"address"},{"internalType":"address","name":"_rewardERC721Address","type":"address"},{"internalType":"uint256","name":"_minimumERC20Holdings","type":"uint256"},{"internalType":"bool","name":"_boxEnabled","type":"bool"}],"name":"setBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBoxFeeExemptUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxRequestFee","type":"uint256"}],"name":"setBoxRequestFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setERC20Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setERC721Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setERC721Discount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setERC721DiscountMaximum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setEnabledStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBoxQuantity","type":"uint256"}],"name":"setMaxBoxQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setUserAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenERC20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenERC721Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenERC721Discount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenERC721DiscountMaximum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_boxRequestIndex","type":"uint256"},{"internalType":"enum PhenixMysteryBox.BoxRequestStatus","name":"_status","type":"uint8"}],"name":"updateBoxRequestStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc721Address","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"withdrawERC721Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620036ef380380620036ef83398101604081905262000034916200084a565b6200003f33620007dd565b6001600160a01b038084166000908152600860209081526040808320805460ff199081166001908117909255338552600a909352922080549091168217905580548483166001600160a01b03199182161782556002805493851693821693909317909255670de0b6b3a7640000600655600380549092167351aba405de2b25e5506dea32a6697f450ceb1a1717909155606490620000e290620186a09062000894565b620000ee9190620008c0565b600455606462000103620186a0600562000894565b6200010f9190620008c0565b6005556000805460ff60a01b1916600160a01b1781556101f460075560408051610100808201835283825260208083018581529383018581526001606085018181526001600160a01b038a8116608088019081528a821660a0890190815260c089018b815260e08a019586529a8052600990965296517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b5596517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6c5591517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d5590517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6e805495516001600160a81b0319909616911515610100600160a81b0319169190911794861690930293909317909155517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6f80546001600160a01b031916919093161790915590517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f7055517fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f71805460ff19169115159190911790556040805161010080820183526001808352671bc16d674ec800006020808501828152958501918252606085018381526001600160a01b038981166080880190815289821660a08901908152600060c08a0181815260e08b0189815298909152600990955297517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365597517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a375592517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3855517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a39805497516001600160a81b0319909816911515610100600160a81b031916919091179683169094029590951790925591517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3a80546001600160a01b0319169190921617905590517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3b55517f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3c805460ff19169115159190911790556040805161010080820183526002808352674563918244f4000060208085018281529585019182526001606086018181526001600160a01b038a8116608089019081528a821660a08a01908152600060c08b0181815260e08c01968752989052600990955297517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c35597517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c45592517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c55591517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c6805496516001600160a81b0319909716911515610100600160a81b031916919091179587169094029490941790925591517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c780546001600160a01b0319169190941617909255517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c855517f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c9805460ff19169115159190911790556040805161010080820183526003808352678ac7230489e8000060208085018281529585019182526001606086018181526001600160a01b038a8116608089019081528a821660a08a01908152600060c08b0181815260e08c01968752989052600990955297517fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e75597517fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e85592517fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e95591517fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61ea805496516001600160a81b0319909716911515610100600160a81b031916919091179587169094029490941790925591517fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61eb80546001600160a01b0319169190941617909255517fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61ec55517fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61ed805460ff1916911515919091179055505050620008e3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200084557600080fd5b919050565b6000806000606084860312156200086057600080fd5b6200086b846200082d565b92506200087b602085016200082d565b91506200088b604085016200082d565b90509250925092565b8082028115828204841417620008ba57634e487b7160e01b600052601160045260246000fd5b92915050565b600082620008de57634e487b7160e01b600052601260045260246000fd5b500490565b612dfc80620008f36000396000f3fe60806040526004361061024a5760003560e01c80636aa633b611610139578063b50fbeee116100b6578063e966b7ce1161007a578063e966b7ce1461076f578063ed2b77e61461078f578063f14210a6146107bf578063f145e29f146107df578063f2fde38b146107ff578063fba178ba1461081f57600080fd5b8063b50fbeee146106c9578063c49d56f3146106f9578063cf5bc2371461070c578063dc9efc7914610722578063dce265651461074257600080fd5b8063928d81c1116100fd578063928d81c11461063357806397e2a462146106535780639a03d9a3146106735780639c05e53014610693578063b00f90a6146106b357600080fd5b80636aa633b61461056f578063715018a6146105a057806379057cab146105b55780638be24888146105e85780638da5cb5b1461061557600080fd5b80633268cc56116101c75780634604a9621161018b5780634604a962146104375780634ed3faf2146104575780635c86ae711461050f5780635e2ff4d31461052f5780635e4a6e3e1461054f57600080fd5b80633268cc56146103a2578063338cef61146103c257806341bec0d2146103d757806341cb87fc146103f757806344e038201461041757600080fd5b806312065fe01161020e57806312065fe01461030c57806315510fcd1461031f5780631902aab11461033f5780632d3e400a1461035f5780633267f8ab1461037557600080fd5b80630342836e1461025657806305c15b4c1461027857806308d68d4d1461029857806309d1b2d1146102d55780631137ea53146102f957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061027661027136600461259f565b61083f565b005b34801561028457600080fd5b506102766102933660046125d6565b610865565b3480156102a457600080fd5b506001546102b8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102e157600080fd5b506102eb60065481565b6040519081526020016102cc565b61027661030736600461259f565b610900565b34801561031857600080fd5b50476102eb565b34801561032b57600080fd5b5061027661033a366004612619565b610b4d565b34801561034b57600080fd5b5061027661035a366004612652565b610b80565b34801561036b57600080fd5b506102eb60055481565b34801561038157600080fd5b50610395610390366004612652565b610b8d565b6040516102cc919061266b565b3480156103ae57600080fd5b506003546102b8906001600160a01b031681565b3480156103ce57600080fd5b50600b546102eb565b3480156103e357600080fd5b506102766103f236600461270d565b610cdd565b34801561040357600080fd5b5061027661041236600461270d565b610d07565b34801561042357600080fd5b50610276610432366004612800565b610d31565b34801561044357600080fd5b50610276610452366004612850565b610df2565b34801561046357600080fd5b506104c6610472366004612652565b600960205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929360ff808416946101009094046001600160a01b03908116949316921688565b6040805198895260208901979097529587019490945291151560608601526001600160a01b0390811660808601521660a084015260c0830152151560e0820152610100016102cc565b34801561051b57600080fd5b5061027661052a3660046128aa565b6113a6565b34801561053b57600080fd5b506102eb61054a3660046128d3565b61148b565b34801561055b57600080fd5b5061027661056a3660046128f8565b61156a565b34801561057b57600080fd5b5060005461059090600160a01b900460ff1681565b60405190151581526020016102cc565b3480156105ac57600080fd5b50610276611670565b3480156105c157600080fd5b506105d56105d0366004612652565b611684565b6040516102cc97969594939291906129b5565b3480156105f457600080fd5b50610608610603366004612652565b6116df565b6040516102cc91906129fe565b34801561062157600080fd5b506000546001600160a01b03166102b8565b34801561063f57600080fd5b5061027661064e366004612af2565b6118d2565b34801561065f57600080fd5b506102eb61066e366004612652565b611a03565b34801561067f57600080fd5b5061027661068e36600461270d565b611b93565b34801561069f57600080fd5b506102766106ae36600461259f565b611bbd565b3480156106bf57600080fd5b506102eb60075481565b3480156106d557600080fd5b506105906106e436600461270d565b600a6020526000908152604090205460ff1681565b61027661070736600461259f565b611bdd565b34801561071857600080fd5b506102eb60045481565b34801561072e57600080fd5b5061027661073d366004612652565b611f9e565b34801561074e57600080fd5b5061076261075d366004612652565b611fab565b6040516102cc9190612b1e565b34801561077b57600080fd5b5061027661078a366004612619565b6120b5565b34801561079b57600080fd5b506105906107aa36600461270d565b60086020526000908152604090205460ff1681565b3480156107cb57600080fd5b506102766107da366004612652565b6120e8565b3480156107eb57600080fd5b506102766107fa366004612b60565b6121dc565b34801561080b57600080fd5b5061027661081a36600461270d565b612202565b34801561082b57600080fd5b506002546102b8906001600160a01b031681565b61084761227b565b61085e81610858620186a0856122d5565b906122e8565b6004555050565b3360009081526008602052604090205460ff1615156001148061089257506000546001600160a01b031633145b6108b75760405162461bcd60e51b81526004016108ae90612b7d565b60405180910390fd5b600082815260096020526040902060060154829060ff1615156001146108ef5760405162461bcd60e51b81526004016108ae90612ba1565b6108fa8484846122f4565b50505050565b600082815260096020526040902060060154829060ff1615156001146109385760405162461bcd60e51b81526004016108ae90612ba1565b600083815260096020526040908190206005015460015491516370a0823160e01b815233600482015285926001600160a01b0316906370a0823190602401602060405180830381865afa158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b79190612bd0565b10156109ff5760405162461bcd60e51b81526020600482015260176024820152762737ba1022b737bab3b4102a37b5b2b739902432b6321760491b60448201526064016108ae565b600054600160a01b900460ff161515600114610a535760405162461bcd60e51b81526020600482015260136024820152722137bc32b99030b932903234b9b0b13632b21760691b60448201526064016108ae565b600754831115610a9e5760405162461bcd60e51b81526020600482015260166024820152754d6178205175616e746974792045786365656465642160501b60448201526064016108ae565b336000908152600a602052604081205460ff1615159003610b42576000848152600960205260408120600101548490610ad7903361148b565b610ae19190612bff565b9050610af86006548261247890919063ffffffff16565b341015610b405760405162461bcd60e51b81526020600482015260166024820152752737ba1032b737bab3b41022aa24103a37903830bc9760511b60448201526064016108ae565b505b6108fa3385856122f4565b610b5561227b565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610b8861227b565b600755565b606060008267ffffffffffffffff811115610baa57610baa61272a565b604051908082528060200260200182016040528015610c1957816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201528252600019909201910181610bc85790505b50905060005b83811015610cd6576000818152600960209081526040918290208251610100808201855282548252600183015493820193909352600282015493810193909352600381015460ff808216151560608601529290046001600160a01b03908116608085015260048201541660a0840152600581015460c08401526006015416151560e08201528251839083908110610cb857610cb8612c16565b60200260200101819052508080610cce90612c2c565b915050610c1f565b5092915050565b610ce561227b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610d0f61227b565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610d3961227b565b60005b8151811015610ded57826001600160a01b03166323b872dd3033858581518110610d6857610d68612c16565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610dc257600080fd5b505af1158015610dd6573d6000803e3d6000fd5b505050508080610de590612c2c565b915050610d3c565b505050565b3360009081526008602052604090205460ff16151560011480610e1f57506000546001600160a01b031633145b610e3b5760405162461bcd60e51b81526004016108ae90612b7d565b600b548411801590610e8757506000600b8581548110610e5d57610e5d612c16565b600091825260209091206003600790920201015460ff166002811115610e8557610e8561297d565b145b610ede5760405162461bcd60e51b815260206004820152602260248201527f426f7820726571756573742063616e6e6f742062652064697374726962757465604482015261321760f11b60648201526084016108ae565b8215610fb2576000600b8581548110610ef957610ef9612c16565b60009182526020822060079190910201600301546040516101009091046001600160a01b03169186919081818185875af1925050503d8060008114610f5a576040519150601f19603f3d011682016040523d82523d6000602084013e610f5f565b606091505b5050905080610fb05760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f2073656e6420455448207265776172642e00000000000060448201526064016108ae565b505b81156110b25760096000600b8681548110610fcf57610fcf612c16565b906000526020600020906007020160010154815260200190815260200160002060030160019054906101000a90046001600160a01b03166001600160a01b031663a9059cbb600b868154811061102757611027612c16565b600091825260209091206007909102016003015460405160e083901b6001600160e01b03191681526101009091046001600160a01b03166004820152602481018590526044016020604051808303816000875af115801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b09190612c45565b505b60005b81518110156111ea5760096000600b87815481106110d5576110d5612c16565b906000526020600020906007020160010154815260200190815260200160002060040160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd30600b888154811061112e5761112e612c16565b906000526020600020906007020160030160019054906101000a90046001600160a01b031685858151811061116557611165612c16565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156111bf57600080fd5b505af11580156111d3573d6000803e3d6000fd5b5050505080806111e290612c2c565b9150506110b5565b50604051806101000160405280600b868154811061120a5761120a612c16565b9060005260206000209060070201600001548152602001600b868154811061123457611234612c16565b9060005260206000209060070201600101548152602001600b868154811061125e5761125e612c16565b60009182526020918290206002600790920201015482520160018152602001600b868154811061129057611290612c16565b906000526020600020906007020160030160019054906101000a90046001600160a01b03166001600160a01b0316815260200183815260200184815260200182815250600b85815481106112e6576112e6612c16565b906000526020600020906007020160008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083600281111561133c5761133c61297d565b021790555060808201516003820180546001600160a01b0390921661010002610100600160a81b031990921691909117905560a0820151600482015560c0820151600582015560e0820151805161139d9160068401916020909101906124e0565b50505050505050565b3360009081526008602052604090205460ff161515600114806113d357506000546001600160a01b031633145b6113ef5760405162461bcd60e51b81526004016108ae90612b7d565b600b548211156114415760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420426f78207265717565737420496e6465782e00000000000060448201526064016108ae565b80600b838154811061145557611455612c16565b60009182526020909120600360079092020101805460ff191660018360028111156114825761148261297d565b02179055505050565b6002546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa1580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fd9190612bd0565b9050801561155f576000600554826004546115189190612bff565b11611530578160045461152b9190612bff565b611534565b6005545b90506000611549620186a061085888856122d5565b90506115558682612484565b9350505050611564565b839150505b92915050565b61157261227b565b61166688888888888888886040805161010080820183528a825260208083019a8b52828401998a52971515606083019081526001600160a01b039788166080840190815296881660a0840190815260c0840196875294151560e0840190815260009c8d52600990995292909a20905181559751600189015595516002880155945160038701805493518516909802610100600160a81b0319911515919091166001600160a81b031990931692909217919091179095559151600484018054919093166001600160a01b0319909116179091559151600582015590516006909101805491151560ff1992909216919091179055565b5050505050505050565b61167861227b565b6116826000612490565b565b600b818154811061169457600080fd5b60009182526020909120600790910201805460018201546002830154600384015460048501546005909501549395509193909260ff83169261010090046001600160a01b0316919087565b600b54606090600090831015806116f4575082155b6116fe5782611702565b600b545b905060008167ffffffffffffffff81111561171f5761171f61272a565b60405190808252806020026020018201604052801561175857816020015b61174561252b565b81526020019060019003908161173d5790505b509050815b80156118ca57600b8054611772908390612c62565b8154811061178257611782612c16565b9060005260206000209060070201604051806101000160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff1660028111156117de576117de61297d565b60028111156117ef576117ef61297d565b81526020016003820160019054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561188557602002820191906000526020600020905b815481526020019060010190808311611871575b5050505050815250508260018361189c9190612c62565b815181106118ac576118ac612c16565b602002602001018190525080806118c290612c75565b91505061175d565b509392505050565b6118da61227b565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa158015611920573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119449190612bd0565b10156119925760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f75676820746f6b656e7320746f2077697468647261772e000060448201526064016108ae565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded9190612c45565b60008115611b8b576040805160028082526060820183526000926020830190803683375050600354604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611a75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a999190612c8c565b81600081518110611aac57611aac612c16565b6001600160a01b0392831660209182029290920101526001805483519216918391908110611adc57611adc612c16565b6001600160a01b03928316602091820292909201015260035460405163d06ca61f60e01b8152600092919091169063d06ca61f90611b209087908690600401612ca9565b600060405180830381865afa158015611b3d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b659190810190612d00565b905080600181518110611b7a57611b7a612c16565b602002602001015192505050919050565b506000919050565b611b9b61227b565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611bc561227b565b611bd681610858620186a0856122d5565b6005555050565b600082815260096020526040902060060154829060ff161515600114611c155760405162461bcd60e51b81526004016108ae90612ba1565b600083815260096020526040908190206005015460015491516370a0823160e01b815233600482015285926001600160a01b0316906370a0823190602401602060405180830381865afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190612bd0565b1015611cdc5760405162461bcd60e51b81526020600482015260176024820152762737ba1022b737bab3b4102a37b5b2b739902432b6321760491b60448201526064016108ae565b600054600160a01b900460ff161515600114611d305760405162461bcd60e51b81526020600482015260136024820152722137bc32b99030b932903234b9b0b13632b21760691b60448201526064016108ae565b600754831115611d7b5760405162461bcd60e51b81526020600482015260166024820152754d6178205175616e746974792045786365656465642160501b60448201526064016108ae565b336000908152600a602052604081205460ff1615159003610b425760008481526009602052604081206003015460ff16611ddc576000858152600960205260409020600201548490611dcd903361148b565b611dd79190612bff565b611e08565b600085815260096020526040902060020154611e08908590611dfe903361148b565b61066e9190612bff565b9050600654341015611e5c5760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682045544820746f20706179206665652e00000000000060448201526064016108ae565b6001546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec89190612bd0565b1015611f165760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820746f6b656e7320746f207061792e0000000000000060448201526064016108ae565b6001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f919190612c45565b50506108fa3385856122f4565b611fa661227b565b600655565b606060008267ffffffffffffffff811115611fc857611fc861272a565b60405190808252806020026020018201604052801561200d57816020015b6040805180820190915260008082526020820152815260200190600190039081611fe65790505b50905060005b83811015610cd6576040805180820182526000838152600960208181529382206001810154845291859052835260030154909182019060ff1661206757600083815260096020526040902060020154612082565b60008381526009602052604090206002015461208290611a03565b81525082828151811061209757612097612c16565b602002602001018190525080806120ad90612c2c565b915050612013565b6120bd61227b565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6120f061227b565b804710156121405760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682045544820746f20776974686472617700000000000060448201526064016108ae565b604051600090339083908381818185875af1925050503d8060008114612182576040519150601f19603f3d011682016040523d82523d6000602084013e612187565b606091505b50509050806121d85760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f207769746864726177204554482e00000000000000000060448201526064016108ae565b5050565b6121e461227b565b60008054911515600160a01b0260ff60a01b19909216919091179055565b61220a61227b565b6001600160a01b03811661226f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ae565b61227881612490565b50565b6000546001600160a01b031633146116825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ae565b60006122e18284612bff565b9392505050565b60006122e18284612d91565b6040805161010081018252600b80548252602082018590529181018390526060810160008152602001856001600160a01b031681526020016000815260200160008152602001600067ffffffffffffffff8111156123545761235461272a565b60405190808252806020026020018201604052801561237d578160200160208202803683370190505b50905281546001818101845560009384526020938490208351600790930201918255928201518184015560408201516002808301919091556060830151600383018054949593949193909260ff199092169184908111156123e0576123e061297d565b021790555060808201516003820180546001600160a01b0390921661010002610100600160a81b031990921691909117905560a0820151600482015560c0820151600582015560e082015180516124419160068401916020909101906124e0565b5050604051339150829084907fc141efc5224689477b2f8e1ed15f5fbc9997078d32769b5901867444be2e562890600090a4505050565b60006122e18284612db3565b60006122e18284612c62565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821561251b579160200282015b8281111561251b578251825591602001919060010190612500565b5061252792915061258a565b5090565b6040518061010001604052806000815260200160008152602001600081526020016000600281111561255f5761255f61297d565b815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b5b80821115612527576000815560010161258b565b600080604083850312156125b257600080fd5b50508035926020909101359150565b6001600160a01b038116811461227857600080fd5b6000806000606084860312156125eb57600080fd5b83356125f6816125c1565b95602085013595506040909401359392505050565b801515811461227857600080fd5b6000806040838503121561262c57600080fd5b8235612637816125c1565b915060208301356126478161260b565b809150509250929050565b60006020828403121561266457600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b8281101561270057815180518552868101518786015285810151868601526060808201511515908601526080808201516001600160a01b039081169187019190915260a0808301519091169086015260c0808201519086015260e0908101511515908501526101009093019290850190600101612688565b5091979650505050505050565b60006020828403121561271f57600080fd5b81356122e1816125c1565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127695761276961272a565b604052919050565b600067ffffffffffffffff82111561278b5761278b61272a565b5060051b60200190565b600082601f8301126127a657600080fd5b813560206127bb6127b683612771565b612740565b82815260059290921b840181019181810190868411156127da57600080fd5b8286015b848110156127f557803583529183019183016127de565b509695505050505050565b6000806040838503121561281357600080fd5b823561281e816125c1565b9150602083013567ffffffffffffffff81111561283a57600080fd5b61284685828601612795565b9150509250929050565b6000806000806080858703121561286657600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff81111561289257600080fd5b61289e87828801612795565b91505092959194509250565b600080604083850312156128bd57600080fd5b8235915060208301356003811061264757600080fd5b600080604083850312156128e657600080fd5b823591506020830135612647816125c1565b600080600080600080600080610100898b03121561291557600080fd5b88359750602089013596506040890135955060608901356129358161260b565b94506080890135612945816125c1565b935060a0890135612955816125c1565b925060c0890135915060e089013561296c8161260b565b809150509295985092959890939650565b634e487b7160e01b600052602160045260246000fd5b600381106129b157634e487b7160e01b600052602160045260246000fd5b9052565b878152602081018790526040810186905260e081016129d76060830187612993565b6001600160a01b0394909416608082015260a081019290925260c090910152949350505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015612ae357603f198a85030186528251610100808601825187528a8301518b880152898301518a880152606080840151612a65828a0182612993565b50506080838101516001600160a01b03169088015260a0838101519088015260c0808401519088015260e092830151928701919091528151908190529089019061012086019084905b80821015612ace5783518352928b0192918b019160019190910190612aae565b50509689019694505091870191600101612a26565b50919998505050505050505050565b60008060408385031215612b0557600080fd5b8235612b10816125c1565b946020939093013593505050565b602080825282518282018190526000919060409081850190868401855b8281101561270057815180518552860151868501529284019290850190600101612b3b565b600060208284031215612b7257600080fd5b81356122e18161260b565b6020808252600a90820152692737ba1030b236b4b71760b11b604082015260600190565b6020808252601590820152742137bc1034b73232bc1034b99034b73b30b634b21760591b604082015260600190565b600060208284031215612be257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761156457611564612be9565b634e487b7160e01b600052603260045260246000fd5b600060018201612c3e57612c3e612be9565b5060010190565b600060208284031215612c5757600080fd5b81516122e18161260b565b8181038181111561156457611564612be9565b600081612c8457612c84612be9565b506000190190565b600060208284031215612c9e57600080fd5b81516122e1816125c1565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015612cf35784516001600160a01b031683529383019391830191600101612cce565b5090979650505050505050565b60006020808385031215612d1357600080fd5b825167ffffffffffffffff811115612d2a57600080fd5b8301601f81018513612d3b57600080fd5b8051612d496127b682612771565b81815260059190911b82018301908381019087831115612d6857600080fd5b928401925b82841015612d8657835182529284019290840190612d6d565b979650505050505050565b600082612dae57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561156457611564612be956fea2646970667358221220ad056c03cfab77e66ed5290018f8073985d001d2c36af86ff56fa62a5e62198564736f6c6343000811003300000000000000000000000055dc352c9247ea5168687a26e219933f8ba7a4930000000000000000000000006c997a37f5a1dca62b58eeb01041f056942966b3000000000000000000000000752892900c197b9c5b10b93e6f19b0365c296f18
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000055dc352c9247ea5168687a26e219933f8ba7a4930000000000000000000000006c997a37f5a1dca62b58eeb01041f056942966b3000000000000000000000000752892900c197b9c5b10b93e6f19b0365c296f18
-----Decoded View---------------
Arg [0] : _admin (address): 0x55dc352c9247ea5168687a26e219933f8ba7a493
Arg [1] : _tokenERC20Address (address): 0x6c997a37f5a1dca62b58eeb01041f056942966b3
Arg [2] : _tokenERC721Address (address): 0x752892900c197b9c5b10b93e6f19b0365c296f18
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000055dc352c9247ea5168687a26e219933f8ba7a493
Arg [1] : 0000000000000000000000006c997a37f5a1dca62b58eeb01041f056942966b3
Arg [2] : 000000000000000000000000752892900c197b9c5b10b93e6f19b0365c296f18
Deployed ByteCode Sourcemap
24691:15207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29214:194;;;;;;;;;;-1:-1:-1;29214:194:0;;;;;:::i;:::-;;:::i;:::-;;35105:226;;;;;;;;;;-1:-1:-1;35105:226:0;;;;;:::i;:::-;;:::i;24841:32::-;;;;;;;;;;-1:-1:-1;24841:32:0;;;;-1:-1:-1;;;;;24841:32:0;;;;;;-1:-1:-1;;;;;955:32:1;;;937:51;;925:2;910:18;24841:32:0;;;;;;;;25044:28;;;;;;;;;;;;;;;;;;;1145:25:1;;;1133:2;1118:18;25044:28:0;999:177:1;35339:688:0;;;;;;:::i;:::-;;:::i;33579:101::-;;;;;;;;;;-1:-1:-1;33651:21:0;33579:101;;28922:154;;;;;;;;;;-1:-1:-1;28922:154:0;;;;;:::i;:::-;;:::i;29084:122::-;;;;;;;;;;-1:-1:-1;29084:122:0;;;;;:::i;:::-;;:::i;24996:41::-;;;;;;;;;;;;;;;;34334:251;;;;;;;;;;-1:-1:-1;34334:251:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24920:28::-;;;;;;;;;;-1:-1:-1;24920:28:0;;;;-1:-1:-1;;;;;24920:28:0;;;33688:107;;;;;;;;;;-1:-1:-1;33769:11:0;:18;33688:107;;29761:119;;;;;;;;;;-1:-1:-1;29761:119:0;;;;;:::i;:::-;;:::i;30014:106::-;;;;;;;;;;-1:-1:-1;30014:106:0;;;;;:::i;:::-;;:::i;31304:361::-;;;;;;;;;;-1:-1:-1;31304:361:0;;;;;:::i;:::-;;:::i;38041:1817::-;;;;;;;;;;-1:-1:-1;38041:1817:0;;;;;:::i;:::-;;:::i;25168:36::-;;;;;;;;;;-1:-1:-1;25168:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25168:36:0;;;;;;;;;;;;;;6289:25:1;;;6345:2;6330:18;;6323:34;;;;6373:18;;;6366:34;;;;6443:14;;6436:22;6431:2;6416:18;;6409:50;-1:-1:-1;;;;;6534:15:1;;;6528:3;6513:19;;6506:44;6587:15;6486:3;6566:19;;6559:44;6634:3;6619:19;;6612:35;6691:14;6684:22;6678:3;6663:19;;6656:51;6276:3;6261:19;25168:36:0;5958:755:1;37712:321:0;;;;;;;;;;-1:-1:-1;37712:321:0;;;;;:::i;:::-;;:::i;32296:738::-;;;;;;;;;;-1:-1:-1;32296:738:0;;;;;:::i;:::-;;:::i;30128:577::-;;;;;;;;;;-1:-1:-1;30128:577:0;;;;;:::i;:::-;;:::i;24813:21::-;;;;;;;;;;-1:-1:-1;24813:21:0;;;;-1:-1:-1;;;24813:21:0;;;;;;;;;8493:14:1;;8486:22;8468:41;;8456:2;8441:18;24813:21:0;8328:187:1;23792:103:0;;;;;;;;;;;;;:::i;25262:31::-;;;;;;;;;;-1:-1:-1;25262:31:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;33803:523::-;;;;;;;;;;-1:-1:-1;33803:523:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23144:87::-;;;;;;;;;;-1:-1:-1;23190:7:0;23217:6;-1:-1:-1;;;;;23217:6:0;23144:87;;31673:330;;;;;;;;;;-1:-1:-1;31673:330:0;;;;;:::i;:::-;;:::i;33042:529::-;;;;;;;;;;-1:-1:-1;33042:529:0;;;;;:::i;:::-;;:::i;29632:121::-;;;;;;;;;;-1:-1:-1;29632:121:0;;;;;:::i;:::-;;:::i;29416:208::-;;;;;;;;;;-1:-1:-1;29416:208:0;;;;;:::i;:::-;;:::i;25079:29::-;;;;;;;;;;;;;;;;25211:44;;;;;;;;;;-1:-1:-1;25211:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36035:1144;;;;;;:::i;:::-;;:::i;24955:34::-;;;;;;;;;;;;;;;;29888:118;;;;;;;;;;-1:-1:-1;29888:118:0;;;;;:::i;:::-;;:::i;34593:504::-;;;;;;;;;;-1:-1:-1;34593:504:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28796:118::-;;;;;;;;;;-1:-1:-1;28796:118:0;;;;;:::i;:::-;;:::i;25117:44::-;;;;;;;;;;-1:-1:-1;25117:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32011:277;;;;;;;;;;-1:-1:-1;32011:277:0;;;;;:::i;:::-;;:::i;28691:97::-;;;;;;;;;;-1:-1:-1;28691:97:0;;;;;:::i;:::-;;:::i;24050:201::-;;;;;;;;;;-1:-1:-1;24050:201:0;;;;;:::i;:::-;;:::i;24880:33::-;;;;;;;;;;-1:-1:-1;24880:33:0;;;;-1:-1:-1;;;;;24880:33:0;;;29214:194;23030:13;:11;:13::i;:::-;29358:42:::1;29387:12:::0;29358:24:::1;24798:6;29371:10:::0;29358:12:::1;:24::i;:::-;:28:::0;::::1;:42::i;:::-;29336:19;:64:::0;-1:-1:-1;;29214:194:0:o;35105:226::-;28176:10;28163:24;;;;:12;:24;;;;;;;;:32;;:24;:32;;:57;;-1:-1:-1;23190:7:0;23217:6;-1:-1:-1;;;;;23217:6:0;28199:10;:21;28163:57;28141:117;;;;-1:-1:-1;;;28141:117:0;;;;;;;:::i;:::-;;;;;;;;;28344:16:::1;::::0;;;:5:::1;:16;::::0;;;;:27:::1;;::::0;35253:9;;28344:27:::1;;:35;;:27:::0;:35:::1;28336:69;;;;-1:-1:-1::0;;;28336:69:0::1;;;;;;;:::i;:::-;35275:48:::2;35287:10;35299:9;35310:12;35275:11;:48::i;:::-;28269:1:::1;35105:226:::0;;;:::o;35339:688::-;28344:16;;;;:5;:16;;;;;:27;;;35462:9;;28344:27;;:35;;:27;:35;28336:69;;;;-1:-1:-1;;;28336:69:0;;;;;;;:::i;:::-;28575:16:::1;::::0;;;:5:::1;:16;::::0;;;;;;:37:::1;;::::0;28514:17:::1;::::0;28507:47;;-1:-1:-1;;;28507:47:0;;28543:10:::1;28507:47;::::0;::::1;937:51:1::0;28575:16:0;;-1:-1:-1;;;;;28514:17:0::1;::::0;28507:35:::1;::::0;910:18:1;;28507:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:105;;28485:178;;;::::0;-1:-1:-1;;;28485:178:0;;14142:2:1;28485:178:0::1;::::0;::::1;14124:21:1::0;14181:2;14161:18;;;14154:30;-1:-1:-1;;;14200:18:1;;;14193:53;14263:18;;28485:178:0::1;13940:347:1::0;28485:178:0::1;28042:9:::2;::::0;-1:-1:-1;;;28042:9:0;::::2;;;:17;;28055:4;28042:17;28034:49;;;::::0;-1:-1:-1;;;28034:49:0;;14494:2:1;28034:49:0::2;::::0;::::2;14476:21:1::0;14533:2;14513:18;;;14506:30;-1:-1:-1;;;14552:18:1;;;14545:49;14611:18;;28034:49:0::2;14292:343:1::0;28034:49:0::2;35563:14:::3;;35547:12;:30;;35539:65;;;::::0;-1:-1:-1;;;35539:65:0;;14842:2:1;35539:65:0::3;::::0;::::3;14824:21:1::0;14881:2;14861:18;;;14854:30;-1:-1:-1;;;14900:18:1;;;14893:52;14962:18;;35539:65:0::3;14640:346:1::0;35539:65:0::3;35632:10;35619:24;::::0;;;:12:::3;:24;::::0;;;;;::::3;;:33;;::::0;;35615:344:::3;;35669:19;35719:16:::0;;;:5:::3;:16;::::0;;;;:27:::3;;::::0;35793:12;;35691:99:::3;::::0;35765:10:::3;35691:9;:99::i;:::-;:114;;;;:::i;:::-;35669:136;;35859:30;35875:13;;35859:11;:15;;:30;;;;:::i;:::-;35846:9;:43;;35820:127;;;::::0;-1:-1:-1;;;35820:127:0;;15498:2:1;35820:127:0::3;::::0;::::3;15480:21:1::0;15537:2;15517:18;;;15510:30;-1:-1:-1;;;15556:18:1;;;15549:52;15618:18;;35820:127:0::3;15296:346:1::0;35820:127:0::3;35654:305;35615:344;35971:48;35983:10;35995:9;36006:12;35971:11;:48::i;28922:154::-:0;23030:13;:11;:13::i;:::-;-1:-1:-1;;;;;29036:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:32;;-1:-1:-1;;29036:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28922:154::o;29084:122::-;23030:13;:11;:13::i;:::-;29166:14:::1;:32:::0;29084:122::o;34334:251::-;34391:12;34416:19;34448:6;34438:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34438:17:0;;-1:-1:-1;;34438:17:0;;;;;;;;;;;;34416:39;;34473:9;34468:84;34492:6;34488:1;:10;34468:84;;;34532:8;;;;:5;:8;;;;;;;;;34520:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34520:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;34532:8;;34520:9;;;;;;:::i;:::-;;;;;;:20;;;;34500:3;;;;;:::i;:::-;;;;34468:84;;;-1:-1:-1;34571:6:0;34334:251;-1:-1:-1;;34334:251:0:o;29761:119::-;23030:13;:11;:13::i;:::-;29839:17:::1;:33:::0;;-1:-1:-1;;;;;;29839:33:0::1;-1:-1:-1::0;;;;;29839:33:0;;;::::1;::::0;;;::::1;::::0;;29761:119::o;30014:106::-;23030:13;:11;:13::i;:::-;30088::::1;:24:::0;;-1:-1:-1;;;;;;30088:24:0::1;-1:-1:-1::0;;;;;30088:24:0;;;::::1;::::0;;;::::1;::::0;;30014:106::o;31304:361::-;23030:13;:11;:13::i;:::-;31446:9:::1;31441:217;31465:9;:16;31461:1;:20;31441:217;;;31511:14;-1:-1:-1::0;;;;;31503:36:0::1;;31566:4;31590:10;31619:9;31629:1;31619:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;31503:143:::1;::::0;-1:-1:-1;;;;;;31503:143:0::1;::::0;;;;;;-1:-1:-1;;;;;16177:15:1;;;31503:143:0::1;::::0;::::1;16159:34:1::0;16229:15;;;;16209:18;;;16202:43;16261:18;;;16254:34;16094:18;;31503:143:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31483:3;;;;;:::i;:::-;;;;31441:217;;;;31304:361:::0;;:::o;38041:1817::-;28176:10;28163:24;;;;:12;:24;;;;;;;;:32;;:24;:32;;:57;;-1:-1:-1;23190:7:0;23217:6;-1:-1:-1;;;;;23217:6:0;28199:10;:21;28163:57;28141:117;;;;-1:-1:-1;;;28141:117:0;;;;;;;:::i;:::-;38295:11:::1;:18:::0;38275:38;::::1;::::0;::::1;::::0;:143:::1;;-1:-1:-1::0;38394:24:0::1;38334:11;38346:16;38334:29;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:39:::1;:29;::::0;;::::1;;:39;::::0;::::1;;:84;::::0;::::1;;;;;;:::i;:::-;;38275:143;38253:227;;;::::0;-1:-1:-1;;;38253:227:0;;16501:2:1;38253:227:0::1;::::0;::::1;16483:21:1::0;16540:2;16520:18;;;16513:30;16579:34;16559:18;;;16552:62;-1:-1:-1;;;16630:18:1;;;16623:32;16672:19;;38253:227:0::1;16299:398:1::0;38253:227:0::1;38497:20:::0;;38493:227:::1;;38535:9;38558:11;38570:16;38558:29;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;;:39;;::::0;38550:100:::1;::::0;38558:39:::1;::::0;;::::1;-1:-1:-1::0;;;;;38558:39:0::1;::::0;38629:16;;38550:100;;38558:29;38550:100;38629:16;38558:39;38550:100:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38534:116;;;38673:4;38665:43;;;::::0;-1:-1:-1;;;38665:43:0;;17114:2:1;38665:43:0::1;::::0;::::1;17096:21:1::0;17153:2;17133:18;;;17126:30;17192:28;17172:18;;;17165:56;17238:18;;38665:43:0::1;16912:350:1::0;38665:43:0::1;38519:201;38493:227;38736:22:::0;;38732:290:::1;;38800:5;:45;38806:11;38818:16;38806:29;;;;;;;;:::i;:::-;;;;;;;;;;;:38;;;38800:45;;;;;;;;;;;:64;;;;;;;;;;-1:-1:-1::0;;;;;38800:64:0::1;-1:-1:-1::0;;;;;38775:113:0::1;;38911:11;38923:16;38911:29;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:39;;::::0;38775:235:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;38775:235:0;;;38911:39:::1;::::0;;::::1;-1:-1:-1::0;;;;;38911:39:0::1;38775:235;::::0;::::1;17441:51:1::0;17508:18;;;17501:34;;;17414:18;;38775:235:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38732:290;39039:9;39034:387;39058:19;:26;39054:1;:30;39034:387;;;39132:5;:45;39138:11;39150:16;39138:29;;;;;;;;:::i;:::-;;;;;;;;;;;:38;;;39132:45;;;;;;;;;;;:87;;;;;;;;;;-1:-1:-1::0;;;;;39132:87:0::1;-1:-1:-1::0;;;;;39106:141:0::1;;39278:4;39306:11;39318:16;39306:29;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;;;;;;;;-1:-1:-1::0;;;;;39306:39:0::1;39368:19;39388:1;39368:22;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;39106:303:::1;::::0;-1:-1:-1;;;;;;39106:303:0::1;::::0;;;;;;-1:-1:-1;;;;;16177:15:1;;;39106:303:0::1;::::0;::::1;16159:34:1::0;16229:15;;;;16209:18;;;16202:43;16261:18;;;16254:34;16094:18;;39106:303:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39086:3;;;;;:::i;:::-;;;;39034:387;;;;39465:385;;;;;;;;39490:11;39502:16;39490:29;;;;;;;;:::i;:::-;;;;;;;;;;;:45;;;39465:385;;;;39550:11;39562:16;39550:29;;;;;;;;:::i;:::-;;;;;;;;;;;:38;;;39465:385;;;;39603:11;39615:16;39603:29;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;:41:::1;:29;::::0;;::::1;;:41;::::0;39465:385;;::::1;39659:28;39465:385;;;;39702:11;39714:16;39702:29;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;;;;;;;;-1:-1:-1::0;;;;;39702:39:0::1;-1:-1:-1::0;;;;;39465:385:0::1;;;;;39756:18;39465:385;;;;39789:16;39465:385;;;;39820:19;39465:385;;::::0;39433:11:::1;39445:16;39433:29;;;;;;;;:::i;:::-;;;;;;;;;;;:417;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;39433:417:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;39433:417:0;;::::1;;;-1:-1:-1::0;;;;;;39433:417:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;;;38041:1817:0:o;37712:321::-;28176:10;28163:24;;;;:12;:24;;;;;;;;:32;;:24;:32;;:57;;-1:-1:-1;23190:7:0;23217:6;-1:-1:-1;;;;;23217:6:0;28199:10;:21;28163:57;28141:117;;;;-1:-1:-1;;;28141:117:0;;;;;;;:::i;:::-;37891:11:::1;:18:::0;37871:38;::::1;;37849:114;;;::::0;-1:-1:-1;;;37849:114:0;;17998:2:1;37849:114:0::1;::::0;::::1;17980:21:1::0;18037:2;18017:18;;;18010:30;18076:28;18056:18;;;18049:56;18122:18;;37849:114:0::1;17796:350:1::0;37849:114:0::1;38018:7;37976:11;37988:16;37976:29;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:39:::1;:29;::::0;;::::1;;:39;:49:::0;;-1:-1:-1;;37976:49:0::1;::::0;;::::1;::::0;::::1;;;;;;:::i;:::-;;;;;;37712:321:::0;;:::o;32296:738::-;32458:18;;32450:68;;-1:-1:-1;;;32450:68:0;;-1:-1:-1;;;;;955:32:1;;;32450:68:0;;;937:51:1;32397:7:0;;;;32458:18;;;32450:37;;910:18:1;;32450:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32422:96;-1:-1:-1;32533:21:0;;32529:498;;32571:25;32660:26;;32639:17;32600:19;;:56;;;;:::i;:::-;32599:87;:194;;32775:17;32753:19;;:39;;;;:::i;:::-;32599:194;;;32706:26;;32599:194;32571:222;-1:-1:-1;32810:22:0;32835:78;24798:6;32835:32;:9;32571:222;32835:13;:32::i;:78::-;32810:103;-1:-1:-1;32937:29:0;:9;32810:103;32937:13;:29::i;:::-;32930:36;;;;;;;32529:498;33006:9;32999:16;;;32296:738;;;;;:::o;30128:577::-;23030:13;:11;:13::i;:::-;30443:254:::1;30465:9;30489:11;30515:13;30543:12;30570:19;30604:20;30639:21;30675:11;31038:250:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31038:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31019:16:0;;;:5;:16;;;;;;;:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31019:269:0;;;;;;;-1:-1:-1;;;;;;31019:269:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31019:269:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31019:269:0;;;;;;;;;;30713:583;30443:254:::1;30128:577:::0;;;;;;;;:::o;23792:103::-;23030:13;:11;:13::i;:::-;23857:30:::1;23884:1;23857:18;:30::i;:::-;23792:103::o:0;25262:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25262:31:0;;;;;;;;;;;-1:-1:-1;;;;;25262:31:0;;;;:::o;33803:523::-;33968:11;:18;33893:19;;33930:25;;33958:28;;;;:43;;-1:-1:-1;33990:11:0;;33958:43;:99;;34051:6;33958:99;;;34017:11;:18;33958:99;33930:127;;34070:32;34122:17;34105:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;34070:70:0;-1:-1:-1;34170:17:0;34153:134;34189:5;;34153:134;;34238:11;34251:18;;:22;;34272:1;;34251:22;:::i;:::-;34238:37;;;;;;;;:::i;:::-;;;;;;;;;;;34216:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34216:59:0;-1:-1:-1;;;;;34216:59:0;-1:-1:-1;;;;;34216:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;34233:1;34229;:5;;;;:::i;:::-;34216:19;;;;;;;;:::i;:::-;;;;;;:59;;;;34196:3;;;;;:::i;:::-;;;;34153:134;;;-1:-1:-1;34306:12:0;33803:523;-1:-1:-1;;;33803:523:0:o;31673:330::-;23030:13;:11;:13::i;:::-;31816:46:::1;::::0;-1:-1:-1;;;31816:46:0;;31856:4:::1;31816:46;::::0;::::1;937:51:1::0;31866:7:0;;-1:-1:-1;;;;;31816:31:0;::::1;::::0;::::1;::::0;910:18:1;;31816:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;31794:137;;;::::0;-1:-1:-1;;;31794:137:0;;18627:2:1;31794:137:0::1;::::0;::::1;18609:21:1::0;18666:2;18646:18;;;18639:30;18705:32;18685:18;;;18678:60;18755:18;;31794:137:0::1;18425:354:1::0;31794:137:0::1;31944:51;::::0;-1:-1:-1;;;31944:51:0;;31975:10:::1;31944:51;::::0;::::1;17441::1::0;17508:18;;;17501:34;;;-1:-1:-1;;;;;31944:30:0;::::1;::::0;::::1;::::0;17414:18:1;;31944:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33042:529::-:0;33137:7;33166:14;;33162:402;;33221:16;;;33235:1;33221:16;;;;;;;;33197:21;;33221:16;;;;;;;;-1:-1:-1;;33281:13:0;;33262:40;;;-1:-1:-1;;;33262:40:0;;;;33197;;-1:-1:-1;;;;;;33281:13:0;;;;33262:38;;-1:-1:-1;33262:40:0;;;;;;;;;;;;;;33281:13;33262:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33252:4;33257:1;33252:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33252:50:0;;;:7;;;;;;;;;:50;33327:17;;;33317:7;;33327:17;;;33317:4;;33327:17;33317:7;;;;;;:::i;:::-;-1:-1:-1;;;;;33317:27:0;;;:7;;;;;;;;;:27;33410:13;;33391:83;;-1:-1:-1;;;33391:83:0;;33361:27;;33410:13;;;;;33391:65;;:83;;33457:10;;33469:4;;33391:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33391:83:0;;;;;;;;;;;;:::i;:::-;33361:113;;33498:10;33509:1;33498:13;;;;;;;;:::i;:::-;;;;;;;33491:20;;;;33042:529;;;:::o;33162:402::-;-1:-1:-1;33551:1:0;;33042:529;-1:-1:-1;33042:529:0:o;29632:121::-;23030:13;:11;:13::i;:::-;29711:18:::1;:34:::0;;-1:-1:-1;;;;;;29711:34:0::1;-1:-1:-1::0;;;;;29711:34:0;;;::::1;::::0;;;::::1;::::0;;29632:121::o;29416:208::-;23030:13;:11;:13::i;:::-;29574:42:::1;29603:12:::0;29574:24:::1;24798:6;29587:10:::0;29574:12:::1;:24::i;:42::-;29545:26;:71:::0;-1:-1:-1;;29416:208:0:o;36035:1144::-;28344:16;;;;:5;:16;;;;;:27;;;36160:9;;28344:27;;:35;;:27;:35;28336:69;;;;-1:-1:-1;;;28336:69:0;;;;;;;:::i;:::-;28575:16:::1;::::0;;;:5:::1;:16;::::0;;;;;;:37:::1;;::::0;28514:17:::1;::::0;28507:47;;-1:-1:-1;;;28507:47:0;;28543:10:::1;28507:47;::::0;::::1;937:51:1::0;28575:16:0;;-1:-1:-1;;;;;28514:17:0::1;::::0;28507:35:::1;::::0;910:18:1;;28507:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:105;;28485:178;;;::::0;-1:-1:-1;;;28485:178:0;;14142:2:1;28485:178:0::1;::::0;::::1;14124:21:1::0;14181:2;14161:18;;;14154:30;-1:-1:-1;;;14200:18:1;;;14193:53;14263:18;;28485:178:0::1;13940:347:1::0;28485:178:0::1;28042:9:::2;::::0;-1:-1:-1;;;28042:9:0;::::2;;;:17;;28055:4;28042:17;28034:49;;;::::0;-1:-1:-1;;;28034:49:0;;14494:2:1;28034:49:0::2;::::0;::::2;14476:21:1::0;14533:2;14513:18;;;14506:30;-1:-1:-1;;;14552:18:1;;;14545:49;14611:18;;28034:49:0::2;14292:343:1::0;28034:49:0::2;36261:14:::3;;36245:12;:30;;36237:65;;;::::0;-1:-1:-1;;;36237:65:0;;14842:2:1;36237:65:0::3;::::0;::::3;14824:21:1::0;14881:2;14861:18;;;14854:30;-1:-1:-1;;;14900:18:1;;;14893:52;14962:18;;36237:65:0::3;14640:346:1::0;36237:65:0::3;36330:10;36317:24;::::0;;;:12:::3;:24;::::0;;;;;::::3;;:33;;::::0;;36313:800:::3;;36367:19;36389:16:::0;;;:5:::3;:16;::::0;;;;:28:::3;;::::0;::::3;;:307;;36618:16;::::0;;;:5:::3;:16;::::0;;;;:29:::3;;::::0;36684:12;;36608:52:::3;::::0;36649:10:::3;36608:9;:52::i;:::-;:88;;;;:::i;:::-;36389:307;;;36487:16;::::0;;;:5:::3;:16;::::0;;;;:29:::3;;::::0;36437:151:::3;::::0;36557:12;;36477:52:::3;::::0;36518:10:::3;36477:9;:52::i;:::-;:92;;;;:::i;36437:151::-;36367:329;;36734:13;;36721:9;:26;;36713:65;;;::::0;-1:-1:-1;;;36713:65:0;;20862:2:1;36713:65:0::3;::::0;::::3;20844:21:1::0;20901:2;20881:18;;;20874:30;20940:28;20920:18;;;20913:56;20986:18;;36713:65:0::3;20660:350:1::0;36713:65:0::3;36826:17;::::0;36819:47:::3;::::0;-1:-1:-1;;;36819:47:0;;36855:10:::3;36819:47;::::0;::::3;937:51:1::0;36870:11:0;;-1:-1:-1;;;;;36826:17:0::3;::::0;36819:35:::3;::::0;910:18:1;;36819:47:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;36793:149;;;::::0;-1:-1:-1;;;36793:149:0;;21217:2:1;36793:149:0::3;::::0;::::3;21199:21:1::0;21256:2;21236:18;;;21229:30;21295:27;21275:18;;;21268:55;21340:18;;36793:149:0::3;21015:349:1::0;36793:149:0::3;36964:17;::::0;36957:144:::3;::::0;-1:-1:-1;;;36957:144:0;;37014:10:::3;36957:144;::::0;::::3;16159:34:1::0;37051:4:0::3;16209:18:1::0;;;16202:43;16261:18;;;16254:34;;;-1:-1:-1;;;;;36964:17:0;;::::3;::::0;36957:38:::3;::::0;16094:18:1;;36957:144:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36352:761;37123:48;37135:10;37147:9;37158:12;37123:11;:48::i;29888:118::-:0;23030:13;:11;:13::i;:::-;29968::::1;:30:::0;29888:118::o;34593:504::-;34681:16;34715:26;34758:6;34744:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;34744:21:0;;;;;;;;;;;;;;;;34715:50;;34781:9;34776:287;34800:6;34796:1;:10;34776:287;;;34843:208;;;;;;;;-1:-1:-1;34869:8:0;;;:5;:8;;;;;;;:19;;;;34843:208;;34907:8;;;;;;:20;;;34843:208;;;;;34907:20;;:129;;35015:8;;;;:5;:8;;;;;:21;;;34907:129;;;34969:8;;;;:5;:8;;;;;:21;;;34951:40;;:17;:40::i;:::-;34843:208;;;34828:9;34838:1;34828:12;;;;;;;;:::i;:::-;;;;;;:223;;;;34808:3;;;;;:::i;:::-;;;;34776:287;;28796:118;23030:13;:11;:13::i;:::-;-1:-1:-1;;;;;28877:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:29;;-1:-1:-1;;28877:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28796:118::o;32011:277::-;23030:13;:11;:13::i;:::-;32112:7:::1;32087:21;:32;;32079:71;;;::::0;-1:-1:-1;;;32079:71:0;;21571:2:1;32079:71:0::1;::::0;::::1;21553:21:1::0;21610:2;21590:18;;;21583:30;21649:28;21629:18;;;21622:56;21695:18;;32079:71:0::1;21369:350:1::0;32079:71:0::1;32180:44;::::0;32162:12:::1;::::0;32188:10:::1;::::0;32212:7;;32162:12;32180:44;32162:12;32180:44;32212:7;32188:10;32180:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32161:63;;;32245:7;32237:43;;;::::0;-1:-1:-1;;;32237:43:0;;21926:2:1;32237:43:0::1;::::0;::::1;21908:21:1::0;21965:2;21945:18;;;21938:30;22004:25;21984:18;;;21977:53;22047:18;;32237:43:0::1;21724:347:1::0;32237:43:0::1;32068:220;32011:277:::0;:::o;28691:97::-;23030:13;:11;:13::i;:::-;28761:9:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;28761:19:0::1;-1:-1:-1::0;;;;28761:19:0;;::::1;::::0;;;::::1;::::0;;28691:97::o;24050:201::-;23030:13;:11;:13::i;:::-;-1:-1:-1;;;;;24139:22:0;::::1;24131:73;;;::::0;-1:-1:-1;;;24131:73:0;;22278:2:1;24131:73:0::1;::::0;::::1;22260:21:1::0;22317:2;22297:18;;;22290:30;22356:34;22336:18;;;22329:62;-1:-1:-1;;;22407:18:1;;;22400:36;22453:19;;24131:73:0::1;22076:402:1::0;24131:73:0::1;24215:28;24234:8;24215:18;:28::i;:::-;24050:201:::0;:::o;23309:132::-;23190:7;23217:6;-1:-1:-1;;;;;23217:6:0;21775:10;23373:23;23365:68;;;;-1:-1:-1;;;23365:68:0;;22685:2:1;23365:68:0;;;22667:21:1;;;22704:18;;;22697:30;22763:34;22743:18;;;22736:62;22815:18;;23365:68:0;22483:356:1;8689:98:0;8747:7;8774:5;8778:1;8774;:5;:::i;:::-;8767:12;8689:98;-1:-1:-1;;;8689:98:0:o;9088:::-;9146:7;9173:5;9177:1;9173;:5;:::i;37187:517::-;37354:268;;;;;;;;37323:11;37383:18;;37354:268;;;;;;;;;;;;;;;;;-1:-1:-1;37354:268:0;;;;37522:10;-1:-1:-1;;;;;37354:268:0;;;;;37551:1;37354:268;;;;37571:1;37354:268;;;;37605:1;37591:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37591:16:0;-1:-1:-1;37354:268:0;;37323:310;;;;;;;;-1:-1:-1;37323:310:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37323:310:0;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;37323:310:0;;;;;;;;;-1:-1:-1;;;;;37323:310:0;;;;;-1:-1:-1;;;;;;37323:310:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;37649:47:0;;37685:10;;-1:-1:-1;37671:12:0;;37660:9;;37649:47;;;;;37187:517;;;:::o;7951:98::-;8009:7;8036:5;8040:1;8036;:5;:::i;8332:98::-;8390:7;8417:5;8421:1;8417;:5;:::i;24411:191::-;24485:16;24504:6;;-1:-1:-1;;;;;24521:17:0;;;-1:-1:-1;;;;;;24521:17:0;;;;;;24554:40;;24504:6;;;;;;;24554:40;;24485:16;24554:40;24474:128;24411:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:248:1;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:131::-;-1:-1:-1;;;;;342:31:1;;332:42;;322:70;;388:1;385;378:12;403:383;480:6;488;496;549:2;537:9;528:7;524:23;520:32;517:52;;;565:1;562;555:12;517:52;604:9;591:23;623:31;648:5;623:31;:::i;:::-;673:5;725:2;710:18;;697:32;;-1:-1:-1;776:2:1;761:18;;;748:32;;403:383;-1:-1:-1;;;403:383:1:o;1181:118::-;1267:5;1260:13;1253:21;1246:5;1243:32;1233:60;;1289:1;1286;1279:12;1304:382;1369:6;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1485:9;1472:23;1504:31;1529:5;1504:31;:::i;:::-;1554:5;-1:-1:-1;1611:2:1;1596:18;;1583:32;1624:30;1583:32;1624:30;:::i;:::-;1673:7;1663:17;;;1304:382;;;;;:::o;1691:180::-;1750:6;1803:2;1791:9;1782:7;1778:23;1774:32;1771:52;;;1819:1;1816;1809:12;1771:52;-1:-1:-1;1842:23:1;;1691:180;-1:-1:-1;1691:180:1:o;1972:1416::-;2185:2;2237:21;;;2307:13;;2210:18;;;2329:22;;;2156:4;;2185:2;2370;;2388:18;;;;2429:15;;;2156:4;2472:890;2486:6;2483:1;2480:13;2472:890;;;2545:13;;2583:9;;2571:22;;2633:11;;;2627:18;2613:12;;;2606:40;2686:11;;;2680:18;2666:12;;;2659:40;2722:4;2780:11;;;2774:18;2767:26;2760:34;2746:12;;;2739:56;2818:4;2861:11;;;2855:18;-1:-1:-1;;;;;2949:21:1;;;2935:12;;;2928:43;;;;2904:3;3042:11;;;3036:18;3032:27;;;3018:12;;;3011:49;3083:4;3127:11;;;3121:18;3107:12;;;3100:40;3163:4;3208:11;;;3202:18;1946:13;1939:21;3265:12;;;1927:34;3307:6;3298:16;;;;3337:15;;;;2508:1;2501:9;2472:890;;;-1:-1:-1;3379:3:1;;1972:1416;-1:-1:-1;;;;;;;1972:1416:1:o;3393:247::-;3452:6;3505:2;3493:9;3484:7;3480:23;3476:32;3473:52;;;3521:1;3518;3511:12;3473:52;3560:9;3547:23;3579:31;3604:5;3579:31;:::i;3645:127::-;3706:10;3701:3;3697:20;3694:1;3687:31;3737:4;3734:1;3727:15;3761:4;3758:1;3751:15;3777:275;3848:2;3842:9;3913:2;3894:13;;-1:-1:-1;;3890:27:1;3878:40;;3948:18;3933:34;;3969:22;;;3930:62;3927:88;;;3995:18;;:::i;:::-;4031:2;4024:22;3777:275;;-1:-1:-1;3777:275:1:o;4057:183::-;4117:4;4150:18;4142:6;4139:30;4136:56;;;4172:18;;:::i;:::-;-1:-1:-1;4217:1:1;4213:14;4229:4;4209:25;;4057:183::o;4245:662::-;4299:5;4352:3;4345:4;4337:6;4333:17;4329:27;4319:55;;4370:1;4367;4360:12;4319:55;4406:6;4393:20;4432:4;4456:60;4472:43;4512:2;4472:43;:::i;:::-;4456:60;:::i;:::-;4550:15;;;4636:1;4632:10;;;;4620:23;;4616:32;;;4581:12;;;;4660:15;;;4657:35;;;4688:1;4685;4678:12;4657:35;4724:2;4716:6;4712:15;4736:142;4752:6;4747:3;4744:15;4736:142;;;4818:17;;4806:30;;4856:12;;;;4769;;4736:142;;;-1:-1:-1;4896:5:1;4245:662;-1:-1:-1;;;;;;4245:662:1:o;4912:483::-;5005:6;5013;5066:2;5054:9;5045:7;5041:23;5037:32;5034:52;;;5082:1;5079;5072:12;5034:52;5121:9;5108:23;5140:31;5165:5;5140:31;:::i;:::-;5190:5;-1:-1:-1;5246:2:1;5231:18;;5218:32;5273:18;5262:30;;5259:50;;;5305:1;5302;5295:12;5259:50;5328:61;5381:7;5372:6;5361:9;5357:22;5328:61;:::i;:::-;5318:71;;;4912:483;;;;;:::o;5400:553::-;5511:6;5519;5527;5535;5588:3;5576:9;5567:7;5563:23;5559:33;5556:53;;;5605:1;5602;5595:12;5556:53;5641:9;5628:23;5618:33;;5698:2;5687:9;5683:18;5670:32;5660:42;;5749:2;5738:9;5734:18;5721:32;5711:42;;5804:2;5793:9;5789:18;5776:32;5831:18;5823:6;5820:30;5817:50;;;5863:1;5860;5853:12;5817:50;5886:61;5939:7;5930:6;5919:9;5915:22;5886:61;:::i;:::-;5876:71;;;5400:553;;;;;;;:::o;6718:345::-;6807:6;6815;6868:2;6856:9;6847:7;6843:23;6839:32;6836:52;;;6884:1;6881;6874:12;6836:52;6920:9;6907:23;6897:33;;6980:2;6969:9;6965:18;6952:32;7013:1;7006:5;7003:12;6993:40;;7029:1;7026;7019:12;7068:315;7136:6;7144;7197:2;7185:9;7176:7;7172:23;7168:32;7165:52;;;7213:1;7210;7203:12;7165:52;7249:9;7236:23;7226:33;;7309:2;7298:9;7294:18;7281:32;7322:31;7347:5;7322:31;:::i;7388:935::-;7504:6;7512;7520;7528;7536;7544;7552;7560;7613:3;7601:9;7592:7;7588:23;7584:33;7581:53;;;7630:1;7627;7620:12;7581:53;7666:9;7653:23;7643:33;;7723:2;7712:9;7708:18;7695:32;7685:42;;7774:2;7763:9;7759:18;7746:32;7736:42;;7828:2;7817:9;7813:18;7800:32;7841:28;7863:5;7841:28;:::i;:::-;7888:5;-1:-1:-1;7945:3:1;7930:19;;7917:33;7959;7917;7959;:::i;:::-;8011:7;-1:-1:-1;8070:3:1;8055:19;;8042:33;8084;8042;8084;:::i;:::-;8136:7;-1:-1:-1;8190:3:1;8175:19;;8162:33;;-1:-1:-1;8247:3:1;8232:19;;8219:33;8261:30;8219:33;8261:30;:::i;:::-;8310:7;8300:17;;;7388:935;;;;;;;;;;;:::o;8520:127::-;8581:10;8576:3;8572:20;8569:1;8562:31;8612:4;8609:1;8602:15;8636:4;8633:1;8626:15;8652:244;8740:1;8733:5;8730:12;8720:143;;8785:10;8780:3;8776:20;8773:1;8766:31;8820:4;8817:1;8810:15;8848:4;8845:1;8838:15;8720:143;8872:18;;8652:244::o;8901:678::-;9235:25;;;9291:2;9276:18;;9269:34;;;9334:2;9319:18;;9312:34;;;9222:3;9207:19;;9355:60;9411:2;9396:18;;9388:6;9355:60;:::i;:::-;-1:-1:-1;;;;;9452:32:1;;;;9446:3;9431:19;;9424:61;9472:3;9501:19;;9494:35;;;;9560:3;9545:19;;;9538:35;8901:678;;-1:-1:-1;;;;8901:678:1:o;9584:2114::-;9782:4;9811:2;9851;9840:9;9836:18;9881:2;9870:9;9863:21;9904:6;9939;9933:13;9970:6;9962;9955:22;9996:2;9986:12;;10029:2;10018:9;10014:18;10007:25;;10091:2;10081:6;10078:1;10074:14;10063:9;10059:30;10055:39;10129:2;10121:6;10117:15;10150:1;10171;10181:1488;10197:6;10192:3;10189:15;10181:1488;;;10294:2;10290:7;10278:9;10270:6;10266:22;10262:36;10257:3;10250:49;10328:6;10322:13;10358:6;10403:2;10395:6;10391:15;10440:2;10434:9;10426:6;10419:25;10495:2;10491;10487:11;10481:18;10476:2;10468:6;10464:15;10457:43;10551:2;10547;10543:11;10537:18;10532:2;10524:6;10520:15;10513:43;10579:4;10630:2;10626;10622:11;10616:18;10647:63;10706:2;10698:6;10694:15;10680:12;10647:63;:::i;:::-;-1:-1:-1;;10733:4:1;10784:11;;;10778:18;-1:-1:-1;;;;;10774:44:1;10757:15;;;10750:69;10806:3;10889:11;;;10883:18;10866:15;;;10859:43;10925:4;10972:11;;;10966:18;10949:15;;;10942:43;11008:4;11053:11;;;11047:18;11085:15;;;11078:27;;;;11166:21;;11200:24;;;;11291:23;;;;11258:3;11246:16;;;11338:1;;11352:209;11368:8;11363:3;11360:17;11352:209;;;11445:15;;11431:30;;11530:17;;;;11487:14;;;;11396:1;11387:11;;;;;11352:209;;;-1:-1:-1;;11647:12:1;;;;11584:5;-1:-1:-1;;11612:15:1;;;;10223:1;10214:11;10181:1488;;;-1:-1:-1;11686:6:1;;9584:2114;-1:-1:-1;;;;;;;;;9584:2114:1:o;11703:315::-;11771:6;11779;11832:2;11820:9;11811:7;11807:23;11803:32;11800:52;;;11848:1;11845;11838:12;11800:52;11887:9;11874:23;11906:31;11931:5;11906:31;:::i;:::-;11956:5;12008:2;11993:18;;;;11980:32;;-1:-1:-1;;;11703:315:1:o;12023:788::-;12244:2;12296:21;;;12366:13;;12269:18;;;12388:22;;;12215:4;;12244:2;12429;;12447:18;;;;12488:15;;;12215:4;12531:254;12545:6;12542:1;12539:13;12531:254;;;12604:13;;12642:9;;12630:22;;12692:11;;12686:18;12672:12;;;12665:40;12725:12;;;;12760:15;;;;12567:1;12560:9;12531:254;;12816:241;12872:6;12925:2;12913:9;12904:7;12900:23;12896:32;12893:52;;;12941:1;12938;12931:12;12893:52;12980:9;12967:23;12999:28;13021:5;12999:28;:::i;13062:334::-;13264:2;13246:21;;;13303:2;13283:18;;;13276:30;-1:-1:-1;;;13337:2:1;13322:18;;13315:40;13387:2;13372:18;;13062:334::o;13401:345::-;13603:2;13585:21;;;13642:2;13622:18;;;13615:30;-1:-1:-1;;;13676:2:1;13661:18;;13654:51;13737:2;13722:18;;13401:345::o;13751:184::-;13821:6;13874:2;13862:9;13853:7;13849:23;13845:32;13842:52;;;13890:1;13887;13880:12;13842:52;-1:-1:-1;13913:16:1;;13751:184;-1:-1:-1;13751:184:1:o;14991:127::-;15052:10;15047:3;15043:20;15040:1;15033:31;15083:4;15080:1;15073:15;15107:4;15104:1;15097:15;15123:168;15196:9;;;15227;;15244:15;;;15238:22;;15224:37;15214:71;;15265:18;;:::i;15647:127::-;15708:10;15703:3;15699:20;15696:1;15689:31;15739:4;15736:1;15729:15;15763:4;15760:1;15753:15;15779:135;15818:3;15839:17;;;15836:43;;15859:18;;:::i;:::-;-1:-1:-1;15906:1:1;15895:13;;15779:135::o;17546:245::-;17613:6;17666:2;17654:9;17645:7;17641:23;17637:32;17634:52;;;17682:1;17679;17672:12;17634:52;17714:9;17708:16;17733:28;17755:5;17733:28;:::i;18151:128::-;18218:9;;;18239:11;;;18236:37;;;18253:18;;:::i;18284:136::-;18323:3;18351:5;18341:39;;18360:18;;:::i;:::-;-1:-1:-1;;;18396:18:1;;18284:136::o;18784:251::-;18854:6;18907:2;18895:9;18886:7;18882:23;18878:32;18875:52;;;18923:1;18920;18913:12;18875:52;18955:9;18949:16;18974:31;18999:5;18974:31;:::i;19040:729::-;19210:4;19258:2;19247:9;19243:18;19288:6;19277:9;19270:25;19314:2;19352;19347;19336:9;19332:18;19325:30;19375:6;19410;19404:13;19441:6;19433;19426:22;19479:2;19468:9;19464:18;19457:25;;19517:2;19509:6;19505:15;19491:29;;19538:1;19548:195;19562:6;19559:1;19556:13;19548:195;;;19627:13;;-1:-1:-1;;;;;19623:39:1;19611:52;;19718:15;;;;19683:12;;;;19659:1;19577:9;19548:195;;;-1:-1:-1;19760:3:1;;19040:729;-1:-1:-1;;;;;;;19040:729:1:o;19774:881::-;19869:6;19900:2;19943;19931:9;19922:7;19918:23;19914:32;19911:52;;;19959:1;19956;19949:12;19911:52;19992:9;19986:16;20025:18;20017:6;20014:30;20011:50;;;20057:1;20054;20047:12;20011:50;20080:22;;20133:4;20125:13;;20121:27;-1:-1:-1;20111:55:1;;20162:1;20159;20152:12;20111:55;20191:2;20185:9;20214:60;20230:43;20270:2;20230:43;:::i;20214:60::-;20308:15;;;20390:1;20386:10;;;;20378:19;;20374:28;;;20339:12;;;;20414:19;;;20411:39;;;20446:1;20443;20436:12;20411:39;20470:11;;;;20490:135;20506:6;20501:3;20498:15;20490:135;;;20572:10;;20560:23;;20523:12;;;;20603;;;;20490:135;;;20644:5;19774:881;-1:-1:-1;;;;;;;19774:881:1:o;22844:217::-;22884:1;22910;22900:132;;22954:10;22949:3;22945:20;22942:1;22935:31;22989:4;22986:1;22979:15;23017:4;23014:1;23007:15;22900:132;-1:-1:-1;23046:9:1;;22844:217::o;23066:125::-;23131:9;;;23152:10;;;23149:36;;;23165:18;;:::i
Swarm Source
ipfs://ad056c03cfab77e66ed5290018f8073985d001d2c36af86ff56fa62a5e621985
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.