APE Price: $0.66 (-3.49%)

Contract

0xe7D9D8ccA57Df941F1Db43a20f682e5e6667D255

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo0 APE

APE Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Cancel Match92976462025-02-04 20:49:562 days ago1738702196IN
0xe7D9D8cc...e6667D255
0 APE0.0026333225.42069
Create Match92887372025-02-04 17:23:322 days ago1738689812IN
0xe7D9D8cc...e6667D255
0 APE0.0066524125.42069
Add Entry NFT92788422025-02-04 12:49:452 days ago1738673385IN
0xe7D9D8cc...e6667D255
0 APE0.0017450725.42069
Add Tier92785682025-02-04 12:43:012 days ago1738672981IN
0xe7D9D8cc...e6667D255
0 APE0.0020613825.42069

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Winpad

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at apescan.io on 2025-02-04
*/

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

//       ___                       ___           ___         ___          _____
//      /__/\        ___          /__/\         /  /\       /  /\        /  /::\
//     _\_ \:\      /  /\         \  \:\       /  /::\     /  /::\      /  /:/\:\
//    /__/\ \:\    /  /:/          \  \:\     /  /:/\:\   /  /:/\:\    /  /:/  \:\
//   _\_ \:\ \:\  /__/::\      _____\__\:\   /  /:/~/:/  /  /:/~/::\  /__/:/ \__\:|
//  /__/\ \:\ \:\ \__\/\:\__  /__/::::::::\ /__/:/ /:/  /__/:/ /:/\:\ \  \:\ /  /:/
//  \  \:\ \:\/:/    \  \:\/\ \  \:\~~\~~\/ \  \:\/:/   \  \:\/:/__\/  \  \:\  /:/
//   \  \:\ \::/      \__\::/  \  \:\  ~~~   \  \::/     \  \::/        \  \:\/:/
//    \  \:\/:/       /__/:/    \  \:\        \  \:\      \  \:\         \  \::/
//     \  \::/        \__\/      \  \:\        \  \:\      \  \:\         \__\/
//      \__\/                     \__\/         \__\/       \__\/

// Official Contract of Winpad.


// 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 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);

    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);
    }

    function removeEntryNFT(uint256 index) external onlyOwner {
        require(index < entryNFTs.length, "Index out of bounds");
        entryNFTs[index] = entryNFTs[entryNFTs.length - 1];
        entryNFTs.pop();
    }

    // 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");
        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))
        ) % 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);
    }

    // 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

Contract ABI

[{"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":"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"},{"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"},{"stateMutability":"payable","type":"receive"}]

