More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NewWinpad
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-01-30 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC 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 v5.1.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; /** * @dev Required interface of an ERC-721 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 ERC-721 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 ERC-721 * 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 address zero. * * 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/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: contracts/NewWinpad.sol pragma solidity ^0.8.0; contract NewWinpad is Ownable, ReentrancyGuard { using SafeMath for uint256; //@dev defining entries struct Entry { uint256 idx; uint256 baseEntry; uint256 bonusEntry; } struct Match { uint256 id; uint256 endDate; bool paused; bool isEnded; uint256 currentEntries; uint256 totalEntries; address rewardToken; // ERC20 token address or NFT contract address bool isERC20; // True if reward is ERC20, false if NFT uint256 rewardAmount; // Amount of ERC20 tokens or NFT ID mapping(address => uint256) participantEntries; // Total entries per participant uint256 collectedFunds; address[] participants; // To track participant addresses } uint8 public entriesLength; // Track the total number of entries mapping(uint8 => Entry) public entries; Match[] public matches; mapping(address => bool) public callers; mapping(address => uint256) public refunds; uint8 constant FEE_PERCENT = 8; uint8 constant TREASURY_PERCENT = 72; uint8 constant OPERATIONS_PERCENT = 20; address payable public FEE_PERCENT_ACCOUNT; address payable public TREASURY_PERCENT_ACCOUNT; address payable public OPERATIONS_PERCENT_ACCOUNT; // Function to set the accounts (admin-only) function setSplitAccounts( address payable feeAccount, address payable treasuryAccount, address payable operationsAccount ) external onlyOwner { require(feeAccount != address(0), "Fee account is zero address"); require( treasuryAccount != address(0), "Treasury account is zero address" ); require( operationsAccount != address(0), "Operations account is zero address" ); FEE_PERCENT_ACCOUNT = feeAccount; TREASURY_PERCENT_ACCOUNT = treasuryAccount; OPERATIONS_PERCENT_ACCOUNT = operationsAccount; } // Private function to split and distribute collected funds function _split(uint256 totalAmount) private { require(totalAmount > 0, "Total amount must be greater than zero"); uint256 feeAmount = (totalAmount * FEE_PERCENT) / 100; uint256 treasuryAmount = (totalAmount * TREASURY_PERCENT) / 100; uint256 operationsAmount = (totalAmount * OPERATIONS_PERCENT) / 100; require( feeAmount + treasuryAmount + operationsAmount == totalAmount, "Percentage split mismatch" ); // Transfer funds to the respective accounts if (feeAmount > 0) { FEE_PERCENT_ACCOUNT.transfer(feeAmount); } if (treasuryAmount > 0) { TREASURY_PERCENT_ACCOUNT.transfer(treasuryAmount); } if (operationsAmount > 0) { OPERATIONS_PERCENT_ACCOUNT.transfer(operationsAmount); } emit FundsSplit( totalAmount, feeAmount, treasuryAmount, operationsAmount ); } event MatchCreated( uint256 matchId, uint256 endDate, address rewardToken, bool isERC20, uint256 rewardAmount ); event MatchPaused(uint256 matchId); event MatchUnpaused(uint256 matchId); event MatchCancelled(uint256 matchId); event ParticipantJoined( uint256 matchId, address participant, uint256 obtainedEntries ); event WinnerPicked(uint256 matchId, address winner, uint256 seed); event FundsSplit( uint256 totalAmount, uint256 feeAmount, uint256 treasuryAmount, uint256 operationsAmount ); constructor(address _initialOwner) Ownable(_initialOwner) {} function createMatch( uint256 endDate, address rewardToken, bool isERC20, uint256 rewardAmount, uint256 totalEntries ) external onlyOwner { require(endDate > block.timestamp, "End date must be in the future"); Match storage newMatch = matches.push(); newMatch.id = matches.length - 1; newMatch.endDate = endDate; newMatch.rewardToken = rewardToken; newMatch.isERC20 = isERC20; newMatch.rewardAmount = rewardAmount; newMatch.totalEntries = totalEntries; emit MatchCreated( newMatch.id, endDate, rewardToken, isERC20, rewardAmount ); } function enroll(uint256 matchId, uint8 entryId) external payable matchExists(matchId) entryExists(entryId) notPaused(matchId) nonReentrant { Match storage currentMatch = matches[matchId]; require( block.timestamp < currentMatch.endDate || !currentMatch.isEnded, "Match has ended." ); Entry storage selectedEntry = entries[entryId]; // Calculate the total entry amount for this enrollment uint256 totalEntryAmount = selectedEntry.baseEntry + selectedEntry.bonusEntry; // Ensure the user's total entries don't exceed the match's total entries require( currentMatch.currentEntries + totalEntryAmount <= currentMatch.totalEntries, "Entry limit exceeded for this match." ); require(msg.value == selectedEntry.baseEntry, "Incorrect payment."); if (currentMatch.participantEntries[msg.sender] == 0) { currentMatch.participants.push(msg.sender); } currentMatch.participantEntries[msg.sender] += totalEntryAmount; currentMatch.currentEntries += totalEntryAmount; currentMatch.collectedFunds += selectedEntry.baseEntry; emit ParticipantJoined(matchId, msg.sender, totalEntryAmount); } function pickWinner(uint256 matchId) external onlyCaller matchExists(matchId) notPaused(matchId) nonReentrant { Match storage currentMatch = matches[matchId]; require( currentMatch.participants.length > 0, "No participants in the match" ); uint256 totalWeightedEntries = 0; for (uint256 i = 0; i < currentMatch.participants.length; i++) { totalWeightedEntries += currentMatch.participantEntries[ currentMatch.participants[i] ]; } require(totalWeightedEntries > 0, "No valid entries"); uint256 randomSeed = uint256( keccak256( abi.encodePacked(block.timestamp, block.difficulty, msg.sender) ) ); uint256 winningEntry = randomSeed % totalWeightedEntries; uint256 cumulativeEntries = 0; address winner; for (uint256 i = 0; i < currentMatch.participants.length; i++) { address participant = currentMatch.participants[i]; cumulativeEntries += currentMatch.participantEntries[participant]; if (winningEntry < cumulativeEntries) { winner = participant; break; } } require(winner != address(0), "Winner not determined"); if (currentMatch.isERC20) { require( IERC20(currentMatch.rewardToken).transfer( winner, currentMatch.rewardAmount ), "ERC20 transfer failed" ); } else { IERC721(currentMatch.rewardToken).safeTransferFrom( address(this), winner, currentMatch.rewardAmount ); } uint256 collectedAmount = currentMatch.collectedFunds; //splitting collected amount to accounts; _split(collectedAmount); currentMatch.isEnded = true; emit WinnerPicked(matchId, winner, randomSeed); } function cancelMatch(uint256 matchId) external onlyCaller matchExists(matchId) nonReentrant { Match storage currentMatch = matches[matchId]; // Process refunds only if there are participants if (currentMatch.participants.length > 0) { for (uint256 i = 0; i < currentMatch.participants.length; i++) { address participant = currentMatch.participants[i]; refunds[participant] += currentMatch.participantEntries[ participant ]; } } // Mark the match as ended regardless of participants currentMatch.isEnded = true; emit MatchCancelled(matchId); } function withdrawRefund() external nonReentrant { uint256 amount = refunds[msg.sender]; require(amount > 0, "No refund available"); refunds[msg.sender] = 0; (bool sent, ) = msg.sender.call{value: amount}(""); require(sent, "Refund failed."); } function getCurrentMatches() external view returns (uint256[] memory) { uint256 count = 0; // First, count how many matches are ongoing for (uint256 i = 0; i < matches.length; i++) { if (!matches[i].isEnded) { count++; } } // Initialize the result array with the exact count of ongoing matches uint256[] memory ongoingMatches = new uint256[](count); uint256 index = 0; // Populate the result array with ongoing match IDs for (uint256 i = 0; i < matches.length; i++) { if (!matches[i].isEnded) { ongoingMatches[index] = matches[i].id; index++; } } return ongoingMatches; } function getReadyToPickMatches() external view returns (uint256[] memory) { uint256[] memory readyMatches = new uint256[](matches.length); uint256 count = 0; for (uint256 i = 0; i < matches.length; i++) { Match storage currentMatch = matches[i]; if ( block.timestamp >= currentMatch.endDate && !currentMatch.paused && !currentMatch.isEnded && currentMatch.participants.length > 0 ) { readyMatches[count] = currentMatch.id; count++; } } uint256[] memory result = new uint256[](count); for (uint256 i = 0; i < count; i++) { result[i] = readyMatches[i]; } return result; } /** * @dev Returns all participants and their entries for a given match. * @param matchId The ID of the match to fetch entries for. * @return participants Array of participant addresses. * @return _entries Array of entry amounts corresponding to each participant. */ function getAllEntries(uint256 matchId) external view matchExists(matchId) returns (address[] memory participants, uint256[] memory _entries) { Match storage currentMatch = matches[matchId]; uint256 participantCount = currentMatch.participants.length; participants = new address[](participantCount); _entries = new uint256[](participantCount); for (uint256 i = 0; i < participantCount; i++) { address participant = currentMatch.participants[i]; participants[i] = participant; _entries[i] = currentMatch.participantEntries[participant]; } return (participants, _entries); } function getEntryData(uint8 entryId) external view returns (uint256 baseEntry, uint256 bonusEntry) { require( entries[entryId].baseEntry > 0 || entries[entryId].bonusEntry > 0, "Entry does not exist" ); return (entries[entryId].baseEntry, entries[entryId].bonusEntry); } function addEntry(uint256 baseEntry, uint256 bonusEntry) external onlyOwner { entries[entriesLength] = Entry({ idx: entriesLength, baseEntry: baseEntry, bonusEntry: bonusEntry }); entriesLength++; // Increment the counter } function getEntries() external view returns (Entry[] memory data) { data = new Entry[](entriesLength); for (uint8 i = 0; i < entriesLength; i++) { data[i] = entries[i]; } return data; } function setEntries( uint256[] calldata baseEntries, uint256[] calldata bonusEntries ) public onlyOwner { require( baseEntries.length == bonusEntries.length, "Invalid entry input lengths" ); for (uint8 i = 0; i < baseEntries.length; i++) { entries[i] = Entry(i, baseEntries[i], bonusEntries[i]); } entriesLength = uint8(baseEntries.length); } modifier entryExists(uint8 entryId) { require( entries[entryId].baseEntry != 0 || entries[entryId].bonusEntry != 0, "Entry does not exist." ); _; } modifier matchExists(uint256 matchId) { require(matchId < matches.length, "Match does not exist."); _; } modifier notPaused(uint256 matchId) { require(!matches[matchId].paused, "Match is paused."); _; } modifier onlyCaller() { require(owner() == msg.sender || callers[msg.sender], "Not Caller."); _; } function pauseMatch(uint256 matchId) external onlyCaller { matches[matchId].paused = true; emit MatchPaused(matchId); } function unpauseMatch(uint256 matchId) external onlyCaller { matches[matchId].paused = false; emit MatchUnpaused(matchId); } function addCallers(address[] memory executors) public onlyOwner { for (uint256 i = 0; i < executors.length; i++) { callers[executors[i]] = true; } } function removeCallers(address[] memory executors) public onlyOwner { for (uint256 i = 0; i < executors.length; i++) { callers[executors[i]] = false; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"operationsAmount","type":"uint256"}],"name":"FundsSplit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"MatchCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"bool","name":"isERC20","type":"bool"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"MatchCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"MatchPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"MatchUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"},{"indexed":false,"internalType":"address","name":"participant","type":"address"},{"indexed":false,"internalType":"uint256","name":"obtainedEntries","type":"uint256"}],"name":"ParticipantJoined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"matchId","type":"uint256"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"seed","type":"uint256"}],"name":"WinnerPicked","type":"event"},{"inputs":[],"name":"FEE_PERCENT_ACCOUNT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATIONS_PERCENT_ACCOUNT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_PERCENT_ACCOUNT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"executors","type":"address[]"}],"name":"addCallers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"name":"addEntry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"callers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"cancelMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"bool","name":"isERC20","type":"bool"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"}],"name":"createMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"},{"internalType":"uint8","name":"entryId","type":"uint8"}],"name":"enroll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"entries","outputs":[{"internalType":"uint256","name":"idx","type":"uint256"},{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entriesLength","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"getAllEntries","outputs":[{"internalType":"address[]","name":"participants","type":"address[]"},{"internalType":"uint256[]","name":"_entries","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMatches","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEntries","outputs":[{"components":[{"internalType":"uint256","name":"idx","type":"uint256"},{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"internalType":"struct NewWinpad.Entry[]","name":"data","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"entryId","type":"uint8"}],"name":"getEntryData","outputs":[{"internalType":"uint256","name":"baseEntry","type":"uint256"},{"internalType":"uint256","name":"bonusEntry","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReadyToPickMatches","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"matches","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bool","name":"isEnded","type":"bool"},{"internalType":"uint256","name":"currentEntries","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"bool","name":"isERC20","type":"bool"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"collectedFunds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"pauseMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"pickWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"refunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"executors","type":"address[]"}],"name":"removeCallers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"baseEntries","type":"uint256[]"},{"internalType":"uint256[]","name":"bonusEntries","type":"uint256[]"}],"name":"setEntries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"feeAccount","type":"address"},{"internalType":"address payable","name":"treasuryAccount","type":"address"},{"internalType":"address payable","name":"operationsAccount","type":"address"}],"name":"setSplitAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"name":"unpauseMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRefund","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b50604051614580380380614580833981810160405281019061003191906101de565b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100999190610218565b60405180910390fd5b6100b1816100bf60201b60201c565b506001808190555050610231565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101ad82610184565b9050919050565b6101bd816101a3565b81146101c7575f80fd5b50565b5f815190506101d8816101b4565b92915050565b5f602082840312156101f3576101f2610180565b5b5f610200848285016101ca565b91505092915050565b610212816101a3565b82525050565b5f60208201905061022b5f830184610209565b92915050565b6143428061023e5f395ff3fe6080604052600436106101b6575f3560e01c80638da5cb5b116100eb578063e53805c711610089578063f737d21d11610063578063f737d21d146105db578063f7dc078b14610603578063fbe9e7511461062d578063fd23efef14610655576101b6565b8063e53805c714610561578063ee9b29401461058b578063f2fde38b146105b3576101b6565b8063bc3da535116100c5578063bc3da53514610495578063bc3e2284146104d1578063d02c8cdf1461050f578063d2c4d41414610537576101b6565b80638da5cb5b1461041b57806390bd67e514610445578063b92d70b81461046d576101b6565b80634768d4ef11610158578063768b5c6711610132578063768b5c67146103655780637bbf4a3f1461038d57806382d97110146103c957806384267959146103f1576101b6565b80634768d4ef146102e25780635e42f10e14610327578063715018a61461034f576101b6565b806325a3d4361161019457806325a3d4361461022257806329dc91c31461025f578063330ab39a1461028957806333a35448146102a5576101b6565b8063049ac59b146101ba578063110f8874146101e257806317be85c3146101f8575b5f80fd5b3480156101c5575f80fd5b506101e060048036038101906101db9190612b9c565b61067f565b005b3480156101ed575f80fd5b506101f66107b9565b005b348015610203575f80fd5b5061020c61093a565b6040516102199190612cbe565b60405180910390f35b34801561022d575f80fd5b5061024860048036038101906102439190612b9c565b610a32565b604051610256929190612e6d565b60405180910390f35b34801561026a575f80fd5b50610273610c50565b6040516102809190612ea2565b60405180910390f35b6102a3600480360381019061029e9190612ef8565b610e12565b005b3480156102b0575f80fd5b506102cb60048036038101906102c69190612f36565b611229565b6040516102d9929190612f70565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612b9c565b6112ea565b60405161031e9a99989796959493929190612fc0565b60405180910390f35b348015610332575f80fd5b5061034d600480360381019061034891906131d4565b61138e565b005b34801561035a575f80fd5b50610363611420565b005b348015610370575f80fd5b5061038b60048036038101906103869190612b9c565b611433565b005b348015610398575f80fd5b506103b360048036038101906103ae919061321b565b61156e565b6040516103c09190613246565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea91906132b8565b61158b565b005b3480156103fc575f80fd5b506104056116ae565b6040516104129190613356565b60405180910390f35b348015610426575f80fd5b5061042f6116d3565b60405161043c919061336f565b60405180910390f35b348015610450575f80fd5b5061046b600480360381019061046691906133b2565b6116fa565b005b348015610478575f80fd5b50610493600480360381019061048e919061342c565b611911565b005b3480156104a0575f80fd5b506104bb60048036038101906104b6919061321b565b611a58565b6040516104c891906134a3565b60405180910390f35b3480156104dc575f80fd5b506104f760048036038101906104f29190612f36565b611a6d565b604051610506939291906134bc565b60405180910390f35b34801561051a575f80fd5b5061053560048036038101906105309190612b9c565b611a93565b005b348015610542575f80fd5b5061054b611d30565b6040516105589190613356565b60405180910390f35b34801561056c575f80fd5b50610575611d55565b6040516105829190612ea2565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac91906134f1565b611eb2565b005b3480156105be575f80fd5b506105d960048036038101906105d4919061321b565b611f65565b005b3480156105e6575f80fd5b5061060160048036038101906105fc9190612b9c565b611fe9565b005b34801561060e575f80fd5b50610617612645565b6040516106249190613356565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e91906131d4565b61266a565b005b348015610660575f80fd5b506106696126fd565b604051610676919061353e565b60405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1661069e6116d3565b73ffffffffffffffffffffffffffffffffffffffff161480610706575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c906135b1565b60405180910390fd5b5f6004828154811061075a576107596135cf565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507fbd2800ce670bc629d6709a5facc3b0e4748e1b212b7e420b1ed292778a4c5046816040516107ae91906134a3565b60405180910390a150565b6107c161270f565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b90613646565b60405180910390fd5b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f3373ffffffffffffffffffffffffffffffffffffffff16826040516108ab90613691565b5f6040518083038185875af1925050503d805f81146108e5576040519150601f19603f3d011682016040523d82523d5f602084013e6108ea565b606091505b505090508061092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906136ef565b60405180910390fd5b505061093861275e565b565b606060025f9054906101000a900460ff1660ff1667ffffffffffffffff8111156109675761096661306e565b5b6040519080825280602002602001820160405280156109a057816020015b61098d612b3a565b8152602001906001900390816109855790505b5090505f5b60025f9054906101000a900460ff1660ff168160ff161015610a2e5760035f8260ff1660ff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050828260ff1681518110610a1657610a156135cf565b5b602002602001018190525080806001019150506109a5565b5090565b606080826004805490508110610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490613757565b60405180910390fd5b5f60048581548110610a9257610a916135cf565b5b905f5260205f2090600a020190505f816009018054905090508067ffffffffffffffff811115610ac557610ac461306e565b5b604051908082528060200260200182016040528015610af35781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115610b1057610b0f61306e565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b5093505f5b81811015610c47575f836009018281548110610b6257610b616135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080878381518110610ba057610b9f6135cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054868381518110610c2d57610c2c6135cf565b5b602002602001018181525050508080600101915050610b43565b50505050915091565b60605f60048054905067ffffffffffffffff811115610c7257610c7161306e565b5b604051908082528060200260200182016040528015610ca05781602001602082028036833780820191505090505b5090505f805b600480549050811015610d6a575f60048281548110610cc857610cc76135cf565b5b905f5260205f2090600a0201905080600101544210158015610cf85750806002015f9054906101000a900460ff16155b8015610d1357508060020160019054906101000a900460ff16155b8015610d2557505f8160090180549050115b15610d5c57805f0154848481518110610d4157610d406135cf565b5b6020026020010181815250508280610d58906137a2565b9350505b508080600101915050610ca6565b505f8167ffffffffffffffff811115610d8657610d8561306e565b5b604051908082528060200260200182016040528015610db45781602001602082028036833780820191505090505b5090505f5b82811015610e0857838181518110610dd457610dd36135cf565b5b6020026020010151828281518110610def57610dee6135cf565b5b6020026020010181815250508080600101915050610db9565b5080935050505090565b816004805490508110610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613757565b60405180910390fd5b815f60035f8360ff1660ff1681526020019081526020015f2060010154141580610e9e57505f60035f8360ff1660ff1681526020019081526020015f206002015414155b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490613833565b60405180910390fd5b8360048181548110610ef257610ef16135cf565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f459061389b565b60405180910390fd5b610f5661270f565b5f60048681548110610f6b57610f6a6135cf565b5b905f5260205f2090600a020190508060010154421080610f9a57508060020160019054906101000a900460ff16155b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613903565b60405180910390fd5b5f60035f8760ff1660ff1681526020019081526020015f2090505f816002015482600101546110089190613921565b9050826004015481846003015461101f9190613921565b1115611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906139c4565b60405180910390fd5b816001015434146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613a2c565b60405180910390fd5b5f836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361114f578260090133908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461119d9190613921565b9250508190555080836003015f8282546111b79190613921565b925050819055508160010154836008015f8282546111d59190613921565b925050819055507f338e0cd33c4e120afcd73f43f082fd8940ed67ac35180d278d2eb4f3ed51d92e88338360405161120f93929190613a4a565b60405180910390a150505061122261275e565b5050505050565b5f805f60035f8560ff1660ff1681526020019081526020015f2060010154118061126c57505f60035f8560ff1660ff1681526020019081526020015f2060020154115b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613ac9565b60405180910390fd5b60035f8460ff1660ff1681526020019081526020015f206001015460035f8560ff1660ff1681526020019081526020015f206002015491509150915091565b600481815481106112f9575f80fd5b905f5260205f2090600a02015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490806008015490508a565b611396612767565b5f5b815181101561141c575f60055f8484815181106113b8576113b76135cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611398565b5050565b611428612767565b6114315f6127ee565b565b3373ffffffffffffffffffffffffffffffffffffffff166114526116d3565b73ffffffffffffffffffffffffffffffffffffffff1614806114ba575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906135b1565b60405180910390fd5b60016004828154811061150f5761150e6135cf565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507f9f6b838e8160012b261280722f7d000f9a616b49bae77628ab03db3142190c688160405161156391906134a3565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b611593612767565b8181905084849050146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613b31565b60405180910390fd5b5f5b848490508160ff16101561168a5760405180606001604052808260ff16815260200186868460ff16818110611615576116146135cf565b5b90506020020135815260200184848460ff16818110611637576116366135cf565b5b9050602002013581525060035f8360ff1660ff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050808061168290613b4f565b9150506115dd565b508383905060025f6101000a81548160ff021916908360ff16021790555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611702612767565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790613bc1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613c29565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613cb7565b60405180910390fd5b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611919612767565b42851161195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613d1f565b60405180910390fd5b5f600460018160018154018082558091505003905f5260205f2090600a02019050600160048054905061198e9190613d3d565b815f018190555085816001018190555084816005015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160050160146101000a81548160ff0219169083151502179055508281600601819055508181600401819055507f712a06043bdc55fb71b57e8747caf273ae1c60da08943aa231909b47f5532ed3815f015487878787604051611a48959493929190613d70565b60405180910390a1505050505050565b6006602052805f5260405f205f915090505481565b6003602052805f5260405f205f91509050805f0154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff16611ab26116d3565b73ffffffffffffffffffffffffffffffffffffffff161480611b1a575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906135b1565b60405180910390fd5b806004805490508110611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890613757565b60405180910390fd5b611ba961270f565b5f60048381548110611bbe57611bbd6135cf565b5b905f5260205f2090600a020190505f81600901805490501115611ccf575f5b8160090180549050811015611ccd575f826009018281548110611c0357611c026135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050826007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb89190613921565b92505081905550508080600101915050611bdd565b505b60018160020160016101000a81548160ff0219169083151502179055507f700135b4fe8746e2d2c85a9baa43c62887740aebfeb3a439f71a083fe5d5675983604051611d1b91906134a3565b60405180910390a150611d2c61275e565b5050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f805b600480549050811015611db85760048181548110611d7b57611d7a6135cf565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611dab578180611da7906137a2565b9250505b8080600101915050611d5a565b505f8167ffffffffffffffff811115611dd457611dd361306e565b5b604051908082528060200260200182016040528015611e025781602001602082028036833780820191505090505b5090505f805b600480549050811015611ea85760048181548110611e2957611e286135cf565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611e9b5760048181548110611e5e57611e5d6135cf565b5b905f5260205f2090600a02015f0154838381518110611e8057611e7f6135cf565b5b6020026020010181815250508180611e97906137a2565b9250505b8080600101915050611e08565b5081935050505090565b611eba612767565b604051806060016040528060025f9054906101000a900460ff1660ff1681526020018381526020018281525060035f60025f9054906101000a900460ff1660ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505060025f81819054906101000a900460ff1680929190611f4890613b4f565b91906101000a81548160ff021916908360ff160217905550505050565b611f6d612767565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd4919061336f565b60405180910390fd5b611fe6816127ee565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120086116d3565b73ffffffffffffffffffffffffffffffffffffffff161480612070575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906135b1565b60405180910390fd5b8060048054905081106120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90613757565b60405180910390fd5b816004818154811061210c5761210b6135cf565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f9061389b565b60405180910390fd5b61217061270f565b5f60048481548110612185576121846135cf565b5b905f5260205f2090600a020190505f8160090180549050116121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390613e0b565b60405180910390fd5b5f805b826009018054905081101561228557826007015f846009018381548110612209576122086135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826122769190613921565b915080806001019150506121df565b505f81116122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613e73565b60405180910390fd5b5f4244336040516020016122de93929190613ef6565b604051602081830303815290604052805190602001205f1c90505f82826123059190613f5f565b90505f80805f90505b86600901805490508110156123ca575f876009018281548110612334576123336135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050876007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054846123a99190613921565b9350838510156123bc57809250506123ca565b50808060010191505061230e565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090613fd9565b60405180910390fd5b8560050160149054906101000a900460ff161561253657856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8288600601546040518363ffffffff1660e01b81526004016124b2929190613ff7565b6020604051808303815f875af11580156124ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f29190614032565b612531576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612528906140a7565b60405180910390fd5b6125c8565b856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308389600601546040518463ffffffff1660e01b815260040161259a939291906140c5565b5f604051808303815f87803b1580156125b1575f80fd5b505af11580156125c3573d5f803e3d5ffd5b505050505b5f866008015490506125d9816128af565b60018760020160016101000a81548160ff0219169083151502179055507fad586bf2cfefa63512aa5a1106545ee05dc5376edec8841ef54a636f4a036a2d8a838760405161262993929190613a4a565b60405180910390a15050505050505061264061275e565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612672612767565b5f5b81518110156126f957600160055f848481518110612695576126946135cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050612674565b5050565b60025f9054906101000a900460ff1681565b600260015403612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614144565b60405180910390fd5b6002600181905550565b60018081905550565b61276f612b33565b73ffffffffffffffffffffffffffffffffffffffff1661278d6116d3565b73ffffffffffffffffffffffffffffffffffffffff16146127ec576127b0612b33565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016127e3919061336f565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81116128f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e8906141d2565b60405180910390fd5b5f6064600860ff168361290491906141f0565b61290e9190614231565b90505f6064604860ff168461292391906141f0565b61292d9190614231565b90505f6064601460ff168561294291906141f0565b61294c9190614231565b90508381838561295c9190613921565b6129669190613921565b146129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d906142ab565b60405180910390fd5b5f831115612a145760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612a12573d5f803e3d5ffd5b505b5f821115612a825760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612a80573d5f803e3d5ffd5b505b5f811115612af05760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612aee573d5f803e3d5ffd5b505b7f6e24439017528dcb48087e74e9920b967cd425bab648f784c8b92fc6e652d40b84848484604051612b2594939291906142c9565b60405180910390a150505050565b5f33905090565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612b7b81612b69565b8114612b85575f80fd5b50565b5f81359050612b9681612b72565b92915050565b5f60208284031215612bb157612bb0612b61565b5b5f612bbe84828501612b88565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612bf981612b69565b82525050565b606082015f820151612c135f850182612bf0565b506020820151612c266020850182612bf0565b506040820151612c396040850182612bf0565b50505050565b5f612c4a8383612bff565b60608301905092915050565b5f602082019050919050565b5f612c6c82612bc7565b612c768185612bd1565b9350612c8183612be1565b805f5b83811015612cb1578151612c988882612c3f565b9750612ca383612c56565b925050600181019050612c84565b5085935050505092915050565b5f6020820190508181035f830152612cd68184612c62565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d3082612d07565b9050919050565b612d4081612d26565b82525050565b5f612d518383612d37565b60208301905092915050565b5f602082019050919050565b5f612d7382612cde565b612d7d8185612ce8565b9350612d8883612cf8565b805f5b83811015612db8578151612d9f8882612d46565b9750612daa83612d5d565b925050600181019050612d8b565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612df98383612bf0565b60208301905092915050565b5f602082019050919050565b5f612e1b82612dc5565b612e258185612dcf565b9350612e3083612ddf565b805f5b83811015612e60578151612e478882612dee565b9750612e5283612e05565b925050600181019050612e33565b5085935050505092915050565b5f6040820190508181035f830152612e858185612d69565b90508181036020830152612e998184612e11565b90509392505050565b5f6020820190508181035f830152612eba8184612e11565b905092915050565b5f60ff82169050919050565b612ed781612ec2565b8114612ee1575f80fd5b50565b5f81359050612ef281612ece565b92915050565b5f8060408385031215612f0e57612f0d612b61565b5b5f612f1b85828601612b88565b9250506020612f2c85828601612ee4565b9150509250929050565b5f60208284031215612f4b57612f4a612b61565b5b5f612f5884828501612ee4565b91505092915050565b612f6a81612b69565b82525050565b5f604082019050612f835f830185612f61565b612f906020830184612f61565b9392505050565b5f8115159050919050565b612fab81612f97565b82525050565b612fba81612d26565b82525050565b5f61014082019050612fd45f83018d612f61565b612fe1602083018c612f61565b612fee604083018b612fa2565b612ffb606083018a612fa2565b6130086080830189612f61565b61301560a0830188612f61565b61302260c0830187612fb1565b61302f60e0830186612fa2565b61303d610100830185612f61565b61304b610120830184612f61565b9b9a5050505050505050505050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130a48261305e565b810181811067ffffffffffffffff821117156130c3576130c261306e565b5b80604052505050565b5f6130d5612b58565b90506130e1828261309b565b919050565b5f67ffffffffffffffff821115613100576130ff61306e565b5b602082029050602081019050919050565b5f80fd5b61311e81612d26565b8114613128575f80fd5b50565b5f8135905061313981613115565b92915050565b5f61315161314c846130e6565b6130cc565b9050808382526020820190506020840283018581111561317457613173613111565b5b835b8181101561319d5780613189888261312b565b845260208401935050602081019050613176565b5050509392505050565b5f82601f8301126131bb576131ba61305a565b5b81356131cb84826020860161313f565b91505092915050565b5f602082840312156131e9576131e8612b61565b5b5f82013567ffffffffffffffff81111561320657613205612b65565b5b613212848285016131a7565b91505092915050565b5f602082840312156132305761322f612b61565b5b5f61323d8482850161312b565b91505092915050565b5f6020820190506132595f830184612fa2565b92915050565b5f80fd5b5f8083601f8401126132785761327761305a565b5b8235905067ffffffffffffffff8111156132955761329461325f565b5b6020830191508360208202830111156132b1576132b0613111565b5b9250929050565b5f805f80604085870312156132d0576132cf612b61565b5b5f85013567ffffffffffffffff8111156132ed576132ec612b65565b5b6132f987828801613263565b9450945050602085013567ffffffffffffffff81111561331c5761331b612b65565b5b61332887828801613263565b925092505092959194509250565b5f61334082612d07565b9050919050565b61335081613336565b82525050565b5f6020820190506133695f830184613347565b92915050565b5f6020820190506133825f830184612fb1565b92915050565b61339181613336565b811461339b575f80fd5b50565b5f813590506133ac81613388565b92915050565b5f805f606084860312156133c9576133c8612b61565b5b5f6133d68682870161339e565b93505060206133e78682870161339e565b92505060406133f88682870161339e565b9150509250925092565b61340b81612f97565b8114613415575f80fd5b50565b5f8135905061342681613402565b92915050565b5f805f805f60a0868803121561344557613444612b61565b5b5f61345288828901612b88565b95505060206134638882890161312b565b945050604061347488828901613418565b935050606061348588828901612b88565b925050608061349688828901612b88565b9150509295509295909350565b5f6020820190506134b65f830184612f61565b92915050565b5f6060820190506134cf5f830186612f61565b6134dc6020830185612f61565b6134e96040830184612f61565b949350505050565b5f806040838503121561350757613506612b61565b5b5f61351485828601612b88565b925050602061352585828601612b88565b9150509250929050565b61353881612ec2565b82525050565b5f6020820190506135515f83018461352f565b92915050565b5f82825260208201905092915050565b7f4e6f742043616c6c65722e0000000000000000000000000000000000000000005f82015250565b5f61359b600b83613557565b91506135a682613567565b602082019050919050565b5f6020820190508181035f8301526135c88161358f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f20726566756e6420617661696c61626c65000000000000000000000000005f82015250565b5f613630601383613557565b915061363b826135fc565b602082019050919050565b5f6020820190508181035f83015261365d81613624565b9050919050565b5f81905092915050565b50565b5f61367c5f83613664565b91506136878261366e565b5f82019050919050565b5f61369b82613671565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f6136d9600e83613557565b91506136e4826136a5565b602082019050919050565b5f6020820190508181035f830152613706816136cd565b9050919050565b7f4d6174636820646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f613741601583613557565b915061374c8261370d565b602082019050919050565b5f6020820190508181035f83015261376e81613735565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137ac82612b69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137de576137dd613775565b5b600182019050919050565b7f456e74727920646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61381d601583613557565b9150613828826137e9565b602082019050919050565b5f6020820190508181035f83015261384a81613811565b9050919050565b7f4d61746368206973207061757365642e000000000000000000000000000000005f82015250565b5f613885601083613557565b915061389082613851565b602082019050919050565b5f6020820190508181035f8301526138b281613879565b9050919050565b7f4d617463682068617320656e6465642e000000000000000000000000000000005f82015250565b5f6138ed601083613557565b91506138f8826138b9565b602082019050919050565b5f6020820190508181035f83015261391a816138e1565b9050919050565b5f61392b82612b69565b915061393683612b69565b925082820190508082111561394e5761394d613775565b5b92915050565b7f456e747279206c696d697420657863656564656420666f722074686973206d615f8201527f7463682e00000000000000000000000000000000000000000000000000000000602082015250565b5f6139ae602483613557565b91506139b982613954565b604082019050919050565b5f6020820190508181035f8301526139db816139a2565b9050919050565b7f496e636f7272656374207061796d656e742e00000000000000000000000000005f82015250565b5f613a16601283613557565b9150613a21826139e2565b602082019050919050565b5f6020820190508181035f830152613a4381613a0a565b9050919050565b5f606082019050613a5d5f830186612f61565b613a6a6020830185612fb1565b613a776040830184612f61565b949350505050565b7f456e74727920646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613ab3601483613557565b9150613abe82613a7f565b602082019050919050565b5f6020820190508181035f830152613ae081613aa7565b9050919050565b7f496e76616c696420656e74727920696e707574206c656e6774687300000000005f82015250565b5f613b1b601b83613557565b9150613b2682613ae7565b602082019050919050565b5f6020820190508181035f830152613b4881613b0f565b9050919050565b5f613b5982612ec2565b915060ff8203613b6c57613b6b613775565b5b600182019050919050565b7f466565206163636f756e74206973207a65726f206164647265737300000000005f82015250565b5f613bab601b83613557565b9150613bb682613b77565b602082019050919050565b5f6020820190508181035f830152613bd881613b9f565b9050919050565b7f5472656173757279206163636f756e74206973207a65726f20616464726573735f82015250565b5f613c13602083613557565b9150613c1e82613bdf565b602082019050919050565b5f6020820190508181035f830152613c4081613c07565b9050919050565b7f4f7065726174696f6e73206163636f756e74206973207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ca1602283613557565b9150613cac82613c47565b604082019050919050565b5f6020820190508181035f830152613cce81613c95565b9050919050565b7f456e642064617465206d75737420626520696e207468652066757475726500005f82015250565b5f613d09601e83613557565b9150613d1482613cd5565b602082019050919050565b5f6020820190508181035f830152613d3681613cfd565b9050919050565b5f613d4782612b69565b9150613d5283612b69565b9250828203905081811115613d6a57613d69613775565b5b92915050565b5f60a082019050613d835f830188612f61565b613d906020830187612f61565b613d9d6040830186612fb1565b613daa6060830185612fa2565b613db76080830184612f61565b9695505050505050565b7f4e6f207061727469636970616e747320696e20746865206d61746368000000005f82015250565b5f613df5601c83613557565b9150613e0082613dc1565b602082019050919050565b5f6020820190508181035f830152613e2281613de9565b9050919050565b7f4e6f2076616c696420656e7472696573000000000000000000000000000000005f82015250565b5f613e5d601083613557565b9150613e6882613e29565b602082019050919050565b5f6020820190508181035f830152613e8a81613e51565b9050919050565b5f819050919050565b613eab613ea682612b69565b613e91565b82525050565b5f8160601b9050919050565b5f613ec782613eb1565b9050919050565b5f613ed882613ebd565b9050919050565b613ef0613eeb82612d26565b613ece565b82525050565b5f613f018286613e9a565b602082019150613f118285613e9a565b602082019150613f218284613edf565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f6982612b69565b9150613f7483612b69565b925082613f8457613f83613f32565b5b828206905092915050565b7f57696e6e6572206e6f742064657465726d696e656400000000000000000000005f82015250565b5f613fc3601583613557565b9150613fce82613f8f565b602082019050919050565b5f6020820190508181035f830152613ff081613fb7565b9050919050565b5f60408201905061400a5f830185612fb1565b6140176020830184612f61565b9392505050565b5f8151905061402c81613402565b92915050565b5f6020828403121561404757614046612b61565b5b5f6140548482850161401e565b91505092915050565b7f4552433230207472616e73666572206661696c656400000000000000000000005f82015250565b5f614091601583613557565b915061409c8261405d565b602082019050919050565b5f6020820190508181035f8301526140be81614085565b9050919050565b5f6060820190506140d85f830186612fb1565b6140e56020830185612fb1565b6140f26040830184612f61565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61412e601f83613557565b9150614139826140fa565b602082019050919050565b5f6020820190508181035f83015261415b81614122565b9050919050565b7f546f74616c20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f6141bc602683613557565b91506141c782614162565b604082019050919050565b5f6020820190508181035f8301526141e9816141b0565b9050919050565b5f6141fa82612b69565b915061420583612b69565b925082820261421381612b69565b9150828204841483151761422a57614229613775565b5b5092915050565b5f61423b82612b69565b915061424683612b69565b92508261425657614255613f32565b5b828204905092915050565b7f50657263656e746167652073706c6974206d69736d61746368000000000000005f82015250565b5f614295601983613557565b91506142a082614261565b602082019050919050565b5f6020820190508181035f8301526142c281614289565b9050919050565b5f6080820190506142dc5f830187612f61565b6142e96020830186612f61565b6142f66040830185612f61565b6143036060830184612f61565b9594505050505056fea2646970667358221220b68cf06e9680058654a6dd5ba9b843ed1caa21c223dca332cd8663c7b3e9b11e64736f6c634300081a0033000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Deployed Bytecode
0x6080604052600436106101b6575f3560e01c80638da5cb5b116100eb578063e53805c711610089578063f737d21d11610063578063f737d21d146105db578063f7dc078b14610603578063fbe9e7511461062d578063fd23efef14610655576101b6565b8063e53805c714610561578063ee9b29401461058b578063f2fde38b146105b3576101b6565b8063bc3da535116100c5578063bc3da53514610495578063bc3e2284146104d1578063d02c8cdf1461050f578063d2c4d41414610537576101b6565b80638da5cb5b1461041b57806390bd67e514610445578063b92d70b81461046d576101b6565b80634768d4ef11610158578063768b5c6711610132578063768b5c67146103655780637bbf4a3f1461038d57806382d97110146103c957806384267959146103f1576101b6565b80634768d4ef146102e25780635e42f10e14610327578063715018a61461034f576101b6565b806325a3d4361161019457806325a3d4361461022257806329dc91c31461025f578063330ab39a1461028957806333a35448146102a5576101b6565b8063049ac59b146101ba578063110f8874146101e257806317be85c3146101f8575b5f80fd5b3480156101c5575f80fd5b506101e060048036038101906101db9190612b9c565b61067f565b005b3480156101ed575f80fd5b506101f66107b9565b005b348015610203575f80fd5b5061020c61093a565b6040516102199190612cbe565b60405180910390f35b34801561022d575f80fd5b5061024860048036038101906102439190612b9c565b610a32565b604051610256929190612e6d565b60405180910390f35b34801561026a575f80fd5b50610273610c50565b6040516102809190612ea2565b60405180910390f35b6102a3600480360381019061029e9190612ef8565b610e12565b005b3480156102b0575f80fd5b506102cb60048036038101906102c69190612f36565b611229565b6040516102d9929190612f70565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612b9c565b6112ea565b60405161031e9a99989796959493929190612fc0565b60405180910390f35b348015610332575f80fd5b5061034d600480360381019061034891906131d4565b61138e565b005b34801561035a575f80fd5b50610363611420565b005b348015610370575f80fd5b5061038b60048036038101906103869190612b9c565b611433565b005b348015610398575f80fd5b506103b360048036038101906103ae919061321b565b61156e565b6040516103c09190613246565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea91906132b8565b61158b565b005b3480156103fc575f80fd5b506104056116ae565b6040516104129190613356565b60405180910390f35b348015610426575f80fd5b5061042f6116d3565b60405161043c919061336f565b60405180910390f35b348015610450575f80fd5b5061046b600480360381019061046691906133b2565b6116fa565b005b348015610478575f80fd5b50610493600480360381019061048e919061342c565b611911565b005b3480156104a0575f80fd5b506104bb60048036038101906104b6919061321b565b611a58565b6040516104c891906134a3565b60405180910390f35b3480156104dc575f80fd5b506104f760048036038101906104f29190612f36565b611a6d565b604051610506939291906134bc565b60405180910390f35b34801561051a575f80fd5b5061053560048036038101906105309190612b9c565b611a93565b005b348015610542575f80fd5b5061054b611d30565b6040516105589190613356565b60405180910390f35b34801561056c575f80fd5b50610575611d55565b6040516105829190612ea2565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac91906134f1565b611eb2565b005b3480156105be575f80fd5b506105d960048036038101906105d4919061321b565b611f65565b005b3480156105e6575f80fd5b5061060160048036038101906105fc9190612b9c565b611fe9565b005b34801561060e575f80fd5b50610617612645565b6040516106249190613356565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e91906131d4565b61266a565b005b348015610660575f80fd5b506106696126fd565b604051610676919061353e565b60405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1661069e6116d3565b73ffffffffffffffffffffffffffffffffffffffff161480610706575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c906135b1565b60405180910390fd5b5f6004828154811061075a576107596135cf565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507fbd2800ce670bc629d6709a5facc3b0e4748e1b212b7e420b1ed292778a4c5046816040516107ae91906134a3565b60405180910390a150565b6107c161270f565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b90613646565b60405180910390fd5b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f3373ffffffffffffffffffffffffffffffffffffffff16826040516108ab90613691565b5f6040518083038185875af1925050503d805f81146108e5576040519150601f19603f3d011682016040523d82523d5f602084013e6108ea565b606091505b505090508061092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906136ef565b60405180910390fd5b505061093861275e565b565b606060025f9054906101000a900460ff1660ff1667ffffffffffffffff8111156109675761096661306e565b5b6040519080825280602002602001820160405280156109a057816020015b61098d612b3a565b8152602001906001900390816109855790505b5090505f5b60025f9054906101000a900460ff1660ff168160ff161015610a2e5760035f8260ff1660ff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050828260ff1681518110610a1657610a156135cf565b5b602002602001018190525080806001019150506109a5565b5090565b606080826004805490508110610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490613757565b60405180910390fd5b5f60048581548110610a9257610a916135cf565b5b905f5260205f2090600a020190505f816009018054905090508067ffffffffffffffff811115610ac557610ac461306e565b5b604051908082528060200260200182016040528015610af35781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115610b1057610b0f61306e565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b5093505f5b81811015610c47575f836009018281548110610b6257610b616135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080878381518110610ba057610b9f6135cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054868381518110610c2d57610c2c6135cf565b5b602002602001018181525050508080600101915050610b43565b50505050915091565b60605f60048054905067ffffffffffffffff811115610c7257610c7161306e565b5b604051908082528060200260200182016040528015610ca05781602001602082028036833780820191505090505b5090505f805b600480549050811015610d6a575f60048281548110610cc857610cc76135cf565b5b905f5260205f2090600a0201905080600101544210158015610cf85750806002015f9054906101000a900460ff16155b8015610d1357508060020160019054906101000a900460ff16155b8015610d2557505f8160090180549050115b15610d5c57805f0154848481518110610d4157610d406135cf565b5b6020026020010181815250508280610d58906137a2565b9350505b508080600101915050610ca6565b505f8167ffffffffffffffff811115610d8657610d8561306e565b5b604051908082528060200260200182016040528015610db45781602001602082028036833780820191505090505b5090505f5b82811015610e0857838181518110610dd457610dd36135cf565b5b6020026020010151828281518110610def57610dee6135cf565b5b6020026020010181815250508080600101915050610db9565b5080935050505090565b816004805490508110610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613757565b60405180910390fd5b815f60035f8360ff1660ff1681526020019081526020015f2060010154141580610e9e57505f60035f8360ff1660ff1681526020019081526020015f206002015414155b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490613833565b60405180910390fd5b8360048181548110610ef257610ef16135cf565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f459061389b565b60405180910390fd5b610f5661270f565b5f60048681548110610f6b57610f6a6135cf565b5b905f5260205f2090600a020190508060010154421080610f9a57508060020160019054906101000a900460ff16155b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613903565b60405180910390fd5b5f60035f8760ff1660ff1681526020019081526020015f2090505f816002015482600101546110089190613921565b9050826004015481846003015461101f9190613921565b1115611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906139c4565b60405180910390fd5b816001015434146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613a2c565b60405180910390fd5b5f836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361114f578260090133908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461119d9190613921565b9250508190555080836003015f8282546111b79190613921565b925050819055508160010154836008015f8282546111d59190613921565b925050819055507f338e0cd33c4e120afcd73f43f082fd8940ed67ac35180d278d2eb4f3ed51d92e88338360405161120f93929190613a4a565b60405180910390a150505061122261275e565b5050505050565b5f805f60035f8560ff1660ff1681526020019081526020015f2060010154118061126c57505f60035f8560ff1660ff1681526020019081526020015f2060020154115b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613ac9565b60405180910390fd5b60035f8460ff1660ff1681526020019081526020015f206001015460035f8560ff1660ff1681526020019081526020015f206002015491509150915091565b600481815481106112f9575f80fd5b905f5260205f2090600a02015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490806008015490508a565b611396612767565b5f5b815181101561141c575f60055f8484815181106113b8576113b76135cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611398565b5050565b611428612767565b6114315f6127ee565b565b3373ffffffffffffffffffffffffffffffffffffffff166114526116d3565b73ffffffffffffffffffffffffffffffffffffffff1614806114ba575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906135b1565b60405180910390fd5b60016004828154811061150f5761150e6135cf565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507f9f6b838e8160012b261280722f7d000f9a616b49bae77628ab03db3142190c688160405161156391906134a3565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b611593612767565b8181905084849050146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613b31565b60405180910390fd5b5f5b848490508160ff16101561168a5760405180606001604052808260ff16815260200186868460ff16818110611615576116146135cf565b5b90506020020135815260200184848460ff16818110611637576116366135cf565b5b9050602002013581525060035f8360ff1660ff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050808061168290613b4f565b9150506115dd565b508383905060025f6101000a81548160ff021916908360ff16021790555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611702612767565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790613bc1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613c29565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613cb7565b60405180910390fd5b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611919612767565b42851161195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613d1f565b60405180910390fd5b5f600460018160018154018082558091505003905f5260205f2090600a02019050600160048054905061198e9190613d3d565b815f018190555085816001018190555084816005015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160050160146101000a81548160ff0219169083151502179055508281600601819055508181600401819055507f712a06043bdc55fb71b57e8747caf273ae1c60da08943aa231909b47f5532ed3815f015487878787604051611a48959493929190613d70565b60405180910390a1505050505050565b6006602052805f5260405f205f915090505481565b6003602052805f5260405f205f91509050805f0154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff16611ab26116d3565b73ffffffffffffffffffffffffffffffffffffffff161480611b1a575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906135b1565b60405180910390fd5b806004805490508110611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890613757565b60405180910390fd5b611ba961270f565b5f60048381548110611bbe57611bbd6135cf565b5b905f5260205f2090600a020190505f81600901805490501115611ccf575f5b8160090180549050811015611ccd575f826009018281548110611c0357611c026135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050826007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb89190613921565b92505081905550508080600101915050611bdd565b505b60018160020160016101000a81548160ff0219169083151502179055507f700135b4fe8746e2d2c85a9baa43c62887740aebfeb3a439f71a083fe5d5675983604051611d1b91906134a3565b60405180910390a150611d2c61275e565b5050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f805b600480549050811015611db85760048181548110611d7b57611d7a6135cf565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611dab578180611da7906137a2565b9250505b8080600101915050611d5a565b505f8167ffffffffffffffff811115611dd457611dd361306e565b5b604051908082528060200260200182016040528015611e025781602001602082028036833780820191505090505b5090505f805b600480549050811015611ea85760048181548110611e2957611e286135cf565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611e9b5760048181548110611e5e57611e5d6135cf565b5b905f5260205f2090600a02015f0154838381518110611e8057611e7f6135cf565b5b6020026020010181815250508180611e97906137a2565b9250505b8080600101915050611e08565b5081935050505090565b611eba612767565b604051806060016040528060025f9054906101000a900460ff1660ff1681526020018381526020018281525060035f60025f9054906101000a900460ff1660ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505060025f81819054906101000a900460ff1680929190611f4890613b4f565b91906101000a81548160ff021916908360ff160217905550505050565b611f6d612767565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd4919061336f565b60405180910390fd5b611fe6816127ee565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120086116d3565b73ffffffffffffffffffffffffffffffffffffffff161480612070575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906135b1565b60405180910390fd5b8060048054905081106120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90613757565b60405180910390fd5b816004818154811061210c5761210b6135cf565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f9061389b565b60405180910390fd5b61217061270f565b5f60048481548110612185576121846135cf565b5b905f5260205f2090600a020190505f8160090180549050116121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390613e0b565b60405180910390fd5b5f805b826009018054905081101561228557826007015f846009018381548110612209576122086135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826122769190613921565b915080806001019150506121df565b505f81116122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613e73565b60405180910390fd5b5f4244336040516020016122de93929190613ef6565b604051602081830303815290604052805190602001205f1c90505f82826123059190613f5f565b90505f80805f90505b86600901805490508110156123ca575f876009018281548110612334576123336135cf565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050876007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054846123a99190613921565b9350838510156123bc57809250506123ca565b50808060010191505061230e565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090613fd9565b60405180910390fd5b8560050160149054906101000a900460ff161561253657856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8288600601546040518363ffffffff1660e01b81526004016124b2929190613ff7565b6020604051808303815f875af11580156124ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f29190614032565b612531576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612528906140a7565b60405180910390fd5b6125c8565b856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308389600601546040518463ffffffff1660e01b815260040161259a939291906140c5565b5f604051808303815f87803b1580156125b1575f80fd5b505af11580156125c3573d5f803e3d5ffd5b505050505b5f866008015490506125d9816128af565b60018760020160016101000a81548160ff0219169083151502179055507fad586bf2cfefa63512aa5a1106545ee05dc5376edec8841ef54a636f4a036a2d8a838760405161262993929190613a4a565b60405180910390a15050505050505061264061275e565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612672612767565b5f5b81518110156126f957600160055f848481518110612695576126946135cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050612674565b5050565b60025f9054906101000a900460ff1681565b600260015403612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614144565b60405180910390fd5b6002600181905550565b60018081905550565b61276f612b33565b73ffffffffffffffffffffffffffffffffffffffff1661278d6116d3565b73ffffffffffffffffffffffffffffffffffffffff16146127ec576127b0612b33565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016127e3919061336f565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81116128f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e8906141d2565b60405180910390fd5b5f6064600860ff168361290491906141f0565b61290e9190614231565b90505f6064604860ff168461292391906141f0565b61292d9190614231565b90505f6064601460ff168561294291906141f0565b61294c9190614231565b90508381838561295c9190613921565b6129669190613921565b146129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d906142ab565b60405180910390fd5b5f831115612a145760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612a12573d5f803e3d5ffd5b505b5f821115612a825760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612a80573d5f803e3d5ffd5b505b5f811115612af05760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612aee573d5f803e3d5ffd5b505b7f6e24439017528dcb48087e74e9920b967cd425bab648f784c8b92fc6e652d40b84848484604051612b2594939291906142c9565b60405180910390a150505050565b5f33905090565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612b7b81612b69565b8114612b85575f80fd5b50565b5f81359050612b9681612b72565b92915050565b5f60208284031215612bb157612bb0612b61565b5b5f612bbe84828501612b88565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612bf981612b69565b82525050565b606082015f820151612c135f850182612bf0565b506020820151612c266020850182612bf0565b506040820151612c396040850182612bf0565b50505050565b5f612c4a8383612bff565b60608301905092915050565b5f602082019050919050565b5f612c6c82612bc7565b612c768185612bd1565b9350612c8183612be1565b805f5b83811015612cb1578151612c988882612c3f565b9750612ca383612c56565b925050600181019050612c84565b5085935050505092915050565b5f6020820190508181035f830152612cd68184612c62565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d3082612d07565b9050919050565b612d4081612d26565b82525050565b5f612d518383612d37565b60208301905092915050565b5f602082019050919050565b5f612d7382612cde565b612d7d8185612ce8565b9350612d8883612cf8565b805f5b83811015612db8578151612d9f8882612d46565b9750612daa83612d5d565b925050600181019050612d8b565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612df98383612bf0565b60208301905092915050565b5f602082019050919050565b5f612e1b82612dc5565b612e258185612dcf565b9350612e3083612ddf565b805f5b83811015612e60578151612e478882612dee565b9750612e5283612e05565b925050600181019050612e33565b5085935050505092915050565b5f6040820190508181035f830152612e858185612d69565b90508181036020830152612e998184612e11565b90509392505050565b5f6020820190508181035f830152612eba8184612e11565b905092915050565b5f60ff82169050919050565b612ed781612ec2565b8114612ee1575f80fd5b50565b5f81359050612ef281612ece565b92915050565b5f8060408385031215612f0e57612f0d612b61565b5b5f612f1b85828601612b88565b9250506020612f2c85828601612ee4565b9150509250929050565b5f60208284031215612f4b57612f4a612b61565b5b5f612f5884828501612ee4565b91505092915050565b612f6a81612b69565b82525050565b5f604082019050612f835f830185612f61565b612f906020830184612f61565b9392505050565b5f8115159050919050565b612fab81612f97565b82525050565b612fba81612d26565b82525050565b5f61014082019050612fd45f83018d612f61565b612fe1602083018c612f61565b612fee604083018b612fa2565b612ffb606083018a612fa2565b6130086080830189612f61565b61301560a0830188612f61565b61302260c0830187612fb1565b61302f60e0830186612fa2565b61303d610100830185612f61565b61304b610120830184612f61565b9b9a5050505050505050505050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130a48261305e565b810181811067ffffffffffffffff821117156130c3576130c261306e565b5b80604052505050565b5f6130d5612b58565b90506130e1828261309b565b919050565b5f67ffffffffffffffff821115613100576130ff61306e565b5b602082029050602081019050919050565b5f80fd5b61311e81612d26565b8114613128575f80fd5b50565b5f8135905061313981613115565b92915050565b5f61315161314c846130e6565b6130cc565b9050808382526020820190506020840283018581111561317457613173613111565b5b835b8181101561319d5780613189888261312b565b845260208401935050602081019050613176565b5050509392505050565b5f82601f8301126131bb576131ba61305a565b5b81356131cb84826020860161313f565b91505092915050565b5f602082840312156131e9576131e8612b61565b5b5f82013567ffffffffffffffff81111561320657613205612b65565b5b613212848285016131a7565b91505092915050565b5f602082840312156132305761322f612b61565b5b5f61323d8482850161312b565b91505092915050565b5f6020820190506132595f830184612fa2565b92915050565b5f80fd5b5f8083601f8401126132785761327761305a565b5b8235905067ffffffffffffffff8111156132955761329461325f565b5b6020830191508360208202830111156132b1576132b0613111565b5b9250929050565b5f805f80604085870312156132d0576132cf612b61565b5b5f85013567ffffffffffffffff8111156132ed576132ec612b65565b5b6132f987828801613263565b9450945050602085013567ffffffffffffffff81111561331c5761331b612b65565b5b61332887828801613263565b925092505092959194509250565b5f61334082612d07565b9050919050565b61335081613336565b82525050565b5f6020820190506133695f830184613347565b92915050565b5f6020820190506133825f830184612fb1565b92915050565b61339181613336565b811461339b575f80fd5b50565b5f813590506133ac81613388565b92915050565b5f805f606084860312156133c9576133c8612b61565b5b5f6133d68682870161339e565b93505060206133e78682870161339e565b92505060406133f88682870161339e565b9150509250925092565b61340b81612f97565b8114613415575f80fd5b50565b5f8135905061342681613402565b92915050565b5f805f805f60a0868803121561344557613444612b61565b5b5f61345288828901612b88565b95505060206134638882890161312b565b945050604061347488828901613418565b935050606061348588828901612b88565b925050608061349688828901612b88565b9150509295509295909350565b5f6020820190506134b65f830184612f61565b92915050565b5f6060820190506134cf5f830186612f61565b6134dc6020830185612f61565b6134e96040830184612f61565b949350505050565b5f806040838503121561350757613506612b61565b5b5f61351485828601612b88565b925050602061352585828601612b88565b9150509250929050565b61353881612ec2565b82525050565b5f6020820190506135515f83018461352f565b92915050565b5f82825260208201905092915050565b7f4e6f742043616c6c65722e0000000000000000000000000000000000000000005f82015250565b5f61359b600b83613557565b91506135a682613567565b602082019050919050565b5f6020820190508181035f8301526135c88161358f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f20726566756e6420617661696c61626c65000000000000000000000000005f82015250565b5f613630601383613557565b915061363b826135fc565b602082019050919050565b5f6020820190508181035f83015261365d81613624565b9050919050565b5f81905092915050565b50565b5f61367c5f83613664565b91506136878261366e565b5f82019050919050565b5f61369b82613671565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f6136d9600e83613557565b91506136e4826136a5565b602082019050919050565b5f6020820190508181035f830152613706816136cd565b9050919050565b7f4d6174636820646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f613741601583613557565b915061374c8261370d565b602082019050919050565b5f6020820190508181035f83015261376e81613735565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137ac82612b69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137de576137dd613775565b5b600182019050919050565b7f456e74727920646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61381d601583613557565b9150613828826137e9565b602082019050919050565b5f6020820190508181035f83015261384a81613811565b9050919050565b7f4d61746368206973207061757365642e000000000000000000000000000000005f82015250565b5f613885601083613557565b915061389082613851565b602082019050919050565b5f6020820190508181035f8301526138b281613879565b9050919050565b7f4d617463682068617320656e6465642e000000000000000000000000000000005f82015250565b5f6138ed601083613557565b91506138f8826138b9565b602082019050919050565b5f6020820190508181035f83015261391a816138e1565b9050919050565b5f61392b82612b69565b915061393683612b69565b925082820190508082111561394e5761394d613775565b5b92915050565b7f456e747279206c696d697420657863656564656420666f722074686973206d615f8201527f7463682e00000000000000000000000000000000000000000000000000000000602082015250565b5f6139ae602483613557565b91506139b982613954565b604082019050919050565b5f6020820190508181035f8301526139db816139a2565b9050919050565b7f496e636f7272656374207061796d656e742e00000000000000000000000000005f82015250565b5f613a16601283613557565b9150613a21826139e2565b602082019050919050565b5f6020820190508181035f830152613a4381613a0a565b9050919050565b5f606082019050613a5d5f830186612f61565b613a6a6020830185612fb1565b613a776040830184612f61565b949350505050565b7f456e74727920646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613ab3601483613557565b9150613abe82613a7f565b602082019050919050565b5f6020820190508181035f830152613ae081613aa7565b9050919050565b7f496e76616c696420656e74727920696e707574206c656e6774687300000000005f82015250565b5f613b1b601b83613557565b9150613b2682613ae7565b602082019050919050565b5f6020820190508181035f830152613b4881613b0f565b9050919050565b5f613b5982612ec2565b915060ff8203613b6c57613b6b613775565b5b600182019050919050565b7f466565206163636f756e74206973207a65726f206164647265737300000000005f82015250565b5f613bab601b83613557565b9150613bb682613b77565b602082019050919050565b5f6020820190508181035f830152613bd881613b9f565b9050919050565b7f5472656173757279206163636f756e74206973207a65726f20616464726573735f82015250565b5f613c13602083613557565b9150613c1e82613bdf565b602082019050919050565b5f6020820190508181035f830152613c4081613c07565b9050919050565b7f4f7065726174696f6e73206163636f756e74206973207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ca1602283613557565b9150613cac82613c47565b604082019050919050565b5f6020820190508181035f830152613cce81613c95565b9050919050565b7f456e642064617465206d75737420626520696e207468652066757475726500005f82015250565b5f613d09601e83613557565b9150613d1482613cd5565b602082019050919050565b5f6020820190508181035f830152613d3681613cfd565b9050919050565b5f613d4782612b69565b9150613d5283612b69565b9250828203905081811115613d6a57613d69613775565b5b92915050565b5f60a082019050613d835f830188612f61565b613d906020830187612f61565b613d9d6040830186612fb1565b613daa6060830185612fa2565b613db76080830184612f61565b9695505050505050565b7f4e6f207061727469636970616e747320696e20746865206d61746368000000005f82015250565b5f613df5601c83613557565b9150613e0082613dc1565b602082019050919050565b5f6020820190508181035f830152613e2281613de9565b9050919050565b7f4e6f2076616c696420656e7472696573000000000000000000000000000000005f82015250565b5f613e5d601083613557565b9150613e6882613e29565b602082019050919050565b5f6020820190508181035f830152613e8a81613e51565b9050919050565b5f819050919050565b613eab613ea682612b69565b613e91565b82525050565b5f8160601b9050919050565b5f613ec782613eb1565b9050919050565b5f613ed882613ebd565b9050919050565b613ef0613eeb82612d26565b613ece565b82525050565b5f613f018286613e9a565b602082019150613f118285613e9a565b602082019150613f218284613edf565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f6982612b69565b9150613f7483612b69565b925082613f8457613f83613f32565b5b828206905092915050565b7f57696e6e6572206e6f742064657465726d696e656400000000000000000000005f82015250565b5f613fc3601583613557565b9150613fce82613f8f565b602082019050919050565b5f6020820190508181035f830152613ff081613fb7565b9050919050565b5f60408201905061400a5f830185612fb1565b6140176020830184612f61565b9392505050565b5f8151905061402c81613402565b92915050565b5f6020828403121561404757614046612b61565b5b5f6140548482850161401e565b91505092915050565b7f4552433230207472616e73666572206661696c656400000000000000000000005f82015250565b5f614091601583613557565b915061409c8261405d565b602082019050919050565b5f6020820190508181035f8301526140be81614085565b9050919050565b5f6060820190506140d85f830186612fb1565b6140e56020830185612fb1565b6140f26040830184612f61565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61412e601f83613557565b9150614139826140fa565b602082019050919050565b5f6020820190508181035f83015261415b81614122565b9050919050565b7f546f74616c20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f6141bc602683613557565b91506141c782614162565b604082019050919050565b5f6020820190508181035f8301526141e9816141b0565b9050919050565b5f6141fa82612b69565b915061420583612b69565b925082820261421381612b69565b9150828204841483151761422a57614229613775565b5b5092915050565b5f61423b82612b69565b915061424683612b69565b92508261425657614255613f32565b5b828204905092915050565b7f50657263656e746167652073706c6974206d69736d61746368000000000000005f82015250565b5f614295601983613557565b91506142a082614261565b602082019050919050565b5f6020820190508181035f8301526142c281614289565b9050919050565b5f6080820190506142dc5f830187612f61565b6142e96020830186612f61565b6142f66040830185612f61565b6143036060830184612f61565b9594505050505056fea2646970667358221220b68cf06e9680058654a6dd5ba9b843ed1caa21c223dca332cd8663c7b3e9b11e64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0xb931E339b4f5eB3D4D039CE1451426754063C711
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Deployed Bytecode Sourcemap
23306:14601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37367:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32250:295;;;;;;;;;;;;;:::i;:::-;;35903:239;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34476:726;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33347:819;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27940:1387;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35210:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24230:22;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;37715:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3361:103;;;;;;;;;;;;;:::i;:::-;;37217:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24261:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36150:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24485:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2686:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24696:661;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27185:747;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24307:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24185:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31489:753;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24588:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32553:786;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35578:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3619:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29335:2146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24534:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37522:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24115:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37367:147;37140:10;37129:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37154:7;:19;37162:10;37154:19;;;;;;;;;;;;;;;;;;;;;;;;;37129:44;37121:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37463:5:::1;37437:7;37445;37437:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:31;;;;;;;;;;;;;;;;;;37484:22;37498:7;37484:22;;;;;;:::i;:::-;;;;;;;;37367:147:::0;:::o;32250:295::-;6542:21;:19;:21::i;:::-;32309:14:::1;32326:7;:19;32334:10;32326:19;;;;;;;;;;;;;;;;32309:36;;32373:1;32364:6;:10;32356:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32433:1;32411:7;:19;32419:10;32411:19;;;;;;;;;;;;;;;:23;;;;32446:9;32461:10;:15;;32484:6;32461:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32445:50;;;32514:4;32506:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;32298:247;;6586:20:::0;:18;:20::i;:::-;32250:295::o;35903:239::-;35948:19;35999:13;;;;;;;;;;;35987:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;35980:33;;36029:7;36024:89;36046:13;;;;;;;;;;;36042:17;;:1;:17;;;36024:89;;;36091:7;:10;36099:1;36091:10;;;;;;;;;;;;;;;36081:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;36086:1;36081:7;;;;;;;;;;:::i;:::-;;;;;;;:20;;;;36061:3;;;;;;;36024:89;;;;35903:239;:::o;34476:726::-;34596:29;34627:25;34569:7;36892;:14;;;;36882:7;:24;36874:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34670:26:::1;34699:7;34707;34699:16;;;;;;;;:::i;:::-;;;;;;;;;;;;34670:45;;34726:24;34753:12;:25;;:32;;;;34726:59;;34827:16;34813:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34798:46;;34880:16;34866:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34855:42;;34915:9;34910:241;34934:16;34930:1;:20;34910:241;;;34972:19;34994:12;:25;;35020:1;34994:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34972:50;;35055:11;35037:12;35050:1;35037:15;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;35095:12;:31;;:44;35127:11;35095:44;;;;;;;;;;;;;;;;35081:8;35090:1;35081:11;;;;;;;;:::i;:::-;;;;;;;:58;;;::::0;::::1;34957:194;34952:3;;;;;;;34910:241;;;;35163:31;;34476:726:::0;;;;:::o;33347:819::-;33403:16;33432:29;33478:7;:14;;;;33464:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33432:61;;33504:13;33539:9;33534:440;33558:7;:14;;;;33554:1;:18;33534:440;;;33594:26;33623:7;33631:1;33623:10;;;;;;;;:::i;:::-;;;;;;;;;;;;33594:39;;33689:12;:20;;;33670:15;:39;;:80;;;;;33731:12;:19;;;;;;;;;;;;33730:20;33670:80;:122;;;;;33772:12;:20;;;;;;;;;;;;33771:21;33670:122;:179;;;;;33848:1;33813:12;:25;;:32;;;;:36;33670:179;33648:315;;;33906:12;:15;;;33884:12;33897:5;33884:19;;;;;;;;:::i;:::-;;;;;;;:37;;;;;33940:7;;;;;:::i;:::-;;;;33648:315;33579:395;33574:3;;;;;;;33534:440;;;;33986:23;34026:5;34012:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33986:46;;34048:9;34043:90;34067:5;34063:1;:9;34043:90;;;34106:12;34119:1;34106:15;;;;;;;;:::i;:::-;;;;;;;;34094:6;34101:1;34094:9;;;;;;;;:::i;:::-;;;;;;;:27;;;;;34074:3;;;;;;;34043:90;;;;34152:6;34145:13;;;;;33347:819;:::o;27940:1387::-;28044:7;36892;:14;;;;36882:7;:24;36874:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28074:7:::1;36711:1;36681:7;:16;36689:7;36681:16;;;;;;;;;;;;;;;:26;;;:31;;:67;;;;36747:1;36716:7;:16;36724:7;36716:16;;;;;;;;;;;;;;;:27;;;:32;;36681:67;36659:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;28102:7:::2;37016;37024;37016:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;37015:24;37007:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::3;:19;:21::i;:::-;28149:26:::4;28178:7;28186;28178:16;;;;;;;;:::i;:::-;;;;;;;;;;;;28149:45;;28245:12;:20;;;28227:15;:38;:63;;;;28270:12;:20;;;;;;;;;;;;28269:21;28227:63;28205:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;28347:27;28377:7;:16;28385:7;28377:16;;;;;;;;;;;;;;;28347:46;;28469:24;28535:13;:24;;;28496:13;:23;;;:63;;;;:::i;:::-;28469:90;;28744:12;:25;;;28707:16;28677:12;:27;;;:46;;;;:::i;:::-;:92;;28655:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;28865:13;:23;;;28852:9;:36;28844:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28975:1;28928:12;:31;;:43;28960:10;28928:43;;;;;;;;;;;;;;;;:48:::0;28924:123:::4;;28993:12;:25;;29024:10;28993:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28924:123;29106:16;29059:12;:31;;:43;29091:10;29059:43;;;;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;;;;;29164:16;29133:12;:27;;;:47;;;;;;;:::i;:::-;;;;;;;;29222:13;:23;;;29191:12;:27;;;:54;;;;;;;:::i;:::-;;;;;;;;29263:56;29281:7;29290:10;29302:16;29263:56;;;;;;;;:::i;:::-;;;;;;;;28138:1189;;;6586:20:::3;:18;:20::i;:::-;36808:1:::2;36943::::1;27940:1387:::0;;;:::o;35210:360::-;35297:17;35316:18;35403:1;35374:7;:16;35382:7;35374:16;;;;;;;;;;;;;;;:26;;;:30;:65;;;;35438:1;35408:7;:16;35416:7;35408:16;;;;;;;;;;;;;;;:27;;;:31;35374:65;35352:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;35506:7;:16;35514:7;35506:16;;;;;;;;;;;;;;;:26;;;35534:7;:16;35542:7;35534:16;;;;;;;;;;;;;;;:27;;;35498:64;;;;35210:360;;;:::o;24230:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37715:189::-;2572:13;:11;:13::i;:::-;37799:9:::1;37794:103;37818:9;:16;37814:1;:20;37794:103;;;37880:5;37856:7;:21;37864:9;37874:1;37864:12;;;;;;;;:::i;:::-;;;;;;;;37856:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37836:3;;;;;;;37794:103;;;;37715:189:::0;:::o;3361:103::-;2572:13;:11;:13::i;:::-;3426:30:::1;3453:1;3426:18;:30::i;:::-;3361:103::o:0;37217:142::-;37140:10;37129:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37154:7;:19;37162:10;37154:19;;;;;;;;;;;;;;;;;;;;;;;;;37129:44;37121:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37311:4:::1;37285:7;37293;37285:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:30;;;;;;;;;;;;;;;;;;37331:20;37343:7;37331:20;;;;;;:::i;:::-;;;;;;;;37217:142:::0;:::o;24261:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;36150:454::-;2572:13;:11;:13::i;:::-;36332:12:::1;;:19;;36310:11;;:18;;:41;36288:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36422:7;36417:128;36439:11;;:18;;36435:1;:22;;;36417:128;;;36492:41;;;;;;;;36498:1;36492:41;;;;;;36501:11;;36513:1;36501:14;;;;;;;;;:::i;:::-;;;;;;;;36492:41;;;;36517:12;;36530:1;36517:15;;;;;;;;;:::i;:::-;;;;;;;;36492:41;;::::0;36479:7:::1;:10;36487:1;36479:10;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;36459:3;;;;;:::i;:::-;;;;36417:128;;;;36577:11;;:18;;36555:13;;:41;;;;;;;;;;;;;;;;;;36150:454:::0;;;;:::o;24485:42::-;;;;;;;;;;;;;:::o;2686:87::-;2732:7;2759:6;;;;;;;;;;;2752:13;;2686:87;:::o;24696:661::-;2572:13;:11;:13::i;:::-;24912:1:::1;24890:24;;:10;:24;;::::0;24882:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25006:1;24979:29;;:15;:29;;::::0;24957:111:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:1;25101:31;;:17;:31;;::::0;25079:115:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25229:10;25207:19;;:32;;;;;;;;;;;;;;;;;;25277:15;25250:24;;:42;;;;;;;;;;;;;;;;;;25332:17;25303:26;;:46;;;;;;;;;;;;;;;;;;24696:661:::0;;;:::o;27185:747::-;2572:13;:11;:13::i;:::-;27402:15:::1;27392:7;:25;27384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27465:22;27490:7;:14;;;;;;;;;;;;;;;;;;;;;;;;27465:39;;27546:1;27529:7;:14;;;;:18;;;;:::i;:::-;27515:8;:11;;:32;;;;27577:7;27558:8;:16;;:26;;;;27618:11;27595:8;:20;;;:34;;;;;;;;;;;;;;;;;;27659:7;27640:8;:16;;;:26;;;;;;;;;;;;;;;;;;27701:12;27677:8;:21;;:36;;;;27748:12;27724:8;:21;;:36;;;;27778:146;27805:8;:11;;;27831:7;27853:11;27879:7;27901:12;27778:146;;;;;;;;;;:::i;:::-;;;;;;;;27373:559;27185:747:::0;;;;;:::o;24307:42::-;;;;;;;;;;;;;;;;;:::o;24185:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31489:753::-;37140:10;37129:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37154:7;:19;37162:10;37154:19;;;;;;;;;;;;;;;;;;;;;;;;;37129:44;37121:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31586:7:::1;36892;:14;;;;36882:7;:24;36874:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::2;:19;:21::i;:::-;31633:26:::3;31662:7;31670;31662:16;;;;;;;;:::i;:::-;;;;;;;;;;;;31633:45;;31789:1;31754:12;:25;;:32;;;;:36;31750:343;;;31812:9;31807:275;31831:12;:25;;:32;;;;31827:1;:36;31807:275;;;31889:19;31911:12;:25;;31937:1;31911:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31889:50;;31982:12;:31;;:84;32036:11;31982:84;;;;;;;;;;;;;;;;31958:7;:20;31966:11;31958:20;;;;;;;;;;;;;;;;:108;;;;;;;:::i;:::-;;;;;;;;31870:212;31865:3;;;;;;;31807:275;;;;31750:343;32191:4;32168:12;:20;;;:27;;;;;;;;;;;;;;;;;;32211:23;32226:7;32211:23;;;;;;:::i;:::-;;;;;;;;31622:620;6586:20:::2;:18;:20::i;:::-;37200:1:::1;31489:753:::0;:::o;24588:49::-;;;;;;;;;;;;;:::o;32553:786::-;32605:16;32634:13;32723:9;32718:138;32742:7;:14;;;;32738:1;:18;32718:138;;;32783:7;32791:1;32783:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;;;;;;;;;;;32778:67;;32822:7;;;;;:::i;:::-;;;;32778:67;32758:3;;;;;;;32718:138;;;;32948:31;32996:5;32982:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32948:54;;33013:13;33109:9;33104:194;33128:7;:14;;;;33124:1;:18;33104:194;;;33169:7;33177:1;33169:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;;;;;;;;;;;33164:123;;33232:7;33240:1;33232:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:13;;;33208:14;33223:5;33208:21;;;;;;;;:::i;:::-;;;;;;;:37;;;;;33264:7;;;;;:::i;:::-;;;;33164:123;33144:3;;;;;;;33104:194;;;;33317:14;33310:21;;;;;32553:786;:::o;35578:317::-;2572:13;:11;:13::i;:::-;35713:123:::1;;;;;;;;35739:13;;;;;;;;;;;35713:123;;;;;;35778:9;35713:123;;;;35814:10;35713:123;;::::0;35688:7:::1;:22;35696:13;;;;;;;;;;;35688:22;;;;;;;;;;;;;;;:148;;;;;;;;;;;;;;;;;;;;;;;;;;;35847:13;;:15;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35578:317:::0;;:::o;3619:220::-;2572:13;:11;:13::i;:::-;3724:1:::1;3704:22;;:8;:22;;::::0;3700:93:::1;;3778:1;3750:31;;;;;;;;;;;:::i;:::-;;;;;;;;3700:93;3803:28;3822:8;3803:18;:28::i;:::-;3619:220:::0;:::o;29335:2146::-;37140:10;37129:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;37154:7;:19;37162:10;37154:19;;;;;;;;;;;;;;;;;;;;;;;;;37129:44;37121:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29431:7:::1;36892;:14;;;;36882:7;:24;36874:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29459:7:::2;37016;37024;37016:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;37015:24;37007:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::3;:19;:21::i;:::-;29506:26:::4;29535:7;29543;29535:16;;;;;;;;:::i;:::-;;;;;;;;;;;;29506:45;;29621:1;29586:12;:25;;:32;;;;:36;29564:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;29691:28;29739:9:::0;29734:207:::4;29758:12;:25;;:32;;;;29754:1;:36;29734:207;;;29836:12;:31;;:93;29886:12;:25;;29912:1;29886:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29836:93;;;;;;;;;;;;;;;;29812:117;;;;;:::i;:::-;;;29792:3;;;;;;;29734:207;;;;29984:1;29961:20;:24;29953:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;30019:18;30107:15;30124:16;30142:10;30090:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30062:106;;;;;;30040:139;;30019:160;;30190:20;30226;30213:10;:33;;;;:::i;:::-;30190:56;;30259:25;30299:14:::0;30329:9;30341:1:::4;30329:13;;30324:351;30348:12;:25;;:32;;;;30344:1;:36;30324:351;;;30402:19;30424:12;:25;;30450:1;30424:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30402:50;;30488:12;:31;;:44;30520:11;30488:44;;;;;;;;;;;;;;;;30467:65;;;;;:::i;:::-;;;30566:17;30551:12;:32;30547:117;;;30613:11;30604:20;;30643:5;;;30547:117;30387:288;30382:3;;;;;;;30324:351;;;;30713:1;30695:20;;:6;:20;;::::0;30687:54:::4;;;;;;;;;;;;:::i;:::-;;;;;;;;;30758:12;:20;;;;;;;;;;;;30754:472;;;30828:12;:24;;;;;;;;;;;;30821:41;;;30885:6;30914:12;:25;;;30821:137;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30795:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;30754:472;;;31056:12;:24;;;;;;;;;;;;31048:50;;;31125:4;31149:6;31174:12;:25;;;31048:166;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;30754:472;31238:23;31264:12;:27;;;31238:53;;31353:23;31360:15;31353:6;:23::i;:::-;31412:4;31389:12;:20;;;:27;;;;;;;;;;;;;;;;;;31432:41;31445:7;31454:6;31462:10;31432:41;;;;;;;;:::i;:::-;;;;;;;;29495:1986;;;;;;;6586:20:::3;:18;:20::i;:::-;36943:1:::2;37200::::1;29335:2146:::0;:::o;24534:47::-;;;;;;;;;;;;;:::o;37522:185::-;2572:13;:11;:13::i;:::-;37603:9:::1;37598:102;37622:9;:16;37618:1;:20;37598:102;;;37684:4;37660:7;:21;37668:9;37678:1;37668:12;;;;;;;;:::i;:::-;;;;;;;;37660:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37640:3;;;;;;;37598:102;;;;37522:185:::0;:::o;24115:26::-;;;;;;;;;;;;;:::o;6622:293::-;6024:1;6756:7;;:19;6748:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6024:1;6889:7;:18;;;;6622:293::o;6923:213::-;5980:1;7106:7;:22;;;;6923:213::o;2851:166::-;2922:12;:10;:12::i;:::-;2911:23;;:7;:5;:7::i;:::-;:23;;;2907:103;;2985:12;:10;:12::i;:::-;2958:40;;;;;;;;;;;:::i;:::-;;;;;;;;2907:103;2851:166::o;3999:191::-;4073:16;4092:6;;;;;;;;;;;4073:25;;4118:8;4109:6;;:17;;;;;;;;;;;;;;;;;;4173:8;4142:40;;4163:8;4142:40;;;;;;;;;;;;4062:128;3999:191;:::o;25430:1026::-;25508:1;25494:11;:15;25486:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25565:17;25615:3;24387:1;25586:25;;:11;:25;;;;:::i;:::-;25585:33;;;;:::i;:::-;25565:53;;25629:22;25689:3;24429:2;25655:30;;:11;:30;;;;:::i;:::-;25654:38;;;;:::i;:::-;25629:63;;25703:24;25767:3;24474:2;25731:32;;:11;:32;;;;:::i;:::-;25730:40;;;;:::i;:::-;25703:67;;25854:11;25834:16;25817:14;25805:9;:26;;;;:::i;:::-;:45;;;;:::i;:::-;:60;25783:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;26001:1;25989:9;:13;25985:85;;;26019:19;;;;;;;;;;;:28;;:39;26048:9;26019:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25985:85;26103:1;26086:14;:18;26082:100;;;26121:24;;;;;;;;;;;:33;;:49;26155:14;26121:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26082:100;26217:1;26198:16;:20;26194:106;;;26235:26;;;;;;;;;;;:35;;:53;26271:16;26235:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26194:106;26317:131;26342:11;26368:9;26392:14;26421:16;26317:131;;;;;;;;;:::i;:::-;;;;;;;;25475:981;;;25430:1026;:::o;695:98::-;748:7;775:10;768:17;;695:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:136::-;1114:6;1148:5;1142:12;1132:22;;1025:136;;;:::o;1167:206::-;1288:11;1322:6;1317:3;1310:19;1362:4;1357:3;1353:14;1338:29;;1167:206;;;;:::o;1379:154::-;1468:4;1491:3;1483:11;;1521:4;1516:3;1512:14;1504:22;;1379:154;;;:::o;1539:108::-;1616:24;1634:5;1616:24;:::i;:::-;1611:3;1604:37;1539:108;;:::o;1709:675::-;1840:4;1835:3;1831:14;1926:4;1919:5;1915:16;1909:23;1945:63;2002:4;1997:3;1993:14;1979:12;1945:63;:::i;:::-;1855:163;2105:4;2098:5;2094:16;2088:23;2124:63;2181:4;2176:3;2172:14;2158:12;2124:63;:::i;:::-;2028:169;2285:4;2278:5;2274:16;2268:23;2304:63;2361:4;2356:3;2352:14;2338:12;2304:63;:::i;:::-;2207:170;1809:575;1709:675;;:::o;2390:267::-;2503:10;2524:90;2610:3;2602:6;2524:90;:::i;:::-;2646:4;2641:3;2637:14;2623:28;;2390:267;;;;:::o;2663:135::-;2755:4;2787;2782:3;2778:14;2770:22;;2663:135;;;:::o;2864:908::-;3027:3;3056:76;3126:5;3056:76;:::i;:::-;3148:108;3249:6;3244:3;3148:108;:::i;:::-;3141:115;;3280:78;3352:5;3280:78;:::i;:::-;3381:7;3412:1;3397:350;3422:6;3419:1;3416:13;3397:350;;;3498:6;3492:13;3525:107;3628:3;3613:13;3525:107;:::i;:::-;3518:114;;3655:82;3730:6;3655:82;:::i;:::-;3645:92;;3457:290;3444:1;3441;3437:9;3432:14;;3397:350;;;3401:14;3763:3;3756:10;;3032:740;;;2864:908;;;;:::o;3778:461::-;3965:4;4003:2;3992:9;3988:18;3980:26;;4052:9;4046:4;4042:20;4038:1;4027:9;4023:17;4016:47;4080:152;4227:4;4218:6;4080:152;:::i;:::-;4072:160;;3778:461;;;;:::o;4245:114::-;4312:6;4346:5;4340:12;4330:22;;4245:114;;;:::o;4365:184::-;4464:11;4498:6;4493:3;4486:19;4538:4;4533:3;4529:14;4514:29;;4365:184;;;;:::o;4555:132::-;4622:4;4645:3;4637:11;;4675:4;4670:3;4666:14;4658:22;;4555:132;;;:::o;4693:126::-;4730:7;4770:42;4763:5;4759:54;4748:65;;4693:126;;;:::o;4825:96::-;4862:7;4891:24;4909:5;4891:24;:::i;:::-;4880:35;;4825:96;;;:::o;4927:108::-;5004:24;5022:5;5004:24;:::i;:::-;4999:3;4992:37;4927:108;;:::o;5041:179::-;5110:10;5131:46;5173:3;5165:6;5131:46;:::i;:::-;5209:4;5204:3;5200:14;5186:28;;5041:179;;;;:::o;5226:113::-;5296:4;5328;5323:3;5319:14;5311:22;;5226:113;;;:::o;5375:732::-;5494:3;5523:54;5571:5;5523:54;:::i;:::-;5593:86;5672:6;5667:3;5593:86;:::i;:::-;5586:93;;5703:56;5753:5;5703:56;:::i;:::-;5782:7;5813:1;5798:284;5823:6;5820:1;5817:13;5798:284;;;5899:6;5893:13;5926:63;5985:3;5970:13;5926:63;:::i;:::-;5919:70;;6012:60;6065:6;6012:60;:::i;:::-;6002:70;;5858:224;5845:1;5842;5838:9;5833:14;;5798:284;;;5802:14;6098:3;6091:10;;5499:608;;;5375:732;;;;:::o;6113:114::-;6180:6;6214:5;6208:12;6198:22;;6113:114;;;:::o;6233:184::-;6332:11;6366:6;6361:3;6354:19;6406:4;6401:3;6397:14;6382:29;;6233:184;;;;:::o;6423:132::-;6490:4;6513:3;6505:11;;6543:4;6538:3;6534:14;6526:22;;6423:132;;;:::o;6561:179::-;6630:10;6651:46;6693:3;6685:6;6651:46;:::i;:::-;6729:4;6724:3;6720:14;6706:28;;6561:179;;;;:::o;6746:113::-;6816:4;6848;6843:3;6839:14;6831:22;;6746:113;;;:::o;6895:732::-;7014:3;7043:54;7091:5;7043:54;:::i;:::-;7113:86;7192:6;7187:3;7113:86;:::i;:::-;7106:93;;7223:56;7273:5;7223:56;:::i;:::-;7302:7;7333:1;7318:284;7343:6;7340:1;7337:13;7318:284;;;7419:6;7413:13;7446:63;7505:3;7490:13;7446:63;:::i;:::-;7439:70;;7532:60;7585:6;7532:60;:::i;:::-;7522:70;;7378:224;7365:1;7362;7358:9;7353:14;;7318:284;;;7322:14;7618:3;7611:10;;7019:608;;;6895:732;;;;:::o;7633:634::-;7854:4;7892:2;7881:9;7877:18;7869:26;;7941:9;7935:4;7931:20;7927:1;7916:9;7912:17;7905:47;7969:108;8072:4;8063:6;7969:108;:::i;:::-;7961:116;;8124:9;8118:4;8114:20;8109:2;8098:9;8094:18;8087:48;8152:108;8255:4;8246:6;8152:108;:::i;:::-;8144:116;;7633:634;;;;;:::o;8273:373::-;8416:4;8454:2;8443:9;8439:18;8431:26;;8503:9;8497:4;8493:20;8489:1;8478:9;8474:17;8467:47;8531:108;8634:4;8625:6;8531:108;:::i;:::-;8523:116;;8273:373;;;;:::o;8652:86::-;8687:7;8727:4;8720:5;8716:16;8705:27;;8652:86;;;:::o;8744:118::-;8815:22;8831:5;8815:22;:::i;:::-;8808:5;8805:33;8795:61;;8852:1;8849;8842:12;8795:61;8744:118;:::o;8868:135::-;8912:5;8950:6;8937:20;8928:29;;8966:31;8991:5;8966:31;:::i;:::-;8868:135;;;;:::o;9009:470::-;9075:6;9083;9132:2;9120:9;9111:7;9107:23;9103:32;9100:119;;;9138:79;;:::i;:::-;9100:119;9258:1;9283:53;9328:7;9319:6;9308:9;9304:22;9283:53;:::i;:::-;9273:63;;9229:117;9385:2;9411:51;9454:7;9445:6;9434:9;9430:22;9411:51;:::i;:::-;9401:61;;9356:116;9009:470;;;;;:::o;9485:325::-;9542:6;9591:2;9579:9;9570:7;9566:23;9562:32;9559:119;;;9597:79;;:::i;:::-;9559:119;9717:1;9742:51;9785:7;9776:6;9765:9;9761:22;9742:51;:::i;:::-;9732:61;;9688:115;9485:325;;;;:::o;9816:118::-;9903:24;9921:5;9903:24;:::i;:::-;9898:3;9891:37;9816:118;;:::o;9940:332::-;10061:4;10099:2;10088:9;10084:18;10076:26;;10112:71;10180:1;10169:9;10165:17;10156:6;10112:71;:::i;:::-;10193:72;10261:2;10250:9;10246:18;10237:6;10193:72;:::i;:::-;9940:332;;;;;:::o;10278:90::-;10312:7;10355:5;10348:13;10341:21;10330:32;;10278:90;;;:::o;10374:109::-;10455:21;10470:5;10455:21;:::i;:::-;10450:3;10443:34;10374:109;;:::o;10489:118::-;10576:24;10594:5;10576:24;:::i;:::-;10571:3;10564:37;10489:118;;:::o;10613:1183::-;10940:4;10978:3;10967:9;10963:19;10955:27;;10992:71;11060:1;11049:9;11045:17;11036:6;10992:71;:::i;:::-;11073:72;11141:2;11130:9;11126:18;11117:6;11073:72;:::i;:::-;11155:66;11217:2;11206:9;11202:18;11193:6;11155:66;:::i;:::-;11231;11293:2;11282:9;11278:18;11269:6;11231:66;:::i;:::-;11307:73;11375:3;11364:9;11360:19;11351:6;11307:73;:::i;:::-;11390;11458:3;11447:9;11443:19;11434:6;11390:73;:::i;:::-;11473;11541:3;11530:9;11526:19;11517:6;11473:73;:::i;:::-;11556:67;11618:3;11607:9;11603:19;11594:6;11556:67;:::i;:::-;11633:73;11701:3;11690:9;11686:19;11677:6;11633:73;:::i;:::-;11716;11784:3;11773:9;11769:19;11760:6;11716:73;:::i;:::-;10613:1183;;;;;;;;;;;;;:::o;11802:117::-;11911:1;11908;11901:12;11925:102;11966:6;12017:2;12013:7;12008:2;12001:5;11997:14;11993:28;11983:38;;11925:102;;;:::o;12033:180::-;12081:77;12078:1;12071:88;12178:4;12175:1;12168:15;12202:4;12199:1;12192:15;12219:281;12302:27;12324:4;12302:27;:::i;:::-;12294:6;12290:40;12432:6;12420:10;12417:22;12396:18;12384:10;12381:34;12378:62;12375:88;;;12443:18;;:::i;:::-;12375:88;12483:10;12479:2;12472:22;12262:238;12219:281;;:::o;12506:129::-;12540:6;12567:20;;:::i;:::-;12557:30;;12596:33;12624:4;12616:6;12596:33;:::i;:::-;12506:129;;;:::o;12641:311::-;12718:4;12808:18;12800:6;12797:30;12794:56;;;12830:18;;:::i;:::-;12794:56;12880:4;12872:6;12868:17;12860:25;;12940:4;12934;12930:15;12922:23;;12641:311;;;:::o;12958:117::-;13067:1;13064;13057:12;13081:122;13154:24;13172:5;13154:24;:::i;:::-;13147:5;13144:35;13134:63;;13193:1;13190;13183:12;13134:63;13081:122;:::o;13209:139::-;13255:5;13293:6;13280:20;13271:29;;13309:33;13336:5;13309:33;:::i;:::-;13209:139;;;;:::o;13371:710::-;13467:5;13492:81;13508:64;13565:6;13508:64;:::i;:::-;13492:81;:::i;:::-;13483:90;;13593:5;13622:6;13615:5;13608:21;13656:4;13649:5;13645:16;13638:23;;13709:4;13701:6;13697:17;13689:6;13685:30;13738:3;13730:6;13727:15;13724:122;;;13757:79;;:::i;:::-;13724:122;13872:6;13855:220;13889:6;13884:3;13881:15;13855:220;;;13964:3;13993:37;14026:3;14014:10;13993:37;:::i;:::-;13988:3;13981:50;14060:4;14055:3;14051:14;14044:21;;13931:144;13915:4;13910:3;13906:14;13899:21;;13855:220;;;13859:21;13473:608;;13371:710;;;;;:::o;14104:370::-;14175:5;14224:3;14217:4;14209:6;14205:17;14201:27;14191:122;;14232:79;;:::i;:::-;14191:122;14349:6;14336:20;14374:94;14464:3;14456:6;14449:4;14441:6;14437:17;14374:94;:::i;:::-;14365:103;;14181:293;14104:370;;;;:::o;14480:539::-;14564:6;14613:2;14601:9;14592:7;14588:23;14584:32;14581:119;;;14619:79;;:::i;:::-;14581:119;14767:1;14756:9;14752:17;14739:31;14797:18;14789:6;14786:30;14783:117;;;14819:79;;:::i;:::-;14783:117;14924:78;14994:7;14985:6;14974:9;14970:22;14924:78;:::i;:::-;14914:88;;14710:302;14480:539;;;;:::o;15025:329::-;15084:6;15133:2;15121:9;15112:7;15108:23;15104:32;15101:119;;;15139:79;;:::i;:::-;15101:119;15259:1;15284:53;15329:7;15320:6;15309:9;15305:22;15284:53;:::i;:::-;15274:63;;15230:117;15025:329;;;;:::o;15360:210::-;15447:4;15485:2;15474:9;15470:18;15462:26;;15498:65;15560:1;15549:9;15545:17;15536:6;15498:65;:::i;:::-;15360:210;;;;:::o;15576:117::-;15685:1;15682;15675:12;15716:568;15789:8;15799:6;15849:3;15842:4;15834:6;15830:17;15826:27;15816:122;;15857:79;;:::i;:::-;15816:122;15970:6;15957:20;15947:30;;16000:18;15992:6;15989:30;15986:117;;;16022:79;;:::i;:::-;15986:117;16136:4;16128:6;16124:17;16112:29;;16190:3;16182:4;16174:6;16170:17;16160:8;16156:32;16153:41;16150:128;;;16197:79;;:::i;:::-;16150:128;15716:568;;;;;:::o;16290:934::-;16412:6;16420;16428;16436;16485:2;16473:9;16464:7;16460:23;16456:32;16453:119;;;16491:79;;:::i;:::-;16453:119;16639:1;16628:9;16624:17;16611:31;16669:18;16661:6;16658:30;16655:117;;;16691:79;;:::i;:::-;16655:117;16804:80;16876:7;16867:6;16856:9;16852:22;16804:80;:::i;:::-;16786:98;;;;16582:312;16961:2;16950:9;16946:18;16933:32;16992:18;16984:6;16981:30;16978:117;;;17014:79;;:::i;:::-;16978:117;17127:80;17199:7;17190:6;17179:9;17175:22;17127:80;:::i;:::-;17109:98;;;;16904:313;16290:934;;;;;;;:::o;17230:104::-;17275:7;17304:24;17322:5;17304:24;:::i;:::-;17293:35;;17230:104;;;:::o;17340:142::-;17443:32;17469:5;17443:32;:::i;:::-;17438:3;17431:45;17340:142;;:::o;17488:254::-;17597:4;17635:2;17624:9;17620:18;17612:26;;17648:87;17732:1;17721:9;17717:17;17708:6;17648:87;:::i;:::-;17488:254;;;;:::o;17748:222::-;17841:4;17879:2;17868:9;17864:18;17856:26;;17892:71;17960:1;17949:9;17945:17;17936:6;17892:71;:::i;:::-;17748:222;;;;:::o;17976:138::-;18057:32;18083:5;18057:32;:::i;:::-;18050:5;18047:43;18037:71;;18104:1;18101;18094:12;18037:71;17976:138;:::o;18120:155::-;18174:5;18212:6;18199:20;18190:29;;18228:41;18263:5;18228:41;:::i;:::-;18120:155;;;;:::o;18281:667::-;18382:6;18390;18398;18447:2;18435:9;18426:7;18422:23;18418:32;18415:119;;;18453:79;;:::i;:::-;18415:119;18573:1;18598:61;18651:7;18642:6;18631:9;18627:22;18598:61;:::i;:::-;18588:71;;18544:125;18708:2;18734:61;18787:7;18778:6;18767:9;18763:22;18734:61;:::i;:::-;18724:71;;18679:126;18844:2;18870:61;18923:7;18914:6;18903:9;18899:22;18870:61;:::i;:::-;18860:71;;18815:126;18281:667;;;;;:::o;18954:116::-;19024:21;19039:5;19024:21;:::i;:::-;19017:5;19014:32;19004:60;;19060:1;19057;19050:12;19004:60;18954:116;:::o;19076:133::-;19119:5;19157:6;19144:20;19135:29;;19173:30;19197:5;19173:30;:::i;:::-;19076:133;;;;:::o;19215:905::-;19307:6;19315;19323;19331;19339;19388:3;19376:9;19367:7;19363:23;19359:33;19356:120;;;19395:79;;:::i;:::-;19356:120;19515:1;19540:53;19585:7;19576:6;19565:9;19561:22;19540:53;:::i;:::-;19530:63;;19486:117;19642:2;19668:53;19713:7;19704:6;19693:9;19689:22;19668:53;:::i;:::-;19658:63;;19613:118;19770:2;19796:50;19838:7;19829:6;19818:9;19814:22;19796:50;:::i;:::-;19786:60;;19741:115;19895:2;19921:53;19966:7;19957:6;19946:9;19942:22;19921:53;:::i;:::-;19911:63;;19866:118;20023:3;20050:53;20095:7;20086:6;20075:9;20071:22;20050:53;:::i;:::-;20040:63;;19994:119;19215:905;;;;;;;;:::o;20126:222::-;20219:4;20257:2;20246:9;20242:18;20234:26;;20270:71;20338:1;20327:9;20323:17;20314:6;20270:71;:::i;:::-;20126:222;;;;:::o;20354:442::-;20503:4;20541:2;20530:9;20526:18;20518:26;;20554:71;20622:1;20611:9;20607:17;20598:6;20554:71;:::i;:::-;20635:72;20703:2;20692:9;20688:18;20679:6;20635:72;:::i;:::-;20717;20785:2;20774:9;20770:18;20761:6;20717:72;:::i;:::-;20354:442;;;;;;:::o;20802:474::-;20870:6;20878;20927:2;20915:9;20906:7;20902:23;20898:32;20895:119;;;20933:79;;:::i;:::-;20895:119;21053:1;21078:53;21123:7;21114:6;21103:9;21099:22;21078:53;:::i;:::-;21068:63;;21024:117;21180:2;21206:53;21251:7;21242:6;21231:9;21227:22;21206:53;:::i;:::-;21196:63;;21151:118;20802:474;;;;;:::o;21282:112::-;21365:22;21381:5;21365:22;:::i;:::-;21360:3;21353:35;21282:112;;:::o;21400:214::-;21489:4;21527:2;21516:9;21512:18;21504:26;;21540:67;21604:1;21593:9;21589:17;21580:6;21540:67;:::i;:::-;21400:214;;;;:::o;21620:169::-;21704:11;21738:6;21733:3;21726:19;21778:4;21773:3;21769:14;21754:29;;21620:169;;;;:::o;21795:161::-;21935:13;21931:1;21923:6;21919:14;21912:37;21795:161;:::o;21962:366::-;22104:3;22125:67;22189:2;22184:3;22125:67;:::i;:::-;22118:74;;22201:93;22290:3;22201:93;:::i;:::-;22319:2;22314:3;22310:12;22303:19;;21962:366;;;:::o;22334:419::-;22500:4;22538:2;22527:9;22523:18;22515:26;;22587:9;22581:4;22577:20;22573:1;22562:9;22558:17;22551:47;22615:131;22741:4;22615:131;:::i;:::-;22607:139;;22334:419;;;:::o;22759:180::-;22807:77;22804:1;22797:88;22904:4;22901:1;22894:15;22928:4;22925:1;22918:15;22945:169;23085:21;23081:1;23073:6;23069:14;23062:45;22945:169;:::o;23120:366::-;23262:3;23283:67;23347:2;23342:3;23283:67;:::i;:::-;23276:74;;23359:93;23448:3;23359:93;:::i;:::-;23477:2;23472:3;23468:12;23461:19;;23120:366;;;:::o;23492:419::-;23658:4;23696:2;23685:9;23681:18;23673:26;;23745:9;23739:4;23735:20;23731:1;23720:9;23716:17;23709:47;23773:131;23899:4;23773:131;:::i;:::-;23765:139;;23492:419;;;:::o;23917:147::-;24018:11;24055:3;24040:18;;23917:147;;;;:::o;24070:114::-;;:::o;24190:398::-;24349:3;24370:83;24451:1;24446:3;24370:83;:::i;:::-;24363:90;;24462:93;24551:3;24462:93;:::i;:::-;24580:1;24575:3;24571:11;24564:18;;24190:398;;;:::o;24594:379::-;24778:3;24800:147;24943:3;24800:147;:::i;:::-;24793:154;;24964:3;24957:10;;24594:379;;;:::o;24979:164::-;25119:16;25115:1;25107:6;25103:14;25096:40;24979:164;:::o;25149:366::-;25291:3;25312:67;25376:2;25371:3;25312:67;:::i;:::-;25305:74;;25388:93;25477:3;25388:93;:::i;:::-;25506:2;25501:3;25497:12;25490:19;;25149:366;;;:::o;25521:419::-;25687:4;25725:2;25714:9;25710:18;25702:26;;25774:9;25768:4;25764:20;25760:1;25749:9;25745:17;25738:47;25802:131;25928:4;25802:131;:::i;:::-;25794:139;;25521:419;;;:::o;25946:171::-;26086:23;26082:1;26074:6;26070:14;26063:47;25946:171;:::o;26123:366::-;26265:3;26286:67;26350:2;26345:3;26286:67;:::i;:::-;26279:74;;26362:93;26451:3;26362:93;:::i;:::-;26480:2;26475:3;26471:12;26464:19;;26123:366;;;:::o;26495:419::-;26661:4;26699:2;26688:9;26684:18;26676:26;;26748:9;26742:4;26738:20;26734:1;26723:9;26719:17;26712:47;26776:131;26902:4;26776:131;:::i;:::-;26768:139;;26495:419;;;:::o;26920:180::-;26968:77;26965:1;26958:88;27065:4;27062:1;27055:15;27089:4;27086:1;27079:15;27106:233;27145:3;27168:24;27186:5;27168:24;:::i;:::-;27159:33;;27214:66;27207:5;27204:77;27201:103;;27284:18;;:::i;:::-;27201:103;27331:1;27324:5;27320:13;27313:20;;27106:233;;;:::o;27345:171::-;27485:23;27481:1;27473:6;27469:14;27462:47;27345:171;:::o;27522:366::-;27664:3;27685:67;27749:2;27744:3;27685:67;:::i;:::-;27678:74;;27761:93;27850:3;27761:93;:::i;:::-;27879:2;27874:3;27870:12;27863:19;;27522:366;;;:::o;27894:419::-;28060:4;28098:2;28087:9;28083:18;28075:26;;28147:9;28141:4;28137:20;28133:1;28122:9;28118:17;28111:47;28175:131;28301:4;28175:131;:::i;:::-;28167:139;;27894:419;;;:::o;28319:166::-;28459:18;28455:1;28447:6;28443:14;28436:42;28319:166;:::o;28491:366::-;28633:3;28654:67;28718:2;28713:3;28654:67;:::i;:::-;28647:74;;28730:93;28819:3;28730:93;:::i;:::-;28848:2;28843:3;28839:12;28832:19;;28491:366;;;:::o;28863:419::-;29029:4;29067:2;29056:9;29052:18;29044:26;;29116:9;29110:4;29106:20;29102:1;29091:9;29087:17;29080:47;29144:131;29270:4;29144:131;:::i;:::-;29136:139;;28863:419;;;:::o;29288:166::-;29428:18;29424:1;29416:6;29412:14;29405:42;29288:166;:::o;29460:366::-;29602:3;29623:67;29687:2;29682:3;29623:67;:::i;:::-;29616:74;;29699:93;29788:3;29699:93;:::i;:::-;29817:2;29812:3;29808:12;29801:19;;29460:366;;;:::o;29832:419::-;29998:4;30036:2;30025:9;30021:18;30013:26;;30085:9;30079:4;30075:20;30071:1;30060:9;30056:17;30049:47;30113:131;30239:4;30113:131;:::i;:::-;30105:139;;29832:419;;;:::o;30257:191::-;30297:3;30316:20;30334:1;30316:20;:::i;:::-;30311:25;;30350:20;30368:1;30350:20;:::i;:::-;30345:25;;30393:1;30390;30386:9;30379:16;;30414:3;30411:1;30408:10;30405:36;;;30421:18;;:::i;:::-;30405:36;30257:191;;;;:::o;30454:223::-;30594:34;30590:1;30582:6;30578:14;30571:58;30663:6;30658:2;30650:6;30646:15;30639:31;30454:223;:::o;30683:366::-;30825:3;30846:67;30910:2;30905:3;30846:67;:::i;:::-;30839:74;;30922:93;31011:3;30922:93;:::i;:::-;31040:2;31035:3;31031:12;31024:19;;30683:366;;;:::o;31055:419::-;31221:4;31259:2;31248:9;31244:18;31236:26;;31308:9;31302:4;31298:20;31294:1;31283:9;31279:17;31272:47;31336:131;31462:4;31336:131;:::i;:::-;31328:139;;31055:419;;;:::o;31480:168::-;31620:20;31616:1;31608:6;31604:14;31597:44;31480:168;:::o;31654:366::-;31796:3;31817:67;31881:2;31876:3;31817:67;:::i;:::-;31810:74;;31893:93;31982:3;31893:93;:::i;:::-;32011:2;32006:3;32002:12;31995:19;;31654:366;;;:::o;32026:419::-;32192:4;32230:2;32219:9;32215:18;32207:26;;32279:9;32273:4;32269:20;32265:1;32254:9;32250:17;32243:47;32307:131;32433:4;32307:131;:::i;:::-;32299:139;;32026:419;;;:::o;32451:442::-;32600:4;32638:2;32627:9;32623:18;32615:26;;32651:71;32719:1;32708:9;32704:17;32695:6;32651:71;:::i;:::-;32732:72;32800:2;32789:9;32785:18;32776:6;32732:72;:::i;:::-;32814;32882:2;32871:9;32867:18;32858:6;32814:72;:::i;:::-;32451:442;;;;;;:::o;32899:170::-;33039:22;33035:1;33027:6;33023:14;33016:46;32899:170;:::o;33075:366::-;33217:3;33238:67;33302:2;33297:3;33238:67;:::i;:::-;33231:74;;33314:93;33403:3;33314:93;:::i;:::-;33432:2;33427:3;33423:12;33416:19;;33075:366;;;:::o;33447:419::-;33613:4;33651:2;33640:9;33636:18;33628:26;;33700:9;33694:4;33690:20;33686:1;33675:9;33671:17;33664:47;33728:131;33854:4;33728:131;:::i;:::-;33720:139;;33447:419;;;:::o;33872:177::-;34012:29;34008:1;34000:6;33996:14;33989:53;33872:177;:::o;34055:366::-;34197:3;34218:67;34282:2;34277:3;34218:67;:::i;:::-;34211:74;;34294:93;34383:3;34294:93;:::i;:::-;34412:2;34407:3;34403:12;34396:19;;34055:366;;;:::o;34427:419::-;34593:4;34631:2;34620:9;34616:18;34608:26;;34680:9;34674:4;34670:20;34666:1;34655:9;34651:17;34644:47;34708:131;34834:4;34708:131;:::i;:::-;34700:139;;34427:419;;;:::o;34852:167::-;34889:3;34912:22;34928:5;34912:22;:::i;:::-;34903:31;;34956:4;34949:5;34946:15;34943:41;;34964:18;;:::i;:::-;34943:41;35011:1;35004:5;35000:13;34993:20;;34852:167;;;:::o;35025:177::-;35165:29;35161:1;35153:6;35149:14;35142:53;35025:177;:::o;35208:366::-;35350:3;35371:67;35435:2;35430:3;35371:67;:::i;:::-;35364:74;;35447:93;35536:3;35447:93;:::i;:::-;35565:2;35560:3;35556:12;35549:19;;35208:366;;;:::o;35580:419::-;35746:4;35784:2;35773:9;35769:18;35761:26;;35833:9;35827:4;35823:20;35819:1;35808:9;35804:17;35797:47;35861:131;35987:4;35861:131;:::i;:::-;35853:139;;35580:419;;;:::o;36005:182::-;36145:34;36141:1;36133:6;36129:14;36122:58;36005:182;:::o;36193:366::-;36335:3;36356:67;36420:2;36415:3;36356:67;:::i;:::-;36349:74;;36432:93;36521:3;36432:93;:::i;:::-;36550:2;36545:3;36541:12;36534:19;;36193:366;;;:::o;36565:419::-;36731:4;36769:2;36758:9;36754:18;36746:26;;36818:9;36812:4;36808:20;36804:1;36793:9;36789:17;36782:47;36846:131;36972:4;36846:131;:::i;:::-;36838:139;;36565:419;;;:::o;36990:221::-;37130:34;37126:1;37118:6;37114:14;37107:58;37199:4;37194:2;37186:6;37182:15;37175:29;36990:221;:::o;37217:366::-;37359:3;37380:67;37444:2;37439:3;37380:67;:::i;:::-;37373:74;;37456:93;37545:3;37456:93;:::i;:::-;37574:2;37569:3;37565:12;37558:19;;37217:366;;;:::o;37589:419::-;37755:4;37793:2;37782:9;37778:18;37770:26;;37842:9;37836:4;37832:20;37828:1;37817:9;37813:17;37806:47;37870:131;37996:4;37870:131;:::i;:::-;37862:139;;37589:419;;;:::o;38014:180::-;38154:32;38150:1;38142:6;38138:14;38131:56;38014:180;:::o;38200:366::-;38342:3;38363:67;38427:2;38422:3;38363:67;:::i;:::-;38356:74;;38439:93;38528:3;38439:93;:::i;:::-;38557:2;38552:3;38548:12;38541:19;;38200:366;;;:::o;38572:419::-;38738:4;38776:2;38765:9;38761:18;38753:26;;38825:9;38819:4;38815:20;38811:1;38800:9;38796:17;38789:47;38853:131;38979:4;38853:131;:::i;:::-;38845:139;;38572:419;;;:::o;38997:194::-;39037:4;39057:20;39075:1;39057:20;:::i;:::-;39052:25;;39091:20;39109:1;39091:20;:::i;:::-;39086:25;;39135:1;39132;39128:9;39120:17;;39159:1;39153:4;39150:11;39147:37;;;39164:18;;:::i;:::-;39147:37;38997:194;;;;:::o;39197:652::-;39396:4;39434:3;39423:9;39419:19;39411:27;;39448:71;39516:1;39505:9;39501:17;39492:6;39448:71;:::i;:::-;39529:72;39597:2;39586:9;39582:18;39573:6;39529:72;:::i;:::-;39611;39679:2;39668:9;39664:18;39655:6;39611:72;:::i;:::-;39693:66;39755:2;39744:9;39740:18;39731:6;39693:66;:::i;:::-;39769:73;39837:3;39826:9;39822:19;39813:6;39769:73;:::i;:::-;39197:652;;;;;;;;:::o;39855:178::-;39995:30;39991:1;39983:6;39979:14;39972:54;39855:178;:::o;40039:366::-;40181:3;40202:67;40266:2;40261:3;40202:67;:::i;:::-;40195:74;;40278:93;40367:3;40278:93;:::i;:::-;40396:2;40391:3;40387:12;40380:19;;40039:366;;;:::o;40411:419::-;40577:4;40615:2;40604:9;40600:18;40592:26;;40664:9;40658:4;40654:20;40650:1;40639:9;40635:17;40628:47;40692:131;40818:4;40692:131;:::i;:::-;40684:139;;40411:419;;;:::o;40836:166::-;40976:18;40972:1;40964:6;40960:14;40953:42;40836:166;:::o;41008:366::-;41150:3;41171:67;41235:2;41230:3;41171:67;:::i;:::-;41164:74;;41247:93;41336:3;41247:93;:::i;:::-;41365:2;41360:3;41356:12;41349:19;;41008:366;;;:::o;41380:419::-;41546:4;41584:2;41573:9;41569:18;41561:26;;41633:9;41627:4;41623:20;41619:1;41608:9;41604:17;41597:47;41661:131;41787:4;41661:131;:::i;:::-;41653:139;;41380:419;;;:::o;41805:79::-;41844:7;41873:5;41862:16;;41805:79;;;:::o;41890:157::-;41995:45;42015:24;42033:5;42015:24;:::i;:::-;41995:45;:::i;:::-;41990:3;41983:58;41890:157;;:::o;42053:94::-;42086:8;42134:5;42130:2;42126:14;42105:35;;42053:94;;;:::o;42153:::-;42192:7;42221:20;42235:5;42221:20;:::i;:::-;42210:31;;42153:94;;;:::o;42253:100::-;42292:7;42321:26;42341:5;42321:26;:::i;:::-;42310:37;;42253:100;;;:::o;42359:157::-;42464:45;42484:24;42502:5;42484:24;:::i;:::-;42464:45;:::i;:::-;42459:3;42452:58;42359:157;;:::o;42522:538::-;42690:3;42705:75;42776:3;42767:6;42705:75;:::i;:::-;42805:2;42800:3;42796:12;42789:19;;42818:75;42889:3;42880:6;42818:75;:::i;:::-;42918:2;42913:3;42909:12;42902:19;;42931:75;43002:3;42993:6;42931:75;:::i;:::-;43031:2;43026:3;43022:12;43015:19;;43051:3;43044:10;;42522:538;;;;;;:::o;43066:180::-;43114:77;43111:1;43104:88;43211:4;43208:1;43201:15;43235:4;43232:1;43225:15;43252:176;43284:1;43301:20;43319:1;43301:20;:::i;:::-;43296:25;;43335:20;43353:1;43335:20;:::i;:::-;43330:25;;43374:1;43364:35;;43379:18;;:::i;:::-;43364:35;43420:1;43417;43413:9;43408:14;;43252:176;;;;:::o;43434:171::-;43574:23;43570:1;43562:6;43558:14;43551:47;43434:171;:::o;43611:366::-;43753:3;43774:67;43838:2;43833:3;43774:67;:::i;:::-;43767:74;;43850:93;43939:3;43850:93;:::i;:::-;43968:2;43963:3;43959:12;43952:19;;43611:366;;;:::o;43983:419::-;44149:4;44187:2;44176:9;44172:18;44164:26;;44236:9;44230:4;44226:20;44222:1;44211:9;44207:17;44200:47;44264:131;44390:4;44264:131;:::i;:::-;44256:139;;43983:419;;;:::o;44408:332::-;44529:4;44567:2;44556:9;44552:18;44544:26;;44580:71;44648:1;44637:9;44633:17;44624:6;44580:71;:::i;:::-;44661:72;44729:2;44718:9;44714:18;44705:6;44661:72;:::i;:::-;44408:332;;;;;:::o;44746:137::-;44800:5;44831:6;44825:13;44816:22;;44847:30;44871:5;44847:30;:::i;:::-;44746:137;;;;:::o;44889:345::-;44956:6;45005:2;44993:9;44984:7;44980:23;44976:32;44973:119;;;45011:79;;:::i;:::-;44973:119;45131:1;45156:61;45209:7;45200:6;45189:9;45185:22;45156:61;:::i;:::-;45146:71;;45102:125;44889:345;;;;:::o;45240:171::-;45380:23;45376:1;45368:6;45364:14;45357:47;45240:171;:::o;45417:366::-;45559:3;45580:67;45644:2;45639:3;45580:67;:::i;:::-;45573:74;;45656:93;45745:3;45656:93;:::i;:::-;45774:2;45769:3;45765:12;45758:19;;45417:366;;;:::o;45789:419::-;45955:4;45993:2;45982:9;45978:18;45970:26;;46042:9;46036:4;46032:20;46028:1;46017:9;46013:17;46006:47;46070:131;46196:4;46070:131;:::i;:::-;46062:139;;45789:419;;;:::o;46214:442::-;46363:4;46401:2;46390:9;46386:18;46378:26;;46414:71;46482:1;46471:9;46467:17;46458:6;46414:71;:::i;:::-;46495:72;46563:2;46552:9;46548:18;46539:6;46495:72;:::i;:::-;46577;46645:2;46634:9;46630:18;46621:6;46577:72;:::i;:::-;46214:442;;;;;;:::o;46662:181::-;46802:33;46798:1;46790:6;46786:14;46779:57;46662:181;:::o;46849:366::-;46991:3;47012:67;47076:2;47071:3;47012:67;:::i;:::-;47005:74;;47088:93;47177:3;47088:93;:::i;:::-;47206:2;47201:3;47197:12;47190:19;;46849:366;;;:::o;47221:419::-;47387:4;47425:2;47414:9;47410:18;47402:26;;47474:9;47468:4;47464:20;47460:1;47449:9;47445:17;47438:47;47502:131;47628:4;47502:131;:::i;:::-;47494:139;;47221:419;;;:::o;47646:225::-;47786:34;47782:1;47774:6;47770:14;47763:58;47855:8;47850:2;47842:6;47838:15;47831:33;47646:225;:::o;47877:366::-;48019:3;48040:67;48104:2;48099:3;48040:67;:::i;:::-;48033:74;;48116:93;48205:3;48116:93;:::i;:::-;48234:2;48229:3;48225:12;48218:19;;47877:366;;;:::o;48249:419::-;48415:4;48453:2;48442:9;48438:18;48430:26;;48502:9;48496:4;48492:20;48488:1;48477:9;48473:17;48466:47;48530:131;48656:4;48530:131;:::i;:::-;48522:139;;48249:419;;;:::o;48674:410::-;48714:7;48737:20;48755:1;48737:20;:::i;:::-;48732:25;;48771:20;48789:1;48771:20;:::i;:::-;48766:25;;48826:1;48823;48819:9;48848:30;48866:11;48848:30;:::i;:::-;48837:41;;49027:1;49018:7;49014:15;49011:1;49008:22;48988:1;48981:9;48961:83;48938:139;;49057:18;;:::i;:::-;48938:139;48722:362;48674:410;;;;:::o;49090:185::-;49130:1;49147:20;49165:1;49147:20;:::i;:::-;49142:25;;49181:20;49199:1;49181:20;:::i;:::-;49176:25;;49220:1;49210:35;;49225:18;;:::i;:::-;49210:35;49267:1;49264;49260:9;49255:14;;49090:185;;;;:::o;49281:175::-;49421:27;49417:1;49409:6;49405:14;49398:51;49281:175;:::o;49462:366::-;49604:3;49625:67;49689:2;49684:3;49625:67;:::i;:::-;49618:74;;49701:93;49790:3;49701:93;:::i;:::-;49819:2;49814:3;49810:12;49803:19;;49462:366;;;:::o;49834:419::-;50000:4;50038:2;50027:9;50023:18;50015:26;;50087:9;50081:4;50077:20;50073:1;50062:9;50058:17;50051:47;50115:131;50241:4;50115:131;:::i;:::-;50107:139;;49834:419;;;:::o;50259:553::-;50436:4;50474:3;50463:9;50459:19;50451:27;;50488:71;50556:1;50545:9;50541:17;50532:6;50488:71;:::i;:::-;50569:72;50637:2;50626:9;50622:18;50613:6;50569:72;:::i;:::-;50651;50719:2;50708:9;50704:18;50695:6;50651:72;:::i;:::-;50733;50801:2;50790:9;50786:18;50777:6;50733:72;:::i;:::-;50259:553;;;;;;;:::o
Swarm Source
ipfs://b68cf06e9680058654a6dd5ba9b843ed1caa21c223dca332cd8663c7b3e9b11e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
APE | 100.00% | $0.644656 | 0.000000000000000015 | <$0.000001 |
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.