Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 29 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Pick Winner | 9460615 | 4 days ago | IN | 0 APE | 0.00374937 | ||||
Pick Winner | 9454080 | 4 days ago | IN | 0 APE | 0.0030672 | ||||
Extend Match End... | 9454003 | 4 days ago | IN | 0 APE | 0.00085914 | ||||
Extend Match End... | 9453959 | 4 days ago | IN | 0 APE | 0.00085914 | ||||
Enroll | 9441797 | 4 days ago | IN | 0.00000001 APE | 0.00420257 | ||||
Create Match | 9441777 | 4 days ago | IN | 0 APE | 0.00792515 | ||||
Update Tier | 9434798 | 4 days ago | IN | 0 APE | 0.00127756 | ||||
Update Tier | 9434792 | 4 days ago | IN | 0 APE | 0.00072054 | ||||
Remove Entry NFT | 9434777 | 4 days ago | IN | 0 APE | 0.00069894 | ||||
Update Tier | 9434733 | 4 days ago | IN | 0 APE | 0.00072054 | ||||
Enroll | 9387697 | 5 days ago | IN | 0.00000001 APE | 0.00327512 | ||||
Enroll | 9387695 | 5 days ago | IN | 0.00000001 APE | 0.00327512 | ||||
Enroll | 9387630 | 5 days ago | IN | 0 APE | 0.00410475 | ||||
Enroll | 9387619 | 5 days ago | IN | 0.00000001 APE | 0.00414451 | ||||
Create Match | 9387601 | 5 days ago | IN | 0 APE | 0.00736353 | ||||
Cancel Match | 9387553 | 5 days ago | IN | 0 APE | 0.00263332 | ||||
Cancel Match | 9387443 | 5 days ago | IN | 0 APE | 0.00195208 | ||||
Create Match | 9387348 | 5 days ago | IN | 0 APE | 0.00735288 | ||||
Add Tier | 9387307 | 5 days ago | IN | 0 APE | 0.00307521 | ||||
Add Entry NFT | 9387216 | 5 days ago | IN | 0 APE | 0.00174477 | ||||
Create Match | 9387125 | 5 days ago | IN | 0 APE | 0.00722534 | ||||
Add Tier | 9387065 | 5 days ago | IN | 0 APE | 0.00307582 | ||||
Add Tier | 9387053 | 5 days ago | IN | 0 APE | 0.00307582 | ||||
Add Tier | 9387020 | 5 days ago | IN | 0 APE | 0.00256965 | ||||
Update Tier | 9375942 | 5 days ago | IN | 0 APE | 0.00127756 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Winpad
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-02-06 */ // ___ ___ ___ ___ _____ // /__/\ ___ /__/\ / /\ / /\ / /::\ // _\_ \:\ / /\ \ \:\ / /::\ / /::\ / /:/\:\ // /__/\ \:\ / /:/ \ \:\ / /:/\:\ / /:/\:\ / /:/ \:\ // _\_ \:\ \:\ /__/::\ _____\__\:\ / /:/~/:/ / /:/~/::\ /__/:/ \__\:| // /__/\ \:\ \:\ \__\/\:\__ /__/::::::::\ /__/:/ /:/ /__/:/ /:/\:\ \ \:\ / /:/ // \ \:\ \:\/:/ \ \:\/\ \ \:\~~\~~\/ \ \:\/:/ \ \:\/:/__\/ \ \:\ /:/ // \ \:\ \::/ \__\::/ \ \:\ ~~~ \ \::/ \ \::/ \ \:\/:/ // \ \:\/:/ /__/:/ \ \:\ \ \:\ \ \:\ \ \::/ // \ \::/ \__\/ \ \:\ \ \:\ \ \:\ \__\/ // \__\/ \__\/ \__\/ \__\/ // Official Contract of Winpad. // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @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 EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * 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; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); 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 if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // 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/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/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/Winpad.sol pragma solidity ^0.8.26; interface INft { function transferFrom( address from, address to, uint256 tokenId ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function balanceOf(address owner) external view returns (uint256); function ownerOf(uint256 tokenId) external view returns (address); } contract Winpad is Ownable, ReentrancyGuard { using SafeMath for uint256; // Revenue distribution percentages uint8 public constant FEE_PERCENT = 8; uint8 public constant TREASURY_PERCENT = 72; uint8 public constant OPERATIONS_PERCENT = 20; // Revenue distribution addresses address payable public feeAccount; address payable public treasuryAccount; address payable public operationsAccount; // Entry tier structure struct EntryTier { uint256 apeCost; uint256 baseEntries; uint256 bonusEntries; bool exists; } // Match structure struct Match { bytes32 id; uint256[] allowedTiers; address nftAddress; uint256 nftId; uint256 totalEntries; uint256 endDate; address winner; bool isEnded; bool exists; } // Participant tracking struct Participation { address participant; uint256 tierId; // Add back tierId uint256 entries; } // Storage mapping(uint256 => EntryTier) public tiers; uint256 public nextTierId = 1; mapping(bytes32 => Match) public matches; mapping(bytes32 => mapping(address => bool)) public hasUsedFreeEntry; mapping(bytes32 => Participation[]) public participations; bytes32[] public allMatchIds; mapping(address => bool) public authorizedCallers; // Free entry for those NFTs. address[] public entryNFTs; // Events event MatchCreated( bytes32 indexed matchId, address nftAddress, uint256 nftId, uint256 endDate ); event ParticipantEnrolled( bytes32 indexed matchId, address participant, uint256 entries ); event MatchCanceled(bytes32 indexed matchId, uint256 totalRefunded); event MatchExtended(bytes32 indexed matchId, uint256 endDate); event WinnerSelected( bytes32 indexed matchId, address winner, uint256 entries ); event FundsDistributed( bytes32 indexed matchId, uint256 totalAmount, uint256 fee, uint256 treasury, uint256 operations ); event TierUpdated( uint256 indexed tierId, uint256 apeCost, uint256 baseEntries, uint256 bonusEntries ); event CallerUpdated(address indexed caller, bool status); event WithdrawnNFT( address indexed nftAddress, uint256 indexed tokenId, address indexed recipient ); // Add this to your contract event TierUpdated(uint256 indexed tierId, bool status); modifier onlyCaller() { require( owner() == msg.sender || authorizedCallers[msg.sender], "Unauthorized" ); _; } constructor( address _initialOwner, address payable _feeAccount, address payable _treasuryAccount, address payable _operationsAccount ) Ownable(_initialOwner) { feeAccount = _feeAccount; treasuryAccount = _treasuryAccount; operationsAccount = _operationsAccount; } // Entry NFTs management function addEntryNFT(address nft) external onlyOwner { entryNFTs.push(nft); } // Tier management function addTier( uint256 apeCost, uint256 baseEntries, uint256 bonusEntries ) external onlyOwner { tiers[nextTierId] = EntryTier(apeCost, baseEntries, bonusEntries, true); emit TierUpdated(nextTierId, apeCost, baseEntries, bonusEntries); nextTierId++; } // Match creation function createMatch( uint256[] memory allowedTiers, address nftAddress, uint256 nftId, uint256 duration ) external onlyOwner returns (bytes32 matchId) { require(duration > 0, "Invalid duration"); require( INft(nftAddress).ownerOf(nftId) == address(this), "NFT not owned" ); matchId = keccak256( abi.encodePacked(block.timestamp, nftAddress, nftId, msg.sender) ); matches[matchId] = Match({ id: matchId, allowedTiers: allowedTiers, nftAddress: nftAddress, nftId: nftId, totalEntries: 0, endDate: block.timestamp + duration, winner: address(0), isEnded: false, exists: true }); allMatchIds.push(matchId); emit MatchCreated( matchId, nftAddress, nftId, block.timestamp + duration ); } // Participant enrollment function enroll(bytes32 matchId, uint256 tierId) external payable nonReentrant { Match storage m = matches[matchId]; EntryTier memory tier = tiers[tierId]; require(m.exists, "Invalid match"); require(!m.isEnded, "Match ended"); require(block.timestamp < m.endDate, "Enrollment closed"); require(tier.exists, "Invalid tier or Tier deactivated"); require(contains(m.allowedTiers, tierId), "Tier not allowed"); require(msg.value == tier.apeCost, "Incorrect APE amount"); if (tier.apeCost == 0) { require( !hasUsedFreeEntry[matchId][msg.sender], "Free entry already used" ); bool hasEntryNFT = false; for (uint256 i = 0; i < entryNFTs.length; i++) { if (INft(entryNFTs[i]).balanceOf(msg.sender) > 0) { hasEntryNFT = true; break; } } require(hasEntryNFT, "No qualifying NFT found"); hasUsedFreeEntry[matchId][msg.sender] = true; } uint256 totalEntries = tier.baseEntries + tier.bonusEntries; participations[matchId].push( Participation(msg.sender, tierId, totalEntries) ); m.totalEntries += totalEntries; emit ParticipantEnrolled(matchId, msg.sender, totalEntries); } // Match resolution function pickWinner(bytes32 matchId, uint256 randomSeed) external onlyCaller nonReentrant { Match storage m = matches[matchId]; require(!m.isEnded, "Match already ended"); uint256 randomNumber = uint256( keccak256(abi.encodePacked(randomSeed, block.timestamp, msg.sender)) ) % m.totalEntries; uint256 cumulative; address winner; uint256 winnerEntries; Participation[] memory parts = participations[matchId]; for (uint256 i = 0; i < parts.length; i++) { Participation memory p = parts[i]; if (randomNumber < cumulative + p.entries) { winner = p.participant; winnerEntries = p.entries; break; } cumulative += p.entries; } uint256 totalPrizePool = address(this).balance; uint256 feeAmount = totalPrizePool.mul(FEE_PERCENT).div(100); uint256 treasuryAmount = totalPrizePool.mul(TREASURY_PERCENT).div(100); uint256 operationsAmount = totalPrizePool.sub(feeAmount).sub( treasuryAmount ); feeAccount.transfer(feeAmount); treasuryAccount.transfer(treasuryAmount); operationsAccount.transfer(operationsAmount); require( INft(m.nftAddress).ownerOf(m.nftId) == address(this), "Contract does not own NFT" ); INft(m.nftAddress).transferFrom(address(this), winner, m.nftId); m.winner = winner; m.isEnded = true; emit FundsDistributed( matchId, totalPrizePool, feeAmount, treasuryAmount, operationsAmount ); emit WinnerSelected(matchId, winner, winnerEntries); } // Fix the cancellation logic function cancelMatch(bytes32 matchId) external onlyCaller nonReentrant { Match storage m = matches[matchId]; require(!m.isEnded, "Match already ended"); uint256 totalRefunded; for (uint256 i = 0; i < participations[matchId].length; i++) { Participation memory p = participations[matchId][i]; EntryTier memory tier = tiers[p.tierId]; // Now works payable(p.participant).transfer(tier.apeCost); totalRefunded += tier.apeCost; } INft(m.nftAddress).transferFrom(address(this), owner(), m.nftId); m.isEnded = true; emit MatchCanceled(matchId, totalRefunded); } // Extending match duration function extendMatchEndDate(bytes32 matchId, uint256 additionalDuration) external onlyCaller { Match storage m = matches[matchId]; require(!m.isEnded, "Match already ended"); require(additionalDuration > 0, "Invalid duration"); m.endDate += additionalDuration; emit MatchExtended(matchId, m.endDate); } // Secure NFT withdrawal function function withdrawNFT(address nftAddress, uint256 tokenId) external onlyOwner nonReentrant { // Verify contract owns the NFT require( INft(nftAddress).ownerOf(tokenId) == address(this), "Contract does not own this NFT" ); // Transfer NFT to recipient INft(nftAddress).safeTransferFrom(address(this), owner(), tokenId); // Emit withdrawal event emit WithdrawnNFT(nftAddress, tokenId, owner()); } // Remove an NFT address from the array by index function removeEntryNFT(uint256 index) external onlyOwner { require(index < entryNFTs.length, "Index out of bounds"); if (entryNFTs.length == 1) { entryNFTs.pop(); return; } // Replace the element to be removed with the last element entryNFTs[index] = entryNFTs[entryNFTs.length - 1]; // Remove the last element entryNFTs.pop(); } function updateTier(uint256 tierId, bool status) external onlyOwner { require(tierId < nextTierId, "Invalid tier ID"); tiers[tierId].exists = status; emit TierUpdated(tierId, status); } // View functions function getEntryTypes() public view returns (EntryTier[] memory) { EntryTier[] memory types = new EntryTier[](nextTierId - 1); for (uint256 i = 1; i < nextTierId; i++) { types[i - 1] = tiers[i]; } return types; } function getOngoingMatches() public view returns (Match[] memory) { return _filterMatches(0); } function getMatchHistory() public view returns (Match[] memory) { return _filterMatches(1); } function getReadyMatches() public view returns (Match[] memory) { return _filterMatches(2); } function getAllEntryNFTs() public view returns (address[] memory) { return entryNFTs; } function getParticipations(bytes32 matchId) public view returns (Participation[] memory) { return participations[matchId]; } // Internal helpers function _filterMatches(uint8 filterType) private view returns (Match[] memory) { Match[] memory result = new Match[](allMatchIds.length); uint256 count = 0; for (uint256 i = 0; i < allMatchIds.length; i++) { bytes32 id = allMatchIds[i]; Match storage m = matches[id]; bool include; if (filterType == 0) { // Ongoing include = !m.isEnded && block.timestamp < m.endDate; } else if (filterType == 1) { // History include = m.isEnded; } else if (filterType == 2) { // Ready include = !m.isEnded && (block.timestamp >= m.endDate); } if (include) { result[count] = m; count++; } } Match[] memory trimmed = new Match[](count); for (uint256 i = 0; i < count; i++) { trimmed[i] = result[i]; } return trimmed; } function contains(uint256[] memory arr, uint256 value) private pure returns (bool) { for (uint256 i = 0; i < arr.length; i++) { if (arr[i] == value) return true; } return false; } // Authorization management function updateCaller(address caller, bool status) external onlyOwner { authorizedCallers[caller] = status; emit CallerUpdated(caller, status); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address payable","name":"_feeAccount","type":"address"},{"internalType":"address payable","name":"_treasuryAccount","type":"address"},{"internalType":"address payable","name":"_operationsAccount","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"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"CallerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"matchId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"operations","type":"uint256"}],"name":"FundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"matchId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"totalRefunded","type":"uint256"}],"name":"MatchCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"matchId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"}],"name":"MatchCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"matchId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"}],"name":"MatchExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"matchId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"participant","type":"address"},{"indexed":false,"internalType":"uint256","name":"entries","type":"uint256"}],"name":"ParticipantEnrolled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tierId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"apeCost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"baseEntries","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonusEntries","type":"uint256"}],"name":"TierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tierId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"TierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"matchId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"entries","type":"uint256"}],"name":"WinnerSelected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"WithdrawnNFT","type":"event"},{"inputs":[],"name":"FEE_PERCENT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATIONS_PERCENT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_PERCENT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"}],"name":"addEntryNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"apeCost","type":"uint256"},{"internalType":"uint256","name":"baseEntries","type":"uint256"},{"internalType":"uint256","name":"bonusEntries","type":"uint256"}],"name":"addTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allMatchIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedCallers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"matchId","type":"bytes32"}],"name":"cancelMatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"allowedTiers","type":"uint256[]"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"createMatch","outputs":[{"internalType":"bytes32","name":"matchId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"matchId","type":"bytes32"},{"internalType":"uint256","name":"tierId","type":"uint256"}],"name":"enroll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"entryNFTs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"matchId","type":"bytes32"},{"internalType":"uint256","name":"additionalDuration","type":"uint256"}],"name":"extendMatchEndDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAccount","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllEntryNFTs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEntryTypes","outputs":[{"components":[{"internalType":"uint256","name":"apeCost","type":"uint256"},{"internalType":"uint256","name":"baseEntries","type":"uint256"},{"internalType":"uint256","name":"bonusEntries","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"}],"internalType":"struct Winpad.EntryTier[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMatchHistory","outputs":[{"components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256[]","name":"allowedTiers","type":"uint256[]"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"bool","name":"isEnded","type":"bool"},{"internalType":"bool","name":"exists","type":"bool"}],"internalType":"struct Winpad.Match[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOngoingMatches","outputs":[{"components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256[]","name":"allowedTiers","type":"uint256[]"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"bool","name":"isEnded","type":"bool"},{"internalType":"bool","name":"exists","type":"bool"}],"internalType":"struct Winpad.Match[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"matchId","type":"bytes32"}],"name":"getParticipations","outputs":[{"components":[{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"tierId","type":"uint256"},{"internalType":"uint256","name":"entries","type":"uint256"}],"internalType":"struct Winpad.Participation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReadyMatches","outputs":[{"components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"uint256[]","name":"allowedTiers","type":"uint256[]"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"bool","name":"isEnded","type":"bool"},{"internalType":"bool","name":"exists","type":"bool"}],"internalType":"struct Winpad.Match[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"hasUsedFreeEntry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"matches","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"totalEntries","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"bool","name":"isEnded","type":"bool"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTierId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAccount","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"participations","outputs":[{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"tierId","type":"uint256"},{"internalType":"uint256","name":"entries","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"matchId","type":"bytes32"},{"internalType":"uint256","name":"randomSeed","type":"uint256"}],"name":"pickWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeEntryNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tiers","outputs":[{"internalType":"uint256","name":"apeCost","type":"uint256"},{"internalType":"uint256","name":"baseEntries","type":"uint256"},{"internalType":"uint256","name":"bonusEntries","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAccount","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tierId","type":"uint256"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600655348015610014575f80fd5b50604051614b2d380380614b2d833981810160405281019061003691906102e1565b835f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a7575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009e9190610354565b60405180910390fd5b6100b68161018760201b60201c565b50600180819055508260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505061036d565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102758261024c565b9050919050565b6102858161026b565b811461028f575f80fd5b50565b5f815190506102a08161027c565b92915050565b5f6102b08261024c565b9050919050565b6102c0816102a6565b81146102ca575f80fd5b50565b5f815190506102db816102b7565b92915050565b5f805f80608085870312156102f9576102f8610248565b5b5f61030687828801610292565b9450506020610317878288016102cd565b9350506040610328878288016102cd565b9250506060610339878288016102cd565b91505092959194509250565b61034e8161026b565b82525050565b5f6020820190506103675f830184610345565b92915050565b6147b38061037a5f395ff3fe6080604052600436106101fc575f3560e01c806383d5e7261161010c578063cc8db4ff1161009f578063e7e8517c1161006e578063e7e8517c14610731578063eaf98d231461075b578063ecdc2c0114610785578063ee272ff8146107c3578063f2fde38b146107eb57610203565b8063cc8db4ff14610689578063cfb95e17146106b1578063dc3a4e9b146106ed578063dfbed6231461070957610203565b80639dd45d77116100db5780639dd45d77146105cc5780639fe9ada3146105f6578063b82ee8c714610639578063c82db8f91461066157610203565b806383d5e726146105125780638da5cb5b1461053c57806398eeafc4146105665780639a1564f0146105a257610203565b8063463fec0f1161018f57806361eba6521161015e57806361eba652146104565780636358ec571461048057806365e17c9d146104a8578063715018a6146104d257806380e36dd8146104e857610203565b8063463fec0f1461037a578063536fff6c146103b657806354f276b9146103f25780636088e93a1461042e57610203565b80630f5f1dbc116101cb5780630f5f1dbc146102c25780631966cdbe146102ec5780632f333d2e14610314578063339b2cff1461035057610203565b8063039af9eb146102075780630594fd04146102465780630a47f932146102705780630bf9ed2b1461029a57610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061022d600480360381019061022891906130a5565b610813565b60405161023d94939291906130f9565b60405180910390f35b348015610251575f80fd5b5061025a61084b565b604051610267919061313c565b60405180910390f35b34801561027b575f80fd5b50610284610851565b60405161029191906133ef565b60405180910390f35b3480156102a5575f80fd5b506102c060048036038101906102bb9190613439565b610862565b005b3480156102cd575f80fd5b506102d66108cd565b6040516102e39190613484565b60405180910390f35b3480156102f7575f80fd5b50610312600480360381019061030d91906134c7565b6108f2565b005b34801561031f575f80fd5b5061033a60048036038101906103359190613505565b610fea565b6040516103479190613543565b60405180910390f35b34801561035b575f80fd5b50610364611014565b6040516103719190613484565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b91906130a5565b611039565b6040516103ad919061356b565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d79190613439565b611074565b6040516103e99190613543565b60405180910390f35b3480156103fd575f80fd5b50610418600480360381019061041391906130a5565b611091565b6040516104259190613593565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f91906135ac565b6110b1565b005b348015610461575f80fd5b5061046a611285565b60405161047791906133ef565b60405180910390f35b34801561048b575f80fd5b506104a660048036038101906104a191906135ea565b611296565b005b3480156104b3575f80fd5b506104bc61136d565b6040516104c99190613484565b60405180910390f35b3480156104dd575f80fd5b506104e6611392565b005b3480156104f3575f80fd5b506104fc6113a5565b6040516105099190613735565b60405180910390f35b34801561051d575f80fd5b506105266114ae565b6040516105339190613770565b60405180910390f35b348015610547575f80fd5b506105506114b3565b60405161055d919061356b565b60405180910390f35b348015610571575f80fd5b5061058c600480360381019061058791906138d9565b6114da565b6040516105999190613593565b60405180910390f35b3480156105ad575f80fd5b506105b661184e565b6040516105c391906133ef565b60405180910390f35b3480156105d7575f80fd5b506105e061185e565b6040516105ed9190613a01565b60405180910390f35b348015610601575f80fd5b5061061c60048036038101906106179190613a21565b6118e9565b604051610630989796959493929190613a4c565b60405180910390f35b348015610644575f80fd5b5061065f600480360381019061065a91906130a5565b611985565b005b34801561066c575f80fd5b5061068760048036038101906106829190613a21565b611b18565b005b348015610694575f80fd5b506106af60048036038101906106aa91906134c7565b611ed2565b005b3480156106bc575f80fd5b506106d760048036038101906106d29190613a21565b61209b565b6040516106e49190613bb0565b60405180910390f35b610707600480360381019061070291906134c7565b612170565b005b348015610714575f80fd5b5061072f600480360381019061072a9190613bfa565b612753565b005b34801561073c575f80fd5b50610745612801565b6040516107529190613770565b60405180910390f35b348015610766575f80fd5b5061076f612806565b60405161077c9190613770565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a691906134c7565b61280b565b6040516107ba93929190613c38565b60405180910390f35b3480156107ce575f80fd5b506107e960048036038101906107e49190613c6d565b61286a565b005b3480156107f6575f80fd5b50610811600480360381019061080c9190613439565b61291d565b005b6005602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16905084565b60065481565b606061085d60016129a1565b905090565b61086a612d2f565b600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff166109116114b3565b73ffffffffffffffffffffffffffffffffffffffff1614806109795750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613d05565b60405180910390fd5b6109c0612db6565b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff1615610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d90613d6d565b60405180910390fd5b5f8160040154834233604051602001610a4193929190613df0565b604051602081830303815290604052805190602001205f1c610a639190613e59565b90505f805f8060095f8981526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610b31578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190610a99565b5050505090505f5b8151811015610baa575f828281518110610b5657610b55613e89565b5b60200260200101519050806040015186610b709190613ee3565b871015610b8a57805f015194508060400151935050610baa565b806040015186610b9a9190613ee3565b9550508080600101915050610b39565b505f4790505f610bda6064610bcc600860ff1685612dfc90919063ffffffff16565b612e1190919063ffffffff16565b90505f610c076064610bf9604860ff1686612dfc90919063ffffffff16565b612e1190919063ffffffff16565b90505f610c2f82610c218587612e2690919063ffffffff16565b612e2690919063ffffffff16565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015610c95573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610cfa573d5f803e3d5ffd5b5060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610d5f573d5f803e3d5ffd5b503073ffffffffffffffffffffffffffffffffffffffff168a6002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8c600301546040518263ffffffff1660e01b8152600401610dd7919061313c565b602060405180830381865afa158015610df2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e169190613f2a565b73ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390613f9f565b60405180910390fd5b896002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30898d600301546040518463ffffffff1660e01b8152600401610ed093929190613fbd565b5f604051808303815f87803b158015610ee7575f80fd5b505af1158015610ef9573d5f803e3d5ffd5b50505050868a6006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018a60060160146101000a81548160ff0219169083151502179055508b7ffddfb72c47e86c9b40c5d988137a17ab83c495474cd558435b12d49f6c8dfc9585858585604051610f929493929190613ff2565b60405180910390a28b7f0de9133ae9f24b7424a923e1bf901ed2381ee3e99707ff9b9b696602199b3dcc8888604051610fcc929190614035565b60405180910390a250505050505050505050610fe6612e3b565b5050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8181548110611048575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b600a81815481106110a0575f80fd5b905f5260205f20015f915090505481565b6110b9612d2f565b6110c1612db6565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611111919061313c565b602060405180830381865afa15801561112c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111509190613f2a565b73ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d906140a6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e306111cb6114b3565b846040518463ffffffff1660e01b81526004016111ea93929190613fbd565b5f604051808303815f87803b158015611201575f80fd5b505af1158015611213573d5f803e3d5ffd5b5050505061121f6114b3565b73ffffffffffffffffffffffffffffffffffffffff16818373ffffffffffffffffffffffffffffffffffffffff167f88b2808a6fc6d8edbe6d59ced2418eb201957d7b09fc67da2b9dec70703ffa8260405160405180910390a4611281612e3b565b5050565b606061129160026129a1565b905090565b61129e612d2f565b60405180608001604052808481526020018381526020018281526020016001151581525060055f60065481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055509050506006547f2f9c2de6aaf46503da28305515cfe3b56565d2c3663c95ca503892b16c8d5a4a848484604051611349939291906140c4565b60405180910390a260065f815480929190611363906140f9565b9190505550505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139a612d2f565b6113a35f612e44565b565b60605f60016006546113b79190614140565b67ffffffffffffffff8111156113d0576113cf61379d565b5b60405190808252806020026020018201604052801561140957816020015b6113f6612f5e565b8152602001906001900390816113ee5790505b5090505f600190505b6006548110156114a65760055f8281526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250508260018361147d9190614140565b8151811061148e5761148d613e89565b5b60200260200101819052508080600101915050611412565b508091505090565b604881565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6114e3612d2f565b5f8211611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c906141bd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401611575919061313c565b602060405180830381865afa158015611590573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b49190613f2a565b73ffffffffffffffffffffffffffffffffffffffff161461160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190614225565b60405180910390fd5b428484336040516020016116219493929190614243565b6040516020818303038152906040528051906020012090506040518061012001604052808281526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f815260200183426116859190613ee3565b81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020016001151581525060075f8381526020019081526020015f205f820151815f015560208201518160010190805190602001906116ea929190612f84565b506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160060160146101000a81548160ff0219169083151502179055506101008201518160060160156101000a81548160ff021916908315150217905550905050600a81908060018154018082558091505060019003905f5260205f20015f9091909190915055807f5d004160fb0c10d44ff5c867fe5a12226e4b72b8137daeab0634ac0ca6f8fa918585854261182f9190613ee3565b60405161183e93929190613c38565b60405180910390a2949350505050565b60606118595f6129a1565b905090565b6060600c8054806020026020016040519081016040528092919081815260200182805480156118df57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611896575b5050505050905090565b6007602052805f5260405f205f91509050805f015490806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160149054906101000a900460ff16908060060160159054906101000a900460ff16905088565b61198d612d2f565b600c8054905081106119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb906142da565b60405180910390fd5b6001600c8054905003611a2a57600c8054806119f3576119f26142f8565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611b15565b600c6001600c80549050611a3e9190614140565b81548110611a4f57611a4e613e89565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110611a8b57611a8a613e89565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c805480611ae257611ae16142f8565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b50565b3373ffffffffffffffffffffffffffffffffffffffff16611b376114b3565b73ffffffffffffffffffffffffffffffffffffffff161480611b9f5750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613d05565b60405180910390fd5b611be6612db6565b5f60075f8381526020019081526020015f2090508060060160149054906101000a900460ff1615611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390613d6d565b60405180910390fd5b5f805f90505b60095f8581526020019081526020015f2080549050811015611dd7575f60095f8681526020019081526020015f208281548110611c9257611c91613e89565b5b905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505090505f60055f836020015181526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250509050815f015173ffffffffffffffffffffffffffffffffffffffff166108fc825f015190811502906040515f60405180830381858888f19350505050158015611db6573d5f803e3d5ffd5b50805f015184611dc69190613ee3565b935050508080600101915050611c52565b50816002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30611e206114b3565b85600301546040518463ffffffff1660e01b8152600401611e4393929190613fbd565b5f604051808303815f87803b158015611e5a575f80fd5b505af1158015611e6c573d5f803e3d5ffd5b5050505060018260060160146101000a81548160ff021916908315150217905550827feb0a1bf89c4eb26c92f84743d725051d48db72eb3b55a322c7bbbaaa62d944e682604051611ebd919061313c565b60405180910390a25050611ecf612e3b565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611ef16114b3565b73ffffffffffffffffffffffffffffffffffffffff161480611f595750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613d05565b60405180910390fd5b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613d6d565b60405180910390fd5b5f8211612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906141bd565b60405180910390fd5b81816005015f8282546120539190613ee3565b92505081905550827f4e7343e3df0eebdc37f76fccb079c3c667a33ba7f25ec82d4130549c3bf247d4826005015460405161208e919061313c565b60405180910390a2505050565b606060095f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612165578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481525050815260200190600101906120cd565b505050509050919050565b612178612db6565b5f60075f8481526020019081526020015f2090505f60055f8481526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff16151515158152505090508160060160159054906101000a900460ff16612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a9061436f565b60405180910390fd5b8160060160149054906101000a900460ff1615612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c906143d7565b60405180910390fd5b816005015442106122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c29061443f565b60405180910390fd5b806060015161230f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612306906144a7565b60405180910390fd5b6123698260010180548060200260200160405190810160405280929190818152602001828054801561235e57602002820191905f5260205f20905b81548152602001906001019080831161234a575b505050505084612f05565b6123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f9061450f565b60405180910390fd5b805f015134146123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490614577565b60405180910390fd5b5f815f0151036126175760085f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612487906145df565b60405180910390fd5b5f805b600c80549050811015612570575f600c82815481106124b5576124b4613e89565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612515919061356b565b602060405180830381865afa158015612530573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125549190614611565b11156125635760019150612570565b8080600101915050612493565b50806125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890614686565b60405180910390fd5b600160085f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505b5f8160400151826020015161262c9190613ee3565b905060095f8681526020019081526020015f2060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200183815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155505080836004015f8282546127039190613ee3565b92505081905550847f9547adb56b87436876e7c387b0becc7270032515aedda7a210440394c8146d6d338360405161273c929190614035565b60405180910390a250505061274f612e3b565b5050565b61275b612d2f565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28367b555b0bf666dc90350598e071733a56fe1f54631804abfa5688b29c2796826040516127f59190613543565b60405180910390a25050565b601481565b600881565b6009602052815f5260405f208181548110612824575f80fd5b905f5260205f2090600302015f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b612872612d2f565b60065482106128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad906146ee565b60405180910390fd5b8060055f8481526020019081526020015f206003015f6101000a81548160ff021916908315150217905550817f8f71204ab5049511d33210dd0e3f57d281dfb0c878c1246c78bba0e1d0ecb561826040516129119190613543565b60405180910390a25050565b612925612d2f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612995575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161298c919061356b565b60405180910390fd5b61299e81612e44565b50565b60605f600a8054905067ffffffffffffffff8111156129c3576129c261379d565b5b6040519080825280602002602001820160405280156129fc57816020015b6129e9612fcf565b8152602001906001900390816129e15790505b5090505f805b600a80549050811015612c7b575f600a8281548110612a2457612a23613e89565b5b905f5260205f20015490505f60075f8381526020019081526020015f2090505f808860ff1603612a77578160060160149054906101000a900460ff16158015612a705750816005015442105b9050612ace565b60018860ff1603612a9b578160060160149054906101000a900460ff169050612acd565b60028860ff1603612acc578160060160149054906101000a900460ff16158015612ac9575081600501544210155b90505b5b5b8015612c6b5781604051806101200160405290815f820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015612b3757602002820191905f5260205f20905b815481526020019060010190808311612b23575b50505050508152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160149054906101000a900460ff161515151581526020016006820160159054906101000a900460ff161515151581525050868681518110612c5157612c50613e89565b5b60200260200101819052508480612c67906140f9565b9550505b5050508080600101915050612a02565b505f8167ffffffffffffffff811115612c9757612c9661379d565b5b604051908082528060200260200182016040528015612cd057816020015b612cbd612fcf565b815260200190600190039081612cb55790505b5090505f5b82811015612d2357838181518110612cf057612cef613e89565b5b6020026020010151828281518110612d0b57612d0a613e89565b5b60200260200101819052508080600101915050612cd5565b50809350505050919050565b612d37612f57565b73ffffffffffffffffffffffffffffffffffffffff16612d556114b3565b73ffffffffffffffffffffffffffffffffffffffff1614612db457612d78612f57565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612dab919061356b565b60405180910390fd5b565b600260015403612df2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b5f8183612e09919061470c565b905092915050565b5f8183612e1e919061474d565b905092915050565b5f8183612e339190614140565b905092915050565b60018081905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f90505b8351811015612f4c5782848281518110612f2857612f27613e89565b5b602002602001015103612f3f576001915050612f51565b8080600101915050612f0b565b505f90505b92915050565b5f33905090565b60405180608001604052805f81526020015f81526020015f81526020015f151581525090565b828054828255905f5260205f20908101928215612fbe579160200282015b82811115612fbd578251825591602001919060010190612fa2565b5b509050612fcb9190613046565b5090565b6040518061012001604052805f8019168152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f151581525090565b5b8082111561305d575f815f905550600101613047565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61308481613072565b811461308e575f80fd5b50565b5f8135905061309f8161307b565b92915050565b5f602082840312156130ba576130b961306a565b5b5f6130c784828501613091565b91505092915050565b6130d981613072565b82525050565b5f8115159050919050565b6130f3816130df565b82525050565b5f60808201905061310c5f8301876130d0565b61311960208301866130d0565b61312660408301856130d0565b61313360608301846130ea565b95945050505050565b5f60208201905061314f5f8301846130d0565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b6131908161317e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6131c881613072565b82525050565b5f6131d983836131bf565b60208301905092915050565b5f602082019050919050565b5f6131fb82613196565b61320581856131a0565b9350613210836131b0565b805f5b8381101561324057815161322788826131ce565b9750613232836131e5565b925050600181019050613213565b5085935050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132768261324d565b9050919050565b6132868161326c565b82525050565b613295816130df565b82525050565b5f61012083015f8301516132b15f860182613187565b50602083015184820360208601526132c982826131f1565b91505060408301516132de604086018261327d565b5060608301516132f160608601826131bf565b50608083015161330460808601826131bf565b5060a083015161331760a08601826131bf565b5060c083015161332a60c086018261327d565b5060e083015161333d60e086018261328c565b5061010083015161335261010086018261328c565b508091505092915050565b5f613368838361329b565b905092915050565b5f602082019050919050565b5f61338682613155565b613390818561315f565b9350836020820285016133a28561316f565b805f5b858110156133dd57848403895281516133be858261335d565b94506133c983613370565b925060208a019950506001810190506133a5565b50829750879550505050505092915050565b5f6020820190508181035f830152613407818461337c565b905092915050565b6134188161326c565b8114613422575f80fd5b50565b5f813590506134338161340f565b92915050565b5f6020828403121561344e5761344d61306a565b5b5f61345b84828501613425565b91505092915050565b5f61346e8261324d565b9050919050565b61347e81613464565b82525050565b5f6020820190506134975f830184613475565b92915050565b6134a68161317e565b81146134b0575f80fd5b50565b5f813590506134c18161349d565b92915050565b5f80604083850312156134dd576134dc61306a565b5b5f6134ea858286016134b3565b92505060206134fb85828601613091565b9150509250929050565b5f806040838503121561351b5761351a61306a565b5b5f613528858286016134b3565b925050602061353985828601613425565b9150509250929050565b5f6020820190506135565f8301846130ea565b92915050565b6135658161326c565b82525050565b5f60208201905061357e5f83018461355c565b92915050565b61358d8161317e565b82525050565b5f6020820190506135a65f830184613584565b92915050565b5f80604083850312156135c2576135c161306a565b5b5f6135cf85828601613425565b92505060206135e085828601613091565b9150509250929050565b5f805f606084860312156136015761360061306a565b5b5f61360e86828701613091565b935050602061361f86828701613091565b925050604061363086828701613091565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b608082015f8201516136775f8501826131bf565b50602082015161368a60208501826131bf565b50604082015161369d60408501826131bf565b5060608201516136b0606085018261328c565b50505050565b5f6136c18383613663565b60808301905092915050565b5f602082019050919050565b5f6136e38261363a565b6136ed8185613644565b93506136f883613654565b805f5b8381101561372857815161370f88826136b6565b975061371a836136cd565b9250506001810190506136fb565b5085935050505092915050565b5f6020820190508181035f83015261374d81846136d9565b905092915050565b5f60ff82169050919050565b61376a81613755565b82525050565b5f6020820190506137835f830184613761565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6137d38261378d565b810181811067ffffffffffffffff821117156137f2576137f161379d565b5b80604052505050565b5f613804613061565b905061381082826137ca565b919050565b5f67ffffffffffffffff82111561382f5761382e61379d565b5b602082029050602081019050919050565b5f80fd5b5f61385661385184613815565b6137fb565b9050808382526020820190506020840283018581111561387957613878613840565b5b835b818110156138a2578061388e8882613091565b84526020840193505060208101905061387b565b5050509392505050565b5f82601f8301126138c0576138bf613789565b5b81356138d0848260208601613844565b91505092915050565b5f805f80608085870312156138f1576138f061306a565b5b5f85013567ffffffffffffffff81111561390e5761390d61306e565b5b61391a878288016138ac565b945050602061392b87828801613425565b935050604061393c87828801613091565b925050606061394d87828801613091565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61398d838361327d565b60208301905092915050565b5f602082019050919050565b5f6139af82613959565b6139b98185613963565b93506139c483613973565b805f5b838110156139f45781516139db8882613982565b97506139e683613999565b9250506001810190506139c7565b5085935050505092915050565b5f6020820190508181035f830152613a1981846139a5565b905092915050565b5f60208284031215613a3657613a3561306a565b5b5f613a43848285016134b3565b91505092915050565b5f61010082019050613a605f83018b613584565b613a6d602083018a61355c565b613a7a60408301896130d0565b613a8760608301886130d0565b613a9460808301876130d0565b613aa160a083018661355c565b613aae60c08301856130ea565b613abb60e08301846130ea565b9998505050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b606082015f820151613b055f85018261327d565b506020820151613b1860208501826131bf565b506040820151613b2b60408501826131bf565b50505050565b5f613b3c8383613af1565b60608301905092915050565b5f602082019050919050565b5f613b5e82613ac8565b613b688185613ad2565b9350613b7383613ae2565b805f5b83811015613ba3578151613b8a8882613b31565b9750613b9583613b48565b925050600181019050613b76565b5085935050505092915050565b5f6020820190508181035f830152613bc88184613b54565b905092915050565b613bd9816130df565b8114613be3575f80fd5b50565b5f81359050613bf481613bd0565b92915050565b5f8060408385031215613c1057613c0f61306a565b5b5f613c1d85828601613425565b9250506020613c2e85828601613be6565b9150509250929050565b5f606082019050613c4b5f83018661355c565b613c5860208301856130d0565b613c6560408301846130d0565b949350505050565b5f8060408385031215613c8357613c8261306a565b5b5f613c9085828601613091565b9250506020613ca185828601613be6565b9150509250929050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f613cef600c83613cab565b9150613cfa82613cbb565b602082019050919050565b5f6020820190508181035f830152613d1c81613ce3565b9050919050565b7f4d6174636820616c726561647920656e646564000000000000000000000000005f82015250565b5f613d57601383613cab565b9150613d6282613d23565b602082019050919050565b5f6020820190508181035f830152613d8481613d4b565b9050919050565b5f819050919050565b613da5613da082613072565b613d8b565b82525050565b5f8160601b9050919050565b5f613dc182613dab565b9050919050565b5f613dd282613db7565b9050919050565b613dea613de58261326c565b613dc8565b82525050565b5f613dfb8286613d94565b602082019150613e0b8285613d94565b602082019150613e1b8284613dd9565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e6382613072565b9150613e6e83613072565b925082613e7e57613e7d613e2c565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613eed82613072565b9150613ef883613072565b9250828201905080821115613f1057613f0f613eb6565b5b92915050565b5f81519050613f248161340f565b92915050565b5f60208284031215613f3f57613f3e61306a565b5b5f613f4c84828501613f16565b91505092915050565b7f436f6e747261637420646f6573206e6f74206f776e204e4654000000000000005f82015250565b5f613f89601983613cab565b9150613f9482613f55565b602082019050919050565b5f6020820190508181035f830152613fb681613f7d565b9050919050565b5f606082019050613fd05f83018661355c565b613fdd602083018561355c565b613fea60408301846130d0565b949350505050565b5f6080820190506140055f8301876130d0565b61401260208301866130d0565b61401f60408301856130d0565b61402c60608301846130d0565b95945050505050565b5f6040820190506140485f83018561355c565b61405560208301846130d0565b9392505050565b7f436f6e747261637420646f6573206e6f74206f776e2074686973204e465400005f82015250565b5f614090601e83613cab565b915061409b8261405c565b602082019050919050565b5f6020820190508181035f8301526140bd81614084565b9050919050565b5f6060820190506140d75f8301866130d0565b6140e460208301856130d0565b6140f160408301846130d0565b949350505050565b5f61410382613072565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361413557614134613eb6565b5b600182019050919050565b5f61414a82613072565b915061415583613072565b925082820390508181111561416d5761416c613eb6565b5b92915050565b7f496e76616c6964206475726174696f6e000000000000000000000000000000005f82015250565b5f6141a7601083613cab565b91506141b282614173565b602082019050919050565b5f6020820190508181035f8301526141d48161419b565b9050919050565b7f4e4654206e6f74206f776e6564000000000000000000000000000000000000005f82015250565b5f61420f600d83613cab565b915061421a826141db565b602082019050919050565b5f6020820190508181035f83015261423c81614203565b9050919050565b5f61424e8287613d94565b60208201915061425e8286613dd9565b60148201915061426e8285613d94565b60208201915061427e8284613dd9565b60148201915081905095945050505050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f6142c4601383613cab565b91506142cf82614290565b602082019050919050565b5f6020820190508181035f8301526142f1816142b8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f496e76616c6964206d61746368000000000000000000000000000000000000005f82015250565b5f614359600d83613cab565b915061436482614325565b602082019050919050565b5f6020820190508181035f8301526143868161434d565b9050919050565b7f4d6174636820656e6465640000000000000000000000000000000000000000005f82015250565b5f6143c1600b83613cab565b91506143cc8261438d565b602082019050919050565b5f6020820190508181035f8301526143ee816143b5565b9050919050565b7f456e726f6c6c6d656e7420636c6f7365640000000000000000000000000000005f82015250565b5f614429601183613cab565b9150614434826143f5565b602082019050919050565b5f6020820190508181035f8301526144568161441d565b9050919050565b7f496e76616c69642074696572206f7220546965722064656163746976617465645f82015250565b5f614491602083613cab565b915061449c8261445d565b602082019050919050565b5f6020820190508181035f8301526144be81614485565b9050919050565b7f54696572206e6f7420616c6c6f776564000000000000000000000000000000005f82015250565b5f6144f9601083613cab565b9150614504826144c5565b602082019050919050565b5f6020820190508181035f830152614526816144ed565b9050919050565b7f496e636f72726563742041504520616d6f756e740000000000000000000000005f82015250565b5f614561601483613cab565b915061456c8261452d565b602082019050919050565b5f6020820190508181035f83015261458e81614555565b9050919050565b7f4672656520656e74727920616c726561647920757365640000000000000000005f82015250565b5f6145c9601783613cab565b91506145d482614595565b602082019050919050565b5f6020820190508181035f8301526145f6816145bd565b9050919050565b5f8151905061460b8161307b565b92915050565b5f602082840312156146265761462561306a565b5b5f614633848285016145fd565b91505092915050565b7f4e6f207175616c696679696e67204e465420666f756e640000000000000000005f82015250565b5f614670601783613cab565b915061467b8261463c565b602082019050919050565b5f6020820190508181035f83015261469d81614664565b9050919050565b7f496e76616c6964207469657220494400000000000000000000000000000000005f82015250565b5f6146d8600f83613cab565b91506146e3826146a4565b602082019050919050565b5f6020820190508181035f830152614705816146cc565b9050919050565b5f61471682613072565b915061472183613072565b925082820261472f81613072565b9150828204841483151761474657614745613eb6565b5b5092915050565b5f61475782613072565b915061476283613072565b92508261477257614771613e2c565b5b82820490509291505056fea2646970667358221220ef24de033bf82c7fb534ad610c171e0ced4a86151e780b4ee638f7b97db2787564736f6c634300081a0033000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Deployed Bytecode
0x6080604052600436106101fc575f3560e01c806383d5e7261161010c578063cc8db4ff1161009f578063e7e8517c1161006e578063e7e8517c14610731578063eaf98d231461075b578063ecdc2c0114610785578063ee272ff8146107c3578063f2fde38b146107eb57610203565b8063cc8db4ff14610689578063cfb95e17146106b1578063dc3a4e9b146106ed578063dfbed6231461070957610203565b80639dd45d77116100db5780639dd45d77146105cc5780639fe9ada3146105f6578063b82ee8c714610639578063c82db8f91461066157610203565b806383d5e726146105125780638da5cb5b1461053c57806398eeafc4146105665780639a1564f0146105a257610203565b8063463fec0f1161018f57806361eba6521161015e57806361eba652146104565780636358ec571461048057806365e17c9d146104a8578063715018a6146104d257806380e36dd8146104e857610203565b8063463fec0f1461037a578063536fff6c146103b657806354f276b9146103f25780636088e93a1461042e57610203565b80630f5f1dbc116101cb5780630f5f1dbc146102c25780631966cdbe146102ec5780632f333d2e14610314578063339b2cff1461035057610203565b8063039af9eb146102075780630594fd04146102465780630a47f932146102705780630bf9ed2b1461029a57610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061022d600480360381019061022891906130a5565b610813565b60405161023d94939291906130f9565b60405180910390f35b348015610251575f80fd5b5061025a61084b565b604051610267919061313c565b60405180910390f35b34801561027b575f80fd5b50610284610851565b60405161029191906133ef565b60405180910390f35b3480156102a5575f80fd5b506102c060048036038101906102bb9190613439565b610862565b005b3480156102cd575f80fd5b506102d66108cd565b6040516102e39190613484565b60405180910390f35b3480156102f7575f80fd5b50610312600480360381019061030d91906134c7565b6108f2565b005b34801561031f575f80fd5b5061033a60048036038101906103359190613505565b610fea565b6040516103479190613543565b60405180910390f35b34801561035b575f80fd5b50610364611014565b6040516103719190613484565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b91906130a5565b611039565b6040516103ad919061356b565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d79190613439565b611074565b6040516103e99190613543565b60405180910390f35b3480156103fd575f80fd5b50610418600480360381019061041391906130a5565b611091565b6040516104259190613593565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f91906135ac565b6110b1565b005b348015610461575f80fd5b5061046a611285565b60405161047791906133ef565b60405180910390f35b34801561048b575f80fd5b506104a660048036038101906104a191906135ea565b611296565b005b3480156104b3575f80fd5b506104bc61136d565b6040516104c99190613484565b60405180910390f35b3480156104dd575f80fd5b506104e6611392565b005b3480156104f3575f80fd5b506104fc6113a5565b6040516105099190613735565b60405180910390f35b34801561051d575f80fd5b506105266114ae565b6040516105339190613770565b60405180910390f35b348015610547575f80fd5b506105506114b3565b60405161055d919061356b565b60405180910390f35b348015610571575f80fd5b5061058c600480360381019061058791906138d9565b6114da565b6040516105999190613593565b60405180910390f35b3480156105ad575f80fd5b506105b661184e565b6040516105c391906133ef565b60405180910390f35b3480156105d7575f80fd5b506105e061185e565b6040516105ed9190613a01565b60405180910390f35b348015610601575f80fd5b5061061c60048036038101906106179190613a21565b6118e9565b604051610630989796959493929190613a4c565b60405180910390f35b348015610644575f80fd5b5061065f600480360381019061065a91906130a5565b611985565b005b34801561066c575f80fd5b5061068760048036038101906106829190613a21565b611b18565b005b348015610694575f80fd5b506106af60048036038101906106aa91906134c7565b611ed2565b005b3480156106bc575f80fd5b506106d760048036038101906106d29190613a21565b61209b565b6040516106e49190613bb0565b60405180910390f35b610707600480360381019061070291906134c7565b612170565b005b348015610714575f80fd5b5061072f600480360381019061072a9190613bfa565b612753565b005b34801561073c575f80fd5b50610745612801565b6040516107529190613770565b60405180910390f35b348015610766575f80fd5b5061076f612806565b60405161077c9190613770565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a691906134c7565b61280b565b6040516107ba93929190613c38565b60405180910390f35b3480156107ce575f80fd5b506107e960048036038101906107e49190613c6d565b61286a565b005b3480156107f6575f80fd5b50610811600480360381019061080c9190613439565b61291d565b005b6005602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16905084565b60065481565b606061085d60016129a1565b905090565b61086a612d2f565b600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff166109116114b3565b73ffffffffffffffffffffffffffffffffffffffff1614806109795750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613d05565b60405180910390fd5b6109c0612db6565b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff1615610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d90613d6d565b60405180910390fd5b5f8160040154834233604051602001610a4193929190613df0565b604051602081830303815290604052805190602001205f1c610a639190613e59565b90505f805f8060095f8981526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610b31578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190610a99565b5050505090505f5b8151811015610baa575f828281518110610b5657610b55613e89565b5b60200260200101519050806040015186610b709190613ee3565b871015610b8a57805f015194508060400151935050610baa565b806040015186610b9a9190613ee3565b9550508080600101915050610b39565b505f4790505f610bda6064610bcc600860ff1685612dfc90919063ffffffff16565b612e1190919063ffffffff16565b90505f610c076064610bf9604860ff1686612dfc90919063ffffffff16565b612e1190919063ffffffff16565b90505f610c2f82610c218587612e2690919063ffffffff16565b612e2690919063ffffffff16565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015610c95573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610cfa573d5f803e3d5ffd5b5060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610d5f573d5f803e3d5ffd5b503073ffffffffffffffffffffffffffffffffffffffff168a6002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8c600301546040518263ffffffff1660e01b8152600401610dd7919061313c565b602060405180830381865afa158015610df2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e169190613f2a565b73ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390613f9f565b60405180910390fd5b896002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30898d600301546040518463ffffffff1660e01b8152600401610ed093929190613fbd565b5f604051808303815f87803b158015610ee7575f80fd5b505af1158015610ef9573d5f803e3d5ffd5b50505050868a6006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018a60060160146101000a81548160ff0219169083151502179055508b7ffddfb72c47e86c9b40c5d988137a17ab83c495474cd558435b12d49f6c8dfc9585858585604051610f929493929190613ff2565b60405180910390a28b7f0de9133ae9f24b7424a923e1bf901ed2381ee3e99707ff9b9b696602199b3dcc8888604051610fcc929190614035565b60405180910390a250505050505050505050610fe6612e3b565b5050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8181548110611048575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b600a81815481106110a0575f80fd5b905f5260205f20015f915090505481565b6110b9612d2f565b6110c1612db6565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611111919061313c565b602060405180830381865afa15801561112c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111509190613f2a565b73ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d906140a6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e306111cb6114b3565b846040518463ffffffff1660e01b81526004016111ea93929190613fbd565b5f604051808303815f87803b158015611201575f80fd5b505af1158015611213573d5f803e3d5ffd5b5050505061121f6114b3565b73ffffffffffffffffffffffffffffffffffffffff16818373ffffffffffffffffffffffffffffffffffffffff167f88b2808a6fc6d8edbe6d59ced2418eb201957d7b09fc67da2b9dec70703ffa8260405160405180910390a4611281612e3b565b5050565b606061129160026129a1565b905090565b61129e612d2f565b60405180608001604052808481526020018381526020018281526020016001151581525060055f60065481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055509050506006547f2f9c2de6aaf46503da28305515cfe3b56565d2c3663c95ca503892b16c8d5a4a848484604051611349939291906140c4565b60405180910390a260065f815480929190611363906140f9565b9190505550505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139a612d2f565b6113a35f612e44565b565b60605f60016006546113b79190614140565b67ffffffffffffffff8111156113d0576113cf61379d565b5b60405190808252806020026020018201604052801561140957816020015b6113f6612f5e565b8152602001906001900390816113ee5790505b5090505f600190505b6006548110156114a65760055f8281526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250508260018361147d9190614140565b8151811061148e5761148d613e89565b5b60200260200101819052508080600101915050611412565b508091505090565b604881565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6114e3612d2f565b5f8211611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c906141bd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401611575919061313c565b602060405180830381865afa158015611590573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b49190613f2a565b73ffffffffffffffffffffffffffffffffffffffff161461160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190614225565b60405180910390fd5b428484336040516020016116219493929190614243565b6040516020818303038152906040528051906020012090506040518061012001604052808281526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f815260200183426116859190613ee3565b81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020016001151581525060075f8381526020019081526020015f205f820151815f015560208201518160010190805190602001906116ea929190612f84565b506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160060160146101000a81548160ff0219169083151502179055506101008201518160060160156101000a81548160ff021916908315150217905550905050600a81908060018154018082558091505060019003905f5260205f20015f9091909190915055807f5d004160fb0c10d44ff5c867fe5a12226e4b72b8137daeab0634ac0ca6f8fa918585854261182f9190613ee3565b60405161183e93929190613c38565b60405180910390a2949350505050565b60606118595f6129a1565b905090565b6060600c8054806020026020016040519081016040528092919081815260200182805480156118df57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611896575b5050505050905090565b6007602052805f5260405f205f91509050805f015490806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160149054906101000a900460ff16908060060160159054906101000a900460ff16905088565b61198d612d2f565b600c8054905081106119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb906142da565b60405180910390fd5b6001600c8054905003611a2a57600c8054806119f3576119f26142f8565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611b15565b600c6001600c80549050611a3e9190614140565b81548110611a4f57611a4e613e89565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110611a8b57611a8a613e89565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c805480611ae257611ae16142f8565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b50565b3373ffffffffffffffffffffffffffffffffffffffff16611b376114b3565b73ffffffffffffffffffffffffffffffffffffffff161480611b9f5750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613d05565b60405180910390fd5b611be6612db6565b5f60075f8381526020019081526020015f2090508060060160149054906101000a900460ff1615611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390613d6d565b60405180910390fd5b5f805f90505b60095f8581526020019081526020015f2080549050811015611dd7575f60095f8681526020019081526020015f208281548110611c9257611c91613e89565b5b905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505090505f60055f836020015181526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250509050815f015173ffffffffffffffffffffffffffffffffffffffff166108fc825f015190811502906040515f60405180830381858888f19350505050158015611db6573d5f803e3d5ffd5b50805f015184611dc69190613ee3565b935050508080600101915050611c52565b50816002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30611e206114b3565b85600301546040518463ffffffff1660e01b8152600401611e4393929190613fbd565b5f604051808303815f87803b158015611e5a575f80fd5b505af1158015611e6c573d5f803e3d5ffd5b5050505060018260060160146101000a81548160ff021916908315150217905550827feb0a1bf89c4eb26c92f84743d725051d48db72eb3b55a322c7bbbaaa62d944e682604051611ebd919061313c565b60405180910390a25050611ecf612e3b565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611ef16114b3565b73ffffffffffffffffffffffffffffffffffffffff161480611f595750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613d05565b60405180910390fd5b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613d6d565b60405180910390fd5b5f8211612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906141bd565b60405180910390fd5b81816005015f8282546120539190613ee3565b92505081905550827f4e7343e3df0eebdc37f76fccb079c3c667a33ba7f25ec82d4130549c3bf247d4826005015460405161208e919061313c565b60405180910390a2505050565b606060095f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015612165578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481525050815260200190600101906120cd565b505050509050919050565b612178612db6565b5f60075f8481526020019081526020015f2090505f60055f8481526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff16151515158152505090508160060160159054906101000a900460ff16612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a9061436f565b60405180910390fd5b8160060160149054906101000a900460ff1615612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c906143d7565b60405180910390fd5b816005015442106122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c29061443f565b60405180910390fd5b806060015161230f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612306906144a7565b60405180910390fd5b6123698260010180548060200260200160405190810160405280929190818152602001828054801561235e57602002820191905f5260205f20905b81548152602001906001019080831161234a575b505050505084612f05565b6123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f9061450f565b60405180910390fd5b805f015134146123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490614577565b60405180910390fd5b5f815f0151036126175760085f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612487906145df565b60405180910390fd5b5f805b600c80549050811015612570575f600c82815481106124b5576124b4613e89565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612515919061356b565b602060405180830381865afa158015612530573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125549190614611565b11156125635760019150612570565b8080600101915050612493565b50806125b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a890614686565b60405180910390fd5b600160085f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505b5f8160400151826020015161262c9190613ee3565b905060095f8681526020019081526020015f2060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200183815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155505080836004015f8282546127039190613ee3565b92505081905550847f9547adb56b87436876e7c387b0becc7270032515aedda7a210440394c8146d6d338360405161273c929190614035565b60405180910390a250505061274f612e3b565b5050565b61275b612d2f565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28367b555b0bf666dc90350598e071733a56fe1f54631804abfa5688b29c2796826040516127f59190613543565b60405180910390a25050565b601481565b600881565b6009602052815f5260405f208181548110612824575f80fd5b905f5260205f2090600302015f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b612872612d2f565b60065482106128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad906146ee565b60405180910390fd5b8060055f8481526020019081526020015f206003015f6101000a81548160ff021916908315150217905550817f8f71204ab5049511d33210dd0e3f57d281dfb0c878c1246c78bba0e1d0ecb561826040516129119190613543565b60405180910390a25050565b612925612d2f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612995575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161298c919061356b565b60405180910390fd5b61299e81612e44565b50565b60605f600a8054905067ffffffffffffffff8111156129c3576129c261379d565b5b6040519080825280602002602001820160405280156129fc57816020015b6129e9612fcf565b8152602001906001900390816129e15790505b5090505f805b600a80549050811015612c7b575f600a8281548110612a2457612a23613e89565b5b905f5260205f20015490505f60075f8381526020019081526020015f2090505f808860ff1603612a77578160060160149054906101000a900460ff16158015612a705750816005015442105b9050612ace565b60018860ff1603612a9b578160060160149054906101000a900460ff169050612acd565b60028860ff1603612acc578160060160149054906101000a900460ff16158015612ac9575081600501544210155b90505b5b5b8015612c6b5781604051806101200160405290815f820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015612b3757602002820191905f5260205f20905b815481526020019060010190808311612b23575b50505050508152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160149054906101000a900460ff161515151581526020016006820160159054906101000a900460ff161515151581525050868681518110612c5157612c50613e89565b5b60200260200101819052508480612c67906140f9565b9550505b5050508080600101915050612a02565b505f8167ffffffffffffffff811115612c9757612c9661379d565b5b604051908082528060200260200182016040528015612cd057816020015b612cbd612fcf565b815260200190600190039081612cb55790505b5090505f5b82811015612d2357838181518110612cf057612cef613e89565b5b6020026020010151828281518110612d0b57612d0a613e89565b5b60200260200101819052508080600101915050612cd5565b50809350505050919050565b612d37612f57565b73ffffffffffffffffffffffffffffffffffffffff16612d556114b3565b73ffffffffffffffffffffffffffffffffffffffff1614612db457612d78612f57565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612dab919061356b565b60405180910390fd5b565b600260015403612df2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b5f8183612e09919061470c565b905092915050565b5f8183612e1e919061474d565b905092915050565b5f8183612e339190614140565b905092915050565b60018081905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f90505b8351811015612f4c5782848281518110612f2857612f27613e89565b5b602002602001015103612f3f576001915050612f51565b8080600101915050612f0b565b505f90505b92915050565b5f33905090565b60405180608001604052805f81526020015f81526020015f81526020015f151581525090565b828054828255905f5260205f20908101928215612fbe579160200282015b82811115612fbd578251825591602001919060010190612fa2565b5b509050612fcb9190613046565b5090565b6040518061012001604052805f8019168152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f151581525090565b5b8082111561305d575f815f905550600101613047565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61308481613072565b811461308e575f80fd5b50565b5f8135905061309f8161307b565b92915050565b5f602082840312156130ba576130b961306a565b5b5f6130c784828501613091565b91505092915050565b6130d981613072565b82525050565b5f8115159050919050565b6130f3816130df565b82525050565b5f60808201905061310c5f8301876130d0565b61311960208301866130d0565b61312660408301856130d0565b61313360608301846130ea565b95945050505050565b5f60208201905061314f5f8301846130d0565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b6131908161317e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6131c881613072565b82525050565b5f6131d983836131bf565b60208301905092915050565b5f602082019050919050565b5f6131fb82613196565b61320581856131a0565b9350613210836131b0565b805f5b8381101561324057815161322788826131ce565b9750613232836131e5565b925050600181019050613213565b5085935050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132768261324d565b9050919050565b6132868161326c565b82525050565b613295816130df565b82525050565b5f61012083015f8301516132b15f860182613187565b50602083015184820360208601526132c982826131f1565b91505060408301516132de604086018261327d565b5060608301516132f160608601826131bf565b50608083015161330460808601826131bf565b5060a083015161331760a08601826131bf565b5060c083015161332a60c086018261327d565b5060e083015161333d60e086018261328c565b5061010083015161335261010086018261328c565b508091505092915050565b5f613368838361329b565b905092915050565b5f602082019050919050565b5f61338682613155565b613390818561315f565b9350836020820285016133a28561316f565b805f5b858110156133dd57848403895281516133be858261335d565b94506133c983613370565b925060208a019950506001810190506133a5565b50829750879550505050505092915050565b5f6020820190508181035f830152613407818461337c565b905092915050565b6134188161326c565b8114613422575f80fd5b50565b5f813590506134338161340f565b92915050565b5f6020828403121561344e5761344d61306a565b5b5f61345b84828501613425565b91505092915050565b5f61346e8261324d565b9050919050565b61347e81613464565b82525050565b5f6020820190506134975f830184613475565b92915050565b6134a68161317e565b81146134b0575f80fd5b50565b5f813590506134c18161349d565b92915050565b5f80604083850312156134dd576134dc61306a565b5b5f6134ea858286016134b3565b92505060206134fb85828601613091565b9150509250929050565b5f806040838503121561351b5761351a61306a565b5b5f613528858286016134b3565b925050602061353985828601613425565b9150509250929050565b5f6020820190506135565f8301846130ea565b92915050565b6135658161326c565b82525050565b5f60208201905061357e5f83018461355c565b92915050565b61358d8161317e565b82525050565b5f6020820190506135a65f830184613584565b92915050565b5f80604083850312156135c2576135c161306a565b5b5f6135cf85828601613425565b92505060206135e085828601613091565b9150509250929050565b5f805f606084860312156136015761360061306a565b5b5f61360e86828701613091565b935050602061361f86828701613091565b925050604061363086828701613091565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b608082015f8201516136775f8501826131bf565b50602082015161368a60208501826131bf565b50604082015161369d60408501826131bf565b5060608201516136b0606085018261328c565b50505050565b5f6136c18383613663565b60808301905092915050565b5f602082019050919050565b5f6136e38261363a565b6136ed8185613644565b93506136f883613654565b805f5b8381101561372857815161370f88826136b6565b975061371a836136cd565b9250506001810190506136fb565b5085935050505092915050565b5f6020820190508181035f83015261374d81846136d9565b905092915050565b5f60ff82169050919050565b61376a81613755565b82525050565b5f6020820190506137835f830184613761565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6137d38261378d565b810181811067ffffffffffffffff821117156137f2576137f161379d565b5b80604052505050565b5f613804613061565b905061381082826137ca565b919050565b5f67ffffffffffffffff82111561382f5761382e61379d565b5b602082029050602081019050919050565b5f80fd5b5f61385661385184613815565b6137fb565b9050808382526020820190506020840283018581111561387957613878613840565b5b835b818110156138a2578061388e8882613091565b84526020840193505060208101905061387b565b5050509392505050565b5f82601f8301126138c0576138bf613789565b5b81356138d0848260208601613844565b91505092915050565b5f805f80608085870312156138f1576138f061306a565b5b5f85013567ffffffffffffffff81111561390e5761390d61306e565b5b61391a878288016138ac565b945050602061392b87828801613425565b935050604061393c87828801613091565b925050606061394d87828801613091565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61398d838361327d565b60208301905092915050565b5f602082019050919050565b5f6139af82613959565b6139b98185613963565b93506139c483613973565b805f5b838110156139f45781516139db8882613982565b97506139e683613999565b9250506001810190506139c7565b5085935050505092915050565b5f6020820190508181035f830152613a1981846139a5565b905092915050565b5f60208284031215613a3657613a3561306a565b5b5f613a43848285016134b3565b91505092915050565b5f61010082019050613a605f83018b613584565b613a6d602083018a61355c565b613a7a60408301896130d0565b613a8760608301886130d0565b613a9460808301876130d0565b613aa160a083018661355c565b613aae60c08301856130ea565b613abb60e08301846130ea565b9998505050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b606082015f820151613b055f85018261327d565b506020820151613b1860208501826131bf565b506040820151613b2b60408501826131bf565b50505050565b5f613b3c8383613af1565b60608301905092915050565b5f602082019050919050565b5f613b5e82613ac8565b613b688185613ad2565b9350613b7383613ae2565b805f5b83811015613ba3578151613b8a8882613b31565b9750613b9583613b48565b925050600181019050613b76565b5085935050505092915050565b5f6020820190508181035f830152613bc88184613b54565b905092915050565b613bd9816130df565b8114613be3575f80fd5b50565b5f81359050613bf481613bd0565b92915050565b5f8060408385031215613c1057613c0f61306a565b5b5f613c1d85828601613425565b9250506020613c2e85828601613be6565b9150509250929050565b5f606082019050613c4b5f83018661355c565b613c5860208301856130d0565b613c6560408301846130d0565b949350505050565b5f8060408385031215613c8357613c8261306a565b5b5f613c9085828601613091565b9250506020613ca185828601613be6565b9150509250929050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f613cef600c83613cab565b9150613cfa82613cbb565b602082019050919050565b5f6020820190508181035f830152613d1c81613ce3565b9050919050565b7f4d6174636820616c726561647920656e646564000000000000000000000000005f82015250565b5f613d57601383613cab565b9150613d6282613d23565b602082019050919050565b5f6020820190508181035f830152613d8481613d4b565b9050919050565b5f819050919050565b613da5613da082613072565b613d8b565b82525050565b5f8160601b9050919050565b5f613dc182613dab565b9050919050565b5f613dd282613db7565b9050919050565b613dea613de58261326c565b613dc8565b82525050565b5f613dfb8286613d94565b602082019150613e0b8285613d94565b602082019150613e1b8284613dd9565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e6382613072565b9150613e6e83613072565b925082613e7e57613e7d613e2c565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613eed82613072565b9150613ef883613072565b9250828201905080821115613f1057613f0f613eb6565b5b92915050565b5f81519050613f248161340f565b92915050565b5f60208284031215613f3f57613f3e61306a565b5b5f613f4c84828501613f16565b91505092915050565b7f436f6e747261637420646f6573206e6f74206f776e204e4654000000000000005f82015250565b5f613f89601983613cab565b9150613f9482613f55565b602082019050919050565b5f6020820190508181035f830152613fb681613f7d565b9050919050565b5f606082019050613fd05f83018661355c565b613fdd602083018561355c565b613fea60408301846130d0565b949350505050565b5f6080820190506140055f8301876130d0565b61401260208301866130d0565b61401f60408301856130d0565b61402c60608301846130d0565b95945050505050565b5f6040820190506140485f83018561355c565b61405560208301846130d0565b9392505050565b7f436f6e747261637420646f6573206e6f74206f776e2074686973204e465400005f82015250565b5f614090601e83613cab565b915061409b8261405c565b602082019050919050565b5f6020820190508181035f8301526140bd81614084565b9050919050565b5f6060820190506140d75f8301866130d0565b6140e460208301856130d0565b6140f160408301846130d0565b949350505050565b5f61410382613072565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361413557614134613eb6565b5b600182019050919050565b5f61414a82613072565b915061415583613072565b925082820390508181111561416d5761416c613eb6565b5b92915050565b7f496e76616c6964206475726174696f6e000000000000000000000000000000005f82015250565b5f6141a7601083613cab565b91506141b282614173565b602082019050919050565b5f6020820190508181035f8301526141d48161419b565b9050919050565b7f4e4654206e6f74206f776e6564000000000000000000000000000000000000005f82015250565b5f61420f600d83613cab565b915061421a826141db565b602082019050919050565b5f6020820190508181035f83015261423c81614203565b9050919050565b5f61424e8287613d94565b60208201915061425e8286613dd9565b60148201915061426e8285613d94565b60208201915061427e8284613dd9565b60148201915081905095945050505050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f6142c4601383613cab565b91506142cf82614290565b602082019050919050565b5f6020820190508181035f8301526142f1816142b8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f496e76616c6964206d61746368000000000000000000000000000000000000005f82015250565b5f614359600d83613cab565b915061436482614325565b602082019050919050565b5f6020820190508181035f8301526143868161434d565b9050919050565b7f4d6174636820656e6465640000000000000000000000000000000000000000005f82015250565b5f6143c1600b83613cab565b91506143cc8261438d565b602082019050919050565b5f6020820190508181035f8301526143ee816143b5565b9050919050565b7f456e726f6c6c6d656e7420636c6f7365640000000000000000000000000000005f82015250565b5f614429601183613cab565b9150614434826143f5565b602082019050919050565b5f6020820190508181035f8301526144568161441d565b9050919050565b7f496e76616c69642074696572206f7220546965722064656163746976617465645f82015250565b5f614491602083613cab565b915061449c8261445d565b602082019050919050565b5f6020820190508181035f8301526144be81614485565b9050919050565b7f54696572206e6f7420616c6c6f776564000000000000000000000000000000005f82015250565b5f6144f9601083613cab565b9150614504826144c5565b602082019050919050565b5f6020820190508181035f830152614526816144ed565b9050919050565b7f496e636f72726563742041504520616d6f756e740000000000000000000000005f82015250565b5f614561601483613cab565b915061456c8261452d565b602082019050919050565b5f6020820190508181035f83015261458e81614555565b9050919050565b7f4672656520656e74727920616c726561647920757365640000000000000000005f82015250565b5f6145c9601783613cab565b91506145d482614595565b602082019050919050565b5f6020820190508181035f8301526145f6816145bd565b9050919050565b5f8151905061460b8161307b565b92915050565b5f602082840312156146265761462561306a565b5b5f614633848285016145fd565b91505092915050565b7f4e6f207175616c696679696e67204e465420666f756e640000000000000000005f82015250565b5f614670601783613cab565b915061467b8261463c565b602082019050919050565b5f6020820190508181035f83015261469d81614664565b9050919050565b7f496e76616c6964207469657220494400000000000000000000000000000000005f82015250565b5f6146d8600f83613cab565b91506146e3826146a4565b602082019050919050565b5f6020820190508181035f830152614705816146cc565b9050919050565b5f61471682613072565b915061472183613072565b925082820261472f81613072565b9150828204841483151761474657614745613eb6565b5b5092915050565b5f61475782613072565b915061476283613072565b92508261477257614771613e2c565b5b82820490509291505056fea2646970667358221220ef24de033bf82c7fb534ad610c171e0ced4a86151e780b4ee638f7b97db2787564736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0xb931E339b4f5eB3D4D039CE1451426754063C711
Arg [1] : _feeAccount (address): 0xb931E339b4f5eB3D4D039CE1451426754063C711
Arg [2] : _treasuryAccount (address): 0xb931E339b4f5eB3D4D039CE1451426754063C711
Arg [3] : _operationsAccount (address): 0xb931E339b4f5eB3D4D039CE1451426754063C711
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Arg [1] : 000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Arg [2] : 000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Arg [3] : 000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711
Deployed Bytecode Sourcemap
16050:13145:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17138:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;17187:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27055:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19302:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16449:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22334:1854;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17270:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16404:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17537:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17444:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17409:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25390:523;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27170:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19425:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16364:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7801:103;;;;;;;;;;;;;:::i;:::-;;26663:267;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16221:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7126:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19774:1032;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26938:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27285:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17223:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;25975:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24231:692;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24964:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27394:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20845:1456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28987:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16271:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16177:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17345:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;26413:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8059:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17138:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17187:29::-;;;;:::o;27055:107::-;27103:14;27137:17;27152:1;27137:14;:17::i;:::-;27130:24;;27055:107;:::o;19302:91::-;7012:13;:11;:13::i;:::-;19366:9:::1;19381:3;19366:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19302:91:::0;:::o;16449:40::-;;;;;;;;;;;;;:::o;22334:1854::-;18816:10;18805:21;;:7;:5;:7::i;:::-;:21;;;:54;;;;18830:17;:29;18848:10;18830:29;;;;;;;;;;;;;;;;;;;;;;;;;18805:54;18783:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;3525:21:::1;:19;:21::i;:::-;22467:15:::2;22485:7;:16;22493:7;22485:16;;;;;;;;;;;22467:34;;22521:1;:9;;;;;;;;;;;;22520:10;22512:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;22567:20;22694:1;:14;;;22639:10;22651:15;22668:10;22622:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22612:68;;;;;;22590:101;;:118;;;;:::i;:::-;22567:141;;22721:18;22750:14:::0;22775:21:::2;22809:28:::0;22840:14:::2;:23;22855:7;22840:23;;;;;;;;;;;22809:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;22879:9;22874:323;22898:5;:12;22894:1;:16;22874:323;;;22932:22;22957:5;22963:1;22957:8;;;;;;;;:::i;:::-;;;;;;;;22932:33;;23012:1;:9;;;22999:10;:22;;;;:::i;:::-;22984:12;:37;22980:168;;;23051:1;:13;;;23042:22;;23099:1;:9;;;23083:25;;23127:5;;;22980:168;23176:1;:9;;;23162:23;;;;;:::i;:::-;;;22917:280;22912:3;;;;;;;22874:323;;;;23209:22;23234:21;23209:46;;23266:17;23286:40;23322:3;23286:31;16213:1;23286:31;;:14;:18;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23266:60;;23337:22;23362:45;23403:3;23362:36;16262:2;23362:36;;:14;:18;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;23337:70;;23418:24;23445:73;23493:14;23445:29;23464:9;23445:14;:18;;:29;;;;:::i;:::-;:33;;:73;;;;:::i;:::-;23418:100;;23531:10;;;;;;;;;;;:19;;:30;23551:9;23531:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;23572:15;;;;;;;;;;;:24;;:40;23597:14;23572:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;23623:17;;;;;;;;;;;:26;;:44;23650:16;23623:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;23749:4;23702:52;;23707:1;:12;;;;;;;;;;;;23702:26;;;23729:1;:7;;;23702:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;23680:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;23823:1;:12;;;;;;;;;;;;23818:31;;;23858:4;23865:6;23873:1;:7;;;23818:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23905:6;23894:1;:8;;;:17;;;;;;;;;;;;;;;;;;23934:4;23922:1;:9;;;:16;;;;;;;;;;;;;;;;;;23987:7;23956:162;24009:14;24038:9;24062:14;24091:16;23956:162;;;;;;;;;:::i;:::-;;;;;;;;24149:7;24134:46;24158:6;24166:13;24134:46;;;;;;;:::i;:::-;;;;;;;;22456:1732;;;;;;;;;;3569:20:::1;:18;:20::i;:::-;22334:1854:::0;;:::o;17270:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16404:38::-;;;;;;;;;;;;;:::o;17537:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17444:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;17409:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25390:523::-;7012:13;:11;:13::i;:::-;3525:21:::1;:19;:21::i;:::-;25631:4:::2;25586:50;;25591:10;25586:24;;;25611:7;25586:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;25564:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;25750:10;25745:33;;;25787:4;25794:7;:5;:7::i;:::-;25803;25745:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25897:7;:5;:7::i;:::-;25863:42;;25888:7;25876:10;25863:42;;;;;;;;;;;;3569:20:::1;:18;:20::i;:::-;25390:523:::0;;:::o;27170:107::-;27218:14;27252:17;27267:1;27252:14;:17::i;:::-;27245:24;;27170:107;:::o;19425:318::-;7012:13;:11;:13::i;:::-;19586:51:::1;;;;;;;;19596:7;19586:51;;;;19605:11;19586:51;;;;19618:12;19586:51;;;;19632:4;19586:51;;;;::::0;19566:5:::1;:17;19572:10;;19566:17;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19665:10;;19653:59;19677:7;19686:11;19699:12;19653:59;;;;;;;;:::i;:::-;;;;;;;;19723:10;;:12;;;;;;;;;:::i;:::-;;;;;;19425:318:::0;;;:::o;16364:33::-;;;;;;;;;;;;;:::o;7801:103::-;7012:13;:11;:13::i;:::-;7866:30:::1;7893:1;7866:18;:30::i;:::-;7801:103::o:0;26663:267::-;26709:18;26740:24;26796:1;26783:10;;:14;;;;:::i;:::-;26767:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;26740:58;;26814:9;26826:1;26814:13;;26809:91;26833:10;;26829:1;:14;26809:91;;;26880:5;:8;26886:1;26880:8;;;;;;;;;;;26865:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;26875:1;26871;:5;;;;:::i;:::-;26865:12;;;;;;;;:::i;:::-;;;;;;;:23;;;;26845:3;;;;;;;26809:91;;;;26917:5;26910:12;;;26663:267;:::o;16221:43::-;16262:2;16221:43;:::o;7126:87::-;7172:7;7199:6;;;;;;;;;;;7192:13;;7126:87;:::o;19774:1032::-;19950:15;7012:13;:11;:13::i;:::-;19997:1:::1;19986:8;:12;19978:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20095:4;20052:48;;20057:10;20052:24;;;20077:5;20052:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;20030:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20205:15;20222:10;20234:5;20241:10;20188:64;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20164:99;;;;;;20154:109;;20295:318;;;;;;;;20320:7;20295:318;;;;20356:12;20295:318;;;;20395:10;20295:318;;;;;;20427:5;20295:318;;;;20461:1;20295:318;;;;20504:8;20486:15;:26;;;;:::i;:::-;20295:318;;;;20543:1;20295:318;;;;;;20569:5;20295:318;;;;;;20597:4;20295:318;;;;::::0;20276:7:::1;:16;20284:7;20276:16;;;;;;;;;;;:337;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20626:11;20643:7;20626:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20694:7;20667:131;20716:10;20741:5;20779:8;20761:15;:26;;;;:::i;:::-;20667:131;;;;;;;;:::i;:::-;;;;;;;;19774:1032:::0;;;;;;:::o;26938:109::-;26988:14;27022:17;27037:1;27022:14;:17::i;:::-;27015:24;;26938:109;:::o;27285:101::-;27333:16;27369:9;27362:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27285:101;:::o;17223:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25975:430::-;7012:13;:11;:13::i;:::-;26060:9:::1;:16;;;;26052:5;:24;26044:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26137:1;26117:9;:16;;;;:21:::0;26113:90:::1;;26155:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;26185:7;;26113:90;26302:9;26331:1;26312:9;:16;;;;:20;;;;:::i;:::-;26302:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26283:9;26293:5;26283:16;;;;;;;;:::i;:::-;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;26382:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;7036:1;25975:430:::0;:::o;24231:692::-;18816:10;18805:21;;:7;:5;:7::i;:::-;:21;;;:54;;;;18830:17;:29;18848:10;18830:29;;;;;;;;;;;;;;;;;;;;;;;;;18805:54;18783:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;3525:21:::1;:19;:21::i;:::-;24313:15:::2;24331:7;:16;24339:7;24331:16;;;;;;;;;;;24313:34;;24367:1;:9;;;;;;;;;;;;24366:10;24358:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;24413:21;24452:9:::0;24464:1:::2;24452:13;;24447:310;24471:14;:23;24486:7;24471:23;;;;;;;;;;;:30;;;;24467:1;:34;24447:310;;;24523:22;24548:14;:23;24563:7;24548:23;;;;;;;;;;;24572:1;24548:26;;;;;;;;:::i;:::-;;;;;;;;;;;;24523:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;24589:21;24613:5;:15;24619:1;:8;;;24613:15;;;;;;;;;;;24589:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;24664:1;:13;;;24656:31;;:45;24688:4;:12;;;24656:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;24733:4;:12;;;24716:29;;;;;:::i;:::-;;;24508:249;;24503:3;;;;;;;24447:310;;;;24774:1;:12;;;;;;;;;;;;24769:31;;;24809:4;24816:7;:5;:7::i;:::-;24825:1;:7;;;24769:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24856:4;24844:1;:9;;;:16;;;;;;;;;;;;;;;;;;24892:7;24878:37;24901:13;24878:37;;;;;;:::i;:::-;;;;;;;;24302:621;;3569:20:::1;:18;:20::i;:::-;24231:692:::0;:::o;24964:379::-;18816:10;18805:21;;:7;:5;:7::i;:::-;:21;;;:54;;;;18830:17;:29;18848:10;18830:29;;;;;;;;;;;;;;;;;;;;;;;;;18805:54;18783:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;25091:15:::1;25109:7;:16;25117:7;25109:16;;;;;;;;;;;25091:34;;25145:1;:9;;;;;;;;;;;;25144:10;25136:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:1;25197:18;:22;25189:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25266:18;25253:1;:9;;;:31;;;;;;;:::i;:::-;;;;;;;;25316:7;25302:33;25325:1;:9;;;25302:33;;;;;;:::i;:::-;;;;;;;;25080:263;24964:379:::0;;:::o;27394:170::-;27486:22;27533:14;:23;27548:7;27533:23;;;;;;;;;;;27526:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27394:170;;;:::o;20845:1456::-;3525:21;:19;:21::i;:::-;20967:15:::1;20985:7;:16;20993:7;20985:16;;;;;;;;;;;20967:34;;21012:21;21036:5;:13;21042:6;21036:13;;;;;;;;;;;21012:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;21070:1;:8;;;;;;;;;;;;21062:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;21116:1;:9;;;;;;;;;;;;21115:10;21107:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;21178:1;:9;;;21160:15;:27;21152:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21228:4;:11;;;21220:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;21295:32;21304:1;:14;;21295:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21320:6;21295:8;:32::i;:::-;21287:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21380:4;:12;;;21367:9;:25;21359:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21450:1;21434:4;:12;;;:17:::0;21430:567:::1;;21495:16;:25;21512:7;21495:25;;;;;;;;;;;:37;21521:10;21495:37;;;;;;;;;;;;;;;;;;;;;;;;;21494:38;21468:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;21606:16;21650:9:::0;21645:220:::1;21669:9;:16;;;;21665:1;:20;21645:220;;;21758:1;21720:9;21730:1;21720:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21715:28;;;21744:10;21715:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;21711:139;;;21798:4;21784:18;;21825:5;;21711:139;21687:3;;;;;;;21645:220;;;;21887:11;21879:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21981:4;21941:16;:25;21958:7;21941:25;;;;;;;;;;;:37;21967:10;21941:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;21453:544;21430:567;22009:20;22051:4;:17;;;22032:4;:16;;;:36;;;;:::i;:::-;22009:59;;22079:14;:23;22094:7;22079:23;;;;;;;;;;;22122:47;;;;;;;;22136:10;22122:47;;;;;;22148:6;22122:47;;;;22156:12;22122:47;;::::0;22079:101:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22209:12;22191:1;:14;;;:30;;;;;;;:::i;:::-;;;;;;;;22259:7;22239:54;22268:10;22280:12;22239:54;;;;;;;:::i;:::-;;;;;;;;20956:1345;;;3569:20:::0;:18;:20::i;:::-;20845:1456;;:::o;28987:168::-;7012:13;:11;:13::i;:::-;29096:6:::1;29068:17;:25;29086:6;29068:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;29132:6;29118:29;;;29140:6;29118:29;;;;;;:::i;:::-;;;;;;;;28987:168:::0;;:::o;16271:45::-;16314:2;16271:45;:::o;16177:37::-;16213:1;16177:37;:::o;17345:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26413:219::-;7012:13;:11;:13::i;:::-;26509:10:::1;;26500:6;:19;26492:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;26575:6;26552:5;:13;26558:6;26552:13;;;;;;;;;;;:20;;;:29;;;;;;;;;;;;;;;;;;26609:6;26597:27;26617:6;26597:27;;;;;;:::i;:::-;;;;;;;;26413:219:::0;;:::o;8059:220::-;7012:13;:11;:13::i;:::-;8164:1:::1;8144:22;;:8;:22;;::::0;8140:93:::1;;8218:1;8190:31;;;;;;;;;;;:::i;:::-;;;;;;;;8140:93;8243:28;8262:8;8243:18;:28::i;:::-;8059:220:::0;:::o;27597:1085::-;27688:14;27720:21;27756:11;:18;;;;27744:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;27720:55;;27786:13;27821:9;27816:683;27840:11;:18;;;;27836:1;:22;27816:683;;;27880:10;27893:11;27905:1;27893:14;;;;;;;;:::i;:::-;;;;;;;;;;27880:27;;27922:15;27940:7;:11;27948:2;27940:11;;;;;;;;;;;27922:29;;27968:12;28013:1;27999:10;:15;;;27995:386;;28074:1;:9;;;;;;;;;;;;28073:10;:41;;;;;28105:1;:9;;;28087:15;:27;28073:41;28063:51;;27995:386;;;28154:1;28140:10;:15;;;28136:245;;28214:1;:9;;;;;;;;;;;;28204:19;;28136:245;;;28263:1;28249:10;:15;;;28245:136;;28322:1;:9;;;;;;;;;;;;28321:10;:44;;;;;28355:1;:9;;;28336:15;:28;;28321:44;28311:54;;28245:136;28136:245;27995:386;28401:7;28397:91;;;28445:1;28429:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;28436:5;28429:13;;;;;;;;:::i;:::-;;;;;;;:17;;;;28465:7;;;;;:::i;:::-;;;;28397:91;27865:634;;;27860:3;;;;;;;27816:683;;;;28511:22;28548:5;28536:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;28511:43;;28570:9;28565:85;28589:5;28585:1;:9;28565:85;;;28629:6;28636:1;28629:9;;;;;;;;:::i;:::-;;;;;;;;28616:7;28624:1;28616:10;;;;;;;;:::i;:::-;;;;;;;:22;;;;28596:3;;;;;;;28565:85;;;;28667:7;28660:14;;;;;27597:1085;;;:::o;7291:166::-;7362:12;:10;:12::i;:::-;7351:23;;:7;:5;:7::i;:::-;:23;;;7347:103;;7425:12;:10;:12::i;:::-;7398:40;;;;;;;;;;;:::i;:::-;;;;;;;;7347:103;7291:166::o;3605:315::-;2903:1;3734:7;;:18;3730:88;;3776:30;;;;;;;;;;;;;;3730:88;2903:1;3895:7;:17;;;;3605:315::o;12251:98::-;12309:7;12340:1;12336;:5;;;;:::i;:::-;12329:12;;12251:98;;;;:::o;12650:::-;12708:7;12739:1;12735;:5;;;;:::i;:::-;12728:12;;12650:98;;;;:::o;11894:::-;11952:7;11983:1;11979;:5;;;;:::i;:::-;11972:12;;11894:98;;;;:::o;3928:212::-;2860:1;4111:7;:21;;;;3928:212::o;8439:191::-;8513:16;8532:6;;;;;;;;;;;8513:25;;8558:8;8549:6;;:17;;;;;;;;;;;;;;;;;;8613:8;8582:40;;8603:8;8582:40;;;;;;;;;;;;8502:128;8439:191;:::o;28690:256::-;28794:4;28821:9;28833:1;28821:13;;28816:100;28840:3;:10;28836:1;:14;28816:100;;;28886:5;28876:3;28880:1;28876:6;;;;;;;;:::i;:::-;;;;;;;;:15;28872:32;;28900:4;28893:11;;;;;28872:32;28852:3;;;;;;;28816:100;;;;28933:5;28926:12;;28690:256;;;;;:::o;5135:98::-;5188:7;5215:10;5208:17;;5135:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:90::-;1183:7;1226:5;1219:13;1212:21;1201:32;;1149:90;;;:::o;1245:109::-;1326:21;1341:5;1326:21;:::i;:::-;1321:3;1314:34;1245:109;;:::o;1360:541::-;1531:4;1569:3;1558:9;1554:19;1546:27;;1583:71;1651:1;1640:9;1636:17;1627:6;1583:71;:::i;:::-;1664:72;1732:2;1721:9;1717:18;1708:6;1664:72;:::i;:::-;1746;1814:2;1803:9;1799:18;1790:6;1746:72;:::i;:::-;1828:66;1890:2;1879:9;1875:18;1866:6;1828:66;:::i;:::-;1360:541;;;;;;;:::o;1907:222::-;2000:4;2038:2;2027:9;2023:18;2015:26;;2051:71;2119:1;2108:9;2104:17;2095:6;2051:71;:::i;:::-;1907:222;;;;:::o;2135:136::-;2224:6;2258:5;2252:12;2242:22;;2135:136;;;:::o;2277:206::-;2398:11;2432:6;2427:3;2420:19;2472:4;2467:3;2463:14;2448:29;;2277:206;;;;:::o;2489:154::-;2578:4;2601:3;2593:11;;2631:4;2626:3;2622:14;2614:22;;2489:154;;;:::o;2649:77::-;2686:7;2715:5;2704:16;;2649:77;;;:::o;2732:108::-;2809:24;2827:5;2809:24;:::i;:::-;2804:3;2797:37;2732:108;;:::o;2846:114::-;2913:6;2947:5;2941:12;2931:22;;2846:114;;;:::o;2966:174::-;3055:11;3089:6;3084:3;3077:19;3129:4;3124:3;3120:14;3105:29;;2966:174;;;;:::o;3146:132::-;3213:4;3236:3;3228:11;;3266:4;3261:3;3257:14;3249:22;;3146:132;;;:::o;3284:108::-;3361:24;3379:5;3361:24;:::i;:::-;3356:3;3349:37;3284:108;;:::o;3398:179::-;3467:10;3488:46;3530:3;3522:6;3488:46;:::i;:::-;3566:4;3561:3;3557:14;3543:28;;3398:179;;;;:::o;3583:113::-;3653:4;3685;3680:3;3676:14;3668:22;;3583:113;;;:::o;3732:712::-;3841:3;3870:54;3918:5;3870:54;:::i;:::-;3940:76;4009:6;4004:3;3940:76;:::i;:::-;3933:83;;4040:56;4090:5;4040:56;:::i;:::-;4119:7;4150:1;4135:284;4160:6;4157:1;4154:13;4135:284;;;4236:6;4230:13;4263:63;4322:3;4307:13;4263:63;:::i;:::-;4256:70;;4349:60;4402:6;4349:60;:::i;:::-;4339:70;;4195:224;4182:1;4179;4175:9;4170:14;;4135:284;;;4139:14;4435:3;4428:10;;3846:598;;;3732:712;;;;:::o;4450:126::-;4487:7;4527:42;4520:5;4516:54;4505:65;;4450:126;;;:::o;4582:96::-;4619:7;4648:24;4666:5;4648:24;:::i;:::-;4637:35;;4582:96;;;:::o;4684:108::-;4761:24;4779:5;4761:24;:::i;:::-;4756:3;4749:37;4684:108;;:::o;4798:99::-;4869:21;4884:5;4869:21;:::i;:::-;4864:3;4857:34;4798:99;;:::o;4953:1863::-;5056:3;5092:6;5087:3;5083:16;5179:4;5172:5;5168:16;5162:23;5198:63;5255:4;5250:3;5246:14;5232:12;5198:63;:::i;:::-;5109:162;5361:4;5354:5;5350:16;5344:23;5414:3;5408:4;5404:14;5397:4;5392:3;5388:14;5381:38;5440:103;5538:4;5524:12;5440:103;:::i;:::-;5432:111;;5281:273;5642:4;5635:5;5631:16;5625:23;5661:63;5718:4;5713:3;5709:14;5695:12;5661:63;:::i;:::-;5564:170;5817:4;5810:5;5806:16;5800:23;5836:63;5893:4;5888:3;5884:14;5870:12;5836:63;:::i;:::-;5744:165;5999:4;5992:5;5988:16;5982:23;6018:63;6075:4;6070:3;6066:14;6052:12;6018:63;:::i;:::-;5919:172;6176:4;6169:5;6165:16;6159:23;6195:63;6252:4;6247:3;6243:14;6229:12;6195:63;:::i;:::-;6101:167;6352:4;6345:5;6341:16;6335:23;6371:63;6428:4;6423:3;6419:14;6405:12;6371:63;:::i;:::-;6278:166;6529:4;6522:5;6518:16;6512:23;6548:57;6599:4;6594:3;6590:14;6576:12;6548:57;:::i;:::-;6454:161;6699:6;6692:5;6688:18;6682:25;6720:59;6771:6;6766:3;6762:16;6748:12;6720:59;:::i;:::-;6625:164;6806:4;6799:11;;5061:1755;4953:1863;;;;:::o;6822:244::-;6935:10;6970:90;7056:3;7048:6;6970:90;:::i;:::-;6956:104;;6822:244;;;;:::o;7072:135::-;7164:4;7196;7191:3;7187:14;7179:22;;7072:135;;;:::o;7267:1087::-;7430:3;7459:76;7529:5;7459:76;:::i;:::-;7551:108;7652:6;7647:3;7551:108;:::i;:::-;7544:115;;7685:3;7730:4;7722:6;7718:17;7713:3;7709:27;7760:78;7832:5;7760:78;:::i;:::-;7861:7;7892:1;7877:432;7902:6;7899:1;7896:13;7877:432;;;7973:9;7967:4;7963:20;7958:3;7951:33;8024:6;8018:13;8052:108;8155:4;8140:13;8052:108;:::i;:::-;8044:116;;8183:82;8258:6;8183:82;:::i;:::-;8173:92;;8294:4;8289:3;8285:14;8278:21;;7937:372;7924:1;7921;7917:9;7912:14;;7877:432;;;7881:14;8325:4;8318:11;;8345:3;8338:10;;7435:919;;;;;7267:1087;;;;:::o;8360:461::-;8547:4;8585:2;8574:9;8570:18;8562:26;;8634:9;8628:4;8624:20;8620:1;8609:9;8605:17;8598:47;8662:152;8809:4;8800:6;8662:152;:::i;:::-;8654:160;;8360:461;;;;:::o;8827:122::-;8900:24;8918:5;8900:24;:::i;:::-;8893:5;8890:35;8880:63;;8939:1;8936;8929:12;8880:63;8827:122;:::o;8955:139::-;9001:5;9039:6;9026:20;9017:29;;9055:33;9082:5;9055:33;:::i;:::-;8955:139;;;;:::o;9100:329::-;9159:6;9208:2;9196:9;9187:7;9183:23;9179:32;9176:119;;;9214:79;;:::i;:::-;9176:119;9334:1;9359:53;9404:7;9395:6;9384:9;9380:22;9359:53;:::i;:::-;9349:63;;9305:117;9100:329;;;;:::o;9435:104::-;9480:7;9509:24;9527:5;9509:24;:::i;:::-;9498:35;;9435:104;;;:::o;9545:142::-;9648:32;9674:5;9648:32;:::i;:::-;9643:3;9636:45;9545:142;;:::o;9693:254::-;9802:4;9840:2;9829:9;9825:18;9817:26;;9853:87;9937:1;9926:9;9922:17;9913:6;9853:87;:::i;:::-;9693:254;;;;:::o;9953:122::-;10026:24;10044:5;10026:24;:::i;:::-;10019:5;10016:35;10006:63;;10065:1;10062;10055:12;10006:63;9953:122;:::o;10081:139::-;10127:5;10165:6;10152:20;10143:29;;10181:33;10208:5;10181:33;:::i;:::-;10081:139;;;;:::o;10226:474::-;10294:6;10302;10351:2;10339:9;10330:7;10326:23;10322:32;10319:119;;;10357:79;;:::i;:::-;10319:119;10477:1;10502:53;10547:7;10538:6;10527:9;10523:22;10502:53;:::i;:::-;10492:63;;10448:117;10604:2;10630:53;10675:7;10666:6;10655:9;10651:22;10630:53;:::i;:::-;10620:63;;10575:118;10226:474;;;;;:::o;10706:::-;10774:6;10782;10831:2;10819:9;10810:7;10806:23;10802:32;10799:119;;;10837:79;;:::i;:::-;10799:119;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;10706:474;;;;;:::o;11186:210::-;11273:4;11311:2;11300:9;11296:18;11288:26;;11324:65;11386:1;11375:9;11371:17;11362:6;11324:65;:::i;:::-;11186:210;;;;:::o;11402:118::-;11489:24;11507:5;11489:24;:::i;:::-;11484:3;11477:37;11402:118;;:::o;11526:222::-;11619:4;11657:2;11646:9;11642:18;11634:26;;11670:71;11738:1;11727:9;11723:17;11714:6;11670:71;:::i;:::-;11526:222;;;;:::o;11754:118::-;11841:24;11859:5;11841:24;:::i;:::-;11836:3;11829:37;11754:118;;:::o;11878:222::-;11971:4;12009:2;11998:9;11994:18;11986:26;;12022:71;12090:1;12079:9;12075:17;12066:6;12022:71;:::i;:::-;11878:222;;;;:::o;12106:474::-;12174:6;12182;12231:2;12219:9;12210:7;12206:23;12202:32;12199:119;;;12237:79;;:::i;:::-;12199:119;12357:1;12382:53;12427:7;12418:6;12407:9;12403:22;12382:53;:::i;:::-;12372:63;;12328:117;12484:2;12510:53;12555:7;12546:6;12535:9;12531:22;12510:53;:::i;:::-;12500:63;;12455:118;12106:474;;;;;:::o;12586:619::-;12663:6;12671;12679;12728:2;12716:9;12707:7;12703:23;12699:32;12696:119;;;12734:79;;:::i;:::-;12696:119;12854:1;12879:53;12924:7;12915:6;12904:9;12900:22;12879:53;:::i;:::-;12869:63;;12825:117;12981:2;13007:53;13052:7;13043:6;13032:9;13028:22;13007:53;:::i;:::-;12997:63;;12952:118;13109:2;13135:53;13180:7;13171:6;13160:9;13156:22;13135:53;:::i;:::-;13125:63;;13080:118;12586:619;;;;;:::o;13211:140::-;13304:6;13338:5;13332:12;13322:22;;13211:140;;;:::o;13357:210::-;13482:11;13516:6;13511:3;13504:19;13556:4;13551:3;13547:14;13532:29;;13357:210;;;;:::o;13573:158::-;13666:4;13689:3;13681:11;;13719:4;13714:3;13710:14;13702:22;;13573:158;;;:::o;13795:861::-;13934:4;13929:3;13925:14;14024:4;14017:5;14013:16;14007:23;14043:63;14100:4;14095:3;14091:14;14077:12;14043:63;:::i;:::-;13949:167;14205:4;14198:5;14194:16;14188:23;14224:63;14281:4;14276:3;14272:14;14258:12;14224:63;:::i;:::-;14126:171;14387:4;14380:5;14376:16;14370:23;14406:63;14463:4;14458:3;14454:14;14440:12;14406:63;:::i;:::-;14307:172;14563:4;14556:5;14552:16;14546:23;14582:57;14633:4;14628:3;14624:14;14610:12;14582:57;:::i;:::-;14489:160;13903:753;13795:861;;:::o;14662:283::-;14783:10;14804:98;14898:3;14890:6;14804:98;:::i;:::-;14934:4;14929:3;14925:14;14911:28;;14662:283;;;;:::o;14951:139::-;15047:4;15079;15074:3;15070:14;15062:22;;14951:139;;;:::o;15158:940::-;15329:3;15358:80;15432:5;15358:80;:::i;:::-;15454:112;15559:6;15554:3;15454:112;:::i;:::-;15447:119;;15590:82;15666:5;15590:82;:::i;:::-;15695:7;15726:1;15711:362;15736:6;15733:1;15730:13;15711:362;;;15812:6;15806:13;15839:115;15950:3;15935:13;15839:115;:::i;:::-;15832:122;;15977:86;16056:6;15977:86;:::i;:::-;15967:96;;15771:302;15758:1;15755;15751:9;15746:14;;15711:362;;;15715:14;16089:3;16082:10;;15334:764;;;15158:940;;;;:::o;16104:477::-;16299:4;16337:2;16326:9;16322:18;16314:26;;16386:9;16380:4;16376:20;16372:1;16361:9;16357:17;16350:47;16414:160;16569:4;16560:6;16414:160;:::i;:::-;16406:168;;16104:477;;;;:::o;16587:86::-;16622:7;16662:4;16655:5;16651:16;16640:27;;16587:86;;;:::o;16679:112::-;16762:22;16778:5;16762:22;:::i;:::-;16757:3;16750:35;16679:112;;:::o;16797:214::-;16886:4;16924:2;16913:9;16909:18;16901:26;;16937:67;17001:1;16990:9;16986:17;16977:6;16937:67;:::i;:::-;16797:214;;;;:::o;17017:117::-;17126:1;17123;17116:12;17140:102;17181:6;17232:2;17228:7;17223:2;17216:5;17212:14;17208:28;17198:38;;17140:102;;;:::o;17248:180::-;17296:77;17293:1;17286:88;17393:4;17390:1;17383:15;17417:4;17414:1;17407:15;17434:281;17517:27;17539:4;17517:27;:::i;:::-;17509:6;17505:40;17647:6;17635:10;17632:22;17611:18;17599:10;17596:34;17593:62;17590:88;;;17658:18;;:::i;:::-;17590:88;17698:10;17694:2;17687:22;17477:238;17434:281;;:::o;17721:129::-;17755:6;17782:20;;:::i;:::-;17772:30;;17811:33;17839:4;17831:6;17811:33;:::i;:::-;17721:129;;;:::o;17856:311::-;17933:4;18023:18;18015:6;18012:30;18009:56;;;18045:18;;:::i;:::-;18009:56;18095:4;18087:6;18083:17;18075:25;;18155:4;18149;18145:15;18137:23;;17856:311;;;:::o;18173:117::-;18282:1;18279;18272:12;18313:710;18409:5;18434:81;18450:64;18507:6;18450:64;:::i;:::-;18434:81;:::i;:::-;18425:90;;18535:5;18564:6;18557:5;18550:21;18598:4;18591:5;18587:16;18580:23;;18651:4;18643:6;18639:17;18631:6;18627:30;18680:3;18672:6;18669:15;18666:122;;;18699:79;;:::i;:::-;18666:122;18814:6;18797:220;18831:6;18826:3;18823:15;18797:220;;;18906:3;18935:37;18968:3;18956:10;18935:37;:::i;:::-;18930:3;18923:50;19002:4;18997:3;18993:14;18986:21;;18873:144;18857:4;18852:3;18848:14;18841:21;;18797:220;;;18801:21;18415:608;;18313:710;;;;;:::o;19046:370::-;19117:5;19166:3;19159:4;19151:6;19147:17;19143:27;19133:122;;19174:79;;:::i;:::-;19133:122;19291:6;19278:20;19316:94;19406:3;19398:6;19391:4;19383:6;19379:17;19316:94;:::i;:::-;19307:103;;19123:293;19046:370;;;;:::o;19422:975::-;19533:6;19541;19549;19557;19606:3;19594:9;19585:7;19581:23;19577:33;19574:120;;;19613:79;;:::i;:::-;19574:120;19761:1;19750:9;19746:17;19733:31;19791:18;19783:6;19780:30;19777:117;;;19813:79;;:::i;:::-;19777:117;19918:78;19988:7;19979:6;19968:9;19964:22;19918:78;:::i;:::-;19908:88;;19704:302;20045:2;20071:53;20116:7;20107:6;20096:9;20092:22;20071:53;:::i;:::-;20061:63;;20016:118;20173:2;20199:53;20244:7;20235:6;20224:9;20220:22;20199:53;:::i;:::-;20189:63;;20144:118;20301:2;20327:53;20372:7;20363:6;20352:9;20348:22;20327:53;:::i;:::-;20317:63;;20272:118;19422:975;;;;;;;:::o;20403:114::-;20470:6;20504:5;20498:12;20488:22;;20403:114;;;:::o;20523:184::-;20622:11;20656:6;20651:3;20644:19;20696:4;20691:3;20687:14;20672:29;;20523:184;;;;:::o;20713:132::-;20780:4;20803:3;20795:11;;20833:4;20828:3;20824:14;20816:22;;20713:132;;;:::o;20851:179::-;20920:10;20941:46;20983:3;20975:6;20941:46;:::i;:::-;21019:4;21014:3;21010:14;20996:28;;20851:179;;;;:::o;21036:113::-;21106:4;21138;21133:3;21129:14;21121:22;;21036:113;;;:::o;21185:732::-;21304:3;21333:54;21381:5;21333:54;:::i;:::-;21403:86;21482:6;21477:3;21403:86;:::i;:::-;21396:93;;21513:56;21563:5;21513:56;:::i;:::-;21592:7;21623:1;21608:284;21633:6;21630:1;21627:13;21608:284;;;21709:6;21703:13;21736:63;21795:3;21780:13;21736:63;:::i;:::-;21729:70;;21822:60;21875:6;21822:60;:::i;:::-;21812:70;;21668:224;21655:1;21652;21648:9;21643:14;;21608:284;;;21612:14;21908:3;21901:10;;21309:608;;;21185:732;;;;:::o;21923:373::-;22066:4;22104:2;22093:9;22089:18;22081:26;;22153:9;22147:4;22143:20;22139:1;22128:9;22124:17;22117:47;22181:108;22284:4;22275:6;22181:108;:::i;:::-;22173:116;;21923:373;;;;:::o;22302:329::-;22361:6;22410:2;22398:9;22389:7;22385:23;22381:32;22378:119;;;22416:79;;:::i;:::-;22378:119;22536:1;22561:53;22606:7;22597:6;22586:9;22582:22;22561:53;:::i;:::-;22551:63;;22507:117;22302:329;;;;:::o;22637:973::-;22914:4;22952:3;22941:9;22937:19;22929:27;;22966:71;23034:1;23023:9;23019:17;23010:6;22966:71;:::i;:::-;23047:72;23115:2;23104:9;23100:18;23091:6;23047:72;:::i;:::-;23129;23197:2;23186:9;23182:18;23173:6;23129:72;:::i;:::-;23211;23279:2;23268:9;23264:18;23255:6;23211:72;:::i;:::-;23293:73;23361:3;23350:9;23346:19;23337:6;23293:73;:::i;:::-;23376;23444:3;23433:9;23429:19;23420:6;23376:73;:::i;:::-;23459:67;23521:3;23510:9;23506:19;23497:6;23459:67;:::i;:::-;23536;23598:3;23587:9;23583:19;23574:6;23536:67;:::i;:::-;22637:973;;;;;;;;;;;:::o;23616:144::-;23713:6;23747:5;23741:12;23731:22;;23616:144;;;:::o;23766:214::-;23895:11;23929:6;23924:3;23917:19;23969:4;23964:3;23960:14;23945:29;;23766:214;;;;:::o;23986:162::-;24083:4;24106:3;24098:11;;24136:4;24131:3;24127:14;24119:22;;23986:162;;;:::o;24220:693::-;24367:4;24362:3;24358:14;24461:4;24454:5;24450:16;24444:23;24480:63;24537:4;24532:3;24528:14;24514:12;24480:63;:::i;:::-;24382:171;24637:4;24630:5;24626:16;24620:23;24656:63;24713:4;24708:3;24704:14;24690:12;24656:63;:::i;:::-;24563:166;24814:4;24807:5;24803:16;24797:23;24833:63;24890:4;24885:3;24881:14;24867:12;24833:63;:::i;:::-;24739:167;24336:577;24220:693;;:::o;24919:299::-;25048:10;25069:106;25171:3;25163:6;25069:106;:::i;:::-;25207:4;25202:3;25198:14;25184:28;;24919:299;;;;:::o;25224:143::-;25324:4;25356;25351:3;25347:14;25339:22;;25224:143;;;:::o;25443:972::-;25622:3;25651:84;25729:5;25651:84;:::i;:::-;25751:116;25860:6;25855:3;25751:116;:::i;:::-;25744:123;;25891:86;25971:5;25891:86;:::i;:::-;26000:7;26031:1;26016:374;26041:6;26038:1;26035:13;26016:374;;;26117:6;26111:13;26144:123;26263:3;26248:13;26144:123;:::i;:::-;26137:130;;26290:90;26373:6;26290:90;:::i;:::-;26280:100;;26076:314;26063:1;26060;26056:9;26051:14;;26016:374;;;26020:14;26406:3;26399:10;;25627:788;;;25443:972;;;;:::o;26421:493::-;26624:4;26662:2;26651:9;26647:18;26639:26;;26711:9;26705:4;26701:20;26697:1;26686:9;26682:17;26675:47;26739:168;26902:4;26893:6;26739:168;:::i;:::-;26731:176;;26421:493;;;;:::o;26920:116::-;26990:21;27005:5;26990:21;:::i;:::-;26983:5;26980:32;26970:60;;27026:1;27023;27016:12;26970:60;26920:116;:::o;27042:133::-;27085:5;27123:6;27110:20;27101:29;;27139:30;27163:5;27139:30;:::i;:::-;27042:133;;;;:::o;27181:468::-;27246:6;27254;27303:2;27291:9;27282:7;27278:23;27274:32;27271:119;;;27309:79;;:::i;:::-;27271:119;27429:1;27454:53;27499:7;27490:6;27479:9;27475:22;27454:53;:::i;:::-;27444:63;;27400:117;27556:2;27582:50;27624:7;27615:6;27604:9;27600:22;27582:50;:::i;:::-;27572:60;;27527:115;27181:468;;;;;:::o;27655:442::-;27804:4;27842:2;27831:9;27827:18;27819:26;;27855:71;27923:1;27912:9;27908:17;27899:6;27855:71;:::i;:::-;27936:72;28004:2;27993:9;27989:18;27980:6;27936:72;:::i;:::-;28018;28086:2;28075:9;28071:18;28062:6;28018:72;:::i;:::-;27655:442;;;;;;:::o;28103:468::-;28168:6;28176;28225:2;28213:9;28204:7;28200:23;28196:32;28193:119;;;28231:79;;:::i;:::-;28193:119;28351:1;28376:53;28421:7;28412:6;28401:9;28397:22;28376:53;:::i;:::-;28366:63;;28322:117;28478:2;28504:50;28546:7;28537:6;28526:9;28522:22;28504:50;:::i;:::-;28494:60;;28449:115;28103:468;;;;;:::o;28577:169::-;28661:11;28695:6;28690:3;28683:19;28735:4;28730:3;28726:14;28711:29;;28577:169;;;;:::o;28752:162::-;28892:14;28888:1;28880:6;28876:14;28869:38;28752:162;:::o;28920:366::-;29062:3;29083:67;29147:2;29142:3;29083:67;:::i;:::-;29076:74;;29159:93;29248:3;29159:93;:::i;:::-;29277:2;29272:3;29268:12;29261:19;;28920:366;;;:::o;29292:419::-;29458:4;29496:2;29485:9;29481:18;29473:26;;29545:9;29539:4;29535:20;29531:1;29520:9;29516:17;29509:47;29573:131;29699:4;29573:131;:::i;:::-;29565:139;;29292:419;;;:::o;29717:169::-;29857:21;29853:1;29845:6;29841:14;29834:45;29717:169;:::o;29892:366::-;30034:3;30055:67;30119:2;30114:3;30055:67;:::i;:::-;30048:74;;30131:93;30220:3;30131:93;:::i;:::-;30249:2;30244:3;30240:12;30233:19;;29892:366;;;:::o;30264:419::-;30430:4;30468:2;30457:9;30453:18;30445:26;;30517:9;30511:4;30507:20;30503:1;30492:9;30488:17;30481:47;30545:131;30671:4;30545:131;:::i;:::-;30537:139;;30264:419;;;:::o;30689:79::-;30728:7;30757:5;30746:16;;30689:79;;;:::o;30774:157::-;30879:45;30899:24;30917:5;30899:24;:::i;:::-;30879:45;:::i;:::-;30874:3;30867:58;30774:157;;:::o;30937:94::-;30970:8;31018:5;31014:2;31010:14;30989:35;;30937:94;;;:::o;31037:::-;31076:7;31105:20;31119:5;31105:20;:::i;:::-;31094:31;;31037:94;;;:::o;31137:100::-;31176:7;31205:26;31225:5;31205:26;:::i;:::-;31194:37;;31137:100;;;:::o;31243:157::-;31348:45;31368:24;31386:5;31368:24;:::i;:::-;31348:45;:::i;:::-;31343:3;31336:58;31243:157;;:::o;31406:538::-;31574:3;31589:75;31660:3;31651:6;31589:75;:::i;:::-;31689:2;31684:3;31680:12;31673:19;;31702:75;31773:3;31764:6;31702:75;:::i;:::-;31802:2;31797:3;31793:12;31786:19;;31815:75;31886:3;31877:6;31815:75;:::i;:::-;31915:2;31910:3;31906:12;31899:19;;31935:3;31928:10;;31406:538;;;;;;:::o;31950:180::-;31998:77;31995:1;31988:88;32095:4;32092:1;32085:15;32119:4;32116:1;32109:15;32136:176;32168:1;32185:20;32203:1;32185:20;:::i;:::-;32180:25;;32219:20;32237:1;32219:20;:::i;:::-;32214:25;;32258:1;32248:35;;32263:18;;:::i;:::-;32248:35;32304:1;32301;32297:9;32292:14;;32136:176;;;;:::o;32318:180::-;32366:77;32363:1;32356:88;32463:4;32460:1;32453:15;32487:4;32484:1;32477:15;32504:180;32552:77;32549:1;32542:88;32649:4;32646:1;32639:15;32673:4;32670:1;32663:15;32690:191;32730:3;32749:20;32767:1;32749:20;:::i;:::-;32744:25;;32783:20;32801:1;32783:20;:::i;:::-;32778:25;;32826:1;32823;32819:9;32812:16;;32847:3;32844:1;32841:10;32838:36;;;32854:18;;:::i;:::-;32838:36;32690:191;;;;:::o;32887:143::-;32944:5;32975:6;32969:13;32960:22;;32991:33;33018:5;32991:33;:::i;:::-;32887:143;;;;:::o;33036:351::-;33106:6;33155:2;33143:9;33134:7;33130:23;33126:32;33123:119;;;33161:79;;:::i;:::-;33123:119;33281:1;33306:64;33362:7;33353:6;33342:9;33338:22;33306:64;:::i;:::-;33296:74;;33252:128;33036:351;;;;:::o;33393:175::-;33533:27;33529:1;33521:6;33517:14;33510:51;33393:175;:::o;33574:366::-;33716:3;33737:67;33801:2;33796:3;33737:67;:::i;:::-;33730:74;;33813:93;33902:3;33813:93;:::i;:::-;33931:2;33926:3;33922:12;33915:19;;33574:366;;;:::o;33946:419::-;34112:4;34150:2;34139:9;34135:18;34127:26;;34199:9;34193:4;34189:20;34185:1;34174:9;34170:17;34163:47;34227:131;34353:4;34227:131;:::i;:::-;34219:139;;33946:419;;;:::o;34371:442::-;34520:4;34558:2;34547:9;34543:18;34535:26;;34571:71;34639:1;34628:9;34624:17;34615:6;34571:71;:::i;:::-;34652:72;34720:2;34709:9;34705:18;34696:6;34652:72;:::i;:::-;34734;34802:2;34791:9;34787:18;34778:6;34734:72;:::i;:::-;34371:442;;;;;;:::o;34819:553::-;34996:4;35034:3;35023:9;35019:19;35011:27;;35048:71;35116:1;35105:9;35101:17;35092:6;35048:71;:::i;:::-;35129:72;35197:2;35186:9;35182:18;35173:6;35129:72;:::i;:::-;35211;35279:2;35268:9;35264:18;35255:6;35211:72;:::i;:::-;35293;35361:2;35350:9;35346:18;35337:6;35293:72;:::i;:::-;34819:553;;;;;;;:::o;35378:332::-;35499:4;35537:2;35526:9;35522:18;35514:26;;35550:71;35618:1;35607:9;35603:17;35594:6;35550:71;:::i;:::-;35631:72;35699:2;35688:9;35684:18;35675:6;35631:72;:::i;:::-;35378:332;;;;;:::o;35716:180::-;35856:32;35852:1;35844:6;35840:14;35833:56;35716:180;:::o;35902:366::-;36044:3;36065:67;36129:2;36124:3;36065:67;:::i;:::-;36058:74;;36141:93;36230:3;36141:93;:::i;:::-;36259:2;36254:3;36250:12;36243:19;;35902:366;;;:::o;36274:419::-;36440:4;36478:2;36467:9;36463:18;36455:26;;36527:9;36521:4;36517:20;36513:1;36502:9;36498:17;36491:47;36555:131;36681:4;36555:131;:::i;:::-;36547:139;;36274:419;;;:::o;36699:442::-;36848:4;36886:2;36875:9;36871:18;36863:26;;36899:71;36967:1;36956:9;36952:17;36943:6;36899:71;:::i;:::-;36980:72;37048:2;37037:9;37033:18;37024:6;36980:72;:::i;:::-;37062;37130:2;37119:9;37115:18;37106:6;37062:72;:::i;:::-;36699:442;;;;;;:::o;37147:233::-;37186:3;37209:24;37227:5;37209:24;:::i;:::-;37200:33;;37255:66;37248:5;37245:77;37242:103;;37325:18;;:::i;:::-;37242:103;37372:1;37365:5;37361:13;37354:20;;37147:233;;;:::o;37386:194::-;37426:4;37446:20;37464:1;37446:20;:::i;:::-;37441:25;;37480:20;37498:1;37480:20;:::i;:::-;37475:25;;37524:1;37521;37517:9;37509:17;;37548:1;37542:4;37539:11;37536:37;;;37553:18;;:::i;:::-;37536:37;37386:194;;;;:::o;37586:166::-;37726:18;37722:1;37714:6;37710:14;37703:42;37586:166;:::o;37758:366::-;37900:3;37921:67;37985:2;37980:3;37921:67;:::i;:::-;37914:74;;37997:93;38086:3;37997:93;:::i;:::-;38115:2;38110:3;38106:12;38099:19;;37758:366;;;:::o;38130:419::-;38296:4;38334:2;38323:9;38319:18;38311:26;;38383:9;38377:4;38373:20;38369:1;38358:9;38354:17;38347:47;38411:131;38537:4;38411:131;:::i;:::-;38403:139;;38130:419;;;:::o;38555:163::-;38695:15;38691:1;38683:6;38679:14;38672:39;38555:163;:::o;38724:366::-;38866:3;38887:67;38951:2;38946:3;38887:67;:::i;:::-;38880:74;;38963:93;39052:3;38963:93;:::i;:::-;39081:2;39076:3;39072:12;39065:19;;38724:366;;;:::o;39096:419::-;39262:4;39300:2;39289:9;39285:18;39277:26;;39349:9;39343:4;39339:20;39335:1;39324:9;39320:17;39313:47;39377:131;39503:4;39377:131;:::i;:::-;39369:139;;39096:419;;;:::o;39521:679::-;39717:3;39732:75;39803:3;39794:6;39732:75;:::i;:::-;39832:2;39827:3;39823:12;39816:19;;39845:75;39916:3;39907:6;39845:75;:::i;:::-;39945:2;39940:3;39936:12;39929:19;;39958:75;40029:3;40020:6;39958:75;:::i;:::-;40058:2;40053:3;40049:12;40042:19;;40071:75;40142:3;40133:6;40071:75;:::i;:::-;40171:2;40166:3;40162:12;40155:19;;40191:3;40184:10;;39521:679;;;;;;;:::o;40206:169::-;40346:21;40342:1;40334:6;40330:14;40323:45;40206:169;:::o;40381:366::-;40523:3;40544:67;40608:2;40603:3;40544:67;:::i;:::-;40537:74;;40620:93;40709:3;40620:93;:::i;:::-;40738:2;40733:3;40729:12;40722:19;;40381:366;;;:::o;40753:419::-;40919:4;40957:2;40946:9;40942:18;40934:26;;41006:9;41000:4;40996:20;40992:1;40981:9;40977:17;40970:47;41034:131;41160:4;41034:131;:::i;:::-;41026:139;;40753:419;;;:::o;41178:180::-;41226:77;41223:1;41216:88;41323:4;41320:1;41313:15;41347:4;41344:1;41337:15;41364:163;41504:15;41500:1;41492:6;41488:14;41481:39;41364:163;:::o;41533:366::-;41675:3;41696:67;41760:2;41755:3;41696:67;:::i;:::-;41689:74;;41772:93;41861:3;41772:93;:::i;:::-;41890:2;41885:3;41881:12;41874:19;;41533:366;;;:::o;41905:419::-;42071:4;42109:2;42098:9;42094:18;42086:26;;42158:9;42152:4;42148:20;42144:1;42133:9;42129:17;42122:47;42186:131;42312:4;42186:131;:::i;:::-;42178:139;;41905:419;;;:::o;42330:161::-;42470:13;42466:1;42458:6;42454:14;42447:37;42330:161;:::o;42497:366::-;42639:3;42660:67;42724:2;42719:3;42660:67;:::i;:::-;42653:74;;42736:93;42825:3;42736:93;:::i;:::-;42854:2;42849:3;42845:12;42838:19;;42497:366;;;:::o;42869:419::-;43035:4;43073:2;43062:9;43058:18;43050:26;;43122:9;43116:4;43112:20;43108:1;43097:9;43093:17;43086:47;43150:131;43276:4;43150:131;:::i;:::-;43142:139;;42869:419;;;:::o;43294:167::-;43434:19;43430:1;43422:6;43418:14;43411:43;43294:167;:::o;43467:366::-;43609:3;43630:67;43694:2;43689:3;43630:67;:::i;:::-;43623:74;;43706:93;43795:3;43706:93;:::i;:::-;43824:2;43819:3;43815:12;43808:19;;43467:366;;;:::o;43839:419::-;44005:4;44043:2;44032:9;44028:18;44020:26;;44092:9;44086:4;44082:20;44078:1;44067:9;44063:17;44056:47;44120:131;44246:4;44120:131;:::i;:::-;44112:139;;43839:419;;;:::o;44264:182::-;44404:34;44400:1;44392:6;44388:14;44381:58;44264:182;:::o;44452:366::-;44594:3;44615:67;44679:2;44674:3;44615:67;:::i;:::-;44608:74;;44691:93;44780:3;44691:93;:::i;:::-;44809:2;44804:3;44800:12;44793:19;;44452:366;;;:::o;44824:419::-;44990:4;45028:2;45017:9;45013:18;45005:26;;45077:9;45071:4;45067:20;45063:1;45052:9;45048:17;45041:47;45105:131;45231:4;45105:131;:::i;:::-;45097:139;;44824:419;;;:::o;45249:166::-;45389:18;45385:1;45377:6;45373:14;45366:42;45249:166;:::o;45421:366::-;45563:3;45584:67;45648:2;45643:3;45584:67;:::i;:::-;45577:74;;45660:93;45749:3;45660:93;:::i;:::-;45778:2;45773:3;45769:12;45762:19;;45421:366;;;:::o;45793:419::-;45959:4;45997:2;45986:9;45982:18;45974:26;;46046:9;46040:4;46036:20;46032:1;46021:9;46017:17;46010:47;46074:131;46200:4;46074:131;:::i;:::-;46066:139;;45793:419;;;:::o;46218:170::-;46358:22;46354:1;46346:6;46342:14;46335:46;46218:170;:::o;46394:366::-;46536:3;46557:67;46621:2;46616:3;46557:67;:::i;:::-;46550:74;;46633:93;46722:3;46633:93;:::i;:::-;46751:2;46746:3;46742:12;46735:19;;46394:366;;;:::o;46766:419::-;46932:4;46970:2;46959:9;46955:18;46947:26;;47019:9;47013:4;47009:20;47005:1;46994:9;46990:17;46983:47;47047:131;47173:4;47047:131;:::i;:::-;47039:139;;46766:419;;;:::o;47191:173::-;47331:25;47327:1;47319:6;47315:14;47308:49;47191:173;:::o;47370:366::-;47512:3;47533:67;47597:2;47592:3;47533:67;:::i;:::-;47526:74;;47609:93;47698:3;47609:93;:::i;:::-;47727:2;47722:3;47718:12;47711:19;;47370:366;;;:::o;47742:419::-;47908:4;47946:2;47935:9;47931:18;47923:26;;47995:9;47989:4;47985:20;47981:1;47970:9;47966:17;47959:47;48023:131;48149:4;48023:131;:::i;:::-;48015:139;;47742:419;;;:::o;48167:143::-;48224:5;48255:6;48249:13;48240:22;;48271:33;48298:5;48271:33;:::i;:::-;48167:143;;;;:::o;48316:351::-;48386:6;48435:2;48423:9;48414:7;48410:23;48406:32;48403:119;;;48441:79;;:::i;:::-;48403:119;48561:1;48586:64;48642:7;48633:6;48622:9;48618:22;48586:64;:::i;:::-;48576:74;;48532:128;48316:351;;;;:::o;48673:173::-;48813:25;48809:1;48801:6;48797:14;48790:49;48673:173;:::o;48852:366::-;48994:3;49015:67;49079:2;49074:3;49015:67;:::i;:::-;49008:74;;49091:93;49180:3;49091:93;:::i;:::-;49209:2;49204:3;49200:12;49193:19;;48852:366;;;:::o;49224:419::-;49390:4;49428:2;49417:9;49413:18;49405:26;;49477:9;49471:4;49467:20;49463:1;49452:9;49448:17;49441:47;49505:131;49631:4;49505:131;:::i;:::-;49497:139;;49224:419;;;:::o;49649:165::-;49789:17;49785:1;49777:6;49773:14;49766:41;49649:165;:::o;49820:366::-;49962:3;49983:67;50047:2;50042:3;49983:67;:::i;:::-;49976:74;;50059:93;50148:3;50059:93;:::i;:::-;50177:2;50172:3;50168:12;50161:19;;49820:366;;;:::o;50192:419::-;50358:4;50396:2;50385:9;50381:18;50373:26;;50445:9;50439:4;50435:20;50431:1;50420:9;50416:17;50409:47;50473:131;50599:4;50473:131;:::i;:::-;50465:139;;50192:419;;;:::o;50617:410::-;50657:7;50680:20;50698:1;50680:20;:::i;:::-;50675:25;;50714:20;50732:1;50714:20;:::i;:::-;50709:25;;50769:1;50766;50762:9;50791:30;50809:11;50791:30;:::i;:::-;50780:41;;50970:1;50961:7;50957:15;50954:1;50951:22;50931:1;50924:9;50904:83;50881:139;;51000:18;;:::i;:::-;50881:139;50665:362;50617:410;;;;:::o;51033:185::-;51073:1;51090:20;51108:1;51090:20;:::i;:::-;51085:25;;51124:20;51142:1;51124:20;:::i;:::-;51119:25;;51163:1;51153:35;;51168:18;;:::i;:::-;51153:35;51210:1;51207;51203:9;51198:14;;51033:185;;;;:::o
Swarm Source
ipfs://ef24de033bf82c7fb534ad610c171e0ced4a86151e780b4ee638f7b97db27875
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ 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.