60806040526001600655348015610014575f80fd5b5060405161468a38038061468a833981810160405281019061003691906102e1565b835f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a7575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009e9190610354565b60405180910390fd5b6100b68161018760201b60201c565b50600180819055508260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505061036d565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102758261024c565b9050919050565b6102858161026b565b811461028f575f80fd5b50565b5f815190506102a08161027c565b92915050565b5f6102b08261024c565b9050919050565b6102c0816102a6565b81146102ca575f80fd5b50565b5f815190506102db816102b7565b92915050565b5f805f80608085870312156102f9576102f8610248565b5b5f61030687828801610292565b9450506020610317878288016102cd565b9350506040610328878288016102cd565b9250506060610339878288016102cd565b91505092959194509250565b61034e8161026b565b82525050565b5f6020820190506103675f830184610345565b92915050565b6143108061037a5f395ff3fe6080604052600436106101e6575f3560e01c806383d5e72611610101578063cc8db4ff11610094578063e7e8517c11610063578063e7e8517c146106f3578063eaf98d231461071d578063ecdc2c0114610747578063f2fde38b14610785576101ed565b8063cc8db4ff1461064b578063cfb95e1714610673578063dc3a4e9b146106af578063dfbed623146106cb576101ed565b80639dd45d77116100d05780639dd45d771461058e5780639fe9ada3146105b8578063b82ee8c7146105fb578063c82db8f914610623576101ed565b806383d5e726146104d45780638da5cb5b146104fe57806398eeafc4146105285780639a1564f014610564576101ed565b8063463fec0f116101795780636358ec57116101485780636358ec571461044257806365e17c9d1461046a578063715018a61461049457806380e36dd8146104aa576101ed565b8063463fec0f14610364578063536fff6c146103a057806354f276b9146103dc57806361eba65214610418576101ed565b80630f5f1dbc116101b55780630f5f1dbc146102ac5780631966cdbe146102d65780632f333d2e146102fe578063339b2cff1461033a576101ed565b8063039af9eb146101f15780630594fd04146102305780630a47f9321461025a5780630bf9ed2b14610284576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b5061021760048036038101906102129190612d5f565b6107ad565b6040516102279493929190612db3565b60405180910390f35b34801561023b575f80fd5b506102446107e5565b6040516102519190612df6565b60405180910390f35b348015610265575f80fd5b5061026e6107eb565b60405161027b91906130a9565b60405180910390f35b34801561028f575f80fd5b506102aa60048036038101906102a591906130f3565b6107fc565b005b3480156102b7575f80fd5b506102c0610867565b6040516102cd919061313e565b60405180910390f35b3480156102e1575f80fd5b506102fc60048036038101906102f79190613181565b61088c565b005b348015610309575f80fd5b50610324600480360381019061031f91906131bf565b610f82565b60405161033191906131fd565b60405180910390f35b348015610345575f80fd5b5061034e610fac565b60405161035b919061313e565b60405180910390f35b34801561036f575f80fd5b5061038a60048036038101906103859190612d5f565b610fd1565b6040516103979190613225565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c191906130f3565b61100c565b6040516103d391906131fd565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612d5f565b611029565b60405161040f919061324d565b60405180910390f35b348015610423575f80fd5b5061042c611049565b60405161043991906130a9565b60405180910390f35b34801561044d575f80fd5b5061046860048036038101906104639190613266565b61105a565b005b348015610475575f80fd5b5061047e611131565b60405161048b919061313e565b60405180910390f35b34801561049f575f80fd5b506104a8611156565b005b3480156104b5575f80fd5b506104be611169565b6040516104cb91906133b1565b60405180910390f35b3480156104df575f80fd5b506104e8611272565b6040516104f591906133ec565b60405180910390f35b348015610509575f80fd5b50610512611277565b60405161051f9190613225565b60405180910390f35b348015610533575f80fd5b5061054e60048036038101906105499190613555565b61129e565b60405161055b919061324d565b60405180910390f35b34801561056f575f80fd5b50610578611612565b60405161058591906130a9565b60405180910390f35b348015610599575f80fd5b506105a2611622565b6040516105af919061367d565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d9919061369d565b6116ad565b6040516105f29897969594939291906136c8565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c9190612d5f565b611749565b005b34801561062e575f80fd5b506106496004803603810190610644919061369d565b611885565b005b348015610656575f80fd5b50610671600480360381019061066c9190613181565b611c3f565b005b34801561067e575f80fd5b506106996004803603810190610694919061369d565b611e08565b6040516106a6919061382c565b60405180910390f35b6106c960048036038101906106c49190613181565b611edd565b005b3480156106d6575f80fd5b506106f160048036038101906106ec9190613876565b6124c0565b005b3480156106fe575f80fd5b5061070761256e565b60405161071491906133ec565b60405180910390f35b348015610728575f80fd5b50610731612573565b60405161073e91906133ec565b60405180910390f35b348015610752575f80fd5b5061076d60048036038101906107689190613181565b612578565b60405161077c939291906138b4565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a691906130f3565b6125d7565b005b6005602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16905084565b60065481565b60606107f7600161265b565b905090565b6108046129e9565b600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff166108ab611277565b73ffffffffffffffffffffffffffffffffffffffff1614806109135750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094990613943565b60405180910390fd5b61095a612a70565b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff16156109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b7906139ab565b60405180910390fd5b5f816004015483426040516020016109d99291906139e9565b604051602081830303815290604052805190602001205f1c6109fb9190613a41565b90505f805f8060095f8981526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610ac9578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190610a31565b5050505090505f5b8151811015610b42575f828281518110610aee57610aed613a71565b5b60200260200101519050806040015186610b089190613acb565b871015610b2257805f015194508060400151935050610b42565b806040015186610b329190613acb565b9550508080600101915050610ad1565b505f4790505f610b726064610b64600860ff1685612ab690919063ffffffff16565b612acb90919063ffffffff16565b90505f610b9f6064610b91604860ff1686612ab690919063ffffffff16565b612acb90919063ffffffff16565b90505f610bc782610bb98587612ae090919063ffffffff16565b612ae090919063ffffffff16565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015610c2d573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610c92573d5f803e3d5ffd5b5060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610cf7573d5f803e3d5ffd5b503073ffffffffffffffffffffffffffffffffffffffff168a6002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8c600301546040518263ffffffff1660e01b8152600401610d6f9190612df6565b602060405180830381865afa158015610d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dae9190613b12565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90613b87565b60405180910390fd5b896002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30898d600301546040518463ffffffff1660e01b8152600401610e6893929190613ba5565b5f604051808303815f87803b158015610e7f575f80fd5b505af1158015610e91573d5f803e3d5ffd5b50505050868a6006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018a60060160146101000a81548160ff0219169083151502179055508b7ffddfb72c47e86c9b40c5d988137a17ab83c495474cd558435b12d49f6c8dfc9585858585604051610f2a9493929190613bda565b60405180910390a28b7f0de9133ae9f24b7424a923e1bf901ed2381ee3e99707ff9b9b696602199b3dcc8888604051610f64929190613c1d565b60405180910390a250505050505050505050610f7e612af5565b5050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8181548110610fe0575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b600a8181548110611038575f80fd5b905f5260205f20015f915090505481565b6060611055600261265b565b905090565b6110626129e9565b60405180608001604052808481526020018381526020018281526020016001151581525060055f60065481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055509050506006547f2f9c2de6aaf46503da28305515cfe3b56565d2c3663c95ca503892b16c8d5a4a84848460405161110d93929190613c44565b60405180910390a260065f81548092919061112790613c79565b9190505550505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61115e6129e9565b6111675f612afe565b565b60605f600160065461117b9190613cc0565b67ffffffffffffffff81111561119457611193613419565b5b6040519080825280602002602001820160405280156111cd57816020015b6111ba612c18565b8152602001906001900390816111b25790505b5090505f600190505b60065481101561126a5760055f8281526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050826001836112419190613cc0565b8151811061125257611251613a71565b5b602002602001018190525080806001019150506111d6565b508091505090565b604881565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6112a76129e9565b5f82116112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e090613d3d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016113399190612df6565b602060405180830381865afa158015611354573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113789190613b12565b73ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590613da5565b60405180910390fd5b428484336040516020016113e59493929190613e08565b6040516020818303038152906040528051906020012090506040518061012001604052808281526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f815260200183426114499190613acb565b81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020016001151581525060075f8381526020019081526020015f205f820151815f015560208201518160010190805190602001906114ae929190612c3e565b506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160060160146101000a81548160ff0219169083151502179055506101008201518160060160156101000a81548160ff021916908315150217905550905050600a81908060018154018082558091505060019003905f5260205f20015f9091909190915055807f5d004160fb0c10d44ff5c867fe5a12226e4b72b8137daeab0634ac0ca6f8fa91858585426115f39190613acb565b604051611602939291906138b4565b60405180910390a2949350505050565b606061161d5f61265b565b905090565b6060600c8054806020026020016040519081016040528092919081815260200182805480156116a357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161165a575b5050505050905090565b6007602052805f5260405f205f91509050805f015490806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160149054906101000a900460ff16908060060160159054906101000a900460ff16905088565b6117516129e9565b600c805490508110611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613e9f565b60405180910390fd5b600c6001600c805490506117ac9190613cc0565b815481106117bd576117bc613a71565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106117f9576117f8613a71565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c8054806118505761184f613ebd565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b3373ffffffffffffffffffffffffffffffffffffffff166118a4611277565b73ffffffffffffffffffffffffffffffffffffffff16148061190c5750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613943565b60405180910390fd5b611953612a70565b5f60075f8381526020019081526020015f2090508060060160149054906101000a900460ff16156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906139ab565b60405180910390fd5b5f805f90505b60095f8581526020019081526020015f2080549050811015611b44575f60095f8681526020019081526020015f2082815481106119ff576119fe613a71565b5b905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505090505f60055f836020015181526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250509050815f015173ffffffffffffffffffffffffffffffffffffffff166108fc825f015190811502906040515f60405180830381858888f19350505050158015611b23573d5f803e3d5ffd5b50805f015184611b339190613acb565b9350505080806001019150506119bf565b50816002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30611b8d611277565b85600301546040518463ffffffff1660e01b8152600401611bb093929190613ba5565b5f604051808303815f87803b158015611bc7575f80fd5b505af1158015611bd9573d5f803e3d5ffd5b5050505060018260060160146101000a81548160ff021916908315150217905550827feb0a1bf89c4eb26c92f84743d725051d48db72eb3b55a322c7bbbaaa62d944e682604051611c2a9190612df6565b60405180910390a25050611c3c612af5565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611c5e611277565b73ffffffffffffffffffffffffffffffffffffffff161480611cc65750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90613943565b60405180910390fd5b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff1615611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d62906139ab565b60405180910390fd5b5f8211611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da490613d3d565b60405180910390fd5b81816005015f828254611dc09190613acb565b92505081905550827f4e7343e3df0eebdc37f76fccb079c3c667a33ba7f25ec82d4130549c3bf247d48260050154604051611dfb9190612df6565b60405180910390a2505050565b606060095f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015611ed2578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190611e3a565b505050509050919050565b611ee5612a70565b5f60075f8481526020019081526020015f2090505f60055f8481526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff16151515158152505090508160060160159054906101000a900460ff16611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9790613f34565b60405180910390fd5b8160060160149054906101000a900460ff1615611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613f9c565b60405180910390fd5b81600501544210612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614004565b60405180910390fd5b806060015161207c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120739061406c565b60405180910390fd5b6120d6826001018054806020026020016040519081016040528092919081815260200182805480156120cb57602002820191905f5260205f20905b8154815260200190600101908083116120b7575b505050505084612bbf565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906140d4565b60405180910390fd5b805f0151341461215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121519061413c565b60405180910390fd5b5f815f0151036123845760085f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f4906141a4565b60405180910390fd5b5f805b600c805490508110156122dd575f600c828154811061222257612221613a71565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016122829190613225565b602060405180830381865afa15801561229d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c191906141d6565b11156122d057600191506122dd565b8080600101915050612200565b508061231e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123159061424b565b60405180910390fd5b600160085f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505b5f816040015182602001516123999190613acb565b905060095f8681526020019081526020015f2060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200183815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155505080836004015f8282546124709190613acb565b92505081905550847f9547adb56b87436876e7c387b0becc7270032515aedda7a210440394c8146d6d33836040516124a9929190613c1d565b60405180910390a25050506124bc612af5565b5050565b6124c86129e9565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28367b555b0bf666dc90350598e071733a56fe1f54631804abfa5688b29c27968260405161256291906131fd565b60405180910390a25050565b601481565b600881565b6009602052815f5260405f208181548110612591575f80fd5b905f5260205f2090600302015f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b6125df6129e9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361264f575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126469190613225565b60405180910390fd5b61265881612afe565b50565b60605f600a8054905067ffffffffffffffff81111561267d5761267c613419565b5b6040519080825280602002602001820160405280156126b657816020015b6126a3612c89565b81526020019060019003908161269b5790505b5090505f805b600a80549050811015612935575f600a82815481106126de576126dd613a71565b5b905f5260205f20015490505f60075f8381526020019081526020015f2090505f808860ff1603612731578160060160149054906101000a900460ff1615801561272a5750816005015442105b9050612788565b60018860ff1603612755578160060160149054906101000a900460ff169050612787565b60028860ff1603612786578160060160149054906101000a900460ff16158015612783575081600501544210155b90505b5b5b80156129255781604051806101200160405290815f8201548152602001600182018054806020026020016040519081016040528092919081815260200182805480156127f157602002820191905f5260205f20905b8154815260200190600101908083116127dd575b50505050508152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160149054906101000a900460ff161515151581526020016006820160159054906101000a900460ff16151515158152505086868151811061290b5761290a613a71565b5b6020026020010181905250848061292190613c79565b9550505b50505080806001019150506126bc565b505f8167ffffffffffffffff81111561295157612950613419565b5b60405190808252806020026020018201604052801561298a57816020015b612977612c89565b81526020019060019003908161296f5790505b5090505f5b828110156129dd578381815181106129aa576129a9613a71565b5b60200260200101518282815181106129c5576129c4613a71565b5b6020026020010181905250808060010191505061298f565b50809350505050919050565b6129f1612c11565b73ffffffffffffffffffffffffffffffffffffffff16612a0f611277565b73ffffffffffffffffffffffffffffffffffffffff1614612a6e57612a32612c11565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612a659190613225565b60405180910390fd5b565b600260015403612aac576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b5f8183612ac39190614269565b905092915050565b5f8183612ad891906142aa565b905092915050565b5f8183612aed9190613cc0565b905092915050565b60018081905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f90505b8351811015612c065782848281518110612be257612be1613a71565b5b602002602001015103612bf9576001915050612c0b565b8080600101915050612bc5565b505f90505b92915050565b5f33905090565b60405180608001604052805f81526020015f81526020015f81526020015f151581525090565b828054828255905f5260205f20908101928215612c78579160200282015b82811115612c77578251825591602001919060010190612c5c565b5b509050612c859190612d00565b5090565b6040518061012001604052805f8019168152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f151581525090565b5b80821115612d17575f815f905550600101612d01565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612d3e81612d2c565b8114612d48575f80fd5b50565b5f81359050612d5981612d35565b92915050565b5f60208284031215612d7457612d73612d24565b5b5f612d8184828501612d4b565b91505092915050565b612d9381612d2c565b82525050565b5f8115159050919050565b612dad81612d99565b82525050565b5f608082019050612dc65f830187612d8a565b612dd36020830186612d8a565b612de06040830185612d8a565b612ded6060830184612da4565b95945050505050565b5f602082019050612e095f830184612d8a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b612e4a81612e38565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e8281612d2c565b82525050565b5f612e938383612e79565b60208301905092915050565b5f602082019050919050565b5f612eb582612e50565b612ebf8185612e5a565b9350612eca83612e6a565b805f5b83811015612efa578151612ee18882612e88565b9750612eec83612e9f565b925050600181019050612ecd565b5085935050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b82525050565b612f4f81612d99565b82525050565b5f61012083015f830151612f6b5f860182612e41565b5060208301518482036020860152612f838282612eab565b9150506040830151612f986040860182612f37565b506060830151612fab6060860182612e79565b506080830151612fbe6080860182612e79565b5060a0830151612fd160a0860182612e79565b5060c0830151612fe460c0860182612f37565b5060e0830151612ff760e0860182612f46565b5061010083015161300c610100860182612f46565b508091505092915050565b5f6130228383612f55565b905092915050565b5f602082019050919050565b5f61304082612e0f565b61304a8185612e19565b93508360208202850161305c85612e29565b805f5b8581101561309757848403895281516130788582613017565b94506130838361302a565b925060208a0199505060018101905061305f565b50829750879550505050505092915050565b5f6020820190508181035f8301526130c18184613036565b905092915050565b6130d281612f26565b81146130dc575f80fd5b50565b5f813590506130ed816130c9565b92915050565b5f6020828403121561310857613107612d24565b5b5f613115848285016130df565b91505092915050565b5f61312882612f07565b9050919050565b6131388161311e565b82525050565b5f6020820190506131515f83018461312f565b92915050565b61316081612e38565b811461316a575f80fd5b50565b5f8135905061317b81613157565b92915050565b5f806040838503121561319757613196612d24565b5b5f6131a48582860161316d565b92505060206131b585828601612d4b565b9150509250929050565b5f80604083850312156131d5576131d4612d24565b5b5f6131e28582860161316d565b92505060206131f3858286016130df565b9150509250929050565b5f6020820190506132105f830184612da4565b92915050565b61321f81612f26565b82525050565b5f6020820190506132385f830184613216565b92915050565b61324781612e38565b82525050565b5f6020820190506132605f83018461323e565b92915050565b5f805f6060848603121561327d5761327c612d24565b5b5f61328a86828701612d4b565b935050602061329b86828701612d4b565b92505060406132ac86828701612d4b565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b608082015f8201516132f35f850182612e79565b5060208201516133066020850182612e79565b5060408201516133196040850182612e79565b50606082015161332c6060850182612f46565b50505050565b5f61333d83836132df565b60808301905092915050565b5f602082019050919050565b5f61335f826132b6565b61336981856132c0565b9350613374836132d0565b805f5b838110156133a457815161338b8882613332565b975061339683613349565b925050600181019050613377565b5085935050505092915050565b5f6020820190508181035f8301526133c98184613355565b905092915050565b5f60ff82169050919050565b6133e6816133d1565b82525050565b5f6020820190506133ff5f8301846133dd565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61344f82613409565b810181811067ffffffffffffffff8211171561346e5761346d613419565b5b80604052505050565b5f613480612d1b565b905061348c8282613446565b919050565b5f67ffffffffffffffff8211156134ab576134aa613419565b5b602082029050602081019050919050565b5f80fd5b5f6134d26134cd84613491565b613477565b905080838252602082019050602084028301858111156134f5576134f46134bc565b5b835b8181101561351e578061350a8882612d4b565b8452602084019350506020810190506134f7565b5050509392505050565b5f82601f83011261353c5761353b613405565b5b813561354c8482602086016134c0565b91505092915050565b5f805f806080858703121561356d5761356c612d24565b5b5f85013567ffffffffffffffff81111561358a57613589612d28565b5b61359687828801613528565b94505060206135a7878288016130df565b93505060406135b887828801612d4b565b92505060606135c987828801612d4b565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6136098383612f37565b60208301905092915050565b5f602082019050919050565b5f61362b826135d5565b61363581856135df565b9350613640836135ef565b805f5b8381101561367057815161365788826135fe565b975061366283613615565b925050600181019050613643565b5085935050505092915050565b5f6020820190508181035f8301526136958184613621565b905092915050565b5f602082840312156136b2576136b1612d24565b5b5f6136bf8482850161316d565b91505092915050565b5f610100820190506136dc5f83018b61323e565b6136e9602083018a613216565b6136f66040830189612d8a565b6137036060830188612d8a565b6137106080830187612d8a565b61371d60a0830186613216565b61372a60c0830185612da4565b61373760e0830184612da4565b9998505050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b606082015f8201516137815f850182612f37565b5060208201516137946020850182612e79565b5060408201516137a76040850182612e79565b50505050565b5f6137b8838361376d565b60608301905092915050565b5f602082019050919050565b5f6137da82613744565b6137e4818561374e565b93506137ef8361375e565b805f5b8381101561381f57815161380688826137ad565b9750613811836137c4565b9250506001810190506137f2565b5085935050505092915050565b5f6020820190508181035f83015261384481846137d0565b905092915050565b61385581612d99565b811461385f575f80fd5b50565b5f813590506138708161384c565b92915050565b5f806040838503121561388c5761388b612d24565b5b5f613899858286016130df565b92505060206138aa85828601613862565b9150509250929050565b5f6060820190506138c75f830186613216565b6138d46020830185612d8a565b6138e16040830184612d8a565b949350505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f61392d600c836138e9565b9150613938826138f9565b602082019050919050565b5f6020820190508181035f83015261395a81613921565b9050919050565b7f4d6174636820616c726561647920656e646564000000000000000000000000005f82015250565b5f6139956013836138e9565b91506139a082613961565b602082019050919050565b5f6020820190508181035f8301526139c281613989565b9050919050565b5f819050919050565b6139e36139de82612d2c565b6139c9565b82525050565b5f6139f482856139d2565b602082019150613a0482846139d2565b6020820191508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a4b82612d2c565b9150613a5683612d2c565b925082613a6657613a65613a14565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ad582612d2c565b9150613ae083612d2c565b9250828201905080821115613af857613af7613a9e565b5b92915050565b5f81519050613b0c816130c9565b92915050565b5f60208284031215613b2757613b26612d24565b5b5f613b3484828501613afe565b91505092915050565b7f436f6e747261637420646f6573206e6f74206f776e204e4654000000000000005f82015250565b5f613b716019836138e9565b9150613b7c82613b3d565b602082019050919050565b5f6020820190508181035f830152613b9e81613b65565b9050919050565b5f606082019050613bb85f830186613216565b613bc56020830185613216565b613bd26040830184612d8a565b949350505050565b5f608082019050613bed5f830187612d8a565b613bfa6020830186612d8a565b613c076040830185612d8a565b613c146060830184612d8a565b95945050505050565b5f604082019050613c305f830185613216565b613c3d6020830184612d8a565b9392505050565b5f606082019050613c575f830186612d8a565b613c646020830185612d8a565b613c716040830184612d8a565b949350505050565b5f613c8382612d2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb557613cb4613a9e565b5b600182019050919050565b5f613cca82612d2c565b9150613cd583612d2c565b9250828203905081811115613ced57613cec613a9e565b5b92915050565b7f496e76616c6964206475726174696f6e000000000000000000000000000000005f82015250565b5f613d276010836138e9565b9150613d3282613cf3565b602082019050919050565b5f6020820190508181035f830152613d5481613d1b565b9050919050565b7f4e4654206e6f74206f776e6564000000000000000000000000000000000000005f82015250565b5f613d8f600d836138e9565b9150613d9a82613d5b565b602082019050919050565b5f6020820190508181035f830152613dbc81613d83565b9050919050565b5f8160601b9050919050565b5f613dd982613dc3565b9050919050565b5f613dea82613dcf565b9050919050565b613e02613dfd82612f26565b613de0565b82525050565b5f613e1382876139d2565b602082019150613e238286613df1565b601482019150613e3382856139d2565b602082019150613e438284613df1565b60148201915081905095945050505050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f613e896013836138e9565b9150613e9482613e55565b602082019050919050565b5f6020820190508181035f830152613eb681613e7d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f496e76616c6964206d61746368000000000000000000000000000000000000005f82015250565b5f613f1e600d836138e9565b9150613f2982613eea565b602082019050919050565b5f6020820190508181035f830152613f4b81613f12565b9050919050565b7f4d6174636820656e6465640000000000000000000000000000000000000000005f82015250565b5f613f86600b836138e9565b9150613f9182613f52565b602082019050919050565b5f6020820190508181035f830152613fb381613f7a565b9050919050565b7f456e726f6c6c6d656e7420636c6f7365640000000000000000000000000000005f82015250565b5f613fee6011836138e9565b9150613ff982613fba565b602082019050919050565b5f6020820190508181035f83015261401b81613fe2565b9050919050565b7f496e76616c6964207469657200000000000000000000000000000000000000005f82015250565b5f614056600c836138e9565b915061406182614022565b602082019050919050565b5f6020820190508181035f8301526140838161404a565b9050919050565b7f54696572206e6f7420616c6c6f776564000000000000000000000000000000005f82015250565b5f6140be6010836138e9565b91506140c98261408a565b602082019050919050565b5f6020820190508181035f8301526140eb816140b2565b9050919050565b7f496e636f72726563742041504520616d6f756e740000000000000000000000005f82015250565b5f6141266014836138e9565b9150614131826140f2565b602082019050919050565b5f6020820190508181035f8301526141538161411a565b9050919050565b7f4672656520656e74727920616c726561647920757365640000000000000000005f82015250565b5f61418e6017836138e9565b91506141998261415a565b602082019050919050565b5f6020820190508181035f8301526141bb81614182565b9050919050565b5f815190506141d081612d35565b92915050565b5f602082840312156141eb576141ea612d24565b5b5f6141f8848285016141c2565b91505092915050565b7f4e6f207175616c696679696e67204e465420666f756e640000000000000000005f82015250565b5f6142356017836138e9565b915061424082614201565b602082019050919050565b5f6020820190508181035f83015261426281614229565b9050919050565b5f61427382612d2c565b915061427e83612d2c565b925082820261428c81612d2c565b915082820484148315176142a3576142a2613a9e565b5b5092915050565b5f6142b482612d2c565b91506142bf83612d2c565b9250826142cf576142ce613a14565b5b82820490509291505056fea26469706673582212202c57d26cb825022efccec10919830ff5c84ca24ecfa957aa7c8e0d79c740d20464736f6c634300081a0033000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711000000000000000000000000b931e339b4f5eb3d4d039ce1451426754063c711

