Overview
APE Balance
APE Value
Less Than $0.01 (@ $0.56/APE)More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
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; // 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); } event Debug(string message, uint256 value); 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"); emit Debug("Participants length", currentMatch.participants.length); uint256 totalWeightedEntries = 0; for (uint256 i = 0; i < currentMatch.participants.length; i++) { totalWeightedEntries += currentMatch.participantEntries[currentMatch.participants[i]]; } emit Debug("Total weighted entries", totalWeightedEntries); require(totalWeightedEntries > 0, "No valid entries"); uint256 randomSeed = uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, msg.sender))); emit Debug("Random seed", randomSeed); uint256 winningEntry = randomSeed % totalWeightedEntries; emit Debug("Winning entry", winningEntry); 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; } } emit Debug("Winner", uint256(uint160(winner))); 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; _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
Contract ABI
API[{"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":"string","name":"message","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Debug","type":"event"},{"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
608060405234801561000f575f80fd5b5060405161483e38038061483e833981810160405281019061003191906101de565b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100999190610218565b60405180910390fd5b6100b1816100bf60201b60201c565b506001808190555050610231565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101ad82610184565b9050919050565b6101bd816101a3565b81146101c7575f80fd5b50565b5f815190506101d8816101b4565b92915050565b5f602082840312156101f3576101f2610180565b5b5f610200848285016101ca565b91505092915050565b610212816101a3565b82525050565b5f60208201905061022b5f830184610209565b92915050565b6146008061023e5f395ff3fe6080604052600436106101b6575f3560e01c80638da5cb5b116100eb578063e53805c711610089578063f737d21d11610063578063f737d21d146105db578063f7dc078b14610603578063fbe9e7511461062d578063fd23efef14610655576101b6565b8063e53805c714610561578063ee9b29401461058b578063f2fde38b146105b3576101b6565b8063bc3da535116100c5578063bc3da53514610495578063bc3e2284146104d1578063d02c8cdf1461050f578063d2c4d41414610537576101b6565b80638da5cb5b1461041b57806390bd67e514610445578063b92d70b81461046d576101b6565b80634768d4ef11610158578063768b5c6711610132578063768b5c67146103655780637bbf4a3f1461038d57806382d97110146103c957806384267959146103f1576101b6565b80634768d4ef146102e25780635e42f10e14610327578063715018a61461034f576101b6565b806325a3d4361161019457806325a3d4361461022257806329dc91c31461025f578063330ab39a1461028957806333a35448146102a5576101b6565b8063049ac59b146101ba578063110f8874146101e257806317be85c3146101f8575b5f80fd5b3480156101c5575f80fd5b506101e060048036038101906101db9190612c74565b61067f565b005b3480156101ed575f80fd5b506101f66107b9565b005b348015610203575f80fd5b5061020c61093a565b6040516102199190612d96565b60405180910390f35b34801561022d575f80fd5b5061024860048036038101906102439190612c74565b610a32565b604051610256929190612f45565b60405180910390f35b34801561026a575f80fd5b50610273610c50565b6040516102809190612f7a565b60405180910390f35b6102a3600480360381019061029e9190612fd0565b610e12565b005b3480156102b0575f80fd5b506102cb60048036038101906102c6919061300e565b611229565b6040516102d9929190613048565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612c74565b6112ea565b60405161031e9a99989796959493929190613098565b60405180910390f35b348015610332575f80fd5b5061034d600480360381019061034891906132ac565b61138e565b005b34801561035a575f80fd5b50610363611420565b005b348015610370575f80fd5b5061038b60048036038101906103869190612c74565b611433565b005b348015610398575f80fd5b506103b360048036038101906103ae91906132f3565b61156e565b6040516103c0919061331e565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea9190613390565b61158b565b005b3480156103fc575f80fd5b506104056116ae565b604051610412919061342e565b60405180910390f35b348015610426575f80fd5b5061042f6116d3565b60405161043c9190613447565b60405180910390f35b348015610450575f80fd5b5061046b6004803603810190610466919061348a565b6116fa565b005b348015610478575f80fd5b50610493600480360381019061048e9190613504565b611911565b005b3480156104a0575f80fd5b506104bb60048036038101906104b691906132f3565b611a58565b6040516104c8919061357b565b60405180910390f35b3480156104dc575f80fd5b506104f760048036038101906104f2919061300e565b611a6d565b60405161050693929190613594565b60405180910390f35b34801561051a575f80fd5b5061053560048036038101906105309190612c74565b611a93565b005b348015610542575f80fd5b5061054b611d30565b604051610558919061342e565b60405180910390f35b34801561056c575f80fd5b50610575611d55565b6040516105829190612f7a565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac91906135c9565b611eb2565b005b3480156105be575f80fd5b506105d960048036038101906105d491906132f3565b611f65565b005b3480156105e6575f80fd5b5061060160048036038101906105fc9190612c74565b611fe9565b005b34801561060e575f80fd5b50610617612775565b604051610624919061342e565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e91906132ac565b61279a565b005b348015610660575f80fd5b5061066961282d565b6040516106769190613616565b60405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1661069e6116d3565b73ffffffffffffffffffffffffffffffffffffffff161480610706575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c90613689565b60405180910390fd5b5f6004828154811061075a576107596136a7565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507fbd2800ce670bc629d6709a5facc3b0e4748e1b212b7e420b1ed292778a4c5046816040516107ae919061357b565b60405180910390a150565b6107c161283f565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b9061371e565b60405180910390fd5b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f3373ffffffffffffffffffffffffffffffffffffffff16826040516108ab90613769565b5f6040518083038185875af1925050503d805f81146108e5576040519150601f19603f3d011682016040523d82523d5f602084013e6108ea565b606091505b505090508061092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906137c7565b60405180910390fd5b505061093861288e565b565b606060025f9054906101000a900460ff1660ff1667ffffffffffffffff81111561096757610966613146565b5b6040519080825280602002602001820160405280156109a057816020015b61098d612c12565b8152602001906001900390816109855790505b5090505f5b60025f9054906101000a900460ff1660ff168160ff161015610a2e5760035f8260ff1660ff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050828260ff1681518110610a1657610a156136a7565b5b602002602001018190525080806001019150506109a5565b5090565b606080826004805490508110610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a749061382f565b60405180910390fd5b5f60048581548110610a9257610a916136a7565b5b905f5260205f2090600a020190505f816009018054905090508067ffffffffffffffff811115610ac557610ac4613146565b5b604051908082528060200260200182016040528015610af35781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115610b1057610b0f613146565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b5093505f5b81811015610c47575f836009018281548110610b6257610b616136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080878381518110610ba057610b9f6136a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054868381518110610c2d57610c2c6136a7565b5b602002602001018181525050508080600101915050610b43565b50505050915091565b60605f60048054905067ffffffffffffffff811115610c7257610c71613146565b5b604051908082528060200260200182016040528015610ca05781602001602082028036833780820191505090505b5090505f805b600480549050811015610d6a575f60048281548110610cc857610cc76136a7565b5b905f5260205f2090600a0201905080600101544210158015610cf85750806002015f9054906101000a900460ff16155b8015610d1357508060020160019054906101000a900460ff16155b8015610d2557505f8160090180549050115b15610d5c57805f0154848481518110610d4157610d406136a7565b5b6020026020010181815250508280610d589061387a565b9350505b508080600101915050610ca6565b505f8167ffffffffffffffff811115610d8657610d85613146565b5b604051908082528060200260200182016040528015610db45781602001602082028036833780820191505090505b5090505f5b82811015610e0857838181518110610dd457610dd36136a7565b5b6020026020010151828281518110610def57610dee6136a7565b5b6020026020010181815250508080600101915050610db9565b5080935050505090565b816004805490508110610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e519061382f565b60405180910390fd5b815f60035f8360ff1660ff1681526020019081526020015f2060010154141580610e9e57505f60035f8360ff1660ff1681526020019081526020015f206002015414155b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed49061390b565b60405180910390fd5b8360048181548110610ef257610ef16136a7565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613973565b60405180910390fd5b610f5661283f565b5f60048681548110610f6b57610f6a6136a7565b5b905f5260205f2090600a020190508060010154421080610f9a57508060020160019054906101000a900460ff16155b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906139db565b60405180910390fd5b5f60035f8760ff1660ff1681526020019081526020015f2090505f8160020154826001015461100891906139f9565b9050826004015481846003015461101f91906139f9565b1115611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613a9c565b60405180910390fd5b816001015434146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613b04565b60405180910390fd5b5f836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361114f578260090133908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461119d91906139f9565b9250508190555080836003015f8282546111b791906139f9565b925050819055508160010154836008015f8282546111d591906139f9565b925050819055507f338e0cd33c4e120afcd73f43f082fd8940ed67ac35180d278d2eb4f3ed51d92e88338360405161120f93929190613b22565b60405180910390a150505061122261288e565b5050505050565b5f805f60035f8560ff1660ff1681526020019081526020015f2060010154118061126c57505f60035f8560ff1660ff1681526020019081526020015f2060020154115b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613ba1565b60405180910390fd5b60035f8460ff1660ff1681526020019081526020015f206001015460035f8560ff1660ff1681526020019081526020015f206002015491509150915091565b600481815481106112f9575f80fd5b905f5260205f2090600a02015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490806008015490508a565b611396612897565b5f5b815181101561141c575f60055f8484815181106113b8576113b76136a7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611398565b5050565b611428612897565b6114315f61291e565b565b3373ffffffffffffffffffffffffffffffffffffffff166114526116d3565b73ffffffffffffffffffffffffffffffffffffffff1614806114ba575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090613689565b60405180910390fd5b60016004828154811061150f5761150e6136a7565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507f9f6b838e8160012b261280722f7d000f9a616b49bae77628ab03db3142190c6881604051611563919061357b565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b611593612897565b8181905084849050146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613c09565b60405180910390fd5b5f5b848490508160ff16101561168a5760405180606001604052808260ff16815260200186868460ff16818110611615576116146136a7565b5b90506020020135815260200184848460ff16818110611637576116366136a7565b5b9050602002013581525060035f8360ff1660ff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050808061168290613c27565b9150506115dd565b508383905060025f6101000a81548160ff021916908360ff16021790555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611702612897565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790613c99565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613d01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613d8f565b60405180910390fd5b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611919612897565b42851161195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613df7565b60405180910390fd5b5f600460018160018154018082558091505003905f5260205f2090600a02019050600160048054905061198e9190613e15565b815f018190555085816001018190555084816005015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160050160146101000a81548160ff0219169083151502179055508281600601819055508181600401819055507f712a06043bdc55fb71b57e8747caf273ae1c60da08943aa231909b47f5532ed3815f015487878787604051611a48959493929190613e48565b60405180910390a1505050505050565b6006602052805f5260405f205f915090505481565b6003602052805f5260405f205f91509050805f0154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff16611ab26116d3565b73ffffffffffffffffffffffffffffffffffffffff161480611b1a575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090613689565b60405180910390fd5b806004805490508110611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b989061382f565b60405180910390fd5b611ba961283f565b5f60048381548110611bbe57611bbd6136a7565b5b905f5260205f2090600a020190505f81600901805490501115611ccf575f5b8160090180549050811015611ccd575f826009018281548110611c0357611c026136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050826007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb891906139f9565b92505081905550508080600101915050611bdd565b505b60018160020160016101000a81548160ff0219169083151502179055507f700135b4fe8746e2d2c85a9baa43c62887740aebfeb3a439f71a083fe5d5675983604051611d1b919061357b565b60405180910390a150611d2c61288e565b5050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f805b600480549050811015611db85760048181548110611d7b57611d7a6136a7565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611dab578180611da79061387a565b9250505b8080600101915050611d5a565b505f8167ffffffffffffffff811115611dd457611dd3613146565b5b604051908082528060200260200182016040528015611e025781602001602082028036833780820191505090505b5090505f805b600480549050811015611ea85760048181548110611e2957611e286136a7565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611e9b5760048181548110611e5e57611e5d6136a7565b5b905f5260205f2090600a02015f0154838381518110611e8057611e7f6136a7565b5b6020026020010181815250508180611e979061387a565b9250505b8080600101915050611e08565b5081935050505090565b611eba612897565b604051806060016040528060025f9054906101000a900460ff1660ff1681526020018381526020018281525060035f60025f9054906101000a900460ff1660ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505060025f81819054906101000a900460ff1680929190611f4890613c27565b91906101000a81548160ff021916908360ff160217905550505050565b611f6d612897565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd49190613447565b60405180910390fd5b611fe68161291e565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120086116d3565b73ffffffffffffffffffffffffffffffffffffffff161480612070575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690613689565b60405180910390fd5b8060048054905081106120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061382f565b60405180910390fd5b816004818154811061210c5761210b6136a7565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90613973565b60405180910390fd5b61217061283f565b5f60048481548110612185576121846136a7565b5b905f5260205f2090600a020190505f8160090180549050116121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390613ee3565b60405180910390fd5b7f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d657781600901805490506040516122129190613f4b565b60405180910390a15f805b82600901805490508110156122c357826007015f846009018381548110612247576122466136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826122b491906139f9565b9150808060010191505061221d565b507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d6577816040516122f39190613fc1565b60405180910390a15f811161233d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233490614037565b60405180910390fd5b5f424433604051602001612353939291906140ba565b604051602081830303815290604052805190602001205f1c90507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d65778160405161239c9190614140565b60405180910390a15f82826123b19190614199565b90507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d6577816040516123e29190614213565b60405180910390a15f80805f90505b86600901805490508110156124ad575f876009018281548110612417576124166136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050876007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548461248c91906139f9565b93508385101561249f57809250506124ad565b5080806001019150506123f1565b507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d65778173ffffffffffffffffffffffffffffffffffffffff166040516124f39190614289565b60405180910390a15f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612560906142ff565b60405180910390fd5b8560050160149054906101000a900460ff161561266657856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8288600601546040518363ffffffff1660e01b81526004016125e292919061431d565b6020604051808303815f875af11580156125fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126229190614358565b612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906143cd565b60405180910390fd5b6126f8565b856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308389600601546040518463ffffffff1660e01b81526004016126ca939291906143eb565b5f604051808303815f87803b1580156126e1575f80fd5b505af11580156126f3573d5f803e3d5ffd5b505050505b5f86600801549050612709816129df565b60018760020160016101000a81548160ff0219169083151502179055507fad586bf2cfefa63512aa5a1106545ee05dc5376edec8841ef54a636f4a036a2d8a838760405161275993929190613b22565b60405180910390a15050505050505061277061288e565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127a2612897565b5f5b815181101561282957600160055f8484815181106127c5576127c46136a7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506127a4565b5050565b60025f9054906101000a900460ff1681565b600260015403612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b9061446a565b60405180910390fd5b6002600181905550565b60018081905550565b61289f612c0b565b73ffffffffffffffffffffffffffffffffffffffff166128bd6116d3565b73ffffffffffffffffffffffffffffffffffffffff161461291c576128e0612c0b565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016129139190613447565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8111612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a18906144f8565b60405180910390fd5b5f6064600860ff1683612a349190614516565b612a3e9190614557565b90505f6064604860ff1684612a539190614516565b612a5d9190614557565b90505f6064601460ff1685612a729190614516565b612a7c9190614557565b90505f831115612aec5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612aea573d5f803e3d5ffd5b505b5f821115612b5a5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612b58573d5f803e3d5ffd5b505b5f811115612bc85760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612bc6573d5f803e3d5ffd5b505b7f6e24439017528dcb48087e74e9920b967cd425bab648f784c8b92fc6e652d40b84848484604051612bfd9493929190614587565b60405180910390a150505050565b5f33905090565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612c5381612c41565b8114612c5d575f80fd5b50565b5f81359050612c6e81612c4a565b92915050565b5f60208284031215612c8957612c88612c39565b5b5f612c9684828501612c60565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612cd181612c41565b82525050565b606082015f820151612ceb5f850182612cc8565b506020820151612cfe6020850182612cc8565b506040820151612d116040850182612cc8565b50505050565b5f612d228383612cd7565b60608301905092915050565b5f602082019050919050565b5f612d4482612c9f565b612d4e8185612ca9565b9350612d5983612cb9565b805f5b83811015612d89578151612d708882612d17565b9750612d7b83612d2e565b925050600181019050612d5c565b5085935050505092915050565b5f6020820190508181035f830152612dae8184612d3a565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e0882612ddf565b9050919050565b612e1881612dfe565b82525050565b5f612e298383612e0f565b60208301905092915050565b5f602082019050919050565b5f612e4b82612db6565b612e558185612dc0565b9350612e6083612dd0565b805f5b83811015612e90578151612e778882612e1e565b9750612e8283612e35565b925050600181019050612e63565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612ed18383612cc8565b60208301905092915050565b5f602082019050919050565b5f612ef382612e9d565b612efd8185612ea7565b9350612f0883612eb7565b805f5b83811015612f38578151612f1f8882612ec6565b9750612f2a83612edd565b925050600181019050612f0b565b5085935050505092915050565b5f6040820190508181035f830152612f5d8185612e41565b90508181036020830152612f718184612ee9565b90509392505050565b5f6020820190508181035f830152612f928184612ee9565b905092915050565b5f60ff82169050919050565b612faf81612f9a565b8114612fb9575f80fd5b50565b5f81359050612fca81612fa6565b92915050565b5f8060408385031215612fe657612fe5612c39565b5b5f612ff385828601612c60565b925050602061300485828601612fbc565b9150509250929050565b5f6020828403121561302357613022612c39565b5b5f61303084828501612fbc565b91505092915050565b61304281612c41565b82525050565b5f60408201905061305b5f830185613039565b6130686020830184613039565b9392505050565b5f8115159050919050565b6130838161306f565b82525050565b61309281612dfe565b82525050565b5f610140820190506130ac5f83018d613039565b6130b9602083018c613039565b6130c6604083018b61307a565b6130d3606083018a61307a565b6130e06080830189613039565b6130ed60a0830188613039565b6130fa60c0830187613089565b61310760e083018661307a565b613115610100830185613039565b613123610120830184613039565b9b9a5050505050505050505050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61317c82613136565b810181811067ffffffffffffffff8211171561319b5761319a613146565b5b80604052505050565b5f6131ad612c30565b90506131b98282613173565b919050565b5f67ffffffffffffffff8211156131d8576131d7613146565b5b602082029050602081019050919050565b5f80fd5b6131f681612dfe565b8114613200575f80fd5b50565b5f81359050613211816131ed565b92915050565b5f613229613224846131be565b6131a4565b9050808382526020820190506020840283018581111561324c5761324b6131e9565b5b835b8181101561327557806132618882613203565b84526020840193505060208101905061324e565b5050509392505050565b5f82601f83011261329357613292613132565b5b81356132a3848260208601613217565b91505092915050565b5f602082840312156132c1576132c0612c39565b5b5f82013567ffffffffffffffff8111156132de576132dd612c3d565b5b6132ea8482850161327f565b91505092915050565b5f6020828403121561330857613307612c39565b5b5f61331584828501613203565b91505092915050565b5f6020820190506133315f83018461307a565b92915050565b5f80fd5b5f8083601f8401126133505761334f613132565b5b8235905067ffffffffffffffff81111561336d5761336c613337565b5b602083019150836020820283011115613389576133886131e9565b5b9250929050565b5f805f80604085870312156133a8576133a7612c39565b5b5f85013567ffffffffffffffff8111156133c5576133c4612c3d565b5b6133d18782880161333b565b9450945050602085013567ffffffffffffffff8111156133f4576133f3612c3d565b5b6134008782880161333b565b925092505092959194509250565b5f61341882612ddf565b9050919050565b6134288161340e565b82525050565b5f6020820190506134415f83018461341f565b92915050565b5f60208201905061345a5f830184613089565b92915050565b6134698161340e565b8114613473575f80fd5b50565b5f8135905061348481613460565b92915050565b5f805f606084860312156134a1576134a0612c39565b5b5f6134ae86828701613476565b93505060206134bf86828701613476565b92505060406134d086828701613476565b9150509250925092565b6134e38161306f565b81146134ed575f80fd5b50565b5f813590506134fe816134da565b92915050565b5f805f805f60a0868803121561351d5761351c612c39565b5b5f61352a88828901612c60565b955050602061353b88828901613203565b945050604061354c888289016134f0565b935050606061355d88828901612c60565b925050608061356e88828901612c60565b9150509295509295909350565b5f60208201905061358e5f830184613039565b92915050565b5f6060820190506135a75f830186613039565b6135b46020830185613039565b6135c16040830184613039565b949350505050565b5f80604083850312156135df576135de612c39565b5b5f6135ec85828601612c60565b92505060206135fd85828601612c60565b9150509250929050565b61361081612f9a565b82525050565b5f6020820190506136295f830184613607565b92915050565b5f82825260208201905092915050565b7f4e6f742043616c6c65722e0000000000000000000000000000000000000000005f82015250565b5f613673600b8361362f565b915061367e8261363f565b602082019050919050565b5f6020820190508181035f8301526136a081613667565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f20726566756e6420617661696c61626c65000000000000000000000000005f82015250565b5f61370860138361362f565b9150613713826136d4565b602082019050919050565b5f6020820190508181035f830152613735816136fc565b9050919050565b5f81905092915050565b50565b5f6137545f8361373c565b915061375f82613746565b5f82019050919050565b5f61377382613749565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f6137b1600e8361362f565b91506137bc8261377d565b602082019050919050565b5f6020820190508181035f8301526137de816137a5565b9050919050565b7f4d6174636820646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61381960158361362f565b9150613824826137e5565b602082019050919050565b5f6020820190508181035f8301526138468161380d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61388482612c41565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138b6576138b561384d565b5b600182019050919050565b7f456e74727920646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f6138f560158361362f565b9150613900826138c1565b602082019050919050565b5f6020820190508181035f830152613922816138e9565b9050919050565b7f4d61746368206973207061757365642e000000000000000000000000000000005f82015250565b5f61395d60108361362f565b915061396882613929565b602082019050919050565b5f6020820190508181035f83015261398a81613951565b9050919050565b7f4d617463682068617320656e6465642e000000000000000000000000000000005f82015250565b5f6139c560108361362f565b91506139d082613991565b602082019050919050565b5f6020820190508181035f8301526139f2816139b9565b9050919050565b5f613a0382612c41565b9150613a0e83612c41565b9250828201905080821115613a2657613a2561384d565b5b92915050565b7f456e747279206c696d697420657863656564656420666f722074686973206d615f8201527f7463682e00000000000000000000000000000000000000000000000000000000602082015250565b5f613a8660248361362f565b9150613a9182613a2c565b604082019050919050565b5f6020820190508181035f830152613ab381613a7a565b9050919050565b7f496e636f7272656374207061796d656e742e00000000000000000000000000005f82015250565b5f613aee60128361362f565b9150613af982613aba565b602082019050919050565b5f6020820190508181035f830152613b1b81613ae2565b9050919050565b5f606082019050613b355f830186613039565b613b426020830185613089565b613b4f6040830184613039565b949350505050565b7f456e74727920646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613b8b60148361362f565b9150613b9682613b57565b602082019050919050565b5f6020820190508181035f830152613bb881613b7f565b9050919050565b7f496e76616c696420656e74727920696e707574206c656e6774687300000000005f82015250565b5f613bf3601b8361362f565b9150613bfe82613bbf565b602082019050919050565b5f6020820190508181035f830152613c2081613be7565b9050919050565b5f613c3182612f9a565b915060ff8203613c4457613c4361384d565b5b600182019050919050565b7f466565206163636f756e74206973207a65726f206164647265737300000000005f82015250565b5f613c83601b8361362f565b9150613c8e82613c4f565b602082019050919050565b5f6020820190508181035f830152613cb081613c77565b9050919050565b7f5472656173757279206163636f756e74206973207a65726f20616464726573735f82015250565b5f613ceb60208361362f565b9150613cf682613cb7565b602082019050919050565b5f6020820190508181035f830152613d1881613cdf565b9050919050565b7f4f7065726174696f6e73206163636f756e74206973207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d7960228361362f565b9150613d8482613d1f565b604082019050919050565b5f6020820190508181035f830152613da681613d6d565b9050919050565b7f456e642064617465206d75737420626520696e207468652066757475726500005f82015250565b5f613de1601e8361362f565b9150613dec82613dad565b602082019050919050565b5f6020820190508181035f830152613e0e81613dd5565b9050919050565b5f613e1f82612c41565b9150613e2a83612c41565b9250828203905081811115613e4257613e4161384d565b5b92915050565b5f60a082019050613e5b5f830188613039565b613e686020830187613039565b613e756040830186613089565b613e82606083018561307a565b613e8f6080830184613039565b9695505050505050565b7f4e6f207061727469636970616e747320696e20746865206d61746368000000005f82015250565b5f613ecd601c8361362f565b9150613ed882613e99565b602082019050919050565b5f6020820190508181035f830152613efa81613ec1565b9050919050565b7f5061727469636970616e7473206c656e677468000000000000000000000000005f82015250565b5f613f3560138361362f565b9150613f4082613f01565b602082019050919050565b5f6040820190508181035f830152613f6281613f29565b9050613f716020830184613039565b92915050565b7f546f74616c20776569676874656420656e7472696573000000000000000000005f82015250565b5f613fab60168361362f565b9150613fb682613f77565b602082019050919050565b5f6040820190508181035f830152613fd881613f9f565b9050613fe76020830184613039565b92915050565b7f4e6f2076616c696420656e7472696573000000000000000000000000000000005f82015250565b5f61402160108361362f565b915061402c82613fed565b602082019050919050565b5f6020820190508181035f83015261404e81614015565b9050919050565b5f819050919050565b61406f61406a82612c41565b614055565b82525050565b5f8160601b9050919050565b5f61408b82614075565b9050919050565b5f61409c82614081565b9050919050565b6140b46140af82612dfe565b614092565b82525050565b5f6140c5828661405e565b6020820191506140d5828561405e565b6020820191506140e582846140a3565b601482019150819050949350505050565b7f52616e646f6d20736565640000000000000000000000000000000000000000005f82015250565b5f61412a600b8361362f565b9150614135826140f6565b602082019050919050565b5f6040820190508181035f8301526141578161411e565b90506141666020830184613039565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6141a382612c41565b91506141ae83612c41565b9250826141be576141bd61416c565b5b828206905092915050565b7f57696e6e696e6720656e747279000000000000000000000000000000000000005f82015250565b5f6141fd600d8361362f565b9150614208826141c9565b602082019050919050565b5f6040820190508181035f83015261422a816141f1565b90506142396020830184613039565b92915050565b7f57696e6e657200000000000000000000000000000000000000000000000000005f82015250565b5f61427360068361362f565b915061427e8261423f565b602082019050919050565b5f6040820190508181035f8301526142a081614267565b90506142af6020830184613039565b92915050565b7f57696e6e6572206e6f742064657465726d696e656400000000000000000000005f82015250565b5f6142e960158361362f565b91506142f4826142b5565b602082019050919050565b5f6020820190508181035f830152614316816142dd565b9050919050565b5f6040820190506143305f830185613089565b61433d6020830184613039565b9392505050565b5f81519050614352816134da565b92915050565b5f6020828403121561436d5761436c612c39565b5b5f61437a84828501614344565b91505092915050565b7f4552433230207472616e73666572206661696c656400000000000000000000005f82015250565b5f6143b760158361362f565b91506143c282614383565b602082019050919050565b5f6020820190508181035f8301526143e4816143ab565b9050919050565b5f6060820190506143fe5f830186613089565b61440b6020830185613089565b6144186040830184613039565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614454601f8361362f565b915061445f82614420565b602082019050919050565b5f6020820190508181035f83015261448181614448565b9050919050565b7f546f74616c20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f6144e260268361362f565b91506144ed82614488565b604082019050919050565b5f6020820190508181035f83015261450f816144d6565b9050919050565b5f61452082612c41565b915061452b83612c41565b925082820261453981612c41565b915082820484148315176145505761454f61384d565b5b5092915050565b5f61456182612c41565b915061456c83612c41565b92508261457c5761457b61416c565b5b828204905092915050565b5f60808201905061459a5f830187613039565b6145a76020830186613039565b6145b46040830185613039565b6145c16060830184613039565b9594505050505056fea264697066735822122090e8129a20f0c788a199ec420be1dffe27246adfaacd4d0c194fce4326f1e5fb64736f6c634300081a0033000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Deployed Bytecode
0x6080604052600436106101b6575f3560e01c80638da5cb5b116100eb578063e53805c711610089578063f737d21d11610063578063f737d21d146105db578063f7dc078b14610603578063fbe9e7511461062d578063fd23efef14610655576101b6565b8063e53805c714610561578063ee9b29401461058b578063f2fde38b146105b3576101b6565b8063bc3da535116100c5578063bc3da53514610495578063bc3e2284146104d1578063d02c8cdf1461050f578063d2c4d41414610537576101b6565b80638da5cb5b1461041b57806390bd67e514610445578063b92d70b81461046d576101b6565b80634768d4ef11610158578063768b5c6711610132578063768b5c67146103655780637bbf4a3f1461038d57806382d97110146103c957806384267959146103f1576101b6565b80634768d4ef146102e25780635e42f10e14610327578063715018a61461034f576101b6565b806325a3d4361161019457806325a3d4361461022257806329dc91c31461025f578063330ab39a1461028957806333a35448146102a5576101b6565b8063049ac59b146101ba578063110f8874146101e257806317be85c3146101f8575b5f80fd5b3480156101c5575f80fd5b506101e060048036038101906101db9190612c74565b61067f565b005b3480156101ed575f80fd5b506101f66107b9565b005b348015610203575f80fd5b5061020c61093a565b6040516102199190612d96565b60405180910390f35b34801561022d575f80fd5b5061024860048036038101906102439190612c74565b610a32565b604051610256929190612f45565b60405180910390f35b34801561026a575f80fd5b50610273610c50565b6040516102809190612f7a565b60405180910390f35b6102a3600480360381019061029e9190612fd0565b610e12565b005b3480156102b0575f80fd5b506102cb60048036038101906102c6919061300e565b611229565b6040516102d9929190613048565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612c74565b6112ea565b60405161031e9a99989796959493929190613098565b60405180910390f35b348015610332575f80fd5b5061034d600480360381019061034891906132ac565b61138e565b005b34801561035a575f80fd5b50610363611420565b005b348015610370575f80fd5b5061038b60048036038101906103869190612c74565b611433565b005b348015610398575f80fd5b506103b360048036038101906103ae91906132f3565b61156e565b6040516103c0919061331e565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea9190613390565b61158b565b005b3480156103fc575f80fd5b506104056116ae565b604051610412919061342e565b60405180910390f35b348015610426575f80fd5b5061042f6116d3565b60405161043c9190613447565b60405180910390f35b348015610450575f80fd5b5061046b6004803603810190610466919061348a565b6116fa565b005b348015610478575f80fd5b50610493600480360381019061048e9190613504565b611911565b005b3480156104a0575f80fd5b506104bb60048036038101906104b691906132f3565b611a58565b6040516104c8919061357b565b60405180910390f35b3480156104dc575f80fd5b506104f760048036038101906104f2919061300e565b611a6d565b60405161050693929190613594565b60405180910390f35b34801561051a575f80fd5b5061053560048036038101906105309190612c74565b611a93565b005b348015610542575f80fd5b5061054b611d30565b604051610558919061342e565b60405180910390f35b34801561056c575f80fd5b50610575611d55565b6040516105829190612f7a565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac91906135c9565b611eb2565b005b3480156105be575f80fd5b506105d960048036038101906105d491906132f3565b611f65565b005b3480156105e6575f80fd5b5061060160048036038101906105fc9190612c74565b611fe9565b005b34801561060e575f80fd5b50610617612775565b604051610624919061342e565b60405180910390f35b348015610638575f80fd5b50610653600480360381019061064e91906132ac565b61279a565b005b348015610660575f80fd5b5061066961282d565b6040516106769190613616565b60405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1661069e6116d3565b73ffffffffffffffffffffffffffffffffffffffff161480610706575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c90613689565b60405180910390fd5b5f6004828154811061075a576107596136a7565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507fbd2800ce670bc629d6709a5facc3b0e4748e1b212b7e420b1ed292778a4c5046816040516107ae919061357b565b60405180910390a150565b6107c161283f565b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b9061371e565b60405180910390fd5b5f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f3373ffffffffffffffffffffffffffffffffffffffff16826040516108ab90613769565b5f6040518083038185875af1925050503d805f81146108e5576040519150601f19603f3d011682016040523d82523d5f602084013e6108ea565b606091505b505090508061092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906137c7565b60405180910390fd5b505061093861288e565b565b606060025f9054906101000a900460ff1660ff1667ffffffffffffffff81111561096757610966613146565b5b6040519080825280602002602001820160405280156109a057816020015b61098d612c12565b8152602001906001900390816109855790505b5090505f5b60025f9054906101000a900460ff1660ff168160ff161015610a2e5760035f8260ff1660ff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050828260ff1681518110610a1657610a156136a7565b5b602002602001018190525080806001019150506109a5565b5090565b606080826004805490508110610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a749061382f565b60405180910390fd5b5f60048581548110610a9257610a916136a7565b5b905f5260205f2090600a020190505f816009018054905090508067ffffffffffffffff811115610ac557610ac4613146565b5b604051908082528060200260200182016040528015610af35781602001602082028036833780820191505090505b5094508067ffffffffffffffff811115610b1057610b0f613146565b5b604051908082528060200260200182016040528015610b3e5781602001602082028036833780820191505090505b5093505f5b81811015610c47575f836009018281548110610b6257610b616136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080878381518110610ba057610b9f6136a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050836007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054868381518110610c2d57610c2c6136a7565b5b602002602001018181525050508080600101915050610b43565b50505050915091565b60605f60048054905067ffffffffffffffff811115610c7257610c71613146565b5b604051908082528060200260200182016040528015610ca05781602001602082028036833780820191505090505b5090505f805b600480549050811015610d6a575f60048281548110610cc857610cc76136a7565b5b905f5260205f2090600a0201905080600101544210158015610cf85750806002015f9054906101000a900460ff16155b8015610d1357508060020160019054906101000a900460ff16155b8015610d2557505f8160090180549050115b15610d5c57805f0154848481518110610d4157610d406136a7565b5b6020026020010181815250508280610d589061387a565b9350505b508080600101915050610ca6565b505f8167ffffffffffffffff811115610d8657610d85613146565b5b604051908082528060200260200182016040528015610db45781602001602082028036833780820191505090505b5090505f5b82811015610e0857838181518110610dd457610dd36136a7565b5b6020026020010151828281518110610def57610dee6136a7565b5b6020026020010181815250508080600101915050610db9565b5080935050505090565b816004805490508110610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e519061382f565b60405180910390fd5b815f60035f8360ff1660ff1681526020019081526020015f2060010154141580610e9e57505f60035f8360ff1660ff1681526020019081526020015f206002015414155b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed49061390b565b60405180910390fd5b8360048181548110610ef257610ef16136a7565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613973565b60405180910390fd5b610f5661283f565b5f60048681548110610f6b57610f6a6136a7565b5b905f5260205f2090600a020190508060010154421080610f9a57508060020160019054906101000a900460ff16155b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906139db565b60405180910390fd5b5f60035f8760ff1660ff1681526020019081526020015f2090505f8160020154826001015461100891906139f9565b9050826004015481846003015461101f91906139f9565b1115611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613a9c565b60405180910390fd5b816001015434146110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613b04565b60405180910390fd5b5f836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20540361114f578260090133908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80836007015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461119d91906139f9565b9250508190555080836003015f8282546111b791906139f9565b925050819055508160010154836008015f8282546111d591906139f9565b925050819055507f338e0cd33c4e120afcd73f43f082fd8940ed67ac35180d278d2eb4f3ed51d92e88338360405161120f93929190613b22565b60405180910390a150505061122261288e565b5050505050565b5f805f60035f8560ff1660ff1681526020019081526020015f2060010154118061126c57505f60035f8560ff1660ff1681526020019081526020015f2060020154115b6112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613ba1565b60405180910390fd5b60035f8460ff1660ff1681526020019081526020015f206001015460035f8560ff1660ff1681526020019081526020015f206002015491509150915091565b600481815481106112f9575f80fd5b905f5260205f2090600a02015f91509050805f015490806001015490806002015f9054906101000a900460ff16908060020160019054906101000a900460ff1690806003015490806004015490806005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490806008015490508a565b611396612897565b5f5b815181101561141c575f60055f8484815181106113b8576113b76136a7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611398565b5050565b611428612897565b6114315f61291e565b565b3373ffffffffffffffffffffffffffffffffffffffff166114526116d3565b73ffffffffffffffffffffffffffffffffffffffff1614806114ba575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090613689565b60405180910390fd5b60016004828154811061150f5761150e6136a7565b5b905f5260205f2090600a02016002015f6101000a81548160ff0219169083151502179055507f9f6b838e8160012b261280722f7d000f9a616b49bae77628ab03db3142190c6881604051611563919061357b565b60405180910390a150565b6005602052805f5260405f205f915054906101000a900460ff1681565b611593612897565b8181905084849050146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613c09565b60405180910390fd5b5f5b848490508160ff16101561168a5760405180606001604052808260ff16815260200186868460ff16818110611615576116146136a7565b5b90506020020135815260200184848460ff16818110611637576116366136a7565b5b9050602002013581525060035f8360ff1660ff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050808061168290613c27565b9150506115dd565b508383905060025f6101000a81548160ff021916908360ff16021790555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611702612897565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790613c99565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613d01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613d8f565b60405180910390fd5b8260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611919612897565b42851161195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613df7565b60405180910390fd5b5f600460018160018154018082558091505003905f5260205f2090600a02019050600160048054905061198e9190613e15565b815f018190555085816001018190555084816005015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160050160146101000a81548160ff0219169083151502179055508281600601819055508181600401819055507f712a06043bdc55fb71b57e8747caf273ae1c60da08943aa231909b47f5532ed3815f015487878787604051611a48959493929190613e48565b60405180910390a1505050505050565b6006602052805f5260405f205f915090505481565b6003602052805f5260405f205f91509050805f0154908060010154908060020154905083565b3373ffffffffffffffffffffffffffffffffffffffff16611ab26116d3565b73ffffffffffffffffffffffffffffffffffffffff161480611b1a575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090613689565b60405180910390fd5b806004805490508110611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b989061382f565b60405180910390fd5b611ba961283f565b5f60048381548110611bbe57611bbd6136a7565b5b905f5260205f2090600a020190505f81600901805490501115611ccf575f5b8160090180549050811015611ccd575f826009018281548110611c0357611c026136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050826007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb891906139f9565b92505081905550508080600101915050611bdd565b505b60018160020160016101000a81548160ff0219169083151502179055507f700135b4fe8746e2d2c85a9baa43c62887740aebfeb3a439f71a083fe5d5675983604051611d1b919061357b565b60405180910390a150611d2c61288e565b5050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f805b600480549050811015611db85760048181548110611d7b57611d7a6136a7565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611dab578180611da79061387a565b9250505b8080600101915050611d5a565b505f8167ffffffffffffffff811115611dd457611dd3613146565b5b604051908082528060200260200182016040528015611e025781602001602082028036833780820191505090505b5090505f805b600480549050811015611ea85760048181548110611e2957611e286136a7565b5b905f5260205f2090600a020160020160019054906101000a900460ff16611e9b5760048181548110611e5e57611e5d6136a7565b5b905f5260205f2090600a02015f0154838381518110611e8057611e7f6136a7565b5b6020026020010181815250508180611e979061387a565b9250505b8080600101915050611e08565b5081935050505090565b611eba612897565b604051806060016040528060025f9054906101000a900460ff1660ff1681526020018381526020018281525060035f60025f9054906101000a900460ff1660ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505060025f81819054906101000a900460ff1680929190611f4890613c27565b91906101000a81548160ff021916908360ff160217905550505050565b611f6d612897565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdd575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd49190613447565b60405180910390fd5b611fe68161291e565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120086116d3565b73ffffffffffffffffffffffffffffffffffffffff161480612070575060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690613689565b60405180910390fd5b8060048054905081106120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061382f565b60405180910390fd5b816004818154811061210c5761210b6136a7565b5b905f5260205f2090600a02016002015f9054906101000a900460ff1615612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90613973565b60405180910390fd5b61217061283f565b5f60048481548110612185576121846136a7565b5b905f5260205f2090600a020190505f8160090180549050116121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390613ee3565b60405180910390fd5b7f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d657781600901805490506040516122129190613f4b565b60405180910390a15f805b82600901805490508110156122c357826007015f846009018381548110612247576122466136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826122b491906139f9565b9150808060010191505061221d565b507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d6577816040516122f39190613fc1565b60405180910390a15f811161233d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233490614037565b60405180910390fd5b5f424433604051602001612353939291906140ba565b604051602081830303815290604052805190602001205f1c90507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d65778160405161239c9190614140565b60405180910390a15f82826123b19190614199565b90507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d6577816040516123e29190614213565b60405180910390a15f80805f90505b86600901805490508110156124ad575f876009018281548110612417576124166136a7565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050876007015f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548461248c91906139f9565b93508385101561249f57809250506124ad565b5080806001019150506123f1565b507f3c5ad147104e56be34a9176a6692f7df8d2f4b29a5af06bc6b98970d329d65778173ffffffffffffffffffffffffffffffffffffffff166040516124f39190614289565b60405180910390a15f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612560906142ff565b60405180910390fd5b8560050160149054906101000a900460ff161561266657856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8288600601546040518363ffffffff1660e01b81526004016125e292919061431d565b6020604051808303815f875af11580156125fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126229190614358565b612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906143cd565b60405180910390fd5b6126f8565b856005015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308389600601546040518463ffffffff1660e01b81526004016126ca939291906143eb565b5f604051808303815f87803b1580156126e1575f80fd5b505af11580156126f3573d5f803e3d5ffd5b505050505b5f86600801549050612709816129df565b60018760020160016101000a81548160ff0219169083151502179055507fad586bf2cfefa63512aa5a1106545ee05dc5376edec8841ef54a636f4a036a2d8a838760405161275993929190613b22565b60405180910390a15050505050505061277061288e565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127a2612897565b5f5b815181101561282957600160055f8484815181106127c5576127c46136a7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506127a4565b5050565b60025f9054906101000a900460ff1681565b600260015403612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b9061446a565b60405180910390fd5b6002600181905550565b60018081905550565b61289f612c0b565b73ffffffffffffffffffffffffffffffffffffffff166128bd6116d3565b73ffffffffffffffffffffffffffffffffffffffff161461291c576128e0612c0b565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016129139190613447565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8111612a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a18906144f8565b60405180910390fd5b5f6064600860ff1683612a349190614516565b612a3e9190614557565b90505f6064604860ff1684612a539190614516565b612a5d9190614557565b90505f6064601460ff1685612a729190614516565b612a7c9190614557565b90505f831115612aec5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612aea573d5f803e3d5ffd5b505b5f821115612b5a5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015612b58573d5f803e3d5ffd5b505b5f811115612bc85760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612bc6573d5f803e3d5ffd5b505b7f6e24439017528dcb48087e74e9920b967cd425bab648f784c8b92fc6e652d40b84848484604051612bfd9493929190614587565b60405180910390a150505050565b5f33905090565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612c5381612c41565b8114612c5d575f80fd5b50565b5f81359050612c6e81612c4a565b92915050565b5f60208284031215612c8957612c88612c39565b5b5f612c9684828501612c60565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612cd181612c41565b82525050565b606082015f820151612ceb5f850182612cc8565b506020820151612cfe6020850182612cc8565b506040820151612d116040850182612cc8565b50505050565b5f612d228383612cd7565b60608301905092915050565b5f602082019050919050565b5f612d4482612c9f565b612d4e8185612ca9565b9350612d5983612cb9565b805f5b83811015612d89578151612d708882612d17565b9750612d7b83612d2e565b925050600181019050612d5c565b5085935050505092915050565b5f6020820190508181035f830152612dae8184612d3a565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e0882612ddf565b9050919050565b612e1881612dfe565b82525050565b5f612e298383612e0f565b60208301905092915050565b5f602082019050919050565b5f612e4b82612db6565b612e558185612dc0565b9350612e6083612dd0565b805f5b83811015612e90578151612e778882612e1e565b9750612e8283612e35565b925050600181019050612e63565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612ed18383612cc8565b60208301905092915050565b5f602082019050919050565b5f612ef382612e9d565b612efd8185612ea7565b9350612f0883612eb7565b805f5b83811015612f38578151612f1f8882612ec6565b9750612f2a83612edd565b925050600181019050612f0b565b5085935050505092915050565b5f6040820190508181035f830152612f5d8185612e41565b90508181036020830152612f718184612ee9565b90509392505050565b5f6020820190508181035f830152612f928184612ee9565b905092915050565b5f60ff82169050919050565b612faf81612f9a565b8114612fb9575f80fd5b50565b5f81359050612fca81612fa6565b92915050565b5f8060408385031215612fe657612fe5612c39565b5b5f612ff385828601612c60565b925050602061300485828601612fbc565b9150509250929050565b5f6020828403121561302357613022612c39565b5b5f61303084828501612fbc565b91505092915050565b61304281612c41565b82525050565b5f60408201905061305b5f830185613039565b6130686020830184613039565b9392505050565b5f8115159050919050565b6130838161306f565b82525050565b61309281612dfe565b82525050565b5f610140820190506130ac5f83018d613039565b6130b9602083018c613039565b6130c6604083018b61307a565b6130d3606083018a61307a565b6130e06080830189613039565b6130ed60a0830188613039565b6130fa60c0830187613089565b61310760e083018661307a565b613115610100830185613039565b613123610120830184613039565b9b9a5050505050505050505050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61317c82613136565b810181811067ffffffffffffffff8211171561319b5761319a613146565b5b80604052505050565b5f6131ad612c30565b90506131b98282613173565b919050565b5f67ffffffffffffffff8211156131d8576131d7613146565b5b602082029050602081019050919050565b5f80fd5b6131f681612dfe565b8114613200575f80fd5b50565b5f81359050613211816131ed565b92915050565b5f613229613224846131be565b6131a4565b9050808382526020820190506020840283018581111561324c5761324b6131e9565b5b835b8181101561327557806132618882613203565b84526020840193505060208101905061324e565b5050509392505050565b5f82601f83011261329357613292613132565b5b81356132a3848260208601613217565b91505092915050565b5f602082840312156132c1576132c0612c39565b5b5f82013567ffffffffffffffff8111156132de576132dd612c3d565b5b6132ea8482850161327f565b91505092915050565b5f6020828403121561330857613307612c39565b5b5f61331584828501613203565b91505092915050565b5f6020820190506133315f83018461307a565b92915050565b5f80fd5b5f8083601f8401126133505761334f613132565b5b8235905067ffffffffffffffff81111561336d5761336c613337565b5b602083019150836020820283011115613389576133886131e9565b5b9250929050565b5f805f80604085870312156133a8576133a7612c39565b5b5f85013567ffffffffffffffff8111156133c5576133c4612c3d565b5b6133d18782880161333b565b9450945050602085013567ffffffffffffffff8111156133f4576133f3612c3d565b5b6134008782880161333b565b925092505092959194509250565b5f61341882612ddf565b9050919050565b6134288161340e565b82525050565b5f6020820190506134415f83018461341f565b92915050565b5f60208201905061345a5f830184613089565b92915050565b6134698161340e565b8114613473575f80fd5b50565b5f8135905061348481613460565b92915050565b5f805f606084860312156134a1576134a0612c39565b5b5f6134ae86828701613476565b93505060206134bf86828701613476565b92505060406134d086828701613476565b9150509250925092565b6134e38161306f565b81146134ed575f80fd5b50565b5f813590506134fe816134da565b92915050565b5f805f805f60a0868803121561351d5761351c612c39565b5b5f61352a88828901612c60565b955050602061353b88828901613203565b945050604061354c888289016134f0565b935050606061355d88828901612c60565b925050608061356e88828901612c60565b9150509295509295909350565b5f60208201905061358e5f830184613039565b92915050565b5f6060820190506135a75f830186613039565b6135b46020830185613039565b6135c16040830184613039565b949350505050565b5f80604083850312156135df576135de612c39565b5b5f6135ec85828601612c60565b92505060206135fd85828601612c60565b9150509250929050565b61361081612f9a565b82525050565b5f6020820190506136295f830184613607565b92915050565b5f82825260208201905092915050565b7f4e6f742043616c6c65722e0000000000000000000000000000000000000000005f82015250565b5f613673600b8361362f565b915061367e8261363f565b602082019050919050565b5f6020820190508181035f8301526136a081613667565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f20726566756e6420617661696c61626c65000000000000000000000000005f82015250565b5f61370860138361362f565b9150613713826136d4565b602082019050919050565b5f6020820190508181035f830152613735816136fc565b9050919050565b5f81905092915050565b50565b5f6137545f8361373c565b915061375f82613746565b5f82019050919050565b5f61377382613749565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f6137b1600e8361362f565b91506137bc8261377d565b602082019050919050565b5f6020820190508181035f8301526137de816137a5565b9050919050565b7f4d6174636820646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f61381960158361362f565b9150613824826137e5565b602082019050919050565b5f6020820190508181035f8301526138468161380d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61388482612c41565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138b6576138b561384d565b5b600182019050919050565b7f456e74727920646f6573206e6f742065786973742e00000000000000000000005f82015250565b5f6138f560158361362f565b9150613900826138c1565b602082019050919050565b5f6020820190508181035f830152613922816138e9565b9050919050565b7f4d61746368206973207061757365642e000000000000000000000000000000005f82015250565b5f61395d60108361362f565b915061396882613929565b602082019050919050565b5f6020820190508181035f83015261398a81613951565b9050919050565b7f4d617463682068617320656e6465642e000000000000000000000000000000005f82015250565b5f6139c560108361362f565b91506139d082613991565b602082019050919050565b5f6020820190508181035f8301526139f2816139b9565b9050919050565b5f613a0382612c41565b9150613a0e83612c41565b9250828201905080821115613a2657613a2561384d565b5b92915050565b7f456e747279206c696d697420657863656564656420666f722074686973206d615f8201527f7463682e00000000000000000000000000000000000000000000000000000000602082015250565b5f613a8660248361362f565b9150613a9182613a2c565b604082019050919050565b5f6020820190508181035f830152613ab381613a7a565b9050919050565b7f496e636f7272656374207061796d656e742e00000000000000000000000000005f82015250565b5f613aee60128361362f565b9150613af982613aba565b602082019050919050565b5f6020820190508181035f830152613b1b81613ae2565b9050919050565b5f606082019050613b355f830186613039565b613b426020830185613089565b613b4f6040830184613039565b949350505050565b7f456e74727920646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613b8b60148361362f565b9150613b9682613b57565b602082019050919050565b5f6020820190508181035f830152613bb881613b7f565b9050919050565b7f496e76616c696420656e74727920696e707574206c656e6774687300000000005f82015250565b5f613bf3601b8361362f565b9150613bfe82613bbf565b602082019050919050565b5f6020820190508181035f830152613c2081613be7565b9050919050565b5f613c3182612f9a565b915060ff8203613c4457613c4361384d565b5b600182019050919050565b7f466565206163636f756e74206973207a65726f206164647265737300000000005f82015250565b5f613c83601b8361362f565b9150613c8e82613c4f565b602082019050919050565b5f6020820190508181035f830152613cb081613c77565b9050919050565b7f5472656173757279206163636f756e74206973207a65726f20616464726573735f82015250565b5f613ceb60208361362f565b9150613cf682613cb7565b602082019050919050565b5f6020820190508181035f830152613d1881613cdf565b9050919050565b7f4f7065726174696f6e73206163636f756e74206973207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d7960228361362f565b9150613d8482613d1f565b604082019050919050565b5f6020820190508181035f830152613da681613d6d565b9050919050565b7f456e642064617465206d75737420626520696e207468652066757475726500005f82015250565b5f613de1601e8361362f565b9150613dec82613dad565b602082019050919050565b5f6020820190508181035f830152613e0e81613dd5565b9050919050565b5f613e1f82612c41565b9150613e2a83612c41565b9250828203905081811115613e4257613e4161384d565b5b92915050565b5f60a082019050613e5b5f830188613039565b613e686020830187613039565b613e756040830186613089565b613e82606083018561307a565b613e8f6080830184613039565b9695505050505050565b7f4e6f207061727469636970616e747320696e20746865206d61746368000000005f82015250565b5f613ecd601c8361362f565b9150613ed882613e99565b602082019050919050565b5f6020820190508181035f830152613efa81613ec1565b9050919050565b7f5061727469636970616e7473206c656e677468000000000000000000000000005f82015250565b5f613f3560138361362f565b9150613f4082613f01565b602082019050919050565b5f6040820190508181035f830152613f6281613f29565b9050613f716020830184613039565b92915050565b7f546f74616c20776569676874656420656e7472696573000000000000000000005f82015250565b5f613fab60168361362f565b9150613fb682613f77565b602082019050919050565b5f6040820190508181035f830152613fd881613f9f565b9050613fe76020830184613039565b92915050565b7f4e6f2076616c696420656e7472696573000000000000000000000000000000005f82015250565b5f61402160108361362f565b915061402c82613fed565b602082019050919050565b5f6020820190508181035f83015261404e81614015565b9050919050565b5f819050919050565b61406f61406a82612c41565b614055565b82525050565b5f8160601b9050919050565b5f61408b82614075565b9050919050565b5f61409c82614081565b9050919050565b6140b46140af82612dfe565b614092565b82525050565b5f6140c5828661405e565b6020820191506140d5828561405e565b6020820191506140e582846140a3565b601482019150819050949350505050565b7f52616e646f6d20736565640000000000000000000000000000000000000000005f82015250565b5f61412a600b8361362f565b9150614135826140f6565b602082019050919050565b5f6040820190508181035f8301526141578161411e565b90506141666020830184613039565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6141a382612c41565b91506141ae83612c41565b9250826141be576141bd61416c565b5b828206905092915050565b7f57696e6e696e6720656e747279000000000000000000000000000000000000005f82015250565b5f6141fd600d8361362f565b9150614208826141c9565b602082019050919050565b5f6040820190508181035f83015261422a816141f1565b90506142396020830184613039565b92915050565b7f57696e6e657200000000000000000000000000000000000000000000000000005f82015250565b5f61427360068361362f565b915061427e8261423f565b602082019050919050565b5f6040820190508181035f8301526142a081614267565b90506142af6020830184613039565b92915050565b7f57696e6e6572206e6f742064657465726d696e656400000000000000000000005f82015250565b5f6142e960158361362f565b91506142f4826142b5565b602082019050919050565b5f6020820190508181035f830152614316816142dd565b9050919050565b5f6040820190506143305f830185613089565b61433d6020830184613039565b9392505050565b5f81519050614352816134da565b92915050565b5f6020828403121561436d5761436c612c39565b5b5f61437a84828501614344565b91505092915050565b7f4552433230207472616e73666572206661696c656400000000000000000000005f82015250565b5f6143b760158361362f565b91506143c282614383565b602082019050919050565b5f6020820190508181035f8301526143e4816143ab565b9050919050565b5f6060820190506143fe5f830186613089565b61440b6020830185613089565b6144186040830184613039565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614454601f8361362f565b915061445f82614420565b602082019050919050565b5f6020820190508181035f83015261448181614448565b9050919050565b7f546f74616c20616d6f756e74206d7573742062652067726561746572207468615f8201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f6144e260268361362f565b91506144ed82614488565b604082019050919050565b5f6020820190508181035f83015261450f816144d6565b9050919050565b5f61452082612c41565b915061452b83612c41565b925082820261453981612c41565b915082820484148315176145505761454f61384d565b5b5092915050565b5f61456182612c41565b915061456c83612c41565b92508261457c5761457b61416c565b5b828204905092915050565b5f60808201905061459a5f830187613039565b6145a76020830186613039565b6145b46040830185613039565b6145c16060830184613039565b9594505050505056fea264697066735822122090e8129a20f0c788a199ec420be1dffe27246adfaacd4d0c194fce4326f1e5fb64736f6c634300081a0033
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:14263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37029:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31912:295;;;;;;;;;;;;;:::i;:::-;;35565:239;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34138:726;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33009:819;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27792:1387;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34872:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24230:22;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;37377:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3361:103;;;;;;;;;;;;;:::i;:::-;;36879:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24261:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35812:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24485:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2686:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24696:661;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27037:747;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24307:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24185:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31151:753;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24588:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32215:786;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35240:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3619:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29233:1910;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24534:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37184:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24115:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37029:147;36802:10;36791:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;36816:7;:19;36824:10;36816:19;;;;;;;;;;;;;;;;;;;;;;;;;36791:44;36783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37125:5:::1;37099:7;37107;37099:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:31;;;;;;;;;;;;;;;;;;37146:22;37160:7;37146:22;;;;;;:::i;:::-;;;;;;;;37029:147:::0;:::o;31912:295::-;6542:21;:19;:21::i;:::-;31971:14:::1;31988:7;:19;31996:10;31988:19;;;;;;;;;;;;;;;;31971:36;;32035:1;32026:6;:10;32018:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32095:1;32073:7;:19;32081:10;32073:19;;;;;;;;;;;;;;;:23;;;;32108:9;32123:10;:15;;32146:6;32123:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32107:50;;;32176:4;32168:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;31960:247;;6586:20:::0;:18;:20::i;:::-;31912:295::o;35565:239::-;35610:19;35661:13;;;;;;;;;;;35649:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;35642:33;;35691:7;35686:89;35708:13;;;;;;;;;;;35704:17;;:1;:17;;;35686:89;;;35753:7;:10;35761:1;35753:10;;;;;;;;;;;;;;;35743:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;35748:1;35743:7;;;;;;;;;;:::i;:::-;;;;;;;:20;;;;35723:3;;;;;;;35686:89;;;;35565:239;:::o;34138:726::-;34258:29;34289:25;34231:7;36554;:14;;;;36544:7;:24;36536:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34332:26:::1;34361:7;34369;34361:16;;;;;;;;:::i;:::-;;;;;;;;;;;;34332:45;;34388:24;34415:12;:25;;:32;;;;34388:59;;34489:16;34475:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34460:46;;34542:16;34528:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34517:42;;34577:9;34572:241;34596:16;34592:1;:20;34572:241;;;34634:19;34656:12;:25;;34682:1;34656:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34634:50;;34717:11;34699:12;34712:1;34699:15;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;34757:12;:31;;:44;34789:11;34757:44;;;;;;;;;;;;;;;;34743:8;34752:1;34743:11;;;;;;;;:::i;:::-;;;;;;;:58;;;::::0;::::1;34619:194;34614:3;;;;;;;34572:241;;;;34825:31;;34138:726:::0;;;;:::o;33009:819::-;33065:16;33094:29;33140:7;:14;;;;33126:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33094:61;;33166:13;33201:9;33196:440;33220:7;:14;;;;33216:1;:18;33196:440;;;33256:26;33285:7;33293:1;33285:10;;;;;;;;:::i;:::-;;;;;;;;;;;;33256:39;;33351:12;:20;;;33332:15;:39;;:80;;;;;33393:12;:19;;;;;;;;;;;;33392:20;33332:80;:122;;;;;33434:12;:20;;;;;;;;;;;;33433:21;33332:122;:179;;;;;33510:1;33475:12;:25;;:32;;;;:36;33332:179;33310:315;;;33568:12;:15;;;33546:12;33559:5;33546:19;;;;;;;;:::i;:::-;;;;;;;:37;;;;;33602:7;;;;;:::i;:::-;;;;33310:315;33241:395;33236:3;;;;;;;33196:440;;;;33648:23;33688:5;33674:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33648:46;;33710:9;33705:90;33729:5;33725:1;:9;33705:90;;;33768:12;33781:1;33768:15;;;;;;;;:::i;:::-;;;;;;;;33756:6;33763:1;33756:9;;;;;;;;:::i;:::-;;;;;;;:27;;;;;33736:3;;;;;;;33705:90;;;;33814:6;33807:13;;;;;33009:819;:::o;27792:1387::-;27896:7;36554;:14;;;;36544:7;:24;36536:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27926:7:::1;36373:1;36343:7;:16;36351:7;36343:16;;;;;;;;;;;;;;;:26;;;:31;;:67;;;;36409:1;36378:7;:16;36386:7;36378:16;;;;;;;;;;;;;;;:27;;;:32;;36343:67;36321:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;27954:7:::2;36678;36686;36678:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;36677:24;36669:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::3;:19;:21::i;:::-;28001:26:::4;28030:7;28038;28030:16;;;;;;;;:::i;:::-;;;;;;;;;;;;28001:45;;28097:12;:20;;;28079:15;:38;:63;;;;28122:12;:20;;;;;;;;;;;;28121:21;28079:63;28057:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;28199:27;28229:7;:16;28237:7;28229:16;;;;;;;;;;;;;;;28199:46;;28321:24;28387:13;:24;;;28348:13;:23;;;:63;;;;:::i;:::-;28321:90;;28596:12;:25;;;28559:16;28529:12;:27;;;:46;;;;:::i;:::-;:92;;28507:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;28717:13;:23;;;28704:9;:36;28696:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28827:1;28780:12;:31;;:43;28812:10;28780:43;;;;;;;;;;;;;;;;:48:::0;28776:123:::4;;28845:12;:25;;28876:10;28845:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28776:123;28958:16;28911:12;:31;;:43;28943:10;28911:43;;;;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;;;;;29016:16;28985:12;:27;;;:47;;;;;;;:::i;:::-;;;;;;;;29074:13;:23;;;29043:12;:27;;;:54;;;;;;;:::i;:::-;;;;;;;;29115:56;29133:7;29142:10;29154:16;29115:56;;;;;;;;:::i;:::-;;;;;;;;27990:1189;;;6586:20:::3;:18;:20::i;:::-;36470:1:::2;36605::::1;27792:1387:::0;;;:::o;34872:360::-;34959:17;34978:18;35065:1;35036:7;:16;35044:7;35036:16;;;;;;;;;;;;;;;:26;;;:30;:65;;;;35100:1;35070:7;:16;35078:7;35070:16;;;;;;;;;;;;;;;:27;;;:31;35036:65;35014:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;35168:7;:16;35176:7;35168:16;;;;;;;;;;;;;;;:26;;;35196:7;:16;35204:7;35196:16;;;;;;;;;;;;;;;:27;;;35160:64;;;;34872:360;;;:::o;24230:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37377:189::-;2572:13;:11;:13::i;:::-;37461:9:::1;37456:103;37480:9;:16;37476:1;:20;37456:103;;;37542:5;37518:7;:21;37526:9;37536:1;37526:12;;;;;;;;:::i;:::-;;;;;;;;37518:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37498:3;;;;;;;37456:103;;;;37377:189:::0;:::o;3361:103::-;2572:13;:11;:13::i;:::-;3426:30:::1;3453:1;3426:18;:30::i;:::-;3361:103::o:0;36879:142::-;36802:10;36791:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;36816:7;:19;36824:10;36816:19;;;;;;;;;;;;;;;;;;;;;;;;;36791:44;36783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36973:4:::1;36947:7;36955;36947:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:30;;;;;;;;;;;;;;;;;;36993:20;37005:7;36993:20;;;;;;:::i;:::-;;;;;;;;36879:142:::0;:::o;24261:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;35812:454::-;2572:13;:11;:13::i;:::-;35994:12:::1;;:19;;35972:11;;:18;;:41;35950:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36084:7;36079:128;36101:11;;:18;;36097:1;:22;;;36079:128;;;36154:41;;;;;;;;36160:1;36154:41;;;;;;36163:11;;36175:1;36163:14;;;;;;;;;:::i;:::-;;;;;;;;36154:41;;;;36179:12;;36192:1;36179:15;;;;;;;;;:::i;:::-;;;;;;;;36154:41;;::::0;36141:7:::1;:10;36149:1;36141:10;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;36121:3;;;;;:::i;:::-;;;;36079:128;;;;36239:11;;:18;;36217:13;;:41;;;;;;;;;;;;;;;;;;35812: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;27037:747::-;2572:13;:11;:13::i;:::-;27254:15:::1;27244:7;:25;27236:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27317:22;27342:7;:14;;;;;;;;;;;;;;;;;;;;;;;;27317:39;;27398:1;27381:7;:14;;;;:18;;;;:::i;:::-;27367:8;:11;;:32;;;;27429:7;27410:8;:16;;:26;;;;27470:11;27447:8;:20;;;:34;;;;;;;;;;;;;;;;;;27511:7;27492:8;:16;;;:26;;;;;;;;;;;;;;;;;;27553:12;27529:8;:21;;:36;;;;27600:12;27576:8;:21;;:36;;;;27630:146;27657:8;:11;;;27683:7;27705:11;27731:7;27753:12;27630:146;;;;;;;;;;:::i;:::-;;;;;;;;27225:559;27037:747:::0;;;;;:::o;24307:42::-;;;;;;;;;;;;;;;;;:::o;24185:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31151:753::-;36802:10;36791:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;36816:7;:19;36824:10;36816:19;;;;;;;;;;;;;;;;;;;;;;;;;36791:44;36783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31248:7:::1;36554;:14;;;;36544:7;:24;36536:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::2;:19;:21::i;:::-;31295:26:::3;31324:7;31332;31324:16;;;;;;;;:::i;:::-;;;;;;;;;;;;31295:45;;31451:1;31416:12;:25;;:32;;;;:36;31412:343;;;31474:9;31469:275;31493:12;:25;;:32;;;;31489:1;:36;31469:275;;;31551:19;31573:12;:25;;31599:1;31573:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31551:50;;31644:12;:31;;:84;31698:11;31644:84;;;;;;;;;;;;;;;;31620:7;:20;31628:11;31620:20;;;;;;;;;;;;;;;;:108;;;;;;;:::i;:::-;;;;;;;;31532:212;31527:3;;;;;;;31469:275;;;;31412:343;31853:4;31830:12;:20;;;:27;;;;;;;;;;;;;;;;;;31873:23;31888:7;31873:23;;;;;;:::i;:::-;;;;;;;;31284:620;6586:20:::2;:18;:20::i;:::-;36862:1:::1;31151:753:::0;:::o;24588:49::-;;;;;;;;;;;;;:::o;32215:786::-;32267:16;32296:13;32385:9;32380:138;32404:7;:14;;;;32400:1;:18;32380:138;;;32445:7;32453:1;32445:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;;;;;;;;;;;32440:67;;32484:7;;;;;:::i;:::-;;;;32440:67;32420:3;;;;;;;32380:138;;;;32610:31;32658:5;32644:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32610:54;;32675:13;32771:9;32766:194;32790:7;:14;;;;32786:1;:18;32766:194;;;32831:7;32839:1;32831:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;;;;;;;;;;;32826:123;;32894:7;32902:1;32894:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:13;;;32870:14;32885:5;32870:21;;;;;;;;:::i;:::-;;;;;;;:37;;;;;32926:7;;;;;:::i;:::-;;;;32826:123;32806:3;;;;;;;32766:194;;;;32979:14;32972:21;;;;;32215:786;:::o;35240:317::-;2572:13;:11;:13::i;:::-;35375:123:::1;;;;;;;;35401:13;;;;;;;;;;;35375:123;;;;;;35440:9;35375:123;;;;35476:10;35375:123;;::::0;35350:7:::1;:22;35358:13;;;;;;;;;;;35350:22;;;;;;;;;;;;;;;:148;;;;;;;;;;;;;;;;;;;;;;;;;;;35509:13;;:15;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;35240: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;29233:1910::-;36802:10;36791:21;;:7;:5;:7::i;:::-;:21;;;:44;;;;36816:7;:19;36824:10;36816:19;;;;;;;;;;;;;;;;;;;;;;;;;36791:44;36783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29302:7:::1;36554;:14;;;;36544:7;:24;36536:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29321:7:::2;36678;36686;36678:16;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;36677:24;36669:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:21:::3;:19;:21::i;:::-;29350:26:::4;29379:7;29387;29379:16;;;;;;;;:::i;:::-;;;;;;;;;;;;29350:45;;29447:1;29412:12;:25;;:32;;;;:36;29404:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;29493:62;29522:12;:25;;:32;;;;29493:62;;;;;;:::i;:::-;;;;;;;;29564:28;29608:9:::0;29603:167:::4;29627:12;:25;;:32;;;;29623:1;:36;29603:167;;;29701:12;:31;;:61;29733:12;:25;;29759:1;29733:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29701:61;;;;;;;;;;;;;;;;29677:85;;;;;:::i;:::-;;;29661:3;;;;;;;29603:167;;;;29781:53;29813:20;29781:53;;;;;;:::i;:::-;;;;;;;;29874:1;29851:20;:24;29843:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;29905:18;29961:15;29978:16;29996:10;29944:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29934:74;;;;;;29926:83;;29905:104;;30021:32;30042:10;30021:32;;;;;;:::i;:::-;;;;;;;;30062:20;30098;30085:10;:33;;;;:::i;:::-;30062:56;;30130:36;30153:12;30130:36;;;;;;:::i;:::-;;;;;;;;30175:25;30211:14:::0;30237:9;30249:1:::4;30237:13;;30232:323;30256:12;:25;;:32;;;;30252:1;:36;30232:323;;;30306:19;30328:12;:25;;30354:1;30328:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30306:50;;30388:12;:31;;:44;30420:11;30388:44;;;;;;;;;;;;;;;;30367:65;;;;;:::i;:::-;;;30462:17;30447:12;:32;30443:105;;;30505:11;30496:20;;30531:5;;;30443:105;30295:260;30290:3;;;;;;;30232:323;;;;30566:41;30598:6;30582:24;;30566:41;;;;;;:::i;:::-;;;;;;;;30642:1;30624:20;;:6;:20;;::::0;30616:54:::4;;;;;;;;;;;;:::i;:::-;;;;;;;;;30683:12;:20;;;;;;;;;;;;30679:280;;;30731:12;:24;;;;;;;;;;;;30724:41;;;30766:6;30774:12;:25;;;30724:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30716:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30679:280;;;30859:12;:24;;;;;;;;;;;;30851:50;;;30910:4;30917:6;30925:12;:25;;;30851:100;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;30679:280;30967:23;30993:12;:27;;;30967:53;;31027:23;31034:15;31027:6;:23::i;:::-;31082:4;31059:12;:20;;;:27;;;;;;;;;;;;;;;;;;31098:41;31111:7;31120:6;31128:10;31098:41;;;;;;;;:::i;:::-;;;;;;;;29343:1800;;;;;;;6586:20:::3;:18;:20::i;:::-;36605:1:::2;36862::::1;29233:1910:::0;:::o;24534:47::-;;;;;;;;;;;;;:::o;37184:185::-;2572:13;:11;:13::i;:::-;37265:9:::1;37260:102;37284:9;:16;37280:1;:20;37260:102;;;37346:4;37322:7;:21;37330:9;37340:1;37330:12;;;;;;;;:::i;:::-;;;;;;;;37322:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37302:3;;;;;;;37260:102;;;;37184: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:878::-;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;;25853:1;25841:9;:13;25837:85;;;25871:19;;;;;;;;;;;:28;;:39;25900:9;25871:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25837:85;25955:1;25938:14;:18;25934:100;;;25973:24;;;;;;;;;;;:33;;:49;26007:14;25973:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25934:100;26069:1;26050:16;:20;26046:106;;;26087:26;;;;;;;;;;;:35;;:53;26123:16;26087:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26046:106;26169:131;26194:11;26220:9;26244:14;26273:16;26169:131;;;;;;;;;:::i;:::-;;;;;;;;25475:833;;;25430:878;:::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:169::-;40976:21;40972:1;40964:6;40960:14;40953:45;40836:169;:::o;41011:366::-;41153:3;41174:67;41238:2;41233:3;41174:67;:::i;:::-;41167:74;;41250:93;41339:3;41250:93;:::i;:::-;41368:2;41363:3;41359:12;41352:19;;41011:366;;;:::o;41383:529::-;41577:4;41615:2;41604:9;41600:18;41592:26;;41664:9;41658:4;41654:20;41650:1;41639:9;41635:17;41628:47;41692:131;41818:4;41692:131;:::i;:::-;41684:139;;41833:72;41901:2;41890:9;41886:18;41877:6;41833:72;:::i;:::-;41383:529;;;;:::o;41918:172::-;42058:24;42054:1;42046:6;42042:14;42035:48;41918:172;:::o;42096:366::-;42238:3;42259:67;42323:2;42318:3;42259:67;:::i;:::-;42252:74;;42335:93;42424:3;42335:93;:::i;:::-;42453:2;42448:3;42444:12;42437:19;;42096:366;;;:::o;42468:529::-;42662:4;42700:2;42689:9;42685:18;42677:26;;42749:9;42743:4;42739:20;42735:1;42724:9;42720:17;42713:47;42777:131;42903:4;42777:131;:::i;:::-;42769:139;;42918:72;42986:2;42975:9;42971:18;42962:6;42918:72;:::i;:::-;42468:529;;;;:::o;43003:166::-;43143:18;43139:1;43131:6;43127:14;43120:42;43003:166;:::o;43175:366::-;43317:3;43338:67;43402:2;43397:3;43338:67;:::i;:::-;43331:74;;43414:93;43503:3;43414:93;:::i;:::-;43532:2;43527:3;43523:12;43516:19;;43175:366;;;:::o;43547:419::-;43713:4;43751:2;43740:9;43736:18;43728:26;;43800:9;43794:4;43790:20;43786:1;43775:9;43771:17;43764:47;43828:131;43954:4;43828:131;:::i;:::-;43820:139;;43547:419;;;:::o;43972:79::-;44011:7;44040:5;44029:16;;43972:79;;;:::o;44057:157::-;44162:45;44182:24;44200:5;44182:24;:::i;:::-;44162:45;:::i;:::-;44157:3;44150:58;44057:157;;:::o;44220:94::-;44253:8;44301:5;44297:2;44293:14;44272:35;;44220:94;;;:::o;44320:::-;44359:7;44388:20;44402:5;44388:20;:::i;:::-;44377:31;;44320:94;;;:::o;44420:100::-;44459:7;44488:26;44508:5;44488:26;:::i;:::-;44477:37;;44420:100;;;:::o;44526:157::-;44631:45;44651:24;44669:5;44651:24;:::i;:::-;44631:45;:::i;:::-;44626:3;44619:58;44526:157;;:::o;44689:538::-;44857:3;44872:75;44943:3;44934:6;44872:75;:::i;:::-;44972:2;44967:3;44963:12;44956:19;;44985:75;45056:3;45047:6;44985:75;:::i;:::-;45085:2;45080:3;45076:12;45069:19;;45098:75;45169:3;45160:6;45098:75;:::i;:::-;45198:2;45193:3;45189:12;45182:19;;45218:3;45211:10;;44689:538;;;;;;:::o;45233:161::-;45373:13;45369:1;45361:6;45357:14;45350:37;45233:161;:::o;45400:366::-;45542:3;45563:67;45627:2;45622:3;45563:67;:::i;:::-;45556:74;;45639:93;45728:3;45639:93;:::i;:::-;45757:2;45752:3;45748:12;45741:19;;45400:366;;;:::o;45772:529::-;45966:4;46004:2;45993:9;45989:18;45981:26;;46053:9;46047:4;46043:20;46039:1;46028:9;46024:17;46017:47;46081:131;46207:4;46081:131;:::i;:::-;46073:139;;46222:72;46290:2;46279:9;46275:18;46266:6;46222:72;:::i;:::-;45772:529;;;;:::o;46307:180::-;46355:77;46352:1;46345:88;46452:4;46449:1;46442:15;46476:4;46473:1;46466:15;46493:176;46525:1;46542:20;46560:1;46542:20;:::i;:::-;46537:25;;46576:20;46594:1;46576:20;:::i;:::-;46571:25;;46615:1;46605:35;;46620:18;;:::i;:::-;46605:35;46661:1;46658;46654:9;46649:14;;46493:176;;;;:::o;46675:163::-;46815:15;46811:1;46803:6;46799:14;46792:39;46675:163;:::o;46844:366::-;46986:3;47007:67;47071:2;47066:3;47007:67;:::i;:::-;47000:74;;47083:93;47172:3;47083:93;:::i;:::-;47201:2;47196:3;47192:12;47185:19;;46844:366;;;:::o;47216:529::-;47410:4;47448:2;47437:9;47433:18;47425:26;;47497:9;47491:4;47487:20;47483:1;47472:9;47468:17;47461:47;47525:131;47651:4;47525:131;:::i;:::-;47517:139;;47666:72;47734:2;47723:9;47719:18;47710:6;47666:72;:::i;:::-;47216:529;;;;:::o;47751:156::-;47891:8;47887:1;47879:6;47875:14;47868:32;47751:156;:::o;47913:365::-;48055:3;48076:66;48140:1;48135:3;48076:66;:::i;:::-;48069:73;;48151:93;48240:3;48151:93;:::i;:::-;48269:2;48264:3;48260:12;48253:19;;47913:365;;;:::o;48284:529::-;48478:4;48516:2;48505:9;48501:18;48493:26;;48565:9;48559:4;48555:20;48551:1;48540:9;48536:17;48529:47;48593:131;48719:4;48593:131;:::i;:::-;48585:139;;48734:72;48802:2;48791:9;48787:18;48778:6;48734:72;:::i;:::-;48284:529;;;;:::o;48819:171::-;48959:23;48955:1;48947:6;48943:14;48936:47;48819:171;:::o;48996:366::-;49138:3;49159:67;49223:2;49218:3;49159:67;:::i;:::-;49152:74;;49235:93;49324:3;49235:93;:::i;:::-;49353:2;49348:3;49344:12;49337:19;;48996:366;;;:::o;49368:419::-;49534:4;49572:2;49561:9;49557:18;49549:26;;49621:9;49615:4;49611:20;49607:1;49596:9;49592:17;49585:47;49649:131;49775:4;49649:131;:::i;:::-;49641:139;;49368:419;;;:::o;49793:332::-;49914:4;49952:2;49941:9;49937:18;49929:26;;49965:71;50033:1;50022:9;50018:17;50009:6;49965:71;:::i;:::-;50046:72;50114:2;50103:9;50099:18;50090:6;50046:72;:::i;:::-;49793:332;;;;;:::o;50131:137::-;50185:5;50216:6;50210:13;50201:22;;50232:30;50256:5;50232:30;:::i;:::-;50131:137;;;;:::o;50274:345::-;50341:6;50390:2;50378:9;50369:7;50365:23;50361:32;50358:119;;;50396:79;;:::i;:::-;50358:119;50516:1;50541:61;50594:7;50585:6;50574:9;50570:22;50541:61;:::i;:::-;50531:71;;50487:125;50274:345;;;;:::o;50625:171::-;50765:23;50761:1;50753:6;50749:14;50742:47;50625:171;:::o;50802:366::-;50944:3;50965:67;51029:2;51024:3;50965:67;:::i;:::-;50958:74;;51041:93;51130:3;51041:93;:::i;:::-;51159:2;51154:3;51150:12;51143:19;;50802:366;;;:::o;51174:419::-;51340:4;51378:2;51367:9;51363:18;51355:26;;51427:9;51421:4;51417:20;51413:1;51402:9;51398:17;51391:47;51455:131;51581:4;51455:131;:::i;:::-;51447:139;;51174:419;;;:::o;51599:442::-;51748:4;51786:2;51775:9;51771:18;51763:26;;51799:71;51867:1;51856:9;51852:17;51843:6;51799:71;:::i;:::-;51880:72;51948:2;51937:9;51933:18;51924:6;51880:72;:::i;:::-;51962;52030:2;52019:9;52015:18;52006:6;51962:72;:::i;:::-;51599:442;;;;;;:::o;52047:181::-;52187:33;52183:1;52175:6;52171:14;52164:57;52047:181;:::o;52234:366::-;52376:3;52397:67;52461:2;52456:3;52397:67;:::i;:::-;52390:74;;52473:93;52562:3;52473:93;:::i;:::-;52591:2;52586:3;52582:12;52575:19;;52234:366;;;:::o;52606:419::-;52772:4;52810:2;52799:9;52795:18;52787:26;;52859:9;52853:4;52849:20;52845:1;52834:9;52830:17;52823:47;52887:131;53013:4;52887:131;:::i;:::-;52879:139;;52606:419;;;:::o;53031:225::-;53171:34;53167:1;53159:6;53155:14;53148:58;53240:8;53235:2;53227:6;53223:15;53216:33;53031:225;:::o;53262:366::-;53404:3;53425:67;53489:2;53484:3;53425:67;:::i;:::-;53418:74;;53501:93;53590:3;53501:93;:::i;:::-;53619:2;53614:3;53610:12;53603:19;;53262:366;;;:::o;53634:419::-;53800:4;53838:2;53827:9;53823:18;53815:26;;53887:9;53881:4;53877:20;53873:1;53862:9;53858:17;53851:47;53915:131;54041:4;53915:131;:::i;:::-;53907:139;;53634:419;;;:::o;54059:410::-;54099:7;54122:20;54140:1;54122:20;:::i;:::-;54117:25;;54156:20;54174:1;54156:20;:::i;:::-;54151:25;;54211:1;54208;54204:9;54233:30;54251:11;54233:30;:::i;:::-;54222:41;;54412:1;54403:7;54399:15;54396:1;54393:22;54373:1;54366:9;54346:83;54323:139;;54442:18;;:::i;:::-;54323:139;54107:362;54059:410;;;;:::o;54475:185::-;54515:1;54532:20;54550:1;54532:20;:::i;:::-;54527:25;;54566:20;54584:1;54566:20;:::i;:::-;54561:25;;54605:1;54595:35;;54610:18;;:::i;:::-;54595:35;54652:1;54649;54645:9;54640:14;;54475:185;;;;:::o;54666:553::-;54843:4;54881:3;54870:9;54866:19;54858:27;;54895:71;54963:1;54952:9;54948:17;54939:6;54895:71;:::i;:::-;54976:72;55044:2;55033:9;55029:18;55020:6;54976:72;:::i;:::-;55058;55126:2;55115:9;55111:18;55102:6;55058:72;:::i;:::-;55140;55208:2;55197:9;55193:18;55184:6;55140:72;:::i;:::-;54666:553;;;;;;;:::o
Swarm Source
ipfs://90e8129a20f0c788a199ec420be1dffe27246adfaacd4d0c194fce4326f1e5fb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.