Deployed Bytecode

0x6080604052600436106101e6575f3560e01c806383d5e72611610101578063cc8db4ff11610094578063e7e8517c11610063578063e7e8517c146106f3578063eaf98d231461071d578063ecdc2c0114610747578063f2fde38b14610785576101ed565b8063cc8db4ff1461064b578063cfb95e1714610673578063dc3a4e9b146106af578063dfbed623146106cb576101ed565b80639dd45d77116100d05780639dd45d771461058e5780639fe9ada3146105b8578063b82ee8c7146105fb578063c82db8f914610623576101ed565b806383d5e726146104d45780638da5cb5b146104fe57806398eeafc4146105285780639a1564f014610564576101ed565b8063463fec0f116101795780636358ec57116101485780636358ec571461044257806365e17c9d1461046a578063715018a61461049457806380e36dd8146104aa576101ed565b8063463fec0f14610364578063536fff6c146103a057806354f276b9146103dc57806361eba65214610418576101ed565b80630f5f1dbc116101b55780630f5f1dbc146102ac5780631966cdbe146102d65780632f333d2e146102fe578063339b2cff1461033a576101ed565b8063039af9eb146101f15780630594fd04146102305780630a47f9321461025a5780630bf9ed2b14610284576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b5061021760048036038101906102129190612d5f565b6107ad565b6040516102279493929190612db3565b60405180910390f35b34801561023b575f80fd5b506102446107e5565b6040516102519190612df6565b60405180910390f35b348015610265575f80fd5b5061026e6107eb565b60405161027b91906130a9565b60405180910390f35b34801561028f575f80fd5b506102aa60048036038101906102a591906130f3565b6107fc565b005b3480156102b7575f80fd5b506102c0610867565b6040516102cd919061313e565b60405180910390f35b3480156102e1575f80fd5b506102fc60048036038101906102f79190613181565b61088c565b005b348015610309575f80fd5b50610324600480360381019061031f91906131bf565b610f82565b60405161033191906131fd565b60405180910390f35b348015610345575f80fd5b5061034e610fac565b60405161035b919061313e565b60405180910390f35b34801561036f575f80fd5b5061038a60048036038101906103859190612d5f565b610fd1565b6040516103979190613225565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c191906130f3565b61100c565b6040516103d391906131fd565b60405180910390f35b3480156103e7575f80fd5b5061040260048036038101906103fd9190612d5f565b611029565b60405161040f919061324d565b60405180910390f35b348015610423575f80fd5b5061042c611049565b60405161043991906130a9565b60405180910390f35b34801561044d575f80fd5b5061046860048036038101906104639190613266565b61105a565b005b348015610475575f80fd5b5061047e611131565b60405161048b919061313e565b60405180910390f35b34801561049f575f80fd5b506104a8611156565b005b3480156104b5575f80fd5b506104be611169565b6040516104cb91906133b1565b60405180910390f35b3480156104df575f80fd5b506104e8611272565b6040516104f591906133ec565b60405180910390f35b348015610509575f80fd5b50610512611277565b60405161051f9190613225565b60405180910390f35b348015610533575f80fd5b5061054e60048036038101906105499190613555565b61129e565b60405161055b919061324d565b60405180910390f35b34801561056f575f80fd5b50610578611612565b60405161058591906130a9565b60405180910390f35b348015610599575f80fd5b506105a2611622565b6040516105af919061367d565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d9919061369d565b6116ad565b6040516105f29897969594939291906136c8565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c9190612d5f565b611749565b005b34801561062e575f80fd5b506106496004803603810190610644919061369d565b611885565b005b348015610656575f80fd5b50610671600480360381019061066c9190613181565b611c3f565b005b34801561067e575f80fd5b506106996004803603810190610694919061369d565b611e08565b6040516106a6919061382c565b60405180910390f35b6106c960048036038101906106c49190613181565b611edd565b005b3480156106d6575f80fd5b506106f160048036038101906106ec9190613876565b6124c0565b005b3480156106fe575f80fd5b5061070761256e565b60405161071491906133ec565b60405180910390f35b348015610728575f80fd5b50610731612573565b60405161073e91906133ec565b60405180910390f35b348015610752575f80fd5b5061076d60048036038101906107689190613181565b612578565b60405161077c939291906138b4565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a691906130f3565b6125d7565b005b6005602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16905084565b60065481565b60606107f7600161265b565b905090565b6108046129e9565b600c81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff166108ab611277565b73ffffffffffffffffffffffffffffffffffffffff1614806109135750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094990613943565b60405180910390fd5b61095a612a70565b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff16156109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b7906139ab565b60405180910390fd5b5f816004015483426040516020016109d99291906139e9565b604051602081830303815290604052805190602001205f1c6109fb9190613a41565b90505f805f8060095f8981526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610ac9578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190610a31565b5050505090505f5b8151811015610b42575f828281518110610aee57610aed613a71565b5b60200260200101519050806040015186610b089190613acb565b871015610b2257805f015194508060400151935050610b42565b806040015186610b329190613acb565b9550508080600101915050610ad1565b505f4790505f610b726064610b64600860ff1685612ab690919063ffffffff16565b612acb90919063ffffffff16565b90505f610b9f6064610b91604860ff1686612ab690919063ffffffff16565b612acb90919063ffffffff16565b90505f610bc782610bb98587612ae090919063ffffffff16565b612ae090919063ffffffff16565b905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015610c2d573d5f803e3d5ffd5b5060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610c92573d5f803e3d5ffd5b5060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610cf7573d5f803e3d5ffd5b503073ffffffffffffffffffffffffffffffffffffffff168a6002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8c600301546040518263ffffffff1660e01b8152600401610d6f9190612df6565b602060405180830381865afa158015610d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dae9190613b12565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90613b87565b60405180910390fd5b896002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30898d600301546040518463ffffffff1660e01b8152600401610e6893929190613ba5565b5f604051808303815f87803b158015610e7f575f80fd5b505af1158015610e91573d5f803e3d5ffd5b50505050868a6006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018a60060160146101000a81548160ff0219169083151502179055508b7ffddfb72c47e86c9b40c5d988137a17ab83c495474cd558435b12d49f6c8dfc9585858585604051610f2a9493929190613bda565b60405180910390a28b7f0de9133ae9f24b7424a923e1bf901ed2381ee3e99707ff9b9b696602199b3dcc8888604051610f64929190613c1d565b60405180910390a250505050505050505050610f7e612af5565b5050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8181548110610fe0575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b600a8181548110611038575f80fd5b905f5260205f20015f915090505481565b6060611055600261265b565b905090565b6110626129e9565b60405180608001604052808481526020018381526020018281526020016001151581525060055f60065481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055509050506006547f2f9c2de6aaf46503da28305515cfe3b56565d2c3663c95ca503892b16c8d5a4a84848460405161110d93929190613c44565b60405180910390a260065f81548092919061112790613c79565b9190505550505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61115e6129e9565b6111675f612afe565b565b60605f600160065461117b9190613cc0565b67ffffffffffffffff81111561119457611193613419565b5b6040519080825280602002602001820160405280156111cd57816020015b6111ba612c18565b8152602001906001900390816111b25790505b5090505f600190505b60065481101561126a5760055f8281526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581525050826001836112419190613cc0565b8151811061125257611251613a71565b5b602002602001018190525080806001019150506111d6565b508091505090565b604881565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6112a76129e9565b5f82116112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e090613d3d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016113399190612df6565b602060405180830381865afa158015611354573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113789190613b12565b73ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590613da5565b60405180910390fd5b428484336040516020016113e59493929190613e08565b6040516020818303038152906040528051906020012090506040518061012001604052808281526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020015f815260200183426114499190613acb565b81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020016001151581525060075f8381526020019081526020015f205f820151815f015560208201518160010190805190602001906114ae929190612c3e565b506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160060160146101000a81548160ff0219169083151502179055506101008201518160060160156101000a81548160ff021916908315150217905550905050600a81908060018154018082558091505060019003905f5260205f20015f9091909190915055807f5d004160fb0c10d44ff5c867fe5a12226e4b72b8137daeab0634ac0ca6f8fa91858585426115f39190613acb565b604051611602939291906138b4565b60405180910390a2949350505050565b606061161d5f61265b565b905090565b6060600c8054806020026020016040519081016040528092919081815260200182805480156116a357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161165a575b5050505050905090565b6007602052805f5260405f205f91509050805f015490806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160149054906101000a900460ff16908060060160159054906101000a900460ff16905088565b6117516129e9565b600c805490508110611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613e9f565b60405180910390fd5b600c6001600c805490506117ac9190613cc0565b815481106117bd576117bc613a71565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c82815481106117f9576117f8613a71565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c8054806118505761184f613ebd565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b3373ffffffffffffffffffffffffffffffffffffffff166118a4611277565b73ffffffffffffffffffffffffffffffffffffffff16148061190c5750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61194b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194290613943565b60405180910390fd5b611953612a70565b5f60075f8381526020019081526020015f2090508060060160149054906101000a900460ff16156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b0906139ab565b60405180910390fd5b5f805f90505b60095f8581526020019081526020015f2080549050811015611b44575f60095f8681526020019081526020015f2082815481106119ff576119fe613a71565b5b905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505090505f60055f836020015181526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff1615151515815250509050815f015173ffffffffffffffffffffffffffffffffffffffff166108fc825f015190811502906040515f60405180830381858888f19350505050158015611b23573d5f803e3d5ffd5b50805f015184611b339190613acb565b9350505080806001019150506119bf565b50816002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30611b8d611277565b85600301546040518463ffffffff1660e01b8152600401611bb093929190613ba5565b5f604051808303815f87803b158015611bc7575f80fd5b505af1158015611bd9573d5f803e3d5ffd5b5050505060018260060160146101000a81548160ff021916908315150217905550827feb0a1bf89c4eb26c92f84743d725051d48db72eb3b55a322c7bbbaaa62d944e682604051611c2a9190612df6565b60405180910390a25050611c3c612af5565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611c5e611277565b73ffffffffffffffffffffffffffffffffffffffff161480611cc65750600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90613943565b60405180910390fd5b5f60075f8481526020019081526020015f2090508060060160149054906101000a900460ff1615611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d62906139ab565b60405180910390fd5b5f8211611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da490613d3d565b60405180910390fd5b81816005015f828254611dc09190613acb565b92505081905550827f4e7343e3df0eebdc37f76fccb079c3c667a33ba7f25ec82d4130549c3bf247d48260050154604051611dfb9190612df6565b60405180910390a2505050565b606060095f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015611ed2578382905f5260205f2090600302016040518060600160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152505081526020019060010190611e3a565b505050509050919050565b611ee5612a70565b5f60075f8481526020019081526020015f2090505f60055f8481526020019081526020015f206040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff16151515158152505090508160060160159054906101000a900460ff16611fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9790613f34565b60405180910390fd5b8160060160149054906101000a900460ff1615611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613f9c565b60405180910390fd5b81600501544210612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614004565b60405180910390fd5b806060015161207c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120739061406c565b60405180910390fd5b6120d6826001018054806020026020016040519081016040528092919081815260200182805480156120cb57602002820191905f5260205f20905b8154815260200190600101908083116120b7575b505050505084612bbf565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906140d4565b60405180910390fd5b805f0151341461215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121519061413c565b60405180910390fd5b5f815f0151036123845760085f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f4906141a4565b60405180910390fd5b5f805b600c805490508110156122dd575f600c828154811061222257612221613a71565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016122829190613225565b602060405180830381865afa15801561229d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c191906141d6565b11156122d057600191506122dd565b8080600101915050612200565b508061231e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123159061424b565b60405180910390fd5b600160085f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505b5f816040015182602001516123999190613acb565b905060095f8681526020019081526020015f2060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200186815260200183815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155505080836004015f8282546124709190613acb565b92505081905550847f9547adb56b87436876e7c387b0becc7270032515aedda7a210440394c8146d6d33836040516124a9929190613c1d565b60405180910390a25050506124bc612af5565b5050565b6124c86129e9565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28367b555b0bf666dc90350598e071733a56fe1f54631804abfa5688b29c27968260405161256291906131fd565b60405180910390a25050565b601481565b600881565b6009602052815f5260405f208181548110612591575f80fd5b905f5260205f2090600302015f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b6125df6129e9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361264f575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126469190613225565b60405180910390fd5b61265881612afe565b50565b60605f600a8054905067ffffffffffffffff81111561267d5761267c613419565b5b6040519080825280602002602001820160405280156126b657816020015b6126a3612c89565b81526020019060019003908161269b5790505b5090505f805b600a80549050811015612935575f600a82815481106126de576126dd613a71565b5b905f5260205f20015490505f60075f8381526020019081526020015f2090505f808860ff1603612731578160060160149054906101000a900460ff1615801561272a5750816005015442105b9050612788565b60018860ff1603612755578160060160149054906101000a900460ff169050612787565b60028860ff1603612786578160060160149054906101000a900460ff16158015612783575081600501544210155b90505b5b5b80156129255781604051806101200160405290815f8201548152602001600182018054806020026020016040519081016040528092919081815260200182805480156127f157602002820191905f5260205f20905b8154815260200190600101908083116127dd575b50505050508152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820154815260200160058201548152602001600682015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160149054906101000a900460ff161515151581526020016006820160159054906101000a900460ff16151515158152505086868151811061290b5761290a613a71565b5b6020026020010181905250848061292190613c79565b9550505b50505080806001019150506126bc565b505f8167ffffffffffffffff81111561295157612950613419565b5b60405190808252806020026020018201604052801561298a57816020015b612977612c89565b81526020019060019003908161296f5790505b5090505f5b828110156129dd578381815181106129aa576129a9613a71565b5b60200260200101518282815181106129c5576129c4613a71565b5b6020026020010181905250808060010191505061298f565b50809350505050919050565b6129f1612c11565b73ffffffffffffffffffffffffffffffffffffffff16612a0f611277565b73ffffffffffffffffffffffffffffffffffffffff1614612a6e57612a32612c11565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612a659190613225565b60405180910390fd5b565b600260015403612aac576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b5f8183612ac39190614269565b905092915050565b5f8183612ad891906142aa565b905092915050565b5f8183612aed9190613cc0565b905092915050565b60018081905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f90505b8351811015612c065782848281518110612be257612be1613a71565b5b602002602001015103612bf9576001915050612c0b565b8080600101915050612bc5565b505f90505b92915050565b5f33905090565b60405180608001604052805f81526020015f81526020015f81526020015f151581525090565b828054828255905f5260205f20908101928215612c78579160200282015b82811115612c77578251825591602001919060010190612c5c565b5b509050612c859190612d00565b5090565b6040518061012001604052805f8019168152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f151581525090565b5b80821115612d17575f815f905550600101612d01565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612d3e81612d2c565b8114612d48575f80fd5b50565b5f81359050612d5981612d35565b92915050565b5f60208284031215612d7457612d73612d24565b5b5f612d8184828501612d4b565b91505092915050565b612d9381612d2c565b82525050565b5f8115159050919050565b612dad81612d99565b82525050565b5f608082019050612dc65f830187612d8a565b612dd36020830186612d8a565b612de06040830185612d8a565b612ded6060830184612da4565b95945050505050565b5f602082019050612e095f830184612d8a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b612e4a81612e38565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e8281612d2c565b82525050565b5f612e938383612e79565b60208301905092915050565b5f602082019050919050565b5f612eb582612e50565b612ebf8185612e5a565b9350612eca83612e6a565b805f5b83811015612efa578151612ee18882612e88565b9750612eec83612e9f565b925050600181019050612ecd565b5085935050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b82525050565b612f4f81612d99565b82525050565b5f61012083015f830151612f6b5f860182612e41565b5060208301518482036020860152612f838282612eab565b9150506040830151612f986040860182612f37565b506060830151612fab6060860182612e79565b506080830151612fbe6080860182612e79565b5060a0830151612fd160a0860182612e79565b5060c0830151612fe460c0860182612f37565b5060e0830151612ff760e0860182612f46565b5061010083015161300c610100860182612f46565b508091505092915050565b5f6130228383612f55565b905092915050565b5f602082019050919050565b5f61304082612e0f565b61304a8185612e19565b93508360208202850161305c85612e29565b805f5b8581101561309757848403895281516130788582613017565b94506130838361302a565b925060208a0199505060018101905061305f565b50829750879550505050505092915050565b5f6020820190508181035f8301526130c18184613036565b905092915050565b6130d281612f26565b81146130dc575f80fd5b50565b5f813590506130ed816130c9565b92915050565b5f6020828403121561310857613107612d24565b5b5f613115848285016130df565b91505092915050565b5f61312882612f07565b9050919050565b6131388161311e565b82525050565b5f6020820190506131515f83018461312f565b92915050565b61316081612e38565b811461316a575f80fd5b50565b5f8135905061317b81613157565b92915050565b5f806040838503121561319757613196612d24565b5b5f6131a48582860161316d565b92505060206131b585828601612d4b565b9150509250929050565b5f80604083850312156131d5576131d4612d24565b5b5f6131e28582860161316d565b92505060206131f3858286016130df565b9150509250929050565b5f6020820190506132105f830184612da4565b92915050565b61321f81612f26565b82525050565b5f6020820190506132385f830184613216565b92915050565b61324781612e38565b82525050565b5f6020820190506132605f83018461323e565b92915050565b5f805f6060848603121561327d5761327c612d24565b5b5f61328a86828701612d4b565b935050602061329b86828701612d4b565b92505060406132ac86828701612d4b565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b608082015f8201516132f35f850182612e79565b5060208201516133066020850182612e79565b5060408201516133196040850182612e79565b50606082015161332c6060850182612f46565b50505050565b5f61333d83836132df565b60808301905092915050565b5f602082019050919050565b5f61335f826132b6565b61336981856132c0565b9350613374836132d0565b805f5b838110156133a457815161338b8882613332565b975061339683613349565b925050600181019050613377565b5085935050505092915050565b5f6020820190508181035f8301526133c98184613355565b905092915050565b5f60ff82169050919050565b6133e6816133d1565b82525050565b5f6020820190506133ff5f8301846133dd565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61344f82613409565b810181811067ffffffffffffffff8211171561346e5761346d613419565b5b80604052505050565b5f613480612d1b565b905061348c8282613446565b919050565b5f67ffffffffffffffff8211156134ab576134aa613419565b5b602082029050602081019050919050565b5f80fd5b5f6134d26134cd84613491565b613477565b905080838252602082019050602084028301858111156134f5576134f46134bc565b5b835b8181101561351e578061350a8882612d4b565b8452602084019350506020810190506134f7565b5050509392505050565b5f82601f83011261353c5761353b613405565b5b813561354c8482602086016134c0565b91505092915050565b5f805f806080858703121561356d5761356c612d24565b5b5f85013567ffffffffffffffff81111561358a57613589612d28565b5b61359687828801613528565b94505060206135a7878288016130df565b93505060406135b887828801612d4b565b92505060606135c987828801612d4b565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6136098383612f37565b60208301905092915050565b5f602082019050919050565b5f61362b826135d5565b61363581856135df565b9350613640836135ef565b805f5b8381101561367057815161365788826135fe565b975061366283613615565b925050600181019050613643565b5085935050505092915050565b5f6020820190508181035f8301526136958184613621565b905092915050565b5f602082840312156136b2576136b1612d24565b5b5f6136bf8482850161316d565b91505092915050565b5f610100820190506136dc5f83018b61323e565b6136e9602083018a613216565b6136f66040830189612d8a565b6137036060830188612d8a565b6137106080830187612d8a565b61371d60a0830186613216565b61372a60c0830185612da4565b61373760e0830184612da4565b9998505050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b606082015f8201516137815f850182612f37565b5060208201516137946020850182612e79565b5060408201516137a76040850182612e79565b50505050565b5f6137b8838361376d565b60608301905092915050565b5f602082019050919050565b5f6137da82613744565b6137e4818561374e565b93506137ef8361375e565b805f5b8381101561381f57815161380688826137ad565b9750613811836137c4565b9250506001810190506137f2565b5085935050505092915050565b5f6020820190508181035f83015261384481846137d0565b905092915050565b61385581612d99565b811461385f575f80fd5b50565b5f813590506138708161384c565b92915050565b5f806040838503121561388c5761388b612d24565b5b5f613899858286016130df565b92505060206138aa85828601613862565b9150509250929050565b5f6060820190506138c75f830186613216565b6138d46020830185612d8a565b6138e16040830184612d8a565b949350505050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f61392d600c836138e9565b9150613938826138f9565b602082019050919050565b5f6020820190508181035f83015261395a81613921565b9050919050565b7f4d6174636820616c726561647920656e646564000000000000000000000000005f82015250565b5f6139956013836138e9565b91506139a082613961565b602082019050919050565b5f6020820190508181035f8301526139c281613989565b9050919050565b5f819050919050565b6139e36139de82612d2c565b6139c9565b82525050565b5f6139f482856139d2565b602082019150613a0482846139d2565b6020820191508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a4b82612d2c565b9150613a5683612d2c565b925082613a6657613a65613a14565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ad582612d2c565b9150613ae083612d2c565b9250828201905080821115613af857613af7613a9e565b5b92915050565b5f81519050613b0c816130c9565b92915050565b5f60208284031215613b2757613b26612d24565b5b5f613b3484828501613afe565b91505092915050565b7f436f6e747261637420646f6573206e6f74206f776e204e4654000000000000005f82015250565b5f613b716019836138e9565b9150613b7c82613b3d565b602082019050919050565b5f6020820190508181035f830152613b9e81613b65565b9050919050565b5f606082019050613bb85f830186613216565b613bc56020830185613216565b613bd26040830184612d8a565b949350505050565b5f608082019050613bed5f830187612d8a565b613bfa6020830186612d8a565b613c076040830185612d8a565b613c146060830184612d8a565b95945050505050565b5f604082019050613c305f830185613216565b613c3d6020830184612d8a565b9392505050565b5f606082019050613c575f830186612d8a565b613c646020830185612d8a565b613c716040830184612d8a565b949350505050565b5f613c8382612d2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb557613cb4613a9e565b5b600182019050919050565b5f613cca82612d2c565b9150613cd583612d2c565b9250828203905081811115613ced57613cec613a9e565b5b92915050565b7f496e76616c6964206475726174696f6e000000000000000000000000000000005f82015250565b5f613d276010836138e9565b9150613d3282613cf3565b602082019050919050565b5f6020820190508181035f830152613d5481613d1b565b9050919050565b7f4e4654206e6f74206f776e6564000000000000000000000000000000000000005f82015250565b5f613d8f600d836138e9565b9150613d9a82613d5b565b602082019050919050565b5f6020820190508181035f830152613dbc81613d83565b9050919050565b5f8160601b9050919050565b5f613dd982613dc3565b9050919050565b5f613dea82613dcf565b9050919050565b613e02613dfd82612f26565b613de0565b82525050565b5f613e1382876139d2565b602082019150613e238286613df1565b601482019150613e3382856139d2565b602082019150613e438284613df1565b60148201915081905095945050505050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f613e896013836138e9565b9150613e9482613e55565b602082019050919050565b5f6020820190508181035f830152613eb681613e7d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f496e76616c6964206d61746368000000000000000000000000000000000000005f82015250565b5f613f1e600d836138e9565b9150613f2982613eea565b602082019050919050565b5f6020820190508181035f830152613f4b81613f12565b9050919050565b7f4d6174636820656e6465640000000000000000000000000000000000000000005f82015250565b5f613f86600b836138e9565b9150613f9182613f52565b602082019050919050565b5f6020820190508181035f830152613fb381613f7a565b9050919050565b7f456e726f6c6c6d656e7420636c6f7365640000000000000000000000000000005f82015250565b5f613fee6011836138e9565b9150613ff982613fba565b602082019050919050565b5f6020820190508181035f83015261401b81613fe2565b9050919050565b7f496e76616c6964207469657200000000000000000000000000000000000000005f82015250565b5f614056600c836138e9565b915061406182614022565b602082019050919050565b5f6020820190508181035f8301526140838161404a565b9050919050565b7f54696572206e6f7420616c6c6f776564000000000000000000000000000000005f82015250565b5f6140be6010836138e9565b91506140c98261408a565b602082019050919050565b5f6020820190508181035f8301526140eb816140b2565b9050919050565b7f496e636f72726563742041504520616d6f756e740000000000000000000000005f82015250565b5f6141266014836138e9565b9150614131826140f2565b602082019050919050565b5f6020820190508181035f8301526141538161411a565b9050919050565b7f4672656520656e74727920616c726561647920757365640000000000000000005f82015250565b5f61418e6017836138e9565b91506141998261415a565b602082019050919050565b5f6020820190508181035f8301526141bb81614182565b9050919050565b5f815190506141d081612d35565b92915050565b5f602082840312156141eb576141ea612d24565b5b5f6141f8848285016141c2565b91505092915050565b7f4e6f207175616c696679696e67204e465420666f756e640000000000000000005f82015250565b5f6142356017836138e9565b915061424082614201565b602082019050919050565b5f6020820190508181035f83015261426281614229565b9050919050565b5f61427382612d2c565b915061427e83612d2c565b925082820261428c81612d2c565b915082820484148315176142a3576142a2613a9e565b5b5092915050565b5f6142b482612d2c565b91506142bf83612d2c565b9250826142cf576142ce613a14565b5b82820490509291505056fea26469706673582212202c57d26cb825022efccec10919830ff5c84ca24ecfa957aa7c8e0d79c740d20464736f6c634300081a0033

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

15928:11816:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17016:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;17065:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25604:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18946:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16327:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22186:1840;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17148:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16282:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17415:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17322:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17287:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25719:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19297:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16242:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7799:103;;;;;;;;;;;;;:::i;:::-;;25212:267;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16099:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7124:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19646:1032;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25487:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25834:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17101:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;19045:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24069:692;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24802:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25943:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20717:1436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27536:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16149:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16055:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17223:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;8057:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17016:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17065:29::-;;;;:::o;25604:107::-;25652:14;25686:17;25701:1;25686:14;:17::i;:::-;25679:24;;25604:107;:::o;18946:91::-;7010:13;:11;:13::i;:::-;19010:9:::1;19025:3;19010:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18946:91:::0;:::o;16327:40::-;;;;;;;;;;;;;:::o;22186:1840::-;18460:10;18449:21;;:7;:5;:7::i;:::-;:21;;;:54;;;;18474:17;:29;18492:10;18474:29;;;;;;;;;;;;;;;;;;;;;;;;;18449:54;18427:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;3523:21:::1;:19;:21::i;:::-;22319:15:::2;22337:7;:16;22345:7;22337:16;;;;;;;;;;;22319:34;;22373:1;:9;;;;;;;;;;;;22372:10;22364:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;22419:20;22534:1;:14;;;22491:10;22503:15;22474:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22464:56;;;;;;22442:89;;:106;;;;:::i;:::-;22419:129;;22559:18;22588:14:::0;22613:21:::2;22647:28:::0;22678:14:::2;:23;22693:7;22678:23;;;;;;;;;;;22647:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;22717:9;22712:323;22736:5;:12;22732:1;:16;22712:323;;;22770:22;22795:5;22801:1;22795:8;;;;;;;;:::i;:::-;;;;;;;;22770:33;;22850:1;:9;;;22837:10;:22;;;;:::i;:::-;22822:12;:37;22818:168;;;22889:1;:13;;;22880:22;;22937:1;:9;;;22921:25;;22965:5;;;22818:168;23014:1;:9;;;23000:23;;;;;:::i;:::-;;;22755:280;22750:3;;;;;;;22712:323;;;;23047:22;23072:21;23047:46;;23104:17;23124:40;23160:3;23124:31;16091:1;23124:31;;:14;:18;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23104:60;;23175:22;23200:45;23241:3;23200:36;16140:2;23200:36;;:14;:18;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;23175:70;;23256:24;23283:73;23331:14;23283:29;23302:9;23283:14;:18;;:29;;;;:::i;:::-;:33;;:73;;;;:::i;:::-;23256:100;;23369:10;;;;;;;;;;;:19;;:30;23389:9;23369:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;23410:15;;;;;;;;;;;:24;;:40;23435:14;23410:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;23461:17;;;;;;;;;;;:26;;:44;23488:16;23461:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;23587:4;23540:52;;23545:1;:12;;;;;;;;;;;;23540:26;;;23567:1;:7;;;23540:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;23518:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:1;:12;;;;;;;;;;;;23656:31;;;23696:4;23703:6;23711:1;:7;;;23656:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23743:6;23732:1;:8;;;:17;;;;;;;;;;;;;;;;;;23772:4;23760:1;:9;;;:16;;;;;;;;;;;;;;;;;;23825:7;23794:162;23847:14;23876:9;23900:14;23929:16;23794:162;;;;;;;;;:::i;:::-;;;;;;;;23987:7;23972:46;23996:6;24004:13;23972:46;;;;;;;:::i;:::-;;;;;;;;22308:1718;;;;;;;;;;3567:20:::1;:18;:20::i;:::-;22186:1840:::0;;:::o;17148:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16282:38::-;;;;;;;;;;;;;:::o;17415:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17322:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;17287:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25719:107::-;25767:14;25801:17;25816:1;25801:14;:17::i;:::-;25794:24;;25719:107;:::o;19297:318::-;7010:13;:11;:13::i;:::-;19458:51:::1;;;;;;;;19468:7;19458:51;;;;19477:11;19458:51;;;;19490:12;19458:51;;;;19504:4;19458:51;;;;::::0;19438:5:::1;:17;19444:10;;19438:17;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19537:10;;19525:59;19549:7;19558:11;19571:12;19525:59;;;;;;;;:::i;:::-;;;;;;;;19595:10;;:12;;;;;;;;;:::i;:::-;;;;;;19297:318:::0;;;:::o;16242:33::-;;;;;;;;;;;;;:::o;7799:103::-;7010:13;:11;:13::i;:::-;7864:30:::1;7891:1;7864:18;:30::i;:::-;7799:103::o:0;25212:267::-;25258:18;25289:24;25345:1;25332:10;;:14;;;;:::i;:::-;25316:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25289:58;;25363:9;25375:1;25363:13;;25358:91;25382:10;;25378:1;:14;25358:91;;;25429:5;:8;25435:1;25429:8;;;;;;;;;;;25414:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;25424:1;25420;:5;;;;:::i;:::-;25414:12;;;;;;;;:::i;:::-;;;;;;;:23;;;;25394:3;;;;;;;25358:91;;;;25466:5;25459:12;;;25212:267;:::o;16099:43::-;16140:2;16099:43;:::o;7124:87::-;7170:7;7197:6;;;;;;;;;;;7190:13;;7124:87;:::o;19646:1032::-;19822:15;7010:13;:11;:13::i;:::-;19869:1:::1;19858:8;:12;19850:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;19967:4;19924:48;;19929:10;19924:24;;;19949:5;19924:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;19902:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20077:15;20094:10;20106:5;20113:10;20060:64;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20036:99;;;;;;20026:109;;20167:318;;;;;;;;20192:7;20167:318;;;;20228:12;20167:318;;;;20267:10;20167:318;;;;;;20299:5;20167:318;;;;20333:1;20167:318;;;;20376:8;20358:15;:26;;;;:::i;:::-;20167:318;;;;20415:1;20167:318;;;;;;20441:5;20167:318;;;;;;20469:4;20167:318;;;;::::0;20148:7:::1;:16;20156:7;20148:16;;;;;;;;;;;:337;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20498:11;20515:7;20498:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20566:7;20539:131;20588:10;20613:5;20651:8;20633:15;:26;;;;:::i;:::-;20539:131;;;;;;;;:::i;:::-;;;;;;;;19646:1032:::0;;;;;;:::o;25487:109::-;25537:14;25571:17;25586:1;25571:14;:17::i;:::-;25564:24;;25487:109;:::o;25834:101::-;25882:16;25918:9;25911:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25834:101;:::o;17101:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19045:220::-;7010:13;:11;:13::i;:::-;19130:9:::1;:16;;;;19122:5;:24;19114:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19200:9;19229:1;19210:9;:16;;;;:20;;;;:::i;:::-;19200:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19181:9;19191:5;19181:16;;;;;;;;:::i;:::-;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;19242:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19045:220:::0;:::o;24069:692::-;18460:10;18449:21;;:7;:5;:7::i;:::-;:21;;;:54;;;;18474:17;:29;18492:10;18474:29;;;;;;;;;;;;;;;;;;;;;;;;;18449:54;18427:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;3523:21:::1;:19;:21::i;:::-;24151:15:::2;24169:7;:16;24177:7;24169:16;;;;;;;;;;;24151:34;;24205:1;:9;;;;;;;;;;;;24204:10;24196:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;24251:21;24290:9:::0;24302:1:::2;24290:13;;24285:310;24309:14;:23;24324:7;24309:23;;;;;;;;;;;:30;;;;24305:1;:34;24285:310;;;24361:22;24386:14;:23;24401:7;24386:23;;;;;;;;;;;24410:1;24386:26;;;;;;;;:::i;:::-;;;;;;;;;;;;24361:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;24427:21;24451:5;:15;24457:1;:8;;;24451:15;;;;;;;;;;;24427:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;24502:1;:13;;;24494:31;;:45;24526:4;:12;;;24494:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;24571:4;:12;;;24554:29;;;;;:::i;:::-;;;24346:249;;24341:3;;;;;;;24285:310;;;;24612:1;:12;;;;;;;;;;;;24607:31;;;24647:4;24654:7;:5;:7::i;:::-;24663:1;:7;;;24607:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24694:4;24682:1;:9;;;:16;;;;;;;;;;;;;;;;;;24730:7;24716:37;24739:13;24716:37;;;;;;:::i;:::-;;;;;;;;24140:621;;3567:20:::1;:18;:20::i;:::-;24069:692:::0;:::o;24802:379::-;18460:10;18449:21;;:7;:5;:7::i;:::-;:21;;;:54;;;;18474:17;:29;18492:10;18474:29;;;;;;;;;;;;;;;;;;;;;;;;;18449:54;18427:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;24929:15:::1;24947:7;:16;24955:7;24947:16;;;;;;;;;;;24929:34;;24983:1;:9;;;;;;;;;;;;24982:10;24974:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25056:1;25035:18;:22;25027:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25104:18;25091:1;:9;;;:31;;;;;;;:::i;:::-;;;;;;;;25154:7;25140:33;25163:1;:9;;;25140:33;;;;;;:::i;:::-;;;;;;;;24918:263;24802:379:::0;;:::o;25943:170::-;26035:22;26082:14;:23;26097:7;26082:23;;;;;;;;;;;26075:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25943:170;;;:::o;20717:1436::-;3523:21;:19;:21::i;:::-;20839:15:::1;20857:7;:16;20865:7;20857:16;;;;;;;;;;;20839:34;;20884:21;20908:5;:13;20914:6;20908:13;;;;;;;;;;;20884:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;20942:1;:8;;;;;;;;;;;;20934:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;20988:1;:9;;;;;;;;;;;;20987:10;20979:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;21050:1;:9;;;21032:15;:27;21024:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21100:4;:11;;;21092:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;21147:32;21156:1;:14;;21147:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21172:6;21147:8;:32::i;:::-;21139:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21232:4;:12;;;21219:9;:25;21211:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21302:1;21286:4;:12;;;:17:::0;21282:567:::1;;21347:16;:25;21364:7;21347:25;;;;;;;;;;;:37;21373:10;21347:37;;;;;;;;;;;;;;;;;;;;;;;;;21346:38;21320:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;21458:16;21502:9:::0;21497:220:::1;21521:9;:16;;;;21517:1;:20;21497:220;;;21610:1;21572:9;21582:1;21572:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21567:28;;;21596:10;21567:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;21563:139;;;21650:4;21636:18;;21677:5;;21563:139;21539:3;;;;;;;21497:220;;;;21739:11;21731:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21833:4;21793:16;:25;21810:7;21793:25;;;;;;;;;;;:37;21819:10;21793:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;21305:544;21282:567;21861:20;21903:4;:17;;;21884:4;:16;;;:36;;;;:::i;:::-;21861:59;;21931:14;:23;21946:7;21931:23;;;;;;;;;;;21974:47;;;;;;;;21988:10;21974:47;;;;;;22000:6;21974:47;;;;22008:12;21974:47;;::::0;21931:101:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22061:12;22043:1;:14;;;:30;;;;;;;:::i;:::-;;;;;;;;22111:7;22091:54;22120:10;22132:12;22091:54;;;;;;;:::i;:::-;;;;;;;;20828:1325;;;3567:20:::0;:18;:20::i;:::-;20717:1436;;:::o;27536:168::-;7010:13;:11;:13::i;:::-;27645:6:::1;27617:17;:25;27635:6;27617:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;27681:6;27667:29;;;27689:6;27667:29;;;;;;:::i;:::-;;;;;;;;27536:168:::0;;:::o;16149:45::-;16192:2;16149:45;:::o;16055:37::-;16091:1;16055:37;:::o;17223:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8057:220::-;7010:13;:11;:13::i;:::-;8162:1:::1;8142:22;;:8;:22;;::::0;8138:93:::1;;8216:1;8188:31;;;;;;;;;;;:::i;:::-;;;;;;;;8138:93;8241:28;8260:8;8241:18;:28::i;:::-;8057:220:::0;:::o;26146:1085::-;26237:14;26269:21;26305:11;:18;;;;26293:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;26269:55;;26335:13;26370:9;26365:683;26389:11;:18;;;;26385:1;:22;26365:683;;;26429:10;26442:11;26454:1;26442:14;;;;;;;;:::i;:::-;;;;;;;;;;26429:27;;26471:15;26489:7;:11;26497:2;26489:11;;;;;;;;;;;26471:29;;26517:12;26562:1;26548:10;:15;;;26544:386;;26623:1;:9;;;;;;;;;;;;26622:10;:41;;;;;26654:1;:9;;;26636:15;:27;26622:41;26612:51;;26544:386;;;26703:1;26689:10;:15;;;26685:245;;26763:1;:9;;;;;;;;;;;;26753:19;;26685:245;;;26812:1;26798:10;:15;;;26794:136;;26871:1;:9;;;;;;;;;;;;26870:10;:44;;;;;26904:1;:9;;;26885:15;:28;;26870:44;26860:54;;26794:136;26685:245;26544:386;26950:7;26946:91;;;26994:1;26978:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;26985:5;26978:13;;;;;;;;:::i;:::-;;;;;;;:17;;;;27014:7;;;;;:::i;:::-;;;;26946:91;26414:634;;;26409:3;;;;;;;26365:683;;;;27060:22;27097:5;27085:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;27060:43;;27119:9;27114:85;27138:5;27134:1;:9;27114:85;;;27178:6;27185:1;27178:9;;;;;;;;:::i;:::-;;;;;;;;27165:7;27173:1;27165:10;;;;;;;;:::i;:::-;;;;;;;:22;;;;27145:3;;;;;;;27114:85;;;;27216:7;27209:14;;;;;26146:1085;;;:::o;7289:166::-;7360:12;:10;:12::i;:::-;7349:23;;:7;:5;:7::i;:::-;:23;;;7345:103;;7423:12;:10;:12::i;:::-;7396:40;;;;;;;;;;;:::i;:::-;;;;;;;;7345:103;7289:166::o;3603:315::-;2901:1;3732:7;;:18;3728:88;;3774:30;;;;;;;;;;;;;;3728:88;2901:1;3893:7;:17;;;;3603:315::o;12249:98::-;12307:7;12338:1;12334;:5;;;;:::i;:::-;12327:12;;12249:98;;;;:::o;12648:::-;12706:7;12737:1;12733;:5;;;;:::i;:::-;12726:12;;12648:98;;;;:::o;11892:::-;11950:7;11981:1;11977;:5;;;;:::i;:::-;11970:12;;11892:98;;;;:::o;3926:212::-;2858:1;4109:7;:21;;;;3926:212::o;8437:191::-;8511:16;8530:6;;;;;;;;;;;8511:25;;8556:8;8547:6;;:17;;;;;;;;;;;;;;;;;;8611:8;8580:40;;8601:8;8580:40;;;;;;;;;;;;8500:128;8437:191;:::o;27239:256::-;27343:4;27370:9;27382:1;27370:13;;27365:100;27389:3;:10;27385:1;:14;27365:100;;;27435:5;27425:3;27429:1;27425:6;;;;;;;;:::i;:::-;;;;;;;;:15;27421:32;;27449:4;27442:11;;;;;27421:32;27401:3;;;;;;;27365:100;;;;27482:5;27475:12;;27239:256;;;;;:::o;5133:98::-;5186:7;5213:10;5206:17;;5133: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:619::-;12183:6;12191;12199;12248:2;12236:9;12227:7;12223:23;12219:32;12216:119;;;12254:79;;:::i;:::-;12216:119;12374:1;12399:53;12444:7;12435:6;12424:9;12420:22;12399:53;:::i;:::-;12389:63;;12345:117;12501:2;12527:53;12572:7;12563:6;12552:9;12548:22;12527:53;:::i;:::-;12517:63;;12472:118;12629:2;12655:53;12700:7;12691:6;12680:9;12676:22;12655:53;:::i;:::-;12645:63;;12600:118;12106:619;;;;;:::o;12731:140::-;12824:6;12858:5;12852:12;12842:22;;12731:140;;;:::o;12877:210::-;13002:11;13036:6;13031:3;13024:19;13076:4;13071:3;13067:14;13052:29;;12877:210;;;;:::o;13093:158::-;13186:4;13209:3;13201:11;;13239:4;13234:3;13230:14;13222:22;;13093:158;;;:::o;13315:861::-;13454:4;13449:3;13445:14;13544:4;13537:5;13533:16;13527:23;13563:63;13620:4;13615:3;13611:14;13597:12;13563:63;:::i;:::-;13469:167;13725:4;13718:5;13714:16;13708:23;13744:63;13801:4;13796:3;13792:14;13778:12;13744:63;:::i;:::-;13646:171;13907:4;13900:5;13896:16;13890:23;13926:63;13983:4;13978:3;13974:14;13960:12;13926:63;:::i;:::-;13827:172;14083:4;14076:5;14072:16;14066:23;14102:57;14153:4;14148:3;14144:14;14130:12;14102:57;:::i;:::-;14009:160;13423:753;13315:861;;:::o;14182:283::-;14303:10;14324:98;14418:3;14410:6;14324:98;:::i;:::-;14454:4;14449:3;14445:14;14431:28;;14182:283;;;;:::o;14471:139::-;14567:4;14599;14594:3;14590:14;14582:22;;14471:139;;;:::o;14678:940::-;14849:3;14878:80;14952:5;14878:80;:::i;:::-;14974:112;15079:6;15074:3;14974:112;:::i;:::-;14967:119;;15110:82;15186:5;15110:82;:::i;:::-;15215:7;15246:1;15231:362;15256:6;15253:1;15250:13;15231:362;;;15332:6;15326:13;15359:115;15470:3;15455:13;15359:115;:::i;:::-;15352:122;;15497:86;15576:6;15497:86;:::i;:::-;15487:96;;15291:302;15278:1;15275;15271:9;15266:14;;15231:362;;;15235:14;15609:3;15602:10;;14854:764;;;14678:940;;;;:::o;15624:477::-;15819:4;15857:2;15846:9;15842:18;15834:26;;15906:9;15900:4;15896:20;15892:1;15881:9;15877:17;15870:47;15934:160;16089:4;16080:6;15934:160;:::i;:::-;15926:168;;15624:477;;;;:::o;16107:86::-;16142:7;16182:4;16175:5;16171:16;16160:27;;16107:86;;;:::o;16199:112::-;16282:22;16298:5;16282:22;:::i;:::-;16277:3;16270:35;16199:112;;:::o;16317:214::-;16406:4;16444:2;16433:9;16429:18;16421:26;;16457:67;16521:1;16510:9;16506:17;16497:6;16457:67;:::i;:::-;16317:214;;;;:::o;16537:117::-;16646:1;16643;16636:12;16660:102;16701:6;16752:2;16748:7;16743:2;16736:5;16732:14;16728:28;16718:38;;16660:102;;;:::o;16768:180::-;16816:77;16813:1;16806:88;16913:4;16910:1;16903:15;16937:4;16934:1;16927:15;16954:281;17037:27;17059:4;17037:27;:::i;:::-;17029:6;17025:40;17167:6;17155:10;17152:22;17131:18;17119:10;17116:34;17113:62;17110:88;;;17178:18;;:::i;:::-;17110:88;17218:10;17214:2;17207:22;16997:238;16954:281;;:::o;17241:129::-;17275:6;17302:20;;:::i;:::-;17292:30;;17331:33;17359:4;17351:6;17331:33;:::i;:::-;17241:129;;;:::o;17376:311::-;17453:4;17543:18;17535:6;17532:30;17529:56;;;17565:18;;:::i;:::-;17529:56;17615:4;17607:6;17603:17;17595:25;;17675:4;17669;17665:15;17657:23;;17376:311;;;:::o;17693:117::-;17802:1;17799;17792:12;17833:710;17929:5;17954:81;17970:64;18027:6;17970:64;:::i;:::-;17954:81;:::i;:::-;17945:90;;18055:5;18084:6;18077:5;18070:21;18118:4;18111:5;18107:16;18100:23;;18171:4;18163:6;18159:17;18151:6;18147:30;18200:3;18192:6;18189:15;18186:122;;;18219:79;;:::i;:::-;18186:122;18334:6;18317:220;18351:6;18346:3;18343:15;18317:220;;;18426:3;18455:37;18488:3;18476:10;18455:37;:::i;:::-;18450:3;18443:50;18522:4;18517:3;18513:14;18506:21;;18393:144;18377:4;18372:3;18368:14;18361:21;;18317:220;;;18321:21;17935:608;;17833:710;;;;;:::o;18566:370::-;18637:5;18686:3;18679:4;18671:6;18667:17;18663:27;18653:122;;18694:79;;:::i;:::-;18653:122;18811:6;18798:20;18836:94;18926:3;18918:6;18911:4;18903:6;18899:17;18836:94;:::i;:::-;18827:103;;18643:293;18566:370;;;;:::o;18942:975::-;19053:6;19061;19069;19077;19126:3;19114:9;19105:7;19101:23;19097:33;19094:120;;;19133:79;;:::i;:::-;19094:120;19281:1;19270:9;19266:17;19253:31;19311:18;19303:6;19300:30;19297:117;;;19333:79;;:::i;:::-;19297:117;19438:78;19508:7;19499:6;19488:9;19484:22;19438:78;:::i;:::-;19428:88;;19224:302;19565:2;19591:53;19636:7;19627:6;19616:9;19612:22;19591:53;:::i;:::-;19581:63;;19536:118;19693:2;19719:53;19764:7;19755:6;19744:9;19740:22;19719:53;:::i;:::-;19709:63;;19664:118;19821:2;19847:53;19892:7;19883:6;19872:9;19868:22;19847:53;:::i;:::-;19837:63;;19792:118;18942:975;;;;;;;:::o;19923:114::-;19990:6;20024:5;20018:12;20008:22;;19923:114;;;:::o;20043:184::-;20142:11;20176:6;20171:3;20164:19;20216:4;20211:3;20207:14;20192:29;;20043:184;;;;:::o;20233:132::-;20300:4;20323:3;20315:11;;20353:4;20348:3;20344:14;20336:22;;20233:132;;;:::o;20371:179::-;20440:10;20461:46;20503:3;20495:6;20461:46;:::i;:::-;20539:4;20534:3;20530:14;20516:28;;20371:179;;;;:::o;20556:113::-;20626:4;20658;20653:3;20649:14;20641:22;;20556:113;;;:::o;20705:732::-;20824:3;20853:54;20901:5;20853:54;:::i;:::-;20923:86;21002:6;20997:3;20923:86;:::i;:::-;20916:93;;21033:56;21083:5;21033:56;:::i;:::-;21112:7;21143:1;21128:284;21153:6;21150:1;21147:13;21128:284;;;21229:6;21223:13;21256:63;21315:3;21300:13;21256:63;:::i;:::-;21249:70;;21342:60;21395:6;21342:60;:::i;:::-;21332:70;;21188:224;21175:1;21172;21168:9;21163:14;;21128:284;;;21132:14;21428:3;21421:10;;20829:608;;;20705:732;;;;:::o;21443:373::-;21586:4;21624:2;21613:9;21609:18;21601:26;;21673:9;21667:4;21663:20;21659:1;21648:9;21644:17;21637:47;21701:108;21804:4;21795:6;21701:108;:::i;:::-;21693:116;;21443:373;;;;:::o;21822:329::-;21881:6;21930:2;21918:9;21909:7;21905:23;21901:32;21898:119;;;21936:79;;:::i;:::-;21898:119;22056:1;22081:53;22126:7;22117:6;22106:9;22102:22;22081:53;:::i;:::-;22071:63;;22027:117;21822:329;;;;:::o;22157:973::-;22434:4;22472:3;22461:9;22457:19;22449:27;;22486:71;22554:1;22543:9;22539:17;22530:6;22486:71;:::i;:::-;22567:72;22635:2;22624:9;22620:18;22611:6;22567:72;:::i;:::-;22649;22717:2;22706:9;22702:18;22693:6;22649:72;:::i;:::-;22731;22799:2;22788:9;22784:18;22775:6;22731:72;:::i;:::-;22813:73;22881:3;22870:9;22866:19;22857:6;22813:73;:::i;:::-;22896;22964:3;22953:9;22949:19;22940:6;22896:73;:::i;:::-;22979:67;23041:3;23030:9;23026:19;23017:6;22979:67;:::i;:::-;23056;23118:3;23107:9;23103:19;23094:6;23056:67;:::i;:::-;22157:973;;;;;;;;;;;:::o;23136:144::-;23233:6;23267:5;23261:12;23251:22;;23136:144;;;:::o;23286:214::-;23415:11;23449:6;23444:3;23437:19;23489:4;23484:3;23480:14;23465:29;;23286:214;;;;:::o;23506:162::-;23603:4;23626:3;23618:11;;23656:4;23651:3;23647:14;23639:22;;23506:162;;;:::o;23740:693::-;23887:4;23882:3;23878:14;23981:4;23974:5;23970:16;23964:23;24000:63;24057:4;24052:3;24048:14;24034:12;24000:63;:::i;:::-;23902:171;24157:4;24150:5;24146:16;24140:23;24176:63;24233:4;24228:3;24224:14;24210:12;24176:63;:::i;:::-;24083:166;24334:4;24327:5;24323:16;24317:23;24353:63;24410:4;24405:3;24401:14;24387:12;24353:63;:::i;:::-;24259:167;23856:577;23740:693;;:::o;24439:299::-;24568:10;24589:106;24691:3;24683:6;24589:106;:::i;:::-;24727:4;24722:3;24718:14;24704:28;;24439:299;;;;:::o;24744:143::-;24844:4;24876;24871:3;24867:14;24859:22;;24744:143;;;:::o;24963:972::-;25142:3;25171:84;25249:5;25171:84;:::i;:::-;25271:116;25380:6;25375:3;25271:116;:::i;:::-;25264:123;;25411:86;25491:5;25411:86;:::i;:::-;25520:7;25551:1;25536:374;25561:6;25558:1;25555:13;25536:374;;;25637:6;25631:13;25664:123;25783:3;25768:13;25664:123;:::i;:::-;25657:130;;25810:90;25893:6;25810:90;:::i;:::-;25800:100;;25596:314;25583:1;25580;25576:9;25571:14;;25536:374;;;25540:14;25926:3;25919:10;;25147:788;;;24963:972;;;;:::o;25941:493::-;26144:4;26182:2;26171:9;26167:18;26159:26;;26231:9;26225:4;26221:20;26217:1;26206:9;26202:17;26195:47;26259:168;26422:4;26413:6;26259:168;:::i;:::-;26251:176;;25941:493;;;;:::o;26440:116::-;26510:21;26525:5;26510:21;:::i;:::-;26503:5;26500:32;26490:60;;26546:1;26543;26536:12;26490:60;26440:116;:::o;26562:133::-;26605:5;26643:6;26630:20;26621:29;;26659:30;26683:5;26659:30;:::i;:::-;26562:133;;;;:::o;26701:468::-;26766:6;26774;26823:2;26811:9;26802:7;26798:23;26794:32;26791:119;;;26829:79;;:::i;:::-;26791:119;26949:1;26974:53;27019:7;27010:6;26999:9;26995:22;26974:53;:::i;:::-;26964:63;;26920:117;27076:2;27102:50;27144:7;27135:6;27124:9;27120:22;27102:50;:::i;:::-;27092:60;;27047:115;26701:468;;;;;:::o;27175:442::-;27324:4;27362:2;27351:9;27347:18;27339:26;;27375:71;27443:1;27432:9;27428:17;27419:6;27375:71;:::i;:::-;27456:72;27524:2;27513:9;27509:18;27500:6;27456:72;:::i;:::-;27538;27606:2;27595:9;27591:18;27582:6;27538:72;:::i;:::-;27175:442;;;;;;:::o;27623:169::-;27707:11;27741:6;27736:3;27729:19;27781:4;27776:3;27772:14;27757:29;;27623:169;;;;:::o;27798:162::-;27938:14;27934:1;27926:6;27922:14;27915:38;27798:162;:::o;27966:366::-;28108:3;28129:67;28193:2;28188:3;28129:67;:::i;:::-;28122:74;;28205:93;28294:3;28205:93;:::i;:::-;28323:2;28318:3;28314:12;28307:19;;27966:366;;;:::o;28338:419::-;28504:4;28542:2;28531:9;28527:18;28519:26;;28591:9;28585:4;28581:20;28577:1;28566:9;28562:17;28555:47;28619:131;28745:4;28619:131;:::i;:::-;28611:139;;28338:419;;;:::o;28763:169::-;28903:21;28899:1;28891:6;28887:14;28880:45;28763:169;:::o;28938:366::-;29080:3;29101:67;29165:2;29160:3;29101:67;:::i;:::-;29094:74;;29177:93;29266:3;29177:93;:::i;:::-;29295:2;29290:3;29286:12;29279:19;;28938:366;;;:::o;29310:419::-;29476:4;29514:2;29503:9;29499:18;29491:26;;29563:9;29557:4;29553:20;29549:1;29538:9;29534:17;29527:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29310:419;;;:::o;29735:79::-;29774:7;29803:5;29792:16;;29735:79;;;:::o;29820:157::-;29925:45;29945:24;29963:5;29945:24;:::i;:::-;29925:45;:::i;:::-;29920:3;29913:58;29820:157;;:::o;29983:397::-;30123:3;30138:75;30209:3;30200:6;30138:75;:::i;:::-;30238:2;30233:3;30229:12;30222:19;;30251:75;30322:3;30313:6;30251:75;:::i;:::-;30351:2;30346:3;30342:12;30335:19;;30371:3;30364:10;;29983:397;;;;;:::o;30386:180::-;30434:77;30431:1;30424:88;30531:4;30528:1;30521:15;30555:4;30552:1;30545:15;30572:176;30604:1;30621:20;30639:1;30621:20;:::i;:::-;30616:25;;30655:20;30673:1;30655:20;:::i;:::-;30650:25;;30694:1;30684:35;;30699:18;;:::i;:::-;30684:35;30740:1;30737;30733:9;30728:14;;30572:176;;;;:::o;30754:180::-;30802:77;30799:1;30792:88;30899:4;30896:1;30889:15;30923:4;30920:1;30913:15;30940:180;30988:77;30985:1;30978:88;31085:4;31082:1;31075:15;31109:4;31106:1;31099:15;31126:191;31166:3;31185:20;31203:1;31185:20;:::i;:::-;31180:25;;31219:20;31237:1;31219:20;:::i;:::-;31214:25;;31262:1;31259;31255:9;31248:16;;31283:3;31280:1;31277:10;31274:36;;;31290:18;;:::i;:::-;31274:36;31126:191;;;;:::o;31323:143::-;31380:5;31411:6;31405:13;31396:22;;31427:33;31454:5;31427:33;:::i;:::-;31323:143;;;;:::o;31472:351::-;31542:6;31591:2;31579:9;31570:7;31566:23;31562:32;31559:119;;;31597:79;;:::i;:::-;31559:119;31717:1;31742:64;31798:7;31789:6;31778:9;31774:22;31742:64;:::i;:::-;31732:74;;31688:128;31472:351;;;;:::o;31829:175::-;31969:27;31965:1;31957:6;31953:14;31946:51;31829:175;:::o;32010:366::-;32152:3;32173:67;32237:2;32232:3;32173:67;:::i;:::-;32166:74;;32249:93;32338:3;32249:93;:::i;:::-;32367:2;32362:3;32358:12;32351:19;;32010:366;;;:::o;32382:419::-;32548:4;32586:2;32575:9;32571:18;32563:26;;32635:9;32629:4;32625:20;32621:1;32610:9;32606:17;32599:47;32663:131;32789:4;32663:131;:::i;:::-;32655:139;;32382:419;;;:::o;32807:442::-;32956:4;32994:2;32983:9;32979:18;32971:26;;33007:71;33075:1;33064:9;33060:17;33051:6;33007:71;:::i;:::-;33088:72;33156:2;33145:9;33141:18;33132:6;33088:72;:::i;:::-;33170;33238:2;33227:9;33223:18;33214:6;33170:72;:::i;:::-;32807:442;;;;;;:::o;33255:553::-;33432:4;33470:3;33459:9;33455:19;33447:27;;33484:71;33552:1;33541:9;33537:17;33528:6;33484:71;:::i;:::-;33565:72;33633:2;33622:9;33618:18;33609:6;33565:72;:::i;:::-;33647;33715:2;33704:9;33700:18;33691:6;33647:72;:::i;:::-;33729;33797:2;33786:9;33782:18;33773:6;33729:72;:::i;:::-;33255:553;;;;;;;:::o;33814:332::-;33935:4;33973:2;33962:9;33958:18;33950:26;;33986:71;34054:1;34043:9;34039:17;34030:6;33986:71;:::i;:::-;34067:72;34135:2;34124:9;34120:18;34111:6;34067:72;:::i;:::-;33814:332;;;;;:::o;34152:442::-;34301:4;34339:2;34328:9;34324:18;34316:26;;34352:71;34420:1;34409:9;34405:17;34396:6;34352:71;:::i;:::-;34433:72;34501:2;34490:9;34486:18;34477:6;34433:72;:::i;:::-;34515;34583:2;34572:9;34568:18;34559:6;34515:72;:::i;:::-;34152:442;;;;;;:::o;34600:233::-;34639:3;34662:24;34680:5;34662:24;:::i;:::-;34653:33;;34708:66;34701:5;34698:77;34695:103;;34778:18;;:::i;:::-;34695:103;34825:1;34818:5;34814:13;34807:20;;34600:233;;;:::o;34839:194::-;34879:4;34899:20;34917:1;34899:20;:::i;:::-;34894:25;;34933:20;34951:1;34933:20;:::i;:::-;34928:25;;34977:1;34974;34970:9;34962:17;;35001:1;34995:4;34992:11;34989:37;;;35006:18;;:::i;:::-;34989:37;34839:194;;;;:::o;35039:166::-;35179:18;35175:1;35167:6;35163:14;35156:42;35039:166;:::o;35211:366::-;35353:3;35374:67;35438:2;35433:3;35374:67;:::i;:::-;35367:74;;35450:93;35539:3;35450:93;:::i;:::-;35568:2;35563:3;35559:12;35552:19;;35211:366;;;:::o;35583:419::-;35749:4;35787:2;35776:9;35772:18;35764:26;;35836:9;35830:4;35826:20;35822:1;35811:9;35807:17;35800:47;35864:131;35990:4;35864:131;:::i;:::-;35856:139;;35583:419;;;:::o;36008:163::-;36148:15;36144:1;36136:6;36132:14;36125:39;36008:163;:::o;36177:366::-;36319:3;36340:67;36404:2;36399:3;36340:67;:::i;:::-;36333:74;;36416:93;36505:3;36416:93;:::i;:::-;36534:2;36529:3;36525:12;36518:19;;36177:366;;;:::o;36549:419::-;36715:4;36753:2;36742:9;36738:18;36730:26;;36802:9;36796:4;36792:20;36788:1;36777:9;36773:17;36766:47;36830:131;36956:4;36830:131;:::i;:::-;36822:139;;36549:419;;;:::o;36974:94::-;37007:8;37055:5;37051:2;37047:14;37026:35;;36974:94;;;:::o;37074:::-;37113:7;37142:20;37156:5;37142:20;:::i;:::-;37131:31;;37074:94;;;:::o;37174:100::-;37213:7;37242:26;37262:5;37242:26;:::i;:::-;37231:37;;37174:100;;;:::o;37280:157::-;37385:45;37405:24;37423:5;37405:24;:::i;:::-;37385:45;:::i;:::-;37380:3;37373:58;37280:157;;:::o;37443:679::-;37639:3;37654:75;37725:3;37716:6;37654:75;:::i;:::-;37754:2;37749:3;37745:12;37738:19;;37767:75;37838:3;37829:6;37767:75;:::i;:::-;37867:2;37862:3;37858:12;37851:19;;37880:75;37951:3;37942:6;37880:75;:::i;:::-;37980:2;37975:3;37971:12;37964:19;;37993:75;38064:3;38055:6;37993:75;:::i;:::-;38093:2;38088:3;38084:12;38077:19;;38113:3;38106:10;;37443:679;;;;;;;:::o;38128:169::-;38268:21;38264:1;38256:6;38252:14;38245:45;38128:169;:::o;38303:366::-;38445:3;38466:67;38530:2;38525:3;38466:67;:::i;:::-;38459:74;;38542:93;38631:3;38542:93;:::i;:::-;38660:2;38655:3;38651:12;38644:19;;38303:366;;;:::o;38675:419::-;38841:4;38879:2;38868:9;38864:18;38856:26;;38928:9;38922:4;38918:20;38914:1;38903:9;38899:17;38892:47;38956:131;39082:4;38956:131;:::i;:::-;38948:139;;38675:419;;;:::o;39100:180::-;39148:77;39145:1;39138:88;39245:4;39242:1;39235:15;39269:4;39266:1;39259:15;39286:163;39426:15;39422:1;39414:6;39410:14;39403:39;39286:163;:::o;39455:366::-;39597:3;39618:67;39682:2;39677:3;39618:67;:::i;:::-;39611:74;;39694:93;39783:3;39694:93;:::i;:::-;39812:2;39807:3;39803:12;39796:19;;39455:366;;;:::o;39827:419::-;39993:4;40031:2;40020:9;40016:18;40008:26;;40080:9;40074:4;40070:20;40066:1;40055:9;40051:17;40044:47;40108:131;40234:4;40108:131;:::i;:::-;40100:139;;39827:419;;;:::o;40252:161::-;40392:13;40388:1;40380:6;40376:14;40369:37;40252:161;:::o;40419:366::-;40561:3;40582:67;40646:2;40641:3;40582:67;:::i;:::-;40575:74;;40658:93;40747:3;40658:93;:::i;:::-;40776:2;40771:3;40767:12;40760:19;;40419:366;;;:::o;40791:419::-;40957:4;40995:2;40984:9;40980:18;40972:26;;41044:9;41038:4;41034:20;41030:1;41019:9;41015:17;41008:47;41072:131;41198:4;41072:131;:::i;:::-;41064:139;;40791:419;;;:::o;41216:167::-;41356:19;41352:1;41344:6;41340:14;41333:43;41216:167;:::o;41389:366::-;41531:3;41552:67;41616:2;41611:3;41552:67;:::i;:::-;41545:74;;41628:93;41717:3;41628:93;:::i;:::-;41746:2;41741:3;41737:12;41730:19;;41389:366;;;:::o;41761:419::-;41927:4;41965:2;41954:9;41950:18;41942:26;;42014:9;42008:4;42004:20;42000:1;41989:9;41985:17;41978:47;42042:131;42168:4;42042:131;:::i;:::-;42034:139;;41761:419;;;:::o;42186:162::-;42326:14;42322:1;42314:6;42310:14;42303:38;42186:162;:::o;42354:366::-;42496:3;42517:67;42581:2;42576:3;42517:67;:::i;:::-;42510:74;;42593:93;42682:3;42593:93;:::i;:::-;42711:2;42706:3;42702:12;42695:19;;42354:366;;;:::o;42726:419::-;42892:4;42930:2;42919:9;42915:18;42907:26;;42979:9;42973:4;42969:20;42965:1;42954:9;42950:17;42943:47;43007:131;43133:4;43007:131;:::i;:::-;42999:139;;42726:419;;;:::o;43151:166::-;43291:18;43287:1;43279:6;43275:14;43268:42;43151:166;:::o;43323:366::-;43465:3;43486:67;43550:2;43545:3;43486:67;:::i;:::-;43479:74;;43562:93;43651:3;43562:93;:::i;:::-;43680:2;43675:3;43671:12;43664:19;;43323:366;;;:::o;43695:419::-;43861:4;43899:2;43888:9;43884:18;43876:26;;43948:9;43942:4;43938:20;43934:1;43923:9;43919:17;43912:47;43976:131;44102:4;43976:131;:::i;:::-;43968:139;;43695:419;;;:::o;44120:170::-;44260:22;44256:1;44248:6;44244:14;44237:46;44120:170;:::o;44296:366::-;44438:3;44459:67;44523:2;44518:3;44459:67;:::i;:::-;44452:74;;44535:93;44624:3;44535:93;:::i;:::-;44653:2;44648:3;44644:12;44637:19;;44296:366;;;:::o;44668:419::-;44834:4;44872:2;44861:9;44857:18;44849:26;;44921:9;44915:4;44911:20;44907:1;44896:9;44892:17;44885:47;44949:131;45075:4;44949:131;:::i;:::-;44941:139;;44668:419;;;:::o;45093:173::-;45233:25;45229:1;45221:6;45217:14;45210:49;45093:173;:::o;45272:366::-;45414:3;45435:67;45499:2;45494:3;45435:67;:::i;:::-;45428:74;;45511:93;45600:3;45511:93;:::i;:::-;45629:2;45624:3;45620:12;45613:19;;45272:366;;;:::o;45644:419::-;45810:4;45848:2;45837:9;45833:18;45825:26;;45897:9;45891:4;45887:20;45883:1;45872:9;45868:17;45861:47;45925:131;46051:4;45925:131;:::i;:::-;45917:139;;45644:419;;;:::o;46069:143::-;46126:5;46157:6;46151:13;46142:22;;46173:33;46200:5;46173:33;:::i;:::-;46069:143;;;;:::o;46218:351::-;46288:6;46337:2;46325:9;46316:7;46312:23;46308:32;46305:119;;;46343:79;;:::i;:::-;46305:119;46463:1;46488:64;46544:7;46535:6;46524:9;46520:22;46488:64;:::i;:::-;46478:74;;46434:128;46218:351;;;;:::o;46575:173::-;46715:25;46711:1;46703:6;46699:14;46692:49;46575:173;:::o;46754:366::-;46896:3;46917:67;46981:2;46976:3;46917:67;:::i;:::-;46910:74;;46993:93;47082:3;46993:93;:::i;:::-;47111:2;47106:3;47102:12;47095:19;;46754:366;;;:::o;47126:419::-;47292:4;47330:2;47319:9;47315:18;47307:26;;47379:9;47373:4;47369:20;47365:1;47354:9;47350:17;47343:47;47407:131;47533:4;47407:131;:::i;:::-;47399:139;;47126:419;;;:::o;47551:410::-;47591:7;47614:20;47632:1;47614:20;:::i;:::-;47609:25;;47648:20;47666:1;47648:20;:::i;:::-;47643:25;;47703:1;47700;47696:9;47725:30;47743:11;47725:30;:::i;:::-;47714:41;;47904:1;47895:7;47891:15;47888:1;47885:22;47865:1;47858:9;47838:83;47815:139;;47934:18;;:::i;:::-;47815:139;47599:362;47551:410;;;;:::o;47967:185::-;48007:1;48024:20;48042:1;48024:20;:::i;:::-;48019:25;;48058:20;48076:1;48058:20;:::i;:::-;48053:25;;48097:1;48087:35;;48102:18;;:::i;:::-;48087:35;48144:1;48141;48137:9;48132:14;;47967:185;;;;:::o

Swarm Source

ipfs://2c57d26cb825022efccec10919830ff5c84ca24ecfa957aa7c8e0d79c740d204

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.