ETH Price: $2,111.47 (-10.31%)

Token

veArc (veArc)

Overview

Max Total Supply

0 veArc

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
veArc

Compiler Version
v0.8.22+commit.4fc1097e

ZkSolc Version
v1.5.7

Optimization Enabled:
Yes with Mode 3

Other Settings:
paris EvmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at abscan.org on 2025-02-01
*/

// Sources flattened with hardhat v2.19.5 https://hardhat.org

// SPDX-License-Identifier: MIT

// File contracts/interfaces/IERC165.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity 0.8.22;


/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File contracts/interfaces/IERC721.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity 0.8.22;

/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
    /**
    * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
    */
    event Transfer(address indexed from, address indexed to, uint indexed tokenId);

    /**
    * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    */
    event Approval(address indexed owner, address indexed approved, uint indexed tokenId);

    /**
    * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
    * @dev Returns the number of tokens in ``owner``'s account.
    */
    function balanceOf(address owner) external view returns (uint balance);

    /**
    * @dev Returns the owner of the `tokenId` token.
    *
    * Requirements:
    *
    * - `tokenId` must exist.
    */
    function ownerOf(uint tokenId) external view returns (address owner);

    /**
    * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
    * are aware of the ERC721 protocol to prevent tokens from being forever locked.
    *
    * Requirements:
    *
    * - `from` cannot be the zero address.
    * - `to` cannot be the zero address.
    * - `tokenId` token must exist and be owned by `from`.
    * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
    * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
    *
    * Emits a {Transfer} event.
    */
    function safeTransferFrom(
        address from,
        address to,
        uint tokenId
    ) external;

    /**
    * @dev Transfers `tokenId` token from `from` to `to`.
    *
    * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
    *
    * Requirements:
    *
    * - `from` cannot be the zero address.
    * - `to` cannot be the zero address.
    * - `tokenId` token must be owned by `from`.
    * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(
        address from,
        address to,
        uint tokenId
    ) external;

    /**
    * @dev Gives permission to `to` to transfer `tokenId` token to another account.
    * The approval is cleared when the token is transferred.
    *
    * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
    *
    * Requirements:
    *
    * - The caller must own the token or be an approved operator.
    * - `tokenId` must exist.
    *
    * Emits an {Approval} event.
    */
    function approve(address to, uint tokenId) external;

    /**
    * @dev Returns the account approved for `tokenId` token.
    *
    * Requirements:
    *
    * - `tokenId` must exist.
    */
    function getApproved(uint tokenId) external view returns (address operator);

    /**
    * @dev Approve or remove `operator` as an operator for the caller.
    * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
    *
    * Requirements:
    *
    * - The `operator` cannot be the caller.
    *
    * Emits an {ApprovalForAll} event.
    */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
    * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
    *
    * See {setApprovalForAll}
    */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
    * @dev Safely transfers `tokenId` token from `from` to `to`.
    *
    * Requirements:
    *
    * - `from` cannot be the zero address.
    * - `to` cannot be the zero address.
    * - `tokenId` token must exist and be owned by `from`.
    * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
    * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
    *
    * Emits a {Transfer} event.
    */
    function safeTransferFrom(
        address from,
        address to,
        uint tokenId,
        bytes calldata data
    ) external;
}


// File contracts/interfaces/IERC721Metadata.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity 0.8.22;

/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
    /**
    * @dev Returns the token collection name.
    */
    function name() external view returns (string memory);

    /**
    * @dev Returns the token collection symbol.
    */
    function symbol() external view returns (string memory);

    /**
    * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    */
    function tokenURI(uint tokenId) external view returns (string memory);
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}


// File contracts/interfaces/IERC721Receiver.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity 0.8.22;

/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
    /**
    * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
    * by `operator` from `from`, this function is called.
    *
    * It must return its Solidity selector to confirm the token transfer.
    * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
    *
    * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
    */
    function onERC721Received(
        address operator,
        address from,
        uint tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


// File contracts/interfaces/IVeArtProxy.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity 0.8.22;

interface IVeArtProxy {
    function _tokenURI(uint _tokenId, uint _balanceOf, uint _locked_end, uint _value) external pure returns (string memory output);
}


// File contracts/veArc.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity 0.8.22;





/**
@title Voting Escrow
@author Curve Finance
@license MIT
@notice Votes have a weight depending on time, so that users are
committed to the future of (whatever they are voting for)
@dev Vote weight decays linearly over time. Lock time cannot be
more than `MAXTIME` (4 years).

# Voting escrow to have time-weighted votes
# Votes have a weight depending on time, so that users are committed
# to the future of (whatever they are voting for).
# The weight in this implementation is linear, and lock cannot be more than maxtime:
# w ^
# 1 +        /
#   |      /
#   |    /
#   |  /
#   |/
# 0 +--------+------> time
#       maxtime (4 years?)
*/

struct Point {
    int128 bias;
    int128 slope; // # -dweight / dt
    uint ts;
    uint blk; // block
}
/* We cannot really do block numbers per se b/c slope is per time, not per block
* and per block could be fairly bad b/c Ethereum changes blocktimes.
* What we can do is to extrapolate ***At functions */

struct LockedBalance {
    int128 amount;
    uint end;
}

contract veArc is IERC721, IERC721Metadata {
    enum DepositType {
        DEPOSIT_FOR_TYPE,
        CREATE_LOCK_TYPE,
        INCREASE_LOCK_AMOUNT,
        INCREASE_UNLOCK_TIME,
        MERGE_TYPE
    }

    event Deposit(
        address indexed provider,
        uint tokenId,
        uint value,
        uint indexed locktime,
        DepositType deposit_type,
        uint ts
    );
    event Withdraw(address indexed provider, uint tokenId, uint value, uint ts);
    event Supply(uint prevSupply, uint supply);
    event Burn(address indexed provider, uint tokenId, uint value, uint ts);

    uint internal constant WEEK = 1 weeks;
    uint internal constant MAXTIME = 4 * 365 * 86400;
    int128 internal constant iMAXTIME = 4 * 365 * 86400;
    uint internal constant MULTIPLIER = 1 ether;

    address immutable public token;
    uint public supply;
    mapping(uint => LockedBalance) public locked;
    
    address public admin;
    address public pendingAdmin;
    address public artProxy;

    mapping(uint => uint) public ownership_change;

    uint public epoch;
    mapping(uint => Point) public point_history; // epoch -> unsigned point
    mapping(uint => Point[1000000000]) public user_point_history; // user -> Point[user_epoch]

    mapping(uint => uint) public user_point_epoch;
    mapping(uint => int128) public slope_changes; // time -> signed slope change

    mapping(uint => uint) public attachments;
    mapping(uint => bool) public voted;
    address public voter;

    string constant public name = "veArc";
    string constant public symbol = "veArc";
    string constant public version = "2.0.0";
    uint8 constant public decimals = 18;

    /// @dev Current count of token
    uint internal tokenId;

    /// @dev Mapping from NFT ID to the address that owns it.
    mapping(uint => address) internal idToOwner;

    /// @dev Mapping from NFT ID to approved address.
    mapping(uint => address) internal idToApprovals;

    /// @dev Mapping from owner address to count of his tokens.
    mapping(address => uint) internal ownerToNFTokenCount;

    /// @dev Mapping from owner address to mapping of index to tokenIds
    mapping(address => mapping(uint => uint)) internal ownerToNFTokenIdList;

    /// @dev Mapping from NFT ID to index of owner
    mapping(uint => uint) internal tokenToOwnerIndex;

    /// @dev Mapping of vote expiry date per NFT ID
    mapping(uint => uint) internal idToVoteExpiry;

    /// @dev Mapping from owner address to mapping of operator addresses.
    mapping(address => mapping(address => bool)) internal ownerToOperators;

    /// @dev Mapping of interface id to bool about whether or not it's supported
    mapping(bytes4 => bool) internal supportedInterfaces;

    /// @dev ERC165 interface ID of ERC165
    bytes4 internal constant ERC165_INTERFACE_ID = 0x01ffc9a7;

    /// @dev ERC165 interface ID of ERC721
    bytes4 internal constant ERC721_INTERFACE_ID = 0x80ac58cd;

    /// @dev ERC165 interface ID of ERC721Metadata
    bytes4 internal constant ERC721_METADATA_INTERFACE_ID = 0x5b5e139f;

    /// @dev reentrancy guard
    uint8 internal constant _not_entered = 1;
    uint8 internal constant _entered = 2;
    uint8 internal _entered_state = 1;
    modifier nonreentrant() {
        require(_entered_state == _not_entered);
        _entered_state = _entered;
        _;
        _entered_state = _not_entered;
    }

    /// @notice Contract constructor
    /// @param token_addr `ERC20CRV` token address
    constructor(
        address token_addr,
        address art_proxy
    ) {
        require(
            token_addr != address(0),
            "VotingEscrow: zero address provided in constructor"
        );
        token = token_addr;
        voter = msg.sender;
        point_history[0].blk = block.number;
        point_history[0].ts = block.timestamp;
        
        admin = msg.sender;
        artProxy = art_proxy;

        supportedInterfaces[ERC165_INTERFACE_ID] = true;
        supportedInterfaces[ERC721_INTERFACE_ID] = true;
        supportedInterfaces[ERC721_METADATA_INTERFACE_ID] = true;

        // mint-ish
        emit Transfer(address(0), address(this), tokenId);
        // burn-ish
        emit Transfer(address(this), address(0), tokenId);
    }

    /// @dev Interface identification is specified in ERC-165.
    /// @param _interfaceID Id of the interface
    function supportsInterface(bytes4 _interfaceID) external view returns (bool) {
        return supportedInterfaces[_interfaceID];
    }

    /// @notice Get the most recently recorded rate of voting power decrease for `_tokenId`
    /// @param _tokenId token of the NFT
    /// @return Value of the slope
    function get_last_user_slope(uint _tokenId) external view returns (int128) {
        uint uepoch = user_point_epoch[_tokenId];
        return user_point_history[_tokenId][uepoch].slope;
    }

    /// @notice Get the timestamp for checkpoint `_idx` for `_tokenId`
    /// @param _tokenId token of the NFT
    /// @param _idx User epoch number
    /// @return Epoch time of the checkpoint
    function user_point_history__ts(uint _tokenId, uint _idx) external view returns (uint) {
        return user_point_history[_tokenId][_idx].ts;
    }

    /// @notice Get timestamp when `_tokenId`'s lock finishes
    /// @param _tokenId User NFT
    /// @return Epoch time of the lock end
    function locked__end(uint _tokenId) external view returns (uint) {
        return locked[_tokenId].end;
    }
    
    /// @notice Get `_tokenId`'s locked amount
    /// @param _tokenId User NFT
    function locked__amount(uint _tokenId) external view returns (uint) {
        return uint(int256(locked[_tokenId].amount));
    }

    /// @dev Returns the number of NFTs owned by `_owner`.
    ///      Throws if `_owner` is the zero address. NFTs assigned to the zero address are considered invalid.
    /// @param _owner Address for whom to query the balance.
    function _balance(address _owner) internal view returns (uint) {
        return ownerToNFTokenCount[_owner];
    }

    /// @dev Returns the number of NFTs owned by `_owner`.
    ///      Throws if `_owner` is the zero address. NFTs assigned to the zero address are considered invalid.
    /// @param _owner Address for whom to query the balance.
    function balanceOf(address _owner) external view returns (uint) {
        return _balance(_owner);
    }

    /// @dev Returns the address of the owner of the NFT.
    /// @param _tokenId The identifier for an NFT.
    function ownerOf(uint _tokenId) public view returns (address) {
        return idToOwner[_tokenId];
    }

    /// @dev Get the approved address for a single NFT.
    /// @param _tokenId ID of the NFT to query the approval of.
    function getApproved(uint _tokenId) external view returns (address) {
        return idToApprovals[_tokenId];
    }

    /// @dev Checks if `_operator` is an approved operator for `_owner`.
    /// @param _owner The address that owns the NFTs.
    /// @param _operator The address that acts on behalf of the owner.
    function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
        return (ownerToOperators[_owner])[_operator];
    }

    /// @dev  Get token by index
    function tokenOfOwnerByIndex(address _owner, uint _tokenIndex) external view returns (uint) {
        return ownerToNFTokenIdList[_owner][_tokenIndex];
    }

    /// @dev Returns whether the given spender can transfer a given token ID
    /// @param _spender address of the spender to query
    /// @param _tokenId uint ID of the token to be transferred
    /// @return bool whether the msg.sender is approved for the given token ID, is an operator of the owner, or is the owner of the token
    function _isApprovedOrOwner(address _spender, uint _tokenId) internal view returns (bool) {
        address owner = idToOwner[_tokenId];
        bool spenderIsOwner = owner == _spender;
        bool spenderIsApproved = _spender == idToApprovals[_tokenId];
        bool spenderIsApprovedForAll = (ownerToOperators[owner])[_spender];
        return spenderIsOwner || spenderIsApproved || spenderIsApprovedForAll;
    }

    function isApprovedOrOwner(address _spender, uint _tokenId) external view returns (bool) {
        return _isApprovedOrOwner(_spender, _tokenId);
    }

    /// @dev Returns true if NFT is unlocked, false if locked in vote.
    /// @param _tokenId The identifier for an NFT.
    function isVoteExpired(uint _tokenId) external view returns (bool) {
        return _isVoteExpired(_tokenId);
    }
    
    /// @dev Returns true if NFT is unlocked, false if locked in vote.
    /// @param _tokenId The identifier for an NFT.
    function _isVoteExpired(uint _tokenId) internal view returns (bool) {
        return idToVoteExpiry[_tokenId] < block.timestamp;
    }

    /// @dev Returns remaining vote lock for an NFT.
    /// @param _tokenId The identifier for an NFT.
    function voteExpiry(uint _tokenId) external view returns (uint) {
        return idToVoteExpiry[_tokenId];
    }

    /// @dev Add a NFT to an index mapping to a given address
    /// @param _to address of the receiver
    /// @param _tokenId uint ID Of the token to be added
    function _addTokenToOwnerList(address _to, uint _tokenId) internal {
        uint current_count = _balance(_to);

        ownerToNFTokenIdList[_to][current_count] = _tokenId;
        tokenToOwnerIndex[_tokenId] = current_count;
    }

    /// @dev Remove a NFT from an index mapping to a given address
    /// @param _from address of the sender
    /// @param _tokenId uint ID Of the token to be removed
    function _removeTokenFromOwnerList(address _from, uint _tokenId) internal {
        // Delete
        uint current_count = _balance(_from)-1;
        uint current_index = tokenToOwnerIndex[_tokenId];

        if (current_count == current_index) {
            // update ownerToNFTokenIdList
            ownerToNFTokenIdList[_from][current_count] = 0;
            // update tokenToOwnerIndex
            tokenToOwnerIndex[_tokenId] = 0;
        } else {
            uint lastTokenId = ownerToNFTokenIdList[_from][current_count];

            // Add
            // update ownerToNFTokenIdList
            ownerToNFTokenIdList[_from][current_index] = lastTokenId;
            // update tokenToOwnerIndex
            tokenToOwnerIndex[lastTokenId] = current_index;

            // Delete
            // update ownerToNFTokenIdList
            ownerToNFTokenIdList[_from][current_count] = 0;
            // update tokenToOwnerIndex
            tokenToOwnerIndex[_tokenId] = 0;
        }
    }

    /// @dev Add a NFT to a given address
    ///      Throws if `_tokenId` is owned by someone.
    function _addTokenTo(address _to, uint _tokenId) internal {
        // Throws if `_tokenId` is owned by someone
        assert(idToOwner[_tokenId] == address(0));
        // Change the owner
        idToOwner[_tokenId] = _to;
        // Update owner token index tracking
        _addTokenToOwnerList(_to, _tokenId);
        // Change count tracking
        ownerToNFTokenCount[_to] += 1;
    }

    /// @dev Remove a NFT from a given address
    ///      Throws if `_from` is not the current owner.
    function _removeTokenFrom(address _from, uint _tokenId) internal {
        // Throws if `_from` is not the current owner
        assert(idToOwner[_tokenId] == _from);
        // Change the owner
        idToOwner[_tokenId] = address(0);
        // Update owner token index tracking
        _removeTokenFromOwnerList(_from, _tokenId);
        // Change count tracking
        ownerToNFTokenCount[_from] -= 1;
    }

    /// @dev Clear an approval of a given address
    ///      Throws if `_owner` is not the current owner.
    function _clearApproval(address _owner, uint _tokenId) internal {
        // Throws if `_owner` is not the current owner
        assert(idToOwner[_tokenId] == _owner);
        if (idToApprovals[_tokenId] != address(0)) {
            // Reset approvals
            idToApprovals[_tokenId] = address(0);
        }
    }

    /// @dev Exeute transfer of a NFT.
    ///      Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
    ///      address for this NFT. (NOTE: `msg.sender` not allowed in internal function so pass `_sender`.)
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_tokenId` is not a valid NFT.
    function _transferFrom(
        address _from,
        address _to,
        uint _tokenId,
        address _sender
    ) internal {
        require(attachments[_tokenId] == 0 && !voted[_tokenId], "attached");
        // Check requirements
        require(_isApprovedOrOwner(_sender, _tokenId));
        // Clear approval. Throws if `_from` is not the current owner
        _clearApproval(_from, _tokenId);
        // Remove NFT. Throws if `_tokenId` is not a valid NFT
        _removeTokenFrom(_from, _tokenId);
        // Add NFT
        _addTokenTo(_to, _tokenId);
        // Set the block of ownership transfer (for Flash NFT protection)
        ownership_change[_tokenId] = block.number;
        // Log the transfer
        emit Transfer(_from, _to, _tokenId);
    }

    /* TRANSFER FUNCTIONS */
    /// @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved address for this NFT.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_tokenId` is not a valid NFT.
    /// @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
    ///        they maybe be permanently lost.
    /// @param _from The current owner of the NFT.
    /// @param _to The new owner.
    /// @param _tokenId The NFT to transfer.
    function transferFrom(
        address _from,
        address _to,
        uint _tokenId
    ) external {
        _transferFrom(_from, _to, _tokenId, msg.sender);
    }

    function _isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
        uint size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /// @dev Transfers the ownership of an NFT from one address to another address.
    ///      Throws unless `msg.sender` is the current owner, an authorized operator, or the
    ///      approved address for this NFT.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_tokenId` is not a valid NFT.
    ///      If `_to` is a smart contract, it calls `onERC721Received` on `_to` and throws if
    ///      the return value is not `bytes4(keccak256("onERC721Received(address,address,uint,bytes)"))`.
    /// @param _from The current owner of the NFT.
    /// @param _to The new owner.
    /// @param _tokenId The NFT to transfer.
    /// @param _data Additional data with no specified format, sent in call to `_to`.
    function safeTransferFrom(
        address _from,
        address _to,
        uint _tokenId,
        bytes memory _data
    ) public {
        _transferFrom(_from, _to, _tokenId, msg.sender);

        // Check if recipient is contract
        if (_isContract(_to)) {
            bytes4 retval = IERC721Receiver(_to).onERC721Received(
                msg.sender,
                _from,
                _tokenId,
                _data
            );
            require(retval == IERC721Receiver.onERC721Received.selector, "ERC721: transfer rejected");
        }
    }

    /// @dev Transfers the ownership of an NFT from one address to another address.
    ///      Throws unless `msg.sender` is the current owner, an authorized operator, or the
    ///      approved address for this NFT.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_tokenId` is not a valid NFT.
    ///      If `_to` is a smart contract, it calls `onERC721Received` on `_to` and throws if
    ///      the return value is not `bytes4(keccak256("onERC721Received(address,address,uint,bytes)"))`.
    /// @param _from The current owner of the NFT.
    /// @param _to The new owner.
    /// @param _tokenId The NFT to transfer.
    function safeTransferFrom(
        address _from,
        address _to,
        uint _tokenId
    ) external {
        safeTransferFrom(_from, _to, _tokenId, '');
    }

    /// @dev Set or reaffirm the approved address for an NFT. The zero address indicates there is no approved address.
    ///      Throws unless `msg.sender` is the current NFT owner, or an authorized operator of the current owner.
    ///      Throws if `_tokenId` is not a valid NFT. (NOTE: This is not written the EIP)
    ///      Throws if `_approved` is the current owner. (NOTE: This is not written the EIP)
    /// @param _approved Address to be approved for the given NFT ID.
    /// @param _tokenId ID of the token to be approved.
    function approve(address _approved, uint _tokenId) public {
        address owner = idToOwner[_tokenId];
        // Throws if `_tokenId` is not a valid NFT
        require(owner != address(0));
        // Throws if `_approved` is the current owner
        require(_approved != owner);
        // Check requirements
        bool senderIsOwner = (idToOwner[_tokenId] == msg.sender);
        bool senderIsApprovedForAll = (ownerToOperators[owner])[msg.sender];
        require(senderIsOwner || senderIsApprovedForAll);
        // Set the approval
        idToApprovals[_tokenId] = _approved;
        emit Approval(owner, _approved, _tokenId);
    }

    /// @dev Enables or disables approval for a third party ("operator") to manage all of
    ///      `msg.sender`'s assets. It also emits the ApprovalForAll event.
    ///      Throws if `_operator` is the `msg.sender`. (NOTE: This is not written the EIP)
    /// @notice This works even if sender doesn't own any tokens at the time.
    /// @param _operator Address to add to the set of authorized operators.
    /// @param _approved True if the operators is approved, false to revoke approval.
    function setApprovalForAll(address _operator, bool _approved) external {
        // Throws if `_operator` is the `msg.sender`
        assert(_operator != msg.sender);
        ownerToOperators[msg.sender][_operator] = _approved;
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    /// @dev Function to mint tokens
    ///      Throws if `_to` is zero address.
    ///      Throws if `_tokenId` is owned by someone.
    /// @param _to The address that will receive the minted tokens.
    /// @param _tokenId The token id to mint.
    /// @return A boolean that indicates if the operation was successful.
    function _mint(address _to, uint _tokenId) internal returns (bool) {
        // Throws if `_to` is zero address
        assert(_to != address(0));
        // Add NFT. Throws if `_tokenId` is owned by someone
        _addTokenTo(_to, _tokenId);
        if (_isContract(_to)) {
            bytes4 retval = IERC721Receiver(_to).onERC721Received(
                msg.sender,
                address(0),
                _tokenId,
                ''
            );
            require(retval == IERC721Receiver.onERC721Received.selector);
        }

        emit Transfer(address(0), _to, _tokenId);
        return true;
    }

    /// @notice Record global and per-user data to checkpoint
    /// @param _tokenId NFT token ID. No user checkpoint if 0
    /// @param old_locked Pevious locked amount / end lock time for the user
    /// @param new_locked New locked amount / end lock time for the user
    function _checkpoint(
        uint _tokenId,
        LockedBalance memory old_locked,
        LockedBalance memory new_locked
    ) internal {
        Point memory u_old;
        Point memory u_new;
        int128 old_dslope = 0;
        int128 new_dslope = 0;
        uint _epoch = epoch;

        if (_tokenId != 0) {
            // Calculate slopes and biases
            // Kept at zero when they have to
            if (old_locked.end > block.timestamp && old_locked.amount > 0) {
                u_old.slope = old_locked.amount / iMAXTIME;
                u_old.bias = u_old.slope * int128(int256(old_locked.end - block.timestamp));
            }
            if (new_locked.end > block.timestamp && new_locked.amount > 0) {
                u_new.slope = new_locked.amount / iMAXTIME;
                u_new.bias = u_new.slope * int128(int256(new_locked.end - block.timestamp));
            }

            // Read values of scheduled changes in the slope
            // old_locked.end can be in the past and in the future
            // new_locked.end can ONLY by in the FUTURE unless everything expired: than zeros
            old_dslope = slope_changes[old_locked.end];
            if (new_locked.end != 0) {
                if (new_locked.end == old_locked.end) {
                    new_dslope = old_dslope;
                } else {
                    new_dslope = slope_changes[new_locked.end];
                }
            }
        }

        Point memory last_point = Point({bias: 0, slope: 0, ts: block.timestamp, blk: block.number});
        if (_epoch > 0) {
            last_point = point_history[_epoch];
        }
        uint last_checkpoint = last_point.ts;
        // initial_last_point is used for extrapolation to calculate block number
        // (approximately, for *At methods) and save them
        // as we cannot figure that out exactly from inside the contract
        Point memory initial_last_point = last_point;
        uint block_slope = 0; // dblock/dt
        if (block.timestamp > last_point.ts) {
            block_slope = (MULTIPLIER * (block.number - last_point.blk)) / (block.timestamp - last_point.ts);
        }
        // If last point is already recorded in this block, slope=0
        // But that's ok b/c we know the block in such case

        // Go over weeks to fill history and calculate what the current point is
        {
            uint t_i = (last_checkpoint / WEEK) * WEEK;
            for (uint i = 0; i < 255; ++i) {
                // Hopefully it won't happen that this won't get used in 5 years!
                // If it does, users will be able to withdraw but vote weight will be broken
                t_i += WEEK;
                int128 d_slope = 0;
                if (t_i > block.timestamp) {
                    t_i = block.timestamp;
                } else {
                    d_slope = slope_changes[t_i];
                }
                last_point.bias -= last_point.slope * int128(int256(t_i - last_checkpoint));
                last_point.slope += d_slope;
                if (last_point.bias < 0) {
                    // This can happen
                    last_point.bias = 0;
                }
                if (last_point.slope < 0) {
                    // This cannot happen - just in case
                    last_point.slope = 0;
                }
                last_checkpoint = t_i;
                last_point.ts = t_i;
                last_point.blk = initial_last_point.blk + (block_slope * (t_i - initial_last_point.ts)) / MULTIPLIER;
                _epoch += 1;
                if (t_i == block.timestamp) {
                    last_point.blk = block.number;
                    break;
                } else {
                    point_history[_epoch] = last_point;
                }
            }
        }

        epoch = _epoch;
        // Now point_history is filled until t=now

        if (_tokenId != 0) {
            // If last point was in this block, the slope change has been applied already
            // But in such case we have 0 slope(s)
            last_point.slope += (u_new.slope - u_old.slope);
            last_point.bias += (u_new.bias - u_old.bias);
            if (last_point.slope < 0) {
                last_point.slope = 0;
            }
            if (last_point.bias < 0) {
                last_point.bias = 0;
            }
        }

        // Record the changed point into history
        point_history[_epoch] = last_point;

        if (_tokenId != 0) {
            // Schedule the slope changes (slope is going down)
            // We subtract new_user_slope from [new_locked.end]
            // and add old_user_slope to [old_locked.end]
            if (old_locked.end > block.timestamp) {
                // old_dslope was <something> - u_old.slope, so we cancel that
                old_dslope += u_old.slope;
                if (new_locked.end == old_locked.end) {
                    old_dslope -= u_new.slope; // It was a new deposit, not extension
                }
                slope_changes[old_locked.end] = old_dslope;
            }

            if (new_locked.end > block.timestamp) {
                if (new_locked.end > old_locked.end) {
                    new_dslope -= u_new.slope; // old slope disappeared at this point
                    slope_changes[new_locked.end] = new_dslope;
                }
                // else: we recorded it already in old_dslope
            }
            // Now handle user history
            uint user_epoch = user_point_epoch[_tokenId] + 1;

            user_point_epoch[_tokenId] = user_epoch;
            u_new.ts = block.timestamp;
            u_new.blk = block.number;
            user_point_history[_tokenId][user_epoch] = u_new;
        }
    }

    /// @notice Deposit and lock tokens for a user
    /// @param _tokenId NFT that holds lock
    /// @param _value Amount to deposit
    /// @param unlock_time New time when to unlock the tokens, or 0 if unchanged
    /// @param locked_balance Previous locked amount / timestamp
    /// @param deposit_type The type of deposit
    function _deposit_for(
        uint _tokenId,
        uint _value,
        uint unlock_time,
        LockedBalance memory locked_balance,
        DepositType deposit_type
    ) internal {
        LockedBalance memory _locked = locked_balance;
        uint supply_before = supply;

        supply = supply_before + _value;
        LockedBalance memory old_locked;
        (old_locked.amount, old_locked.end) = (_locked.amount, _locked.end);
        // Adding to existing lock, or if a lock is expired - creating a new one
        _locked.amount += int128(int256(_value));
        if (unlock_time != 0) {
            _locked.end = unlock_time;
        }
        locked[_tokenId] = _locked;

        // Possibilities:
        // Both old_locked.end could be current or expired (>/< block.timestamp)
        // value == 0 (extend lock) or value > 0 (add to lock or extend lock)
        // _locked.end > block.timestamp (always)
        _checkpoint(_tokenId, old_locked, _locked);

        address from = msg.sender;
        if (_value != 0 && deposit_type != DepositType.MERGE_TYPE) {
            assert(IERC20(token).transferFrom(from, address(this), _value));
        }

        emit Deposit(from, _tokenId, _value, _locked.end, deposit_type, block.timestamp);
        emit Supply(supply_before, supply_before + _value);
    }

    /// @notice Locks tokenID vote for 1 week.
    /// @param _tokenId The identifier for an NFT.
    function lockVote(uint _tokenId) external {
        require(msg.sender == voter);
        require(_isVoteExpired(_tokenId),"Vote Locked!");
        idToVoteExpiry[_tokenId] = block.timestamp + WEEK;
    }

    function setVoter(address _voter) external {
        require(msg.sender == voter);
        voter = _voter;
    }

    function voting(uint _tokenId) external {
        require(msg.sender == voter);
        voted[_tokenId] = true;
    }

    function abstain(uint _tokenId) external {
        require(msg.sender == voter);
        voted[_tokenId] = false;
    }

    function attach(uint _tokenId) external {
        require(msg.sender == voter);
        attachments[_tokenId] = attachments[_tokenId]+1;
    }

    function detach(uint _tokenId) external {
        require(msg.sender == voter);
        attachments[_tokenId] = attachments[_tokenId]-1;
    }

    function merge(uint _from, uint _to) external {
        require(attachments[_from] == 0 && !voted[_from], "attached");
        require(_from != _to);
        require(_isApprovedOrOwner(msg.sender, _from));
        require(_isApprovedOrOwner(msg.sender, _to));

        LockedBalance memory _locked0 = locked[_from];
        LockedBalance memory _locked1 = locked[_to];
        uint value0 = uint(int256(_locked0.amount));
        uint end = _locked0.end >= _locked1.end ? _locked0.end : _locked1.end;

        locked[_from] = LockedBalance(0, 0);
        _checkpoint(_from, _locked0, LockedBalance(0, 0));
        _burn(_from);
        _deposit_for(_to, value0, end, _locked1, DepositType.MERGE_TYPE);
    }

    function block_number() external view returns (uint) {
        return block.number;
    }

    /// @notice Record global data to checkpoint
    function checkpoint() external {
        _checkpoint(0, LockedBalance(0, 0), LockedBalance(0, 0));
    }

    /// @notice Deposit `_value` tokens for `_tokenId` and add to the lock
    /// @dev Anyone (even a smart contract) can deposit for someone else, but
    ///      cannot extend their locktime and deposit for a brand new user
    /// @param _tokenId lock NFT
    /// @param _value Amount to add to user's lock
    function deposit_for(uint _tokenId, uint _value) external nonreentrant {
        LockedBalance memory _locked = locked[_tokenId];

        require(_value > 0); // dev: need non-zero value
        require(_locked.amount > 0, 'No existing lock found');
        require(_locked.end > block.timestamp, 'Cannot add to expired lock. Withdraw');
        _deposit_for(_tokenId, _value, 0, _locked, DepositType.DEPOSIT_FOR_TYPE);
    }

    /// @notice Deposit `_value` tokens for `_to` and lock for `_lock_duration`
    /// @param _value Amount to deposit
    /// @param _lock_duration Number of seconds to lock tokens for (rounded down to nearest week)
    /// @param _to Address to deposit
    function _create_lock(uint _value, uint _lock_duration, address _to) internal returns (uint) {
        uint unlock_time = (block.timestamp + _lock_duration) / WEEK * WEEK; // Locktime is rounded down to weeks

        require(_value > 0); // dev: need non-zero value
        require(unlock_time > block.timestamp, 'Can only lock until time in the future');
        require(unlock_time <= block.timestamp + MAXTIME, 'Voting lock can be 4 years max');

        ++tokenId;
        uint _tokenId = tokenId;
        _mint(_to, _tokenId);

        _deposit_for(_tokenId, _value, unlock_time, locked[_tokenId], DepositType.CREATE_LOCK_TYPE);
        return _tokenId;
    }

    /// @notice Deposit `_value` tokens for `_to` and lock for `_lock_duration`
    /// @param _value Amount to deposit
    /// @param _lock_duration Number of seconds to lock tokens for (rounded down to nearest week)
    /// @param _to Address to deposit
    function create_lock_for(uint _value, uint _lock_duration, address _to) external nonreentrant returns (uint) {
        return _create_lock(_value, _lock_duration, _to);
    }

    /// @notice Deposit `_value` tokens for `msg.sender` and lock for `_lock_duration`
    /// @param _value Amount to deposit
    /// @param _lock_duration Number of seconds to lock tokens for (rounded down to nearest week)
    function create_lock(uint _value, uint _lock_duration) external nonreentrant returns (uint) {
        return _create_lock(_value, _lock_duration, msg.sender);
    }

    /// @notice Deposit `_value` additional tokens for `_tokenId` without modifying the unlock time
    /// @param _value Amount of tokens to deposit and add to the lock
    function increase_amount(uint _tokenId, uint _value) external nonreentrant {
        assert(_isApprovedOrOwner(msg.sender, _tokenId));

        LockedBalance memory _locked = locked[_tokenId];

        assert(_value > 0); // dev: need non-zero value
        require(_locked.amount > 0, 'No existing lock found');
        require(_locked.end > block.timestamp, 'Cannot add to expired lock. Withdraw');

        _deposit_for(_tokenId, _value, 0, _locked, DepositType.INCREASE_LOCK_AMOUNT);
    }

    /// @notice Extend the unlock time for `_tokenId`
    /// @param _lock_duration New number of seconds until tokens unlock
    function increase_unlock_time(uint _tokenId, uint _lock_duration) external nonreentrant {
        assert(_isApprovedOrOwner(msg.sender, _tokenId));

        LockedBalance memory _locked = locked[_tokenId];
        uint unlock_time = (block.timestamp + _lock_duration) / WEEK * WEEK; // Locktime is rounded down to weeks

        require(_locked.end > block.timestamp, 'Lock expired');
        require(_locked.amount > 0, 'Nothing is locked');
        require(unlock_time > _locked.end, 'Can only increase lock duration');
        require(unlock_time <= block.timestamp + MAXTIME, 'Voting lock can be 4 years max');

        _deposit_for(_tokenId, 0, unlock_time, _locked, DepositType.INCREASE_UNLOCK_TIME);
    }

    /// @notice Withdraw all tokens for `_tokenId`
    /// @dev Only possible if the lock has expired
    function withdraw(uint _tokenId) external nonreentrant {
        assert(_isApprovedOrOwner(msg.sender, _tokenId));
        require(attachments[_tokenId] == 0 && !voted[_tokenId], "attached");

        LockedBalance memory _locked = locked[_tokenId];
        require(block.timestamp >= _locked.end, "The lock didn't expire");
        uint value = uint(int256(_locked.amount));

        locked[_tokenId] = LockedBalance(0,0);
        uint supply_before = supply;
        supply = supply_before - value;

        // old_locked can have either expired <= timestamp or zero end
        // _locked has only 0 end
        // Both can have >= 0 amount
        _checkpoint(_tokenId, _locked, LockedBalance(0,0));

        assert(IERC20(token).transfer(msg.sender, value));

        // Burn the NFT
        _burn(_tokenId);

        emit Withdraw(msg.sender, _tokenId, value, block.timestamp);
        emit Supply(supply_before, supply_before - value);
    }

    // The following ERC20/minime-compatible methods are not real balanceOf and supply!
    // They measure the weights for the purpose of voting, so they don't represent
    // real coins.

    /// @notice Binary search to estimate timestamp for block number
    /// @param _block Block to find
    /// @param max_epoch Don't go beyond this epoch
    /// @return Approximate timestamp for block
    function _find_block_epoch(uint _block, uint max_epoch) internal view returns (uint) {
        // Binary search
        uint _min = 0;
        uint _max = max_epoch;
        for (uint i = 0; i < 128; ++i) {
            // Will be always enough for 128-bit numbers
            if (_min >= _max) {
                break;
            }
            uint _mid = (_min + _max + 1) / 2;
            if (point_history[_mid].blk <= _block) {
                _min = _mid;
            } else {
                _max = _mid - 1;
            }
        }
        return _min;
    }

    /// @notice Get the current voting power for `_tokenId`
    /// @dev Adheres to the ERC20 `balanceOf` interface for Aragon compatibility
    /// @param _tokenId NFT for lock
    /// @param _t Epoch time to return voting power at
    /// @return User voting power
    function _balanceOfNFT(uint _tokenId, uint _t) internal view returns (uint) {
        uint _epoch = user_point_epoch[_tokenId];
        if (_epoch == 0) {
            return 0;
        } else {
            Point memory last_point = user_point_history[_tokenId][_epoch];
            last_point.bias -= last_point.slope * int128(int256(_t) - int256(last_point.ts));
            if (last_point.bias < 0) {
                last_point.bias = 0;
            }
            return uint(int256(last_point.bias));
        }
    }
    
    modifier onlyAdmin() {
        require(msg.sender == admin, "veArc: only admin");
        _;
    }
    
    function setAdmin(address _admin) external onlyAdmin {
        pendingAdmin = _admin;
    }

    function acceptAdmin() external {
        require(msg.sender == pendingAdmin);
        admin = pendingAdmin;
    }
    
    function setArtProxy(address _proxy) external onlyAdmin {
        artProxy = _proxy;
    }

    /// @dev Returns current token URI metadata
    /// @param _tokenId Token ID to fetch URI for.
    function tokenURI(uint _tokenId) external view returns (string memory) {
        require(idToOwner[_tokenId] != address(0), "Query for nonexistent token");
        LockedBalance memory _locked = locked[_tokenId];
        return IVeArtProxy(artProxy)._tokenURI(
            _tokenId,
            _balanceOfNFT(_tokenId, block.timestamp),
            _locked.end,
            uint(int256(_locked.amount))
        );
    }

    function balanceOfNFT(uint _tokenId) external view returns (uint) {
        if (ownership_change[_tokenId] == block.number) return 0;
        return _balanceOfNFT(_tokenId, block.timestamp);
    }

    function balanceOfNFTAt(uint _tokenId, uint _t) external view returns (uint) {
        return _balanceOfNFT(_tokenId, _t);
    }

    /// @notice Measure voting power of `_tokenId` at block height `_block`
    /// @dev Adheres to MiniMe `balanceOfAt` interface: https://github.com/Giveth/minime
    /// @param _tokenId User's wallet NFT
    /// @param _block Block to calculate the voting power at
    /// @return Voting power
    function _balanceOfAtNFT(uint _tokenId, uint _block) internal view returns (uint) {
        // Copying and pasting totalSupply code because Vyper cannot pass by
        // reference yet
        assert(_block <= block.number);

        // Binary search
        uint _min = 0;
        uint _max = user_point_epoch[_tokenId];
        for (uint i = 0; i < 128; ++i) {
            // Will be always enough for 128-bit numbers
            if (_min >= _max) {
                break;
            }
            uint _mid = (_min + _max + 1) / 2;
            if (user_point_history[_tokenId][_mid].blk <= _block) {
                _min = _mid;
            } else {
                _max = _mid - 1;
            }
        }

        Point memory upoint = user_point_history[_tokenId][_min];

        uint max_epoch = epoch;
        uint _epoch = _find_block_epoch(_block, max_epoch);
        Point memory point_0 = point_history[_epoch];
        uint d_block = 0;
        uint d_t = 0;
        if (_epoch < max_epoch) {
            Point memory point_1 = point_history[_epoch + 1];
            d_block = point_1.blk - point_0.blk;
            d_t = point_1.ts - point_0.ts;
        } else {
            d_block = block.number - point_0.blk;
            d_t = block.timestamp - point_0.ts;
        }
        uint block_time = point_0.ts;
        if (d_block != 0) {
            block_time += (d_t * (_block - point_0.blk)) / d_block;
        }

        upoint.bias -= upoint.slope * int128(int256(block_time - upoint.ts));
        if (upoint.bias >= 0) {
            return uint(uint128(upoint.bias));
        } else {
            return 0;
        }
    }

    function balanceOfAtNFT(uint _tokenId, uint _block) external view returns (uint) {
        return _balanceOfAtNFT(_tokenId, _block);
    }

    /// @notice Calculate total voting power at some point in the past
    /// @param point The point (bias/slope) to start search from
    /// @param t Time to calculate the total voting power at
    /// @return Total voting power at that time
    function _supply_at(Point memory point, uint t) internal view returns (uint) {
        Point memory last_point = point;
        uint t_i = (last_point.ts / WEEK) * WEEK;
        for (uint i = 0; i < 255; ++i) {
            t_i += WEEK;
            int128 d_slope = 0;
            if (t_i > t) {
                t_i = t;
            } else {
                d_slope = slope_changes[t_i];
            }
            last_point.bias -= last_point.slope * int128(int256(t_i - last_point.ts));
            if (t_i == t) {
                break;
            }
            last_point.slope += d_slope;
            last_point.ts = t_i;
        }

        if (last_point.bias < 0) {
            last_point.bias = 0;
        }
        return uint(uint128(last_point.bias));
    }

    /// @notice Calculate total voting power
    /// @dev Adheres to the ERC20 `totalSupply` interface for Aragon compatibility
    /// @return Total voting power
    function totalSupplyAtT(uint t) public view returns (uint) {
        uint _epoch = epoch;
        Point memory last_point = point_history[_epoch];
        return _supply_at(last_point, t);
    }

    function totalSupply() external view returns (uint) {
        return totalSupplyAtT(block.timestamp);
    }

    /// @notice Calculate total voting power at some point in the past
    /// @param _block Block to calculate the total voting power at
    /// @return Total voting power at `_block`
    function totalSupplyAt(uint _block) external view returns (uint) {
        assert(_block <= block.number);
        uint _epoch = epoch;
        uint target_epoch = _find_block_epoch(_block, _epoch);

        Point memory point = point_history[target_epoch];
        uint dt = 0;
        if (target_epoch < _epoch) {
            Point memory point_next = point_history[target_epoch + 1];
            if (point.blk != point_next.blk) {
                dt = ((_block - point.blk) * (point_next.ts - point.ts)) / (point_next.blk - point.blk);
            }
        } else {
            if (point.blk != block.number) {
                dt = ((_block - point.blk) * (block.timestamp - point.ts)) / (block.number - point.blk);
            }
        }
        // Now dt contains info on how far are we beyond point
        return _supply_at(point, point.ts + dt);
    }

    function _burn(uint _tokenId) internal {
        require(_isApprovedOrOwner(msg.sender, _tokenId), "caller is not owner nor approved");

        address owner = ownerOf(_tokenId);

        // Clear approval
        approve(address(0), _tokenId);
        // Remove token
        _removeTokenFrom(owner, _tokenId);
        emit Transfer(owner, address(0), _tokenId);
    }

    function tokensOfOwner(address _owner) external view returns (uint256[] memory) {
        uint256 tokenCount = _balance(_owner);
        uint256[] memory tokensId = new uint256[](tokenCount);

        for (uint256 i = 0; i < tokenCount; i++) {
            tokensId[i] = ownerToNFTokenIdList[_owner][i];
        }
        return tokensId;
    }
    
    /// @notice Burn all tokens for `_tokenId`
    /// @dev Only possible if not vote locked
    function burn(uint _tokenId) external nonreentrant {
        assert(_isApprovedOrOwner(msg.sender, _tokenId));
        require(attachments[_tokenId] == 0 && !voted[_tokenId], "attached");
        require(_isVoteExpired(_tokenId), "Vote Locked!");

        LockedBalance memory _locked = locked[_tokenId];
        uint value = uint(int256(_locked.amount));

        locked[_tokenId] = LockedBalance(0,0);
        uint supply_before = supply;
        supply = supply_before - value;

        // old_locked can have either expired <= timestamp or zero end
        // _locked has only 0 end
        // Both can have >= 0 amount
        _checkpoint(_tokenId, _locked, LockedBalance(0,0));

        assert(IERC20(token).transfer(address(0), value));

        // Burn the NFT
        _burn(_tokenId);

        emit Burn(msg.sender, _tokenId, value, block.timestamp);
        emit Supply(supply_before, supply_before - value);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"token_addr","type":"address"},{"internalType":"address","name":"art_proxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"locktime","type":"uint256"},{"indexed":false,"internalType":"enum veArc.DepositType","name":"deposit_type","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"abstain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"attach","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"attachments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"balanceOfAtNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"balanceOfNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_t","type":"uint256"}],"name":"balanceOfNFTAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"block_number","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_lock_duration","type":"uint256"}],"name":"create_lock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_lock_duration","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"create_lock_for","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"deposit_for","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"detach","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"get_last_user_slope","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increase_amount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_lock_duration","type":"uint256"}],"name":"increase_unlock_time","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isVoteExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"lockVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"locked","outputs":[{"internalType":"int128","name":"amount","type":"int128"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"locked__amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"locked__end","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"merge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownership_change","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"point_history","outputs":[{"internalType":"int128","name":"bias","type":"int128"},{"internalType":"int128","name":"slope","type":"int128"},{"internalType":"uint256","name":"ts","type":"uint256"},{"internalType":"uint256","name":"blk","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"setArtProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"setVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"slope_changes","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_tokenIndex","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"t","type":"uint256"}],"name":"totalSupplyAtT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"user_point_epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"user_point_history","outputs":[{"internalType":"int128","name":"bias","type":"int128"},{"internalType":"int128","name":"slope","type":"int128"},{"internalType":"uint256","name":"ts","type":"uint256"},{"internalType":"uint256","name":"blk","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"user_point_history__ts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"voteExpiry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"voted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"voting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

9c4d535b000000000000000000000000000000000000000000000000000000000000000001000909e5d2ed02546ff115b657f95b3d899180b44fa9200b22343d5c456d1b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000040000000000000000000000000fb4c64c144c2bd0e7f2a06da7d6aac32d8cb25140000000000000000000000000a8da8c5246752cfdba720ebcfb200a74f4f6fc7

Deployed Bytecode

0x0004000000000002000e000000000002000000000901034f00000060031002700000084c01300197000300000019035500020000000903550000084c0030019d0000000100200190000000250000c13d0000008002000039000000400020043f000000040010008c000013980000413d000000000209043b000000e0022002700000085f0020009c000000670000213d0000088f0020009c0000007d0000213d000008a70020009c000000db0000213d000008b30020009c000001520000213d000008b90020009c000002b20000213d000008bc0020009c000006590000613d000008bd0020009c000013980000c13d0000000001000416000000000001004b000013980000c13d000000000100041a000000800010043f000008bf010000410000212d0001042e0000000002000416000000000002004b000013980000c13d0000001f021000390000084d02200197000000a002200039000000400020043f0000001f0310018f0000084e04100198000000a002400039000000360000613d000000a005000039000000000609034f000000006706043c0000000005750436000000000025004b000000320000c13d000000000003004b000000430000613d000000000449034f0000000303300210000000000502043300000000053501cf000000000535022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000353019f0000000000320435000000400010008c000013980000413d000000a00100043d0000084f0010009c000013980000213d000000c00200043d000b00000002001d0000084f0020009c000013980000213d0000001702000039000000000302041a000008f70330019700000001033001bf000000000032041b000000000001004b000001620000c13d000000400100043d00000064021000390000085b03000041000000000032043500000044021000390000085c0300004100000000003204350000002402100039000000320300003900000000003204350000085d0200004100000000002104350000000402100039000000200300003900000000003204350000084c0010009c0000084c0100804100000040011002100000085e011001c70000212e00010430000008600020009c0000008e0000213d000008780020009c000000ef0000213d000008840020009c000001f90000213d0000088a0020009c000002c00000213d0000088d0020009c000006650000613d0000088e0020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000a01000039000005bc0000013d000008900020009c000001230000213d0000089c0020009c000002040000213d000008a20020009c000003070000213d000008a50020009c0000066e0000613d000008a60020009c000013980000c13d0000000001000416000000000001004b000013980000c13d0000001201000039000000800010043f000008bf010000410000212d0001042e000008610020009c000001300000213d0000086d0020009c000002300000213d000008730020009c000003d30000213d000008760020009c000006860000613d000008770020009c000013980000c13d0000000001000416000000000001004b000013980000c13d000000800000043f000000a00000043f000000c00000043f000000e00000043f000001000000043f000001200000043f000001400000043f000001600000043f000001800000043f000001a00000043f000001c00000043f000001e00000043f0000000601000039000000000101041a000b00000001001d0000028001000039000000400010043f000002000000043f000002200000043f0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000a00000001001d000002400010043f0000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000002600010043f0000000b08000029000000000008004b000200000001001d00000d530000c13d0000020009000039000402600000003d000002200a000039000902400000003d000002400500043d0000000a0050006b00000d880000a13d000000020110006b000002ac0000413d000008d5021000d1000008d50220012a000000000021004b000002ac0000c13d00000d880000013d000008a80020009c0000024d0000213d000008ae0020009c000005220000213d000008b10020009c0000068f0000613d000008b20020009c000013980000c13d0000000001000416000000000001004b000013980000c13d0000800b01000039000000040300003900000000040004150000000e0440008a00000005044002100000085402000041212c21040000040f212c141b0000040f00000c000000013d000008790020009c000002580000213d0000087f0020009c0000052e0000213d000008820020009c000006cb0000613d000008830020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000000d01000039000000000101041a0000084f011001970000000002000411000000000012004b000013980000c13d0000000b01000029000000000010043f0000000b01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000000001004b000002ac0000613d000a00000001001d0000000b01000029000000000010043f0000000b01000039000000200010043f00000040020000390000000001000019212c20ef0000040f0000000a02000029000000010220008a000000000021041b00000000010000190000212d0001042e000008910020009c000002770000213d000008970020009c000005780000213d0000089a0020009c000007670000613d0000089b0020009c000013980000c13d0000000001000416000000000001004b000013980000c13d000000040100003900000bf60000013d000008620020009c000002870000213d000008680020009c000005960000213d0000086b0020009c0000077b0000613d0000086c0020009c000013980000c13d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b0000084f0010009c000013980000213d0000002402900370000000000202043b000b00000002001d0000084f0020009c000013980000213d000000000010043f0000001501000039000000200010043f00000040020000390000000001000019212c20ef0000040f0000000b02000029000000000020043f000000200010043f00000000010000190000004002000039000008b70000013d000008b40020009c0000059f0000213d000008b70020009c000008480000613d000008b80020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f000000140100003900000bea0000013d000000800010043f0000000d01000039000000000201041a00000850022001970000000003000411000000000232019f000000000021041b000000000000043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000a00000001001d0000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000a020000290000000202200039000000000012041b0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000a020000290000000102200039000000000012041b0000000201000039000000000201041a00000850022001970000000003000411000000000232019f000000000021041b0000000401000039000000000201041a00000850022001970000000b022001af000000000021041b0000085501000041000000000010043f0000001601000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000201041a000008f70220019700000001022001bf000000000021041b0000085601000041000000000010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000201041a000008f70220019700000001022001bf000000000021041b0000085701000041000000000010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000201041a000008f70220019700000001022001bf000000000021041b0000000e01000039000000000701041a00000000010004140000084c0010009c0000084c01008041000000c00110021000000858011001c70000800d020000390000000403000039000000000600041000000859040000410000000005000019000b00000007001d212c21220000040f0000000100200190000013980000613d00000000010004140000084c0010009c0000084c01008041000000c00110021000000858011001c70000800d0200003900000004030000390000085904000041000000000500041000000000060000190000000b07000029212c21220000040f0000000100200190000013980000613d000000800100043d0000014000000443000001600010044300000020010000390000010000100443000000010100003900000120001004430000085a010000410000212d0001042e000008850020009c000005af0000213d000008880020009c000008ab0000613d000008890020009c000013980000c13d0000000001000416000000000001004b000013980000c13d000000060100003900000bee0000013d0000089d0020009c000005c90000213d000008a00020009c000008bf0000613d000008a10020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000901000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000000101041a000b00000001001d0000000801000039000000200010043f00000000010000190000004002000039212c20ef0000040f0000000b02000029212c13d70000040f000000000101041a000000010200008a000008d003100197000008d00030009c000000000200c01900000080022002100000008003100270000000000223019f000000800000008b000000000102c019000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f00000c000000013d0000086e0020009c000005e10000213d000008710020009c000008cf0000613d000008720020009c000013980000c13d000000640010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000004401900370000000000301043b0000084f0030009c000013980000213d00000017010000390000000004010019000000000101041a000000ff0210018f000000010020008c000013980000c13d000008f70110019700000002011001bf000000000014041b0000000401900370000000000101043b0000002402900370000000000202043b0000058f0000013d000008a90020009c000005ef0000213d000008ac0020009c000008f70000613d000008ad0020009c000013980000c13d0000000001000416000000000001004b000013980000c13d000000030100003900000bf60000013d0000087a0020009c000006070000213d0000087d0020009c000009040000613d0000087e0020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000101000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f0000000101100039000000000101041a000000800020043f000000a00010043f000008d9010000410000212d0001042e000008920020009c000006230000213d000008950020009c0000096c0000613d000008960020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f000000050100003900000bea0000013d000008630020009c000006330000213d000008660020009c000009aa0000613d000008670020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000000d01000039000000000101041a0000084f011001970000000002000411000000000012004b000013980000c13d0000000b01000029000000000010043f0000000b01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000010110003a00000e1a0000c13d000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e00010430000008ba0020009c000006500000613d000008bb0020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f000000100100003900000b200000013d0000088b0020009c000009b90000613d0000088c0020009c000013980000c13d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000002401900370000000000101043b000700000001001d0000000401900370000000000101043b000600000001001d0000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000201043b000000070020006c00000c1c0000413d000500000002001d0000000601000029000000000010043f0000000901000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000201041a000000000002004b000000000100001900000e5c0000c13d000900000001001d0000000601000029000000000010043f0000000801000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d0000000902000029000008ce0020009c00000ecd0000a13d000008e501000041000000000010043f0000003201000039000000040010043f000008e6010000410000212e00010430000008a30020009c00000a0d0000613d000008a40020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000001701000039000000000201041a000000ff0320018f000000010030008c000013980000c13d000008f70220019700000002022001bf000000000021041b00000000010004110000000b02000029212c17c30000040f000000000001004b00000c1c0000613d0000000b01000029000000000010043f0000000b01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000000001004b00000d420000c13d0000000c01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000ff0010019000000d420000c13d0000000b01000029000000000010043f0000001401000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000a00000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000a0010006b00000e550000813d0000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400200043d000a00000002001d000008c00020009c0000139b0000213d000000000101043b0000000a040000290000004002400039000000400020043f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f000800000002001d00000000022404360000000101100039000000000101041a0000000000120435000000400100043d000900000001001d000008c00010009c0000139b0000213d00000009020000290000004001200039000000400010043f0000000001020436000700000001001d00000000000104350000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000009020000290000000002020433000008c602200197000000000101043b000000000301041a000008c503300197000000000223019f000000000021041b000000010110003900000007020000290000000002020433000000000021041b000000000200041a000700000002001d0009000800200074000002ac0000413d0000000901000029000000000010041b000000400300043d000008c00030009c0000139b0000213d0000004001300039000000400010043f0000002001300039000000000001043500000000000304350000000b010000290000000a02000029212c18200000040f000000400300043d000000240130003900000008020000290000000000210435000008ec010000410000000000130435000a00000003001d00000004013000390000000000010435000008be01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000084c0010009c0000084c01008041000000c001100210000008c8011001c70000800502000039212c21270000040f00000001002001900000139a0000613d000000000201043b00000000010004140000084f02200197000000040020008c000013250000c13d0000000103000031000000200030008c000000200400003900000000040340190000134f0000013d000008740020009c00000a230000613d000008750020009c000013980000c13d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000002401900370000000000101043b000a00000001001d0000000401900370000000000101043b000b00000001001d000000000010043f0000000b01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000000001004b00000d420000c13d0000000c01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000ff0010019000000d420000c13d0000000b020000290000000a0020006c000013980000613d00000000010004110000000b02000029212c17c30000040f000000000001004b000013980000613d00000000010004110000000a02000029212c17c30000040f000000000001004b000013980000613d0000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400200043d000900000002001d000008c00020009c0000139b0000213d000000000101043b00000009040000290000004002400039000000400020043f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000022404360000000101100039000000000101041a000800000002001d00000000001204350000000a01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400200043d000700000002001d000008c00020009c0000139b0000213d000000000101043b00000007040000290000004002400039000000400020043f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000022404360000000101100039000000000101041a000400000002001d000000000012043500000008020000290000000002020433000000000012004b000000000201a019000300000002001d00000009010000290000000001010433000500000001001d000008c200100198000008c3010000410000000001006019000600000001001d000000400100043d000800000001001d000008c00010009c0000139b0000213d00000008020000290000004001200039000000400010043f0000000001020436000200000001001d00000000000104350000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000008020000290000000002020433000008c602200197000000000101043b000000000301041a000008c503300197000000000223019f000000000021041b000000010110003900000002020000290000000002020433000000000021041b000000400300043d000008c00030009c0000139b0000213d0000000501000029000008c102100197000500000002001d00080006002001b30000004001300039000000400010043f0000002001300039000000000001043500000000000304350000000b010000290000000902000029212c18200000040f0000000b01000029212c1b6d0000040f000000000100041a000b00000001001d000000080010002a000002ac0000413d00000008020000290000000b01200029000200000001001d000000000010041b000000400100043d000900000001001d000008c00010009c0000139b0000213d00000009050000290000004001500039000000400010043f00000020015000390000000000010435000000000005043500000004020000290000000002020433000000070400002900000000030404330000000000210435000008c101300197000008c200300198000008c3020000410000000002006019000000000112019f00000000001504350000000601000029000008c200100198000008c301000041000000000100601900000005011001af0000000002040433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f0000000001120019000008c20210009a000008c50020009c000002ac0000413d000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f00000007020000290000000000120435000000030000006b000004c60000613d0000000401000029000000030200002900000000002104350000000a01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000007030000290000000002030433000008c602200197000000000101043b000000000401041a000008c504400197000000000224019f000000000021041b000000010110003900000004020000290000000002020433000000000021041b0000000a010000290000000902000029212c18200000040f00000004010000290000000001010433000900000001001d0000000401000039000000400300043d00000040023000390000000000120435000000200130003900000008020000290000000000210435000800000003001d0000000a0100002900000000001304350000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000803000029000000600230003900000000001204350000084c0030009c0000084c03008041000000400130021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008cb011001c70000800d020000390000000303000039000008cc0400004100000000050004110000000906000029212c21220000040f0000000100200190000013980000613d000000400100043d0000002002100039000000020300002900000000003204350000000b0200002900000000002104350000084c0010009c0000084c01008041000000400110021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f00000851011001c70000800d020000390000000103000039000008cd04000041000005770000013d000008af0020009c00000a420000613d000008b00020009c000013980000c13d0000000002000416000000000002004b000013980000c13d212c13f50000040f0000000004000411212c15860000040f00000000010000190000212d0001042e000008800020009c00000a520000613d000008810020009c000013980000c13d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000084f0010009c000013980000213d0000002401900370000000000201043b000000000002004b0000000001000039000000010100c039000a00000002001d000000000012004b000013980000c13d00000000020004110000000b0020006b00000c1c0000613d000000000020043f0000001501000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b0000000b02000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000201041a000008f7022001970000000a04000029000000ff0340018f000000000232019f000000000021041b000000400100043d00000000004104350000084c0010009c0000084c01008041000000400110021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008e0011001c70000800d020000390000000303000039000008e10400004100000000050004110000000b06000029000008a60000013d000008980020009c00000b170000613d000008990020009c000013980000c13d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d00000017010000390000000004010019000000000101041a000000ff0210018f000000010020008c000013980000c13d000008f70110019700000002031001bf0000000401900370000000000101043b0000002402900370000000000202043b000000000034041b0000000003000411212c1d440000040f0000001704000039000000000204041a000008f70220019700000001022001bf000000000024041b00000c000000013d000008690020009c00000b250000613d0000086a0020009c000013980000c13d0000000001000416000000000001004b000013980000c13d000000020100003900000bf60000013d000008b50020009c00000be10000613d000008b60020009c000013980000c13d0000000001000416000000000001004b000013980000c13d0000000301000039000000000101041a0000084f021001970000000001000411000000000021004b000013980000c13d0000000202000039000000000302041a000005dc0000013d000008860020009c000006500000613d000008870020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000101000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000000101041a000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f000000800010043f000008bf010000410000212d0001042e0000089e0020009c00000bf20000613d0000089f0020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b0000084f0010009c000013980000213d0000000d02000039000000000302041a0000084f043001970000000005000411000000000045004b000013980000c13d0000085003300197000000000113019f000000000012041b00000000010000190000212d0001042e0000086f0020009c00000bfb0000613d000008700020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f000000090100003900000bea0000013d000008aa0020009c00000c070000613d000008ab0020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000084f0010009c000013980000213d0000000201000039000000000101041a0000084f011001970000000002000411000000000012004b00000000010000390000000101006039212c14070000040f000000040100003900000c7e0000013d0000087b0020009c00000c220000613d0000087c0020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000d01000039000000000101041a0000084f011001970000000002000411000000000012004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000c01000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000000301041a000008f702300197000000000021041b00000000010000190000212d0001042e000008930020009c00000c6b0000613d000008940020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b0000084f0010009c000013980000213d000000000010043f000000110100003900000bea0000013d000008640020009c00000c840000613d000008650020009c000013980000c13d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000d01000039000000000101041a0000084f011001970000000002000411000000000012004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000c01000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000000301041a000008f70230019700000001022001bf000000000021041b00000000010000190000212d0001042e0000000001000416000000000001004b000013980000c13d000000c001000039000000400010043f0000000501000039000000800010043f000008f5010000410000076f0000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000008f600100198000013980000c13d000000000010043f0000001601000039000008b40000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b212c141b0000040f00000c000000013d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b0000084f0010009c000013980000213d000000000010043f0000001201000039000000200010043f00000040020000390000000001000019000b000000090353212c20ef0000040f0000000b0200035f0000002402200370000000000202043b000000000020043f000000200010043f0000000001000019000000400200003900000bed0000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b212c1d210000040f000008cb0000013d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000002401900370000000000101043b000b00000001001d0000000401900370000000000101043b000000000010043f0000000801000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d0000000b02000029000008ce0020009c000013980000213d000000000101043b0000000b02000029212c13d70000040f000000000201041a000008d003200197000000010400008a000008d00030009c000000000400c01900000080034002100000008004200270000000000334019f000000800000008b0000000003026019000008c104200197000008c200200198000008c3020000410000000002006019000000000242019f0000000104100039000000000404041a0000000201100039000000000501041a000000400100043d000b00000001001d212c13e20000040f0000000b0200002900000000012100490000084c0020009c0000084c0200804100000040022002100000084c0010009c0000084c010080410000006001100210000000000121019f0000212d0001042e000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000600000001001d0000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000201043b000000060020006b00000c1c0000213d000400000002001d0000000601000039000000000101041a000500000001001d000000000001004b000000000100001900000e260000c13d000900000001001d000000000010043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400500043d000008cf0050009c0000139b0000213d000000000101043b0000008002500039000000400020043f000000000201041a000008d003200197000000010400008a000008d00030009c0000000003000019000000000304601900000080033002100000008004200270000000000334019f000000800000008b0000000003026019000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f00000020045000390000000000340435000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000002504350000006004500039000800000005001d000000400350003900000002021000390000000101100039000000000101041a000a00000003001d000300000001001d0000000000130435000000000102041a000700000004001d000b00000001001d00000000001404350000000902000029000000050020006c00000ec10000813d00000009010000290000000101100039000000000010043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400200043d000008cf0020009c0000139b0000213d000000000101043b0000008003200039000000400030043f000000000301041a000008d004300197000008d00040009c000000010400008a000000000400c01900000080044002100000008005300270000000000445019f000000800000008b0000000004036019000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f00000020052000390000000000450435000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f00000000003204350000000103100039000000000403041a0000004003200039000000000043043500000060032000390000000201100039000000000201041a000000000023043500000007010000290000000003010433000000000132004b000000000500001900000ec50000613d000000060530006b000002ac0000413d0000000a060000290000000006060433000000000664004b000002ac0000413d00000000045600a9000000060030006b000011a00000c13d000000060020006b000002ac0000213d000011a50000013d0000000001000416000000000001004b000013980000c13d000000c001000039000000400010043f0000000501000039000000800010043f000008e901000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e002000039212c13b90000040f000000c00110008a0000084c0010009c0000084c010080410000006001100210000008ea011001c70000212d0001042e000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d000000000010043f0000000501000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000a00000001001d0000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000a0010006b000000000100001900000c000000613d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000a00000001001d0000000b01000029000000000010043f0000000901000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000b00000001001d000000000001004b000000000100001900000c000000613d0000000801000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d0000000b02000029000008ce0020009c000003010000213d000000400200043d000008cf0020009c0000139b0000213d000000000101043b0000008003200039000000400030043f0000000b0300002900000003033000c90000000006310019000000000306041a000008d001300197000000010400008a000008d00010009c000000000400c01900000080014002100000008004300270000000000114019f000000800000008b0000000001036019000008c104100197000008c200100198000008c30500004100000000050060190000002001200039000000000745019f0000000000710435000008c101300197000008c200300198000008c3030000410000000003006019000000000713019f00000000007204350000000107600039000000000907041a0000000a0d000029000008d008d0019700000000079d0049000008d00a70019700000000008a004b000000000b000019000008d00b00204100000000088a013f000000000a000019000008d00a0040410000000000d7004b000000000c000019000008d00c002041000008d00080009c000000000a0cc0190000000000d7004b000000000c000019000008d00c004041000008d00080009c000000000b0cc0190000004008200039000000000098043500000002066000390000006008200039000000000606041a000000000068043500000000000b004b0000000006000039000000010600c039000008c40090009c0000000008000039000000010800203900000000000a004b000000000a000039000000010a00c039000008d00090009c000000000900003900000001090040390000000009a9016f0000000100900190000002ac0000c13d000000000668016f0000000100600190000002ac0000c13d000008c200500198000008c3050000410000000005006019000000000445019f000008c105700197000008c200700198000008c3060000410000000006006019000000000556019f00000000044500a9000008c200400198000008c3050000410000000005006019000008c106400197000000000565019f000000000045004b000002ac0000c13d000008c200300198000008c3030000410000000003006019000000000113019f0000000001410049000008c20310009a000008c50030009c000002ac0000413d000008c103100197000008c200100198000008c3010000410000000001006019000000000131019f000000000001004b0000000003000019000008d003002041000008d004100197000000000004004b0000000005000019000008d005004041000008d00040009c000000000503c019000000000005004b0000000001006019000000000012043500000c000000013d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000084f0010009c000013980000213d0000002401900370000000000101043b000900000001001d000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000a084f0010019c000013980000613d0000000a020000290000000b0020006b000013980000613d0000000a01000029000000000010043f0000001501000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d0000000002000411000000000101043b000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000000030004110000000a0030006b000008890000613d000000000101043b000000000101041a000000ff00100190000013980000613d0000000901000029000000000010043f0000001001000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000201041a00000850022001970000000b06000029000000000262019f000000000021041b00000000010004140000084c0010009c0000084c01008041000000c00110021000000858011001c70000800d020000390000000403000039000008f4040000410000000a050000290000000907000029212c21220000040f0000000100200190000013980000613d00000000010000190000212d0001042e000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000c01000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f000008bf010000410000212d0001042e000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b0000084f0010009c000013980000213d0000002402900370000000000202043b212c17c30000040f000000000001004b0000000001000039000000010100c03900000c000000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000701000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000010200008a000000000401041a000008d003400197000008d00030009c000000000200c01900000080022002100000008003400270000000000323019f000000800000008b0000000003046019000008c102400197000008c200400198000008c3040000410000000004006019000000000224019f0000000104100039000000000404041a0000000201100039000000000501041a0000008001000039212c13e20000040f000000800110008a0000084c0010009c0000084c010080410000006001100210000008d2011001c70000212d0001042e0000000001000416000000000001004b000013980000c13d0000800b01000039000000040300003900000000040004150000000e0440008a00000005044002100000085202000041212c21040000040f000000800010043f000008bf010000410000212d0001042e000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000002401900370000000000101043b000a00000001001d0000000401900370000000000101043b000b00000001001d0000001701000039000000000201041a000000ff0320018f000000010030008c000013980000c13d000008f70220019700000002022001bf000000000021041b00000000010004110000000b02000029212c17c30000040f000000000001004b00000c1c0000613d0000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400400043d000008c00040009c0000139b0000213d000000000101043b0000004002400039000000400020043f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f000800000004001d00000000022404360000000101100039000000000101041a000900000002001d00000000001204350000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000201043b0000000a01200029000a00000002001d000000000021004b000002ac0000413d000000090200002900000000020204330000000a0020006c000010240000a13d000008d63010012a00000008040000290000000004040433000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f000008c40040009c000010750000213d000000000004004b000010750000613d0000000001310049000000000021004b0000107c0000a13d0000000a02000029000008de0220009c000002ac0000813d000000400300043d000700000003001d000000000021004b000011330000a13d00000007030000290000004401300039000008df02000041000000000021043500000024013000390000001e0200003900000d370000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000000d01000039000000000101041a0000084f011001970000000002000411000000000012004b000013980000c13d0000000b01000029000000000010043f0000001401000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000a00000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000a0010006b00000e550000813d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000a08d7001000a4000002ac0000813d0000000b01000029000000000010043f000000140100003900000e1e0000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000101000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000010110003900000bee0000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000a00000001001d0000084f0010009c000013980000213d0000000a01000029000000000010043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000401041a000008ca0040009c0000139b0000213d00000005014002100000003f02100039000008e802200197000000400300043d0000000002230019000900000003001d000000000032004b00000000030000390000000103004039000008ca0020009c0000139b0000213d00000001003001900000139b0000c13d000000400020043f000800000004001d000000090200002900000000064204360000001f0210018f000000000001004b000009f00000613d0000000001160019000000000300003100000002033003670000000004060019000000003503043c0000000004540436000000000014004b000009ec0000c13d000700000006001d000000000002004b000000080000006b00000e950000c13d000000400100043d000000200200003900000000022104360000000903000029000000000303043300000000003204350000004002100039000000000003004b00000a040000613d00000000040000190000000706000029000000006506043400000000025204360000000104400039000000000034004b000009ff0000413d00000000021200490000084c0020009c0000084c0200804100000060022002100000084c0010009c0000084c010080410000004001100210000000000112019f0000212d0001042e000000640010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b0000084f0010009c000013980000213d0000002402900370000000000202043b0000084f0020009c000013980000213d0000004403900370000000000303043b000000a004000039000000400040043f000000800000043f0000008004000039212c14c70000040f00000000010000190000212d0001042e000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a0000084f0010019800000c920000c13d000000400100043d0000004402100039000008d403000041000000000032043500000024021000390000001b0300003900000d480000013d0000000002000416000000000002004b000013980000c13d212c13cb0000040f000b00000002001d000000000010043f0000000801000039000000200010043f00000040020000390000000001000019212c20ef0000040f0000000b02000029212c13d70000040f0000000101100039000000000101041a00000c000000013d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000002401900370000000000101043b000a00000001001d0000000401900370000000000101043b000b00000001001d0000001701000039000000000201041a000000ff0320018f000000010030008c000013980000c13d000008f70220019700000002022001bf000000000021041b00000000010004110000000b02000029212c17c30000040f000000000001004b00000c1c0000613d0000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400500043d000008c00050009c0000139b0000213d000000000301043b0000004001500039000000400010043f000000000203041a000008c101200197000008c200200198000008c3020000410000000002006019000000000412019f000800000005001d00000000044504360000000103300039000000000303041a000700000004001d000900000003001d00000000003404350000000a0000006b00000c1c0000613d000008c200200198000008c3020000410000000002006019000000000112019f000008c40010009c00000e8e0000213d000000000001004b00000e8e0000613d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000000090010006b00000fe80000a13d000000000200041a000900000002001d0000000a0020002a000002ac0000413d00000009020000290000000a01200029000500000001001d000000000010041b000000400100043d000600000001001d000008c00010009c00000008040000290000139b0000213d00000006050000290000004001500039000000400010043f0000002001500039000000000001043500000000000504350000000702000029000000000202043300000000030404330000000000210435000008c101300197000008c200300198000008c3020000410000000002006019000000000112019f00000000001504350000000a02000029000008c101200197000008c200200198000008c3020000410000000002006019000000000112019f0000000002040433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f0000000001120019000008c20210009a000008c50020009c000002ac0000413d000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f000000080200002900000000001204350000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000008030000290000000002030433000008c602200197000000000101043b000000000401041a000008c504400197000000000224019f000000000021041b000000010110003900000007020000290000000002020433000000000021041b0000000b010000290000000602000029212c18200000040f000000400300043d00000044013000390000000a020000290000000000210435000000000100041000000024023000390000000000120435000008c7010000410000000000130435000800000003001d000000040130003900000000020004110000000000210435000008be01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000084c0010009c0000084c01008041000000c001100210000008c8011001c70000800502000039212c21270000040f00000001002001900000139a0000613d000000000201043b00000000010004140000084f02200197000000040020008c000012210000c13d0000000103000031000000200030008c000000200400003900000000040340190000124b0000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000f01000039000000200010043f00000040020000390000000001000019212c20ef0000040f00000bf60000013d000000440010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000002401900370000000000101043b000a00000001001d0000000401900370000000000101043b000b00000001001d0000001701000039000000000201041a000000ff0320018f000000010030008c000013980000c13d000008f70220019700000002022001bf000000000021041b0000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400400043d000008c00040009c0000139b0000213d000000000201043b0000004001400039000000400010043f000000000102041a000008c103100197000008c200100198000008c3010000410000000001006019000000000131019f000800000004001d00000000031404360000000102200039000000000202041a000700000003001d000900000002001d00000000002304350000000a0000006b000013980000613d000008c40010009c00000e8e0000213d000000000001004b00000e8e0000613d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000000090010006b00000fe80000a13d000000000200041a000900000002001d0000000a0020002a000002ac0000413d00000009020000290000000a01200029000500000001001d000000000010041b000000400100043d000600000001001d000008c00010009c00000008040000290000139b0000213d00000006050000290000004001500039000000400010043f0000002001500039000000000001043500000000000504350000000702000029000000000202043300000000030404330000000000210435000008c101300197000008c200300198000008c3020000410000000002006019000000000112019f00000000001504350000000a02000029000008c101200197000008c200200198000008c3020000410000000002006019000000000112019f0000000002040433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f0000000001120019000008c20210009a000008c50020009c000002ac0000413d000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f000000080200002900000000001204350000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000008030000290000000002030433000008c602200197000000000101043b000000000401041a000008c504400197000000000224019f000000000021041b000000010110003900000007020000290000000002020433000000000021041b0000000b010000290000000602000029212c18200000040f000000400300043d00000044013000390000000a020000290000000000210435000000000100041000000024023000390000000000120435000008c70100004100000000001304350000000002000411000800000003001d00000004013000390000000000210435000008be01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000084c0010009c0000084c01008041000000c001100210000008c8011001c70000800502000039212c21270000040f00000001002001900000139a0000613d000000000201043b00000000010004140000084f02200197000000040020008c000011a70000c13d0000000103000031000000200030008c00000020040000390000000004034019000011d10000013d000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000000000010043f0000000b01000039000000200010043f00000040020000390000000001000019212c20ef0000040f000000000101041a000000800010043f000008bf010000410000212d0001042e0000000001000416000000000001004b000013980000c13d0000000d01000039000000000101041a0000084f01100197000000800010043f000008bf010000410000212d0001042e0000000002000416000000000002004b000013980000c13d212c13cb0000040f212c203f0000040f000000400200043d00000000001204350000084c0020009c0000084c020080410000004001200210000008d1011001c70000212d0001042e000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000001701000039000000000201041a000000ff0320018f000000010030008c000013980000c13d000008f70220019700000002022001bf000000000021041b00000000010004110000000b02000029212c17c30000040f000000000001004b00000ce10000c13d000008e501000041000000000010043f0000000101000039000000040010043f000008e6010000410000212e00010430000000840010008c000013980000413d0000000002000416000000000002004b000013980000c13d0000000402900370000000000502043b0000084f0050009c000013980000213d0000002402900370000000000202043b0000084f0020009c000013980000213d0000006403900370000000000403043b000008ca0040009c000013980000213d0000002303400039000000000013004b000013980000813d0000000406400039000000000369034f000000000303043b000008ca0030009c0000139b0000213d0000001f08300039000008f8088001970000003f08800039000008f808800197000008cf0080009c0000139b0000213d0000008008800039000000400080043f000000800030043f00000000043400190000002404400039000000000014004b000013980000213d0000002001600039000000000b09034f000000000419034f000008f8063001980000001f0730018f000000a00160003900000c550000613d000000a008000039000000000904034f000000009a09043c0000000008a80436000000000018004b00000c510000c13d000000000007004b00000c620000613d000000000464034f0000000306700210000000000701043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000410435000000a00130003900000000000104350000004401b00370000000000301043b00000080040000390000000001050019212c14c70000040f00000000010000190000212d0001042e000000240010008c000013980000413d0000000001000416000000000001004b000013980000c13d0000000401900370000000000101043b000b00000001001d0000084f0010009c000013980000213d0000000201000039000000000101041a0000084f011001970000000002000411000000000012004b00000000010000390000000101006039212c14070000040f0000000301000039000000000201041a00000850022001970000000b022001af000000000021041b00000000010000190000212d0001042e0000000001000416000000000001004b000013980000c13d0000000001000412000d00000001001d000c00000000003d0000800501000039000000440300003900000000040004150000000d0440008a0000000504400210000008be02000041212c21040000040f00000bf70000013d0000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400400043d000008c00040009c0000139b0000213d000000000101043b0000004002400039000000400020043f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f000a00000004001d00000000022404360000000101100039000000000101041a000900000002001d00000000001204350000000401000039000000000101041a000800000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d00000008020000290008084f0020019b000000000201043b0000000b01000029212c203f0000040f0000000a02000029000000000202043300000009030000290000000003030433000000400500043d000008d304000041000000000045043500000004045000390000000b0600002900000000006404350000004404500039000000000034043500000024035000390000000000130435000008c101200197000008c200200198000008c3020000410000000002006019000000000112019f000b00000005001d0000006402500039000000000012043500000000010004140000000803000029000000040030008c00000f730000c13d0000000301000367000000010300003100000f840000013d0000000b01000029000000000010043f0000000b01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000000001004b00000d420000c13d0000000c01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000101041a000000ff0010019000000d420000c13d0000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400200043d000a00000002001d000008f10020009c0000139b0000813d000000000101043b0000000a040000290000004002400039000000400020043f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000022404360000000101100039000000000101041a000900000001001d00000000001204350000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000400200043d000800000002001d000000000101043b000000090010006c000010830000813d00000008030000290000004401300039000008f30200004100000000002104350000002401300039000000160200003900000000002104350000085d0100004100000000001304350000000401300039000000200200003900000000002104350000084c0030009c0000084c030080410000004001300210000008c9011001c70000212e00010430000000400100043d0000004402100039000008f00300004100000000003204350000002402100039000000080300003900000000003204350000085d0200004100000000002104350000000402100039000000200300003900000000003204350000084c0010009c0000084c010080410000004001100210000008c9011001c70000212e00010430000000000080043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400900043d000008cf0090009c0000139b0000213d000000000101043b0000008002900039000000400020043f000000000201041a000008d003200197000000010400008a000008d00030009c000000000400c01900000080034002100000008004200270000000000334019f000000800000008b0000000003026019000008c104200197000008c200200198000008c3020000410000000002006019000000000242019f000000000a290436000008c102300197000008c200300198000008c3030000410000000003006019000000000223019f00000000002a04350000006003900039000000400490003900000002021000390000000101100039000000000501041a000900000004001d0000000000540435000000000102041a000400000003001d00000000001304350000000b080000290000000a0050006b000000d40000213d000008d61050012a0000000001150049000800000000001d000600000009001d00050000000a001d000008d70410009c000002ac0000813d0000000a0b0000290000000000b4004b0000000001000019000000000200001900000daf0000213d000700000005001d000b00000008001d000300000004001d000000000040043f0000000a01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b000000000201041a000008c101200197000008c200200198000008c3020000410000000002006019000000000212019f000000030b0000290000000b080000290000000609000029000000050a000029000000070500002900000000035b004b000002ac0000413d000008c104300197000008c200300198000008c3030000410000000003006019000000000543019f00000000040a0433000008c103400197000008c200400198000008c3040000410000000004006019000000000634019f00000000055600a9000008c200500198000008c3060000410000000006006019000008c107500197000000000676019f000000000056004b000002ac0000c13d0000000006090433000008c107600197000008c200600198000008c3060000410000000006006019000000000676019f0000000005560049000008c20650009a000008c50060009c000002ac0000413d000008c106500197000008c205500198000008c3070000410000000007006019000000000667019f0000000000690435000008c200200198000008c3020000410000000002006019000000000112019f000008c200400198000008c3020000410000000002006019000000000232019f0000000001120019000008c20210009a000008c50020009c000002ac0000413d000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f00000000001a0435000000000005004b00000de90000613d0000000000090435000008d00010009c00000dec0000413d00000000000a043500000009010000290000000000b10435000000010080003a000002ac0000413d000000010880003900070000000b001d0000000a00b0006c00000ff20000613d000b00000008001d000000000080043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000006090000290000000002090433000008c602200197000000050a00002900000000030a04330000008003300210000000000223019f000000000101043b000000000021041b000000090200002900000000020204330000000103100039000000000023041b000000020110003900000004020000290000000002020433000000000021041b0000000801000029000000fe0010008c000800010010003d000000070100002900000000050100190000000b0800002900000d8d0000413d00000ff50000013d000a00000001001d0000000b01000029000000000010043f0000000b01000039000000200010043f00000040020000390000000001000019212c20ef0000040f0000000a02000029000000000021041b00000000010000190000212d0001042e000000000300001900000005040000290000000001000019000000000041001a000002ac0000413d0000000005410019000008f90050009c000002ac0000613d000800000004001d000b00000003001d000900000001001d000700000005001d00000001015000390000000101100270000a00000001001d000000000010043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b0000000201100039000000000101041a000000060010006c0000000b0300002900000e4d0000a13d000000070000006b0000000901000029000002ac0000613d0000000a02000029000000010420008a00000e4f0000013d0000000a0100002900000008040000290000007e0030008c000006e80000213d0000000103300039000000000041004b00000e290000413d000006e80000013d000000400100043d0000004402100039000008eb03000041000000000032043500000024021000390000000c0300003900000d480000013d00000000040000190000000001000019000000000021001a000002ac0000413d000b00000021001d000000010300008a0000000b0030006b000002ac0000613d000a00000004001d000800000002001d000900000001001d0000000601000029000000000010043f0000000801000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d0000000b05000029000008e70050009c000003010000213d00000001025000390000000102200270000000000101043b00000003032000c900000000011300190000000201100039000000000101041a000000070010006c0000000a0400002900000e860000a13d000000000005004b0000000901000029000002ac0000613d000000010220008a00000e880000013d000000000102001900000008020000290000007e0040008c000002f00000213d0000000104400039000000000021004b00000e5e0000413d000002f00000013d000000400100043d0000004402100039000008e20300004100000000003204350000002402100039000000160300003900000d480000013d0000801002000039000b00000000001d0000000a01000029000000000010043f0000001201000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c7212c21270000040f00000001002001900000000b03000029000013980000613d000000000101043b000000000030043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039000b00000003001d212c21270000040f0000000b050000290000000100200190000013980000613d00000009020000290000000002020433000000000025004b000003010000813d00000005025002100000000702200029000000000101043b000000000101041a00000000001204350000000105500039000b00000005001d000000080050006c000080100200003900000e970000413d000009f40000013d0000000b02000029000000040020006c0000000005000019000010010000c13d0000000a010000290000000001010433000000000051001a000002ac0000413d00000000025100190000000801000029212c1fc90000040f00000c000000013d000000400200043d000400000002001d000008cf0020009c0000139b0000213d000000000101043b00000004050000290000008002500039000000400020043f000000090200002900000003022000c90000000001210019000000000201041a000008d003200197000000010400008a000008d00030009c0000000003000019000000000304601900000080033002100000008004200270000000000334019f000000800000008b0000000003026019000008c104200197000008c200200198000008c3020000410000000002006019000000000242019f0000000004250436000008c102300197000008c200300198000008c3030000410000000003006019000000000223019f000100000004001d00000000002404350000000102100039000000000202041a0000004003500039000200000003001d000000000023043500000002011000390000006002500039000000000101041a00000000001204350000000601000039000000000101041a000300000001001d000000000001004b0000000002000019000010460000c13d000900000002001d000000000020043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400200043d000008cf0020009c0000139b0000213d000000000101043b0000008003200039000000400030043f000000000301041a000008d004300197000008d00040009c000000010400008a000000000400c01900000080044002100000008005300270000000000445019f000000800000008b0000000004036019000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f00000020052000390000000000450435000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f00000000003204350000006003200039000000400420003900000002021000390000000101100039000000000101041a000a00000004001d000800000001001d0000000000140435000000000102041a000b00000003001d00000000001304350000000903000029000000030030006c000010e30000813d00000009010000290000000101100039000000000010043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000400200043d000008cf0020009c0000139b0000213d000000000101043b0000008003200039000000400030043f000000000301041a000008d004300197000008d00040009c000000010400008a000000000400c01900000080044002100000008005300270000000000445019f000000800000008b0000000004036019000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f00000020052000390000000000450435000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f00000000003204350000000103100039000000000303041a0000004004200039000000000034043500000060022000390000000201100039000000000101041a00000000001204350000000b0200002900000000020204330009000000210053000002ac0000413d0000000a010000290000000001010433000000000213004b000002ac0000413d000010f50000013d00000000020300190000000b030000290000084c0030009c0000084c0300804100000040033002100000084c0010009c0000084c01008041000000c001100210000000000131019f0000085e011001c7212c21270000040f00000060031002700001084c0030019d0000084c0330019700030000000103550000000100200190000010280000613d000008f8053001980000001f0630018f0000000b0450002900000f8e0000613d000000000701034f0000000b08000029000000007907043c0000000008980436000000000048004b00000f8a0000c13d000000000006004b00000f9b0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f01300039000008f8041001970000000b01400029000000000041004b00000000040000390000000104004039000008ca0010009c0000139b0000213d00000001004001900000139b0000c13d000000400010043f000008c40030009c000013980000213d000000200030008c000013980000413d0000000b040000290000000004040433000008ca0040009c000013980000213d0000000b053000290000000b034000290000001f04300039000000000054004b0000000006000019000008d006008041000008d004400197000008d007500197000000000874013f000000000074004b0000000004000019000008d004004041000008d00080009c000000000406c019000000000004004b000013980000c13d0000000043030434000008ca0030009c0000139b0000213d0000001f06300039000008f8066001970000003f06600039000008f8026001970000000002120019000008ca0020009c0000139b0000213d000000400020043f00000000023104360000000006430019000000000056004b000013980000213d000000000003004b00000fd70000613d000000000500001900000000062500190000000007450019000000000707043300000000007604350000002005500039000000000035004b00000fd00000413d000000000223001900000000000204350000002002000039000000400300043d000b00000003001d0000000002230436212c13b90000040f0000000b0200002900000000012100490000084c0010009c0000084c0100804100000060011002100000084c0020009c0000084c020080410000004002200210000000000121019f0000212d0001042e000000400100043d0000006402100039000008e30300004100000000003204350000004402100039000008e4030000410000000000320435000000240210003900000024030000390000005c0000013d0000000201000029000000040200002900000000001204350000000601000039000000000081041b000000000080043f0000000701000039000000200010043f00000040020000390000000001000019212c20ef0000040f0000000602000029212c18110000040f00000000010000190000212d0001042e0000000b020000290009000600200073000002ac0000413d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000000030210006c000002ac0000413d00000009012000b90000000b04000029000000060040006b000010190000613d00000009031000fa000000000023004b000002ac0000c13d00000007020000290000000002020433000000040220006b000002ac0000413d0000121f0000c13d000008e501000041000000000010043f0000001201000039000000040010043f000008e6010000410000212e00010430000000400100043d0000004402100039000008da0300004100000e580000013d0000001f0530018f0000084e06300198000000400200043d0000000004620019000010330000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000102f0000c13d000000000005004b000010400000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000084c0020009c0000084c020080410000004002200210000000000112019f0000212e00010430000000000300001900000003040000290000000002000019000000000042001a000002ac0000413d0000000005420019000008f90050009c000002ac0000613d000800000004001d000b00000003001d000900000002001d000600000005001d00000001015000390000000101100270000a00000001001d000000000010043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d000000000101043b0000000201100039000000000101041a000000070010006c0000000b030000290000106d0000a13d000000060000006b0000000902000029000002ac0000613d0000000a01000029000000010410008a0000106f0000013d0000000a0200002900000008040000290000007e0030008c00000eff0000213d0000000103300039000000000042004b000010490000413d00000eff0000013d000000400100043d0000004402100039000008db0300004100000000003204350000002402100039000000110300003900000d480000013d000000400100043d0000004402100039000008dc03000041000000000032043500000024021000390000001f0300003900000d480000013d0000000a010000290000000001010433000900000001001d000008c200100198000008c3010000410000000001006019000700000001001d0000000801000029000008c00010009c0000139b0000213d00000008020000290000004001200039000000400010043f0000000001020436000600000001001d00000000000104350000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d0000000902000029000008c10220019700000007042001af00000008020000290000000002020433000008c602200197000000000101043b000000000301041a000008c503300197000000000223019f000000000021041b000000010110003900000006020000290000000002020433000000000021041b000000000100041a000700000001001d000800000004001d0009000000410053000002ac0000413d0000000901000029000000000010041b000000400300043d000008c00030009c0000139b0000213d0000004001300039000000400010043f0000002001300039000000000001043500000000000304350000000b010000290000000a02000029212c18200000040f000000400300043d000000240130003900000008020000290000000000210435000008ec010000410000000000130435000a00000003001d000000040130003900000000020004110000000000210435000008be01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000084c0010009c0000084c01008041000000c001100210000008c8011001c70000800502000039212c21270000040f00000001002001900000139a0000613d000000000201043b00000000010004140000084f02200197000000040020008c000012b20000c13d0000000103000031000000200030008c00000020040000390000000004034019000012dc0000013d0009000500100073000002ac0000413d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b000000080210006c000002ac0000413d0000000a010000290000000001010433000000090000006b000011050000613d0000000b030000290000000003030433000000070430006b000002ac0000413d00000000032400a9000000000002004b000011010000613d00000000022300d9000000000042004b000002ac0000c13d00000009023000fa000000000012001a000002ac0000413d000000000112001900000002020000290000000002020433000000000121004b000002ac0000413d000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f00000001020000290000000002020433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000011200a9000008c200100198000008c3020000410000000002006019000008c103100197000000000232019f000000000012004b000002ac0000c13d00000004020000290000000002020433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f0000000001120049000008c20210009a000008c50020009c000002ac0000413d000008c200100198000008c3020000410000000002006019000008c103100197000000000232019f00000004030000290000000000230435000008c601100197000008c40020009c000000000100201900000c000000013d0000000702000029000008c00020009c00000008050000290000139b0000213d000000000200041a000600000002001d00000007070000290000004002700039000000400020043f0000002002700039000000000002043500000000000704350000000003050433000000090600002900000000040604330000000000420435000008c102300197000008c200300198000008c3030000410000000003006019000000000223019f00000000002704350000000002050433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f000000000025043500000000001604350000000b01000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000013980000613d00000008030000290000000002030433000008c602200197000000000101043b000000000401041a000008c504400197000000000224019f000000000021041b000000010110003900000009020000290000000002020433000000000021041b0000000b010000290000000702000029212c18200000040f00000009010000290000000006010433000000400100043d00000060021000390000000a0300002900000000003204350000000b02000029000000000221043600000003030000390000004004100039000000000034043500000000000204350000084c0010009c0000084c01008041000000400110021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008cb011001c70000800d02000039000008cc040000410000000005000411212c21220000040f0000000100200190000013980000613d000000400100043d00000020021000390000000603000029000000000032043500000000003104350000084c0010009c0000084c01008041000000400110021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f00000851011001c70000800d020000390000000103000039000008cd04000041212c21220000040f0000000100200190000013980000613d0000001701000039000000000201041a000008f7022001970000064c0000013d000000000032004b000002ac0000413d00000000025400d9000000000062004b000002ac0000c13d00000000051400d900000ec50000013d00000008030000290000084c0030009c0000084c0300804100000040033002100000084c0010009c0000084c01008041000000c001100210000000000131019f000008c9011001c7212c21220000040f00000060031002700000084c03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000805700029000011c00000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b000011bc0000c13d000000000006004b000011cd0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000129a0000613d0000001f01400039000000600110018f0000000802100029000000000012004b00000000010000390000000101004039000600000002001d000008ca0020009c0000139b0000213d00000001001001900000139b0000c13d0000000601000029000000400010043f000000200030008c000013980000413d00000008010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000013980000c13d000000000001004b00000c1c0000613d00000007010000290000000001010433000800000001001d000000060300002900000020013000390000000a0200002900000000002104350000000b010000290000000000130435000000400130003900000000000104350000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000603000029000000600230003900000000001204350000084c0030009c0000084c03008041000000400130021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008cb011001c70000800d020000390000000303000039000008cc0400004100000000050004110000000806000029212c21220000040f0000000100200190000013980000613d000000400100043d000000200210003900000005030000290000000000320435000000090200002900000000002104350000084c0010009c0000084c0100804100000040011002100000000002000414000011910000013d00000000052100d900000ec50000013d00000008030000290000084c0030009c0000084c0300804100000040033002100000084c0010009c0000084c01008041000000c001100210000000000131019f000008c9011001c7212c21220000040f00000060031002700000084c03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000008057000290000123a0000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b000012360000c13d000000000006004b000012470000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012a60000613d0000001f01400039000000600110018f0000000802100029000000000012004b00000000010000390000000101004039000600000002001d000008ca0020009c0000139b0000213d00000001001001900000139b0000c13d0000000601000029000000400010043f000000200030008c000013980000413d00000008010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000013980000c13d000000000001004b0000000b0300002900000c1c0000613d00000007010000290000000001010433000800000001001d000000060400002900000040014000390000000202000039000000000021043500000020014000390000000a02000029000000000021043500000000003404350000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000603000029000000600230003900000000001204350000084c0030009c0000084c03008041000000400130021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008cb011001c70000800d020000390000000303000039000008cc0400004100000000050004110000000806000029212c21220000040f0000000100200190000013980000613d000000400100043d000000200210003900000005030000290000000000320435000000090200002900000000002104350000084c0010009c0000084c0100804100000040011002100000000002000414000011910000013d0000001f0530018f0000084e06300198000000400200043d0000000004620019000010330000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012a10000c13d000010330000013d0000001f0530018f0000084e06300198000000400200043d0000000004620019000010330000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012ad0000c13d000010330000013d0000000a030000290000084c0030009c0000084c0300804100000040033002100000084c0010009c0000084c01008041000000c001100210000000000131019f000008ed011001c7212c21220000040f00000060031002700000084c03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a05700029000012cb0000613d000000000801034f0000000a09000029000000008a08043c0000000009a90436000000000059004b000012c70000c13d000000000006004b000012d80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000013a10000613d0000001f01400039000000600210018f0000000a01200029000000000021004b00000000020000390000000102004039000008ca0010009c0000139b0000213d00000001002001900000139b0000c13d000000400010043f000000200030008c000013980000413d0000000a010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000013980000c13d000000000001004b0000000b0100002900000c1c0000613d212c1b6d0000040f000000400100043d000a00000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000a03000029000000400230003900000000001204350000002001300039000000080200002900000000002104350000000b0100002900000000001304350000084c0030009c0000084c03008041000000400130021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008ee011001c70000800d020000390000000203000039000008f2040000410000000005000411212c21220000040f0000000100200190000013980000613d000000400100043d000000200210003900000009030000290000000000320435000000070200002900000000002104350000084c0010009c0000084c0100804100000040011002100000000002000414000011910000013d0000000a030000290000084c0030009c0000084c0300804100000040033002100000084c0010009c0000084c01008041000000c001100210000000000131019f000008ed011001c7212c21220000040f00000060031002700000084c03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a057000290000133e0000613d000000000801034f0000000a09000029000000008a08043c0000000009a90436000000000059004b0000133a0000c13d000000000006004b0000134b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000013ad0000613d0000001f01400039000000600210018f0000000a01200029000000000021004b00000000020000390000000102004039000008ca0010009c0000139b0000213d00000001002001900000139b0000c13d000000400010043f000000200030008c000013980000413d0000000a010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000013980000c13d000000000001004b0000000b0100002900000c1c0000613d212c1b6d0000040f000000400100043d000a00000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f00000001002001900000139a0000613d000000000101043b0000000a03000029000000400230003900000000001204350000002001300039000000080200002900000000002104350000000b0100002900000000001304350000084c0030009c0000084c03008041000000400130021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008ee011001c70000800d020000390000000203000039000008ef040000410000000005000411212c21220000040f0000000100200190000013980000613d000000400100043d000000200210003900000009030000290000000000320435000000070200002900000000002104350000084c0010009c0000084c0100804100000040011002100000000002000414000011910000013d00000000010000190000212e00010430000000000001042f000008e501000041000000000010043f0000004101000039000000040010043f000008e6010000410000212e000104300000001f0530018f0000084e06300198000000400200043d0000000004620019000010330000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013a80000c13d000010330000013d0000001f0530018f0000084e06300198000000400200043d0000000004620019000010330000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013b40000c13d000010330000013d00000000430104340000000001320436000000000003004b000013c50000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000013be0000413d000000000213001900000000000204350000001f02300039000008f8022001970000000001210019000000000001042d000008c40010009c000013d50000213d000000430010008c000013d50000a13d00000002020003670000000401200370000000000101043b0000002402200370000000000202043b000000000001042d00000000010000190000212e00010430000008fa0020009c000013dc0000813d00000003022000c90000000001120019000000000001042d000008e501000041000000000010043f0000003201000039000000040010043f000008e6010000410000212e000104300000006006100039000000000056043500000040051000390000000000450435000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f00000020041000390000000000340435000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000002104350000008001100039000000000001042d000008c40010009c000014050000213d000000630010008c000014050000a13d00000002030003670000000401300370000000000101043b0000084f0010009c000014050000213d0000002402300370000000000202043b0000084f0020009c000014050000213d0000004403300370000000000303043b000000000001042d00000000010000190000212e00010430000000000001004b0000140a0000613d000000000001042d000000400100043d0000004402100039000008fb0300004100000000003204350000002402100039000000110300003900000000003204350000085d0200004100000000002104350000000402100039000000200300003900000000003204350000084c0010009c0000084c010080410000004001100210000008c9011001c70000212e000104300006000000000002000400000001001d0000000601000039000000000101041a000000000010043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000014bf0000613d000000400900043d000008fc0090009c000014c10000813d000000000101043b0000008002900039000000400020043f000000000201041a000008d003200197000000010400008a000008d00030009c000000000400c01900000080034002100000008004200270000000000334019f000000800000008b0000000003026019000008c104200197000008c200200198000008c3020000410000000002006019000000000242019f000000000a290436000008c102300197000008c200300198000008c3030000410000000003006019000000000223019f00000000002a04350000006002900039000000400b90003900000002031000390000000101100039000000000401041a00000000004b0435000000000103041a0000000000120435000008d61040012a0000000001140049000000000c0000190000000408000029000300000009001d00020000000a001d00010000000b001d000008d70510009c000014b90000813d000000000085004b000000000200001900000000030000190000000001080019000014790000213d00060000000c001d000500000005001d000000000050043f0000000a01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000014bf0000613d000000010b00002900000000040b0433000000000101043b000000000101041a000008c102100197000008c200100198000008c3010000410000000001006019000000000321019f000000050100002900000004080000290000000309000029000000020a000029000000060c000029000000000441004b000014b90000413d000008c105400197000008c200400198000008c3040000410000000004006019000000000554019f00000000040a0433000008c106400197000008c200400198000008c3040000410000000004006019000000000464019f00000000055400a9000008c200500198000008c3060000410000000006006019000008c107500197000000000676019f000000000056004b000014b90000c13d0000000006090433000008c107600197000008c200600198000008c3060000410000000006006019000000000676019f0000000005560049000008c20650009a000008c50060009c000014b90000413d000008c107500197000008c200500198000008c3060000410000000006006019000000000576019f0000000000590435000000000081004b000014b30000613d000008c200300198000008c3030000410000000003006019000000000223019f0000000002240019000008c20320009a000008c50030009c000014b90000413d000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000002a043500000000001b0435000000fe00c0008c000000010cc000390000000004010019000014560000413d000008c200600198000014b70000613d00000000000904350000000005000019000008c601500197000000000001042d000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e0001043000000000010000190000212e00010430000008e501000041000000000010043f0000004101000039000000040010043f000008e6010000410000212e000104300004000000000002000300000004001d000400000002001d0000000004000411000100000001001d000200000003001d212c15860000040f000008fd0100004100000000001004430000000401000029000000040010044300000000010004140000084c0010009c0000084c01008041000000c001100210000008fe011001c70000800202000039212c21270000040f0000000100200190000015510000613d000000000101043b000000000001004b0000154e0000613d000000400b00043d0000006401b00039000000800200003900000000002104350000004401b000390000000202000029000000000021043500000001010000290000084f011001970000002402b000390000000000120435000008ff0100004100000000001b04350000000401b00039000000000200041100000000002104350000008403b00039000000030100002900000000210104340000000000130435000000a403b00039000000000001004b000014fd0000613d000000000400001900000000053400190000000006420019000000000606043300000000006504350000002004400039000000000014004b000014f60000413d00000000023100190000000000020435000000000300041400000004020000290000084f02200197000000040020008c000015090000c13d0000000103000031000000200030008c000000200400003900000000040340190000153b0000013d0000001f01100039000008f801100197000000a4011000390000084c0010009c0000084c0100804100000060011002100000084c00b0009c0000084c0400004100000000040b40190000004004400210000000000141019f0000084c0030009c0000084c03008041000000c003300210000000000113019f00040000000b001d212c21220000040f000000040b00002900000060031002700000084c03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000152a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000015260000c13d000000000006004b000015370000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000015680000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008ca0010009c000015520000213d0000000100200190000015520000c13d000000400010043f0000001f0030008c0000154f0000a13d00000000020b0433000008f6002001980000154f0000c13d0000090002200197000008ff0020009c000015580000c13d000000000001042d00000000010000190000212e00010430000000000001042f000008e501000041000000000010043f0000004101000039000000040010043f000008e6010000410000212e000104300000004402100039000009010300004100000000003204350000002402100039000000190300003900000000003204350000085d0200004100000000002104350000000402100039000000200300003900000000003204350000084c0010009c0000084c010080410000004001100210000008c9011001c70000212e000104300000001f0530018f0000084e06300198000000400200043d0000000004620019000015730000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000156f0000c13d000000000005004b000015800000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000084c0020009c0000084c020080410000004002200210000000000121019f0000212e000104300006000000000002000500000004001d000200000002001d000400000001001d000600000003001d000000000030043f0000000b01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a000000000001004b000017b10000c13d0000000c01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a000000ff00100190000017b10000c13d0000000601000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a000300000001001d0000001001000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d00000003020000290000084f02200197000000000101043b000000000101041a000100000001001d000300000002001d000000000020043f0000001501000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d00000005020000290000084f02200197000500000002001d000000000101043b000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f00000005030000290000000100200190000017a30000613d000000000101043b000000030030006b000015f10000613d00000001020000290000084f02200197000000000023004b000015f10000613d000000000101041a000000ff00100190000017a30000613d0000000601000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a0005084f0010019b00000004010000290000084f01100197000000050010006b000017a50000c13d0000000601000029000000000010043f0000001001000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000201041a0000084f00200198000016180000613d0000085002200197000000000021041b0000000601000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a0000084f01100197000000050010006c000017a50000c13d0000000601000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000201041a0000085002200197000000000021041b0000000501000029000000000010043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a000400000001001d000000000001004b000017ab0000613d0000000601000029000000000010043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d00000004020000290004000100200092000000000101043b000000000301041a0000000501000029000000000010043f0000001201000039000000200010043f000000040030006b000016820000c13d00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000402000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000001041b0000000601000029000000000010043f0000001301000039000000200010043f0000000001000414000016e90000013d000300000003001d00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000402000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a000100000001001d0000000501000029000000000010043f0000001201000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000302000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000102000029000000000021041b000000000020043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000302000029000000000021041b0000000501000029000000000010043f0000001201000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000402000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000001041b0000000601000029000000000010043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000001041b0000000501000029000000000010043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000201041a000000000002004b000017ab0000613d000000010220008a000000000021041b0000000601000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a0000084f00100198000017a50000c13d0000000601000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d00000002020000290000084f03200197000000000101043b000000000201041a0000085002200197000000000232019f000000000021041b000300000003001d000000000030043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000101041a000400000001001d0000001201000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000402000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000602000029000000000021041b000000000020043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000402000029000000000021041b0000000301000029000000000010043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b000000000201041a000000010220003a000017ab0000613d000000000021041b0000000601000029000000000010043f0000000501000039000000200010043f0000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f0000000100200190000017c20000613d000000000101043b000400000001001d00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000017a30000613d000000000101043b0000000402000029000000000021041b00000000010004140000084c0010009c0000084c01008041000000c00110021000000858011001c70000800d0200003900000004030000390000085904000041000000050500002900000003060000290000000607000029212c21220000040f0000000100200190000017a30000613d000000000001042d00000000010000190000212e00010430000008e501000041000000000010043f0000000101000039000000040010043f000008e6010000410000212e00010430000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e00010430000000400100043d0000004402100039000008f00300004100000000003204350000002402100039000000080300003900000000003204350000085d0200004100000000002104350000000402100039000000200300003900000000003204350000084c0010009c0000084c010080410000004001100210000008c9011001c70000212e00010430000000000001042f0003000000000002000300000001001d000000000020043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f00000001002001900000180f0000613d000000000101043b000000000101041a000200000001001d0000001001000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f00000001002001900000180f0000613d00000002020000290000084f02200197000000000101043b000000000101041a000100000001001d000200000002001d000000000020043f0000001501000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f00000001002001900000180f0000613d00000003020000290000084f02200197000000000101043b000300000002001d000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f00000001002001900000180f0000613d0000000304000029000000020040006b0000000002000039000000010200603900000001030000290000084f03300197000000000034004b0000000003000039000000010300603900000000003201a0000000000101043b000000000101041a000000ff0110018f000000010100c039000000000001042d00000000010000190000212e000104300000000043020434000008c60330019700000000040404330000008004400210000000000334019f000000000031041b000000400320003900000000030304330000000104100039000000000034041b000000020110003900000060022000390000000002020433000000000021041b000000000001042d0017000000000002000900000003001d000e00000001001d000000400100043d000b00000001001d000008fc0010009c00001b610000813d0000000b030000290000008001300039000000400010043f00000060013000390000000000010435000000400130003900000000000104350000000001030436000600000001001d0000000000010435000000400100043d000d00000001001d000008cf0010009c00001b610000213d0000000d030000290000008001300039000000400010043f0000006001300039000700000001001d00000000000104350000004001300039000800000001001d00000000000104350000000001030436000a00000001001d00000000000104350000000601000039000000000101041a001700000001001d0000000e0000006b0000002001200039000c00000001001d000018d70000613d001600000002001d0000000001010433001500000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f000000010020019000001b600000613d000000000101043b000000150010006b0000001602000029000018830000a13d0000000002020433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f000008c40020009c000018830000213d000000000002004b000018830000613d000009020320012a000008c102300197000008c200300198000008c3030000410000000003006019000000000423019f000000060500002900000000004504350000000c040000290000000004040433000000000414004b00001b580000413d000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f000008c200300198000008c3030000410000000003006019000000000223019f00000000024200a9000008c200200198000008c3030000410000000003006019000008c104200197000000000343019f000000000023004b00001b580000c13d0000000b030000290000000000230435000000090200002900000020062000390000000002060433000000000012004b000018b10000a13d00000009020000290000000002020433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f000008c40020009c000018b10000213d000000000002004b000018b10000613d000009020320012a000008c102300197000008c200300198000008c3030000410000000003006019000000000423019f0000000a0500002900000000004504350000000004060433000000000114004b00001b580000413d000008c104100197000008c200100198000008c3010000410000000001006019000000000141019f000008c200300198000008c3030000410000000003006019000000000223019f00000000011200a9000008c200100198000008c3020000410000000002006019000008c103100197000000000232019f000000000012004b00001b580000c13d0000000d020000290000000000120435001600000006001d0000000c010000290000000001010433000000000010043f0000000a01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d000000000101043b000000000101041a000008c103100197000008c200100198000008c3010000410000000001006019000000000431019f00000016010000290000000001010433000000000001004b000400000003001d000300000004001d000018db0000613d0000000c020000290000000002020433000000000021004b000018e10000c13d000200000003001d000100000004001d000000400300043d000008cf0030009c000018f60000a13d00001b610000013d000400000000001d000200000000001d000300000000001d000018dc0000013d000200000000001d000100000000001d000000400300043d000008cf0030009c000018f60000a13d00001b610000013d000000000010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d000000000101043b000000000101041a000208c10010019b000008c200100198000008c301000041000000000100601900000002011001af000100000001001d000000400300043d000008cf0030009c00001b610000213d0000008001300039000000400010043f0000000001030436001200000001001d00000000000104350000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039001300000003001d212c21270000040f000000010020019000001b600000613d000000000201043b00000013010000290000004001100039001100000001001d001600000002001d00000000002104350000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f000000010020019000001b600000613d000000000301043b0000001308000029000000600180003900000000003104350000001707000029000000000007004b0000000702000039000500000003001d000019550000613d000000000070043f000000200020043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d000000400800043d000008cf0080009c00001b610000213d000000000101043b0000008002800039000000400020043f000000000201041a000008d003200197000000010400008a000008d00030009c000000000400c01900000080034002100000008004200270000000000334019f000000800000008b0000000003026019000008c104200197000008c200200198000008c3020000410000000002006019000000000242019f0000000009280436000008c102300197000008c200300198000008c3030000410000000003006019000000000223019f00000000002904350000006003800039000000400a80003900000002021000390000000101100039000000000501041a00000000005a0435000000000102041a001000000003001d00000000001304350000001707000029000000160050006b0000195c0000213d000019620000013d001000000001001d000000110a00002900000000050a043300000000010300190000001209000029000000160050006b000019620000a13d000000050110006b00001b580000413d000008d5021000d1000008d50220012a000000000021004b00001b580000c13d000008d61050012a00000000041500490000000001000019001300000008001d001200000009001d00110000000a001d001500000001001d000008d70440009c00001b580000813d000000160b0000290000000000b4004b000000000100001900000000030000190000198c0000213d001400000005001d001700000007001d000f00000004001d000000000040043f0000000a01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d000000000101043b000000000201041a000008c101200197000008c200200198000008c3020000410000000002006019000000000312019f0000000f0b000029000000170700002900000013080000290000001209000029000000110a000029000000140500002900000000025b004b00001b580000413d000008c104200197000008c200200198000008c3020000410000000002006019000000000242019f0000000004090433000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f00000000022400a9000008c200200198000008c3050000410000000005006019000008c106200197000000000565019f000000000025004b00001b580000c13d0000000005080433000008c106500197000008c200500198000008c3050000410000000005006019000000000565019f0000000002250049000008c20520009a000008c50050009c00001b580000413d000008c106200197000008c205200198000008c3020000410000000002006019000000000262019f0000000000280435000008c200300198000008c3030000410000000003006019000000000113019f0000000001410019000008c20310009a000008c50030009c00001b580000413d000008c103100197000008c200100198000008c3010000410000000001006019000000000331019f0000000000390435000000000005004b000019c70000c13d000008d00030009c000019cb0000813d0000000000ba0435000000010070003a00001b580000413d000019d00000013d00000000000804350000000002000019000008d00030009c000019c30000413d000000000009043500000000030000190000000000ba0435000000010070003a00001b580000413d00000001077000390000001600b0006c000019fa0000613d00140000000b001d001700000007001d000000000070043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d0000001209000029000000000309043300000013080000290000000002080433000008c6042001970000008005300210000000000445019f000000000101043b000000000041041b000000110a00002900000000040a04330000000105100039000000000045041b000000020110003900000010040000290000000004040433000000000041041b0000001501000029000000fe0010008c0000000101100039000000140400002900000000050400190000001707000029000019680000413d000019fd0000013d0000001001000029000000050400002900000000004104350000000601000039000000000071041b0000000e0000006b00001ac10000613d00000006010000290000000001010433000008c104100197000008c200100198000008c3010000410000000001006019000000000141019f0000000a040000290000000004040433000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f0000000001140049000008c20410009a000008c50040009c00001b580000413d000008c104100197000008c200100198000008c3010000410000000001006019000000000141019f000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f0000000001130019000008c20310009a000008c50030009c00001b580000413d000008c103100197000008c201100198000008c3040000410000000004006019000000000334019f00000000003904350000000b030000290000000003030433000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f0000000d040000290000000004040433000008c105400197000008c200400198000008c3040000410000000004006019000000000454019f0000000003340049000008c20430009a000008c50040009c00001b580000413d000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f000008c104200197000008c200200198000008c3020000410000000002006019000000000242019f0000000002320019000008c20320009a000008c50030009c00001b580000413d000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f0000000000280435000000000001004b00001a500000613d0000000000090435000008d00020009c00001a530000413d0000000000080435000000000070043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d00000013020000290000000002020433000008c602200197000000120300002900000000030304330000008003300210000000000223019f000000000101043b000000000021041b000000110200002900000000020204330000000103100039000000000023041b000000020110003900000010020000290000000002020433000000000021041b0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f000000010020019000001b600000613d000000000301043b0000000c020000290000000001020433000000000031004b001700000003001d00001ad30000a13d0000000302000029000008c200200198000008c302000041000000000200601900000004022001af00000006030000290000000003030433000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f0000000004230019000008c20240009a000008c50020009c00001b580000413d000000090200002900000020032000390000000002030433000000000012004b001600000003001d00001aa70000c13d000008c102400197000008c200400198000008c3030000410000000003006019000000000223019f0000000a030000290000000003030433000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f0000000004320049000008c20240009a000008c50020009c00001b580000413d001500000004001d000000000010043f0000000a01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d0000001502000029000008c602200197000000000101043b000000000301041a000008c503300197000000000223019f000000000021041b0000000c0200002900000016010000290000000001010433000000170010006c00001ad80000213d00001aff0000013d000000000070043f0000000701000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d000000000101043b000000130200002900000012030000290000001104000029000000100500002900001b4b0000013d000000090100002900000020011000390000000001010433000000000031004b00001aff0000a13d0000000002020433000000000021004b00001aff0000a13d0000000102000029000008c200200198000008c302000041000000000200601900000002022001af0000000a030000290000000003030433000008c104300197000008c200300198000008c3030000410000000003006019000000000343019f0000000002320049001600000002001d000008c20220009a000008c50020009c00001b580000413d000000000010043f0000000a01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d0000001602000029000008c602200197000000000101043b000000000301041a000008c503300197000000000223019f000000000021041b0000000e01000029000000000010043f0000000901000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d000000000101043b000000000101041a001600000001001d000000010010003a00001b580000413d0000000e01000029000000000010043f0000000901000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d00000016020000290000000102200039000000000101043b001600000002001d000000000021041b0000000801000029000000170200002900000000002104350000085201000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f000000010020019000001b600000613d000000000101043b000000070200002900000000001204350000000e01000029000000000010043f0000000801000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001b5e0000613d0000001602000029000008fa0020009c00001b670000813d00000003022000c9000000000101043b00000000012100190000000d020000290000000a03000029000000080400002900000007050000290000000002020433000008c60220019700000000030304330000008003300210000000000223019f000000000021041b00000000020404330000000103100039000000000023041b00000002011000390000000002050433000000000021041b000000000001042d000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e0001043000000000010000190000212e00010430000000000001042f000008e501000041000000000010043f0000004101000039000000040010043f000008e6010000410000212e00010430000008e501000041000000000010043f0000003201000039000000040010043f000008e6010000410000212e000104300005000000000002000400000001001d000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000101041a000500000001001d0000001001000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d00000005020000290000084f02200197000000000101043b000000000101041a000200000001001d000500000002001d000000000020043f0000001501000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d00000000020004110000084f02200197000000000101043b000300000002001d000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000303000029000000050030006b00001bb50000613d00000002020000290000084f02200197000000000023004b00001bb50000613d000000000101041a000000ff0010019000001d0b0000613d0000000401000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000101041a0005084f0010019c00001d030000613d0000000501000029000000000010043f0000001501000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000002000411000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d0000000003000411000000050030006b00001be70000613d000000000101043b000000000101041a000000ff0010019000001d030000613d0000000401000029000000000010043f0000001001000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000201041a0000085002200197000000000021041b00000000010004140000084c0010009c0000084c01008041000000c00110021000000858011001c70000800d020000390000000403000039000008f404000041000000050500002900000000060000190000000407000029212c21220000040f000000010020019000001d030000613d0000000401000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000101041a0000084f01100197000000050010006c00001d1b0000c13d0000000401000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000201041a0000085002200197000000000021041b0000000501000029000000000010043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000101041a000300000001001d000000000001004b00001d050000613d0000000401000029000000000010043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d00000003020000290003000100200092000000000101043b000000000301041a0000000501000029000000000010043f0000001201000039000000200010043f000000030030006b00001c700000c13d00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000302000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000001041b0000000401000029000000000010043f0000001301000039000000200010043f000000000100041400001cd70000013d000200000003001d00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000302000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000101041a000100000001001d0000000501000029000000000010043f0000001201000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000202000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000102000029000000000021041b000000000020043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000202000029000000000021041b0000000501000029000000000010043f0000001201000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b0000000302000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000001041b0000000401000029000000000010043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000001041b0000000501000029000000000010043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d030000613d000000000101043b000000000201041a000000000002004b00001d050000613d000000010220008a000000000021041b00000000010004140000084c0010009c0000084c01008041000000c00110021000000858011001c70000800d0200003900000004030000390000085904000041000000050500002900000000060000190000000407000029212c21220000040f000000010020019000001d030000613d000000000001042d00000000010000190000212e00010430000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e00010430000000400100043d0000004402100039000009030300004100000000003204350000085d020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000084c0010009c0000084c010080410000004001100210000008c9011001c70000212e00010430000008e501000041000000000010043f0000000101000039000000040010043f000008e6010000410000212e000104300001000000000002000000000010043f0000001401000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001d410000613d000000000101043b000000000101041a000100000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f000000010020019000001d430000613d000000000101043b000000010010006b00000000010000390000000101004039000000000001042d00000000010000190000212e00010430000000000001042f0008000000000002000500000003001d000800000002001d000700000001001d0000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039212c21270000040f000000010020019000001f6d0000613d000000000101043b0000000802100029000000000012004b00001f670000413d000008d63020012a000000070000006b00001f650000613d0004000000320051000000040010006b00001f7a0000a13d000008de0110009c00001f670000813d000000040010006b00001f8e0000213d0000000e01000039000000000201041a000800010020003e00001f670000613d0000000802000029000000000021041b00000005010000290006084f0010019c00001f740000613d0000000801000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d000000000101043b000000000101041a0000084f0010019800001f740000c13d0000000801000029000000000010043f0000000f01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d000000000101043b000000000201041a00000850022001970000000603000029000000000232019f000000000021041b000000000030043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d000000000101043b000000000101041a000300000001001d0000001201000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d000000000101043b0000000302000029000000000020043f000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d000000000101043b0000000802000029000000000021041b000000000020043f0000001301000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d000000000101043b0000000302000029000000000021041b0000000601000029000000000010043f0000001101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d000000000101043b000000000201041a000000010220003a00001f670000613d000000000021041b000008fd0100004100000000001004430000000501000029000000040010044300000000010004140000084c0010009c0000084c01008041000000c001100210000008fe011001c70000800202000039212c21270000040f000000010020019000001f6d0000613d000000400b00043d000000000101043b000000000001004b000000000300041100001e020000613d0000006401b00039000000800200003900000000002104350000004401b0003900000008020000290000000000210435000008ff0100004100000000001b04350000000401b0003900000000003104350000008401b0003900000000000104350000002401b00039000000000001043500000000010004140000000602000029000000040020008c00001e040000c13d0000000103000031000000200030008c0000002004000039000000000403401900001e300000013d00050000000b001d00001e410000013d0000084c00b0009c0000084c0300004100000000030b401900000040033002100000084c0010009c0000084c01008041000000c001100210000000000131019f00000906011001c700050000000b001d212c21220000040f000000050b00002900000060031002700000084c03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001e1f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001e1b0000c13d000000000006004b00001e2c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001fab0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000008ca0020009c00001f6e0000213d000000010010019000001f6e0000c13d000500000002001d000000400020043f000000200030008c00001f650000413d00000000010b0433000008ff0010009c00001f650000c13d00000000010004140000084c0010009c0000084c01008041000000c00110021000000858011001c70000800d0200003900000004030000390000085904000041000000000500001900000006060000290000000807000029212c21220000040f000000010020019000001f650000613d0000000801000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f000000010020019000001f650000613d0000000505000029000008c00050009c00001f6e0000213d000000000101043b0000004002500039000000400020043f000000000201041a000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f00000000042504360000000101100039000000000101041a0000000000140435000000000200041a000300000002001d000000070020002a00001f670000413d00000003020000290000000701200029000100000001001d000000000010041b000000400600043d000008c00060009c00001f6e0000213d0000004001600039000000400010043f000000200160003900000000000104350000000000060435000000000204043300000000030504330000000000210435000008c101300197000008c200300198000008c3020000410000000002006019000000000112019f000200000006001d00000000001604350000000702000029000008c101200197000008c200200198000008c3020000410000000002006019000000000112019f0000000002050433000008c103200197000008c200200198000008c3020000410000000002006019000000000232019f0000000001120019000008c20210009a000008c50020009c00001f670000413d000008c102100197000008c200100198000008c3010000410000000001006019000000000121019f0000000000150435000000040100002900000000001404350000000801000029000000000010043f0000000101000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039000600000004001d212c21270000040f0000000604000029000000010020019000001f650000613d00000005030000290000000002030433000008c602200197000000000101043b000000000501041a000008c505500197000000000225019f000000000021041b00000001011000390000000002040433000000000021041b00000008010000290000000202000029212c18200000040f000000400300043d000000440130003900000007020000290000000000210435000000000100041000000024023000390000000000120435000008c7010000410000000000130435000500000003001d000000040130003900000000020004110000000000210435000008be01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000084c0010009c0000084c01008041000000c001100210000008c8011001c70000800502000039212c21270000040f000000010020019000001f6d0000613d000000000201043b00000000010004140000084f02200197000000040020008c00001ee20000c13d0000000103000031000000200030008c000000200400003900000000040340190000000605000029000000050b00002900001f0e0000013d00000005030000290000084c0030009c0000084c0300804100000040033002100000084c0010009c0000084c01008041000000c001100210000000000131019f000008c9011001c7212c21220000040f000000050b00002900000060031002700000084c03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001efc0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001ef80000c13d000000000006004b00001f090000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001f9f0000613d00000006050000290000001f01400039000000600110018f0000000004b10019000000000014004b00000000010000390000000101004039000008ca0040009c00001f6e0000213d000000010010019000001f6e0000c13d000000400040043f000000200030008c00001f650000413d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b00001f650000c13d000000000001004b00001f740000613d0000000001050433000600000001001d000000400140003900000001020000390000000000210435000000200140003900000007020000290000000000210435000000080100002900000000001404350000085401000041000000000010044300000000010004140000084c0010009c0000084c01008041000000c00110021000000853011001c70000800b02000039000700000004001d212c21270000040f000000010020019000001f6d0000613d000000000101043b0000000703000029000000600230003900000000001204350000084c0030009c0000084c03008041000000400130021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f000008cb011001c70000800d020000390000000303000039000008cc0400004100000000050004110000000606000029212c21220000040f000000010020019000001f650000613d000000400100043d000000200210003900000001030000290000000000320435000000030200002900000000002104350000084c0010009c0000084c01008041000000400110021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f00000851011001c70000800d020000390000000103000039000008cd04000041212c21220000040f000000010020019000001f650000613d0000000801000029000000000001042d00000000010000190000212e00010430000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e00010430000000000001042f000008e501000041000000000010043f0000004101000039000000040010043f000008e6010000410000212e00010430000008e501000041000000000010043f0000000101000039000000040010043f000008e6010000410000212e00010430000000400100043d0000006402100039000009040300004100000000003204350000004402100039000009050300004100000000003204350000002402100039000000260300003900000000003204350000085d0200004100000000002104350000000402100039000000200300003900000000003204350000084c0010009c0000084c0100804100000040011002100000085e011001c70000212e00010430000000400100043d0000004402100039000008df03000041000000000032043500000024021000390000001e0300003900000000003204350000085d0200004100000000002104350000000402100039000000200300003900000000003204350000084c0010009c0000084c010080410000004001100210000008c9011001c70000212e000104300000001f0530018f0000084e06300198000000400200043d000000000462001900001fb60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001fa60000c13d00001fb60000013d0000001f0530018f0000084e06300198000000400200043d000000000462001900001fb60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001fb20000c13d000000000005004b00001fc30000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000084c0020009c0000084c020080410000004002200210000000000121019f0000212e000104300006000000000002000000200a100039000000400b10003900000000040b0433000008d63040012a0000000008340049000000000c000019000400000001001d000300000002001d00020000000a001d00010000000b001d000008d70580009c000020370000813d000000000025004b00000000090000190000000003000019000000000802001900001ff70000213d00060000000c001d000500000005001d000000000050043f0000000a01000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f00000001002001900000203d0000613d000000010b00002900000000040b0433000000000101043b000000000101041a000008c109100197000008c200100198000008c3010000410000000001006019000000000391019f000000050800002900000004010000290000000302000029000000020a000029000000060c000029000000000448004b000020370000413d000008c105400197000008c200400198000008c3040000410000000004006019000000000554019f00000000040a0433000008c106400197000008c200400198000008c3040000410000000004006019000000000464019f00000000055400a9000008c200500198000008c3060000410000000006006019000008c107500197000000000676019f000000000056004b000020370000c13d0000000006010433000008c107600197000008c200600198000008c3060000410000000006006019000000000676019f0000000005560049000008c20650009a000008c50060009c000020370000413d000008c107500197000008c200500198000008c3060000410000000006006019000000000576019f0000000000510435000000000028004b000020310000613d000008c200300198000008c3030000410000000003006019000000000393019f0000000004430019000008c20340009a000008c50030009c000020370000413d000008c103400197000008c200400198000008c3040000410000000004006019000000000334019f00000000003a043500000000008b0435000000fe00c0008c000000010cc00039000000000408001900001fd40000413d000008c200600198000020350000613d00000000000104350000000005000019000008c601500197000000000001042d000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e0001043000000000010000190000212e000104300002000000000002000200000002001d000000000010043f0000000901000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000020e00000613d000000000101043b000000000101041a000000000001004b000020d80000613d000100000001001d0000000801000039000000200010043f00000000010004140000084c0010009c0000084c01008041000000c00110021000000851011001c70000801002000039212c21270000040f0000000100200190000020e00000613d0000000104000029000008fa0040009c000020e20000813d000000400200043d000008fc0020009c000020e80000813d000000000101043b0000008003200039000000400030043f00000003034000c90000000006310019000000000306041a000008d001300197000000010400008a000008d00010009c000000000400c01900000080014002100000008004300270000000000114019f000000800000008b0000000001036019000008c104100197000008c200100198000008c30500004100000000050060190000002001200039000000000745019f0000000000710435000008c101300197000008c200300198000008c3030000410000000003006019000000000713019f00000000007204350000000107600039000000000907041a000000020d000029000008d008d0019700000000079d0049000008d00a70019700000000008a004b000000000b000019000008d00b00204100000000088a013f000000000a000019000008d00a0040410000000000d7004b000000000c000019000008d00c002041000008d00080009c000000000a0cc0190000000000d7004b000000000c000019000008d00c004041000008d00080009c000000000b0cc0190000004008200039000000000098043500000002066000390000006008200039000000000606041a000000000068043500000000000b004b0000000006000039000000010600c039000008c40090009c0000000008000039000000010800203900000000000a004b000000000a000039000000010a00c039000008d00090009c000000000900003900000001090040390000000009a9016f0000000100900190000020da0000c13d000000000668016f0000000100600190000020da0000c13d000008c200500198000008c3050000410000000005006019000000000445019f000008c105700197000008c200700198000008c3060000410000000006006019000000000556019f00000000044500a9000008c200400198000008c3050000410000000005006019000008c106400197000000000565019f000000000045004b000020da0000c13d000008c200300198000008c3030000410000000003006019000000000113019f0000000001410049000008c20310009a000008c50030009c000020da0000413d000008c103100197000008c200100198000008c3010000410000000001006019000000000131019f000000000001004b0000000003000019000008d003002041000008d004100197000000000004004b0000000005000019000008d005004041000008d00040009c000000000503c019000000000005004b00000000010060190000000000120435000000000001042d0000000001000019000000000001042d000008e501000041000000000010043f0000001101000039000000040010043f000008e6010000410000212e0001043000000000010000190000212e00010430000008e501000041000000000010043f0000003201000039000000040010043f000008e6010000410000212e00010430000008e501000041000000000010043f0000004101000039000000040010043f000008e6010000410000212e00010430000000000001042f0000084c0010009c0000084c0100804100000040011002100000084c0020009c0000084c020080410000006002200210000000000112019f00000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f00000858011001c70000801002000039212c21270000040f0000000100200190000021020000613d000000000101043b000000000001042d00000000010000190000212e0001043000000000050100190000000000200443000000050030008c000021120000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b0000210a0000413d0000084c0030009c0000084c03008041000000600130021000000000020004140000084c0020009c0000084c02008041000000c002200210000000000112019f00000907011001c70000000002050019212c21270000040f0000000100200190000021210000613d000000000101043b000000000001042d000000000001042f00002125002104210000000102000039000000000001042d0000000002000019000000000001042d0000212a002104230000000102000039000000000001042d0000000002000019000000000001042d0000212c000004320000212d0001042e0000212e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000042cbb15ccdc3cad6266b0e7a08c0454b23bf29dc2df74b6f3c209e9336465bd10200000200000000000000000000000000000004000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913201ffc9a70000000000000000000000000000000000000000000000000000000080ac58cd000000000000000000000000000000000000000000000000000000005b5e139f000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef000000020000000000000000000000000000008000000100000000000000000064656420696e20636f6e7374727563746f720000000000000000000000000000566f74696e67457363726f773a207a65726f20616464726573732070726f766908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000000000007116c60b00000000000000000000000000000000000000000000000000000000c26defcc00000000000000000000000000000000000000000000000000000000e7e242d300000000000000000000000000000000000000000000000000000000f8a0576200000000000000000000000000000000000000000000000000000000fc0c546900000000000000000000000000000000000000000000000000000000fc0c546a00000000000000000000000000000000000000000000000000000000fd4a77f100000000000000000000000000000000000000000000000000000000f8a0576300000000000000000000000000000000000000000000000000000000fbd3a29d00000000000000000000000000000000000000000000000000000000ee99fe2700000000000000000000000000000000000000000000000000000000ee99fe2800000000000000000000000000000000000000000000000000000000f851a44000000000000000000000000000000000000000000000000000000000e7e242d400000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000d1febfb800000000000000000000000000000000000000000000000000000000e0514ab900000000000000000000000000000000000000000000000000000000e0514aba00000000000000000000000000000000000000000000000000000000e441135c00000000000000000000000000000000000000000000000000000000d1febfb900000000000000000000000000000000000000000000000000000000d4e54c3b00000000000000000000000000000000000000000000000000000000c87b56dc00000000000000000000000000000000000000000000000000000000c87b56dd00000000000000000000000000000000000000000000000000000000d1c2babb00000000000000000000000000000000000000000000000000000000c26defcd00000000000000000000000000000000000000000000000000000000c2c4c5c100000000000000000000000000000000000000000000000000000000981b24cf00000000000000000000000000000000000000000000000000000000a4d855de00000000000000000000000000000000000000000000000000000000b88d4fdd00000000000000000000000000000000000000000000000000000000b88d4fde00000000000000000000000000000000000000000000000000000000c1f0fb9f00000000000000000000000000000000000000000000000000000000a4d855df00000000000000000000000000000000000000000000000000000000b45a3c0e00000000000000000000000000000000000000000000000000000000a183af5100000000000000000000000000000000000000000000000000000000a183af5200000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000981b24d000000000000000000000000000000000000000000000000000000000986b7d8a000000000000000000000000000000000000000000000000000000008fbb38fe0000000000000000000000000000000000000000000000000000000095d89b400000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009700ad3a000000000000000000000000000000000000000000000000000000008fbb38ff00000000000000000000000000000000000000000000000000000000900cf0cf000000000000000000000000000000000000000000000000000000008462151b000000000000000000000000000000000000000000000000000000008462151c000000000000000000000000000000000000000000000000000000008c2c9baf000000000000000000000000000000000000000000000000000000007116c60c0000000000000000000000000000000000000000000000000000000071197484000000000000000000000000000000000000000000000000000000002f745c580000000000000000000000000000000000000000000000000000000054fd4d4f000000000000000000000000000000000000000000000000000000006727905300000000000000000000000000000000000000000000000000000000704b6c0100000000000000000000000000000000000000000000000000000000704b6c020000000000000000000000000000000000000000000000000000000070a082310000000000000000000000000000000000000000000000000000000067279054000000000000000000000000000000000000000000000000000000006f548837000000000000000000000000000000000000000000000000000000006352211d000000000000000000000000000000000000000000000000000000006352211e0000000000000000000000000000000000000000000000000000000065fc38730000000000000000000000000000000000000000000000000000000054fd4d50000000000000000000000000000000000000000000000000000000005594a04500000000000000000000000000000000000000000000000000000000430c20800000000000000000000000000000000000000000000000000000000046c96aab0000000000000000000000000000000000000000000000000000000046c96aac000000000000000000000000000000000000000000000000000000004bc2a65700000000000000000000000000000000000000000000000000000000430c208100000000000000000000000000000000000000000000000000000000461f711c0000000000000000000000000000000000000000000000000000000042842e0d0000000000000000000000000000000000000000000000000000000042842e0e0000000000000000000000000000000000000000000000000000000042966c68000000000000000000000000000000000000000000000000000000002f745c5900000000000000000000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000001376f3d90000000000000000000000000000000000000000000000000000000025a58b55000000000000000000000000000000000000000000000000000000002e1a7d4c000000000000000000000000000000000000000000000000000000002e1a7d4d000000000000000000000000000000000000000000000000000000002e720f7d0000000000000000000000000000000000000000000000000000000025a58b560000000000000000000000000000000000000000000000000000000026782247000000000000000000000000000000000000000000000000000000001c984bc2000000000000000000000000000000000000000000000000000000001c984bc30000000000000000000000000000000000000000000000000000000023b872dd000000000000000000000000000000000000000000000000000000001376f3da0000000000000000000000000000000000000000000000000000000018160ddd00000000000000000000000000000000000000000000000000000000095ea7b2000000000000000000000000000000000000000000000000000000000d6a2032000000000000000000000000000000000000000000000000000000000d6a2033000000000000000000000000000000000000000000000000000000000e18b68100000000000000000000000000000000000000000000000000000000095ea7b30000000000000000000000000000000000000000000000000000000009a934bb0000000000000000000000000000000000000000000000000000000006fdde020000000000000000000000000000000000000000000000000000000006fdde0300000000000000000000000000000000000000000000000000000000081812fc0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000047fc9aa310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf000000000000000000000000000000007fffffffffffffffffffffffffffffff0000000000000000000000000000000080000000000000000000000000000000ffffffffffffffffffffffffffffffff800000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff23b872dd0000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0200000000000000000000000000000000000080000000000000000000000000ff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de6245e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000000000000000000000000000ffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000800000000000000000dd9ec14900000000000000000000000000000000000000000000000000000000517565727920666f72206e6f6e6578697374656e7420746f6b656e00000000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000093a80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c580fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c57f00000000000000000000000000000000000000400000008000000000000000004c6f636b206578706972656400000000000000000000000000000000000000004e6f7468696e67206973206c6f636b656400000000000000000000000000000043616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e00fffffffffffffffffffffffffffffffffffffffffffffffffffffffff87b31fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87b3200566f74696e67206c6f636b2063616e2062652034207965617273206d61780000020000000000000000000000000000000000002000000000000000000000000017307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c314e6f206578697374696e67206c6f636b20666f756e6400000000000000000000647261770000000000000000000000000000000000000000000000000000000043616e6e6f742061646420746f2065787069726564206c6f636b2e20576974684e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000773593fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0322e302e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000566f7465204c6f636b6564210000000000000000000000000000000000000000a9059cbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000000000000200000000000000000000000000000000000060000000000000000000000000743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b46446174746163686564000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc002f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94546865206c6f636b206469646e277420657870697265000000000000000000008c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925766541726300000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000003b9aca0076654172633a206f6e6c792061646d696e000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff801806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000150b7a0200000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000000000004552433732313a207472616e736665722072656a656374656400000000000000000000000000000000000000000000000000000000000000000000000784ce0063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564667574757265000000000000000000000000000000000000000000000000000043616e206f6e6c79206c6f636b20756e74696c2074696d6520696e207468652000000000000000000000000000000000000000a40000000000000000000000000200000200000000000000000000000000000000000000000000000000000000766634c70cf08b7b782d725110af7a4d3c4c6983a2e705e25431d2303b3ab59e

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fb4c64c144c2bd0e7f2a06da7d6aac32d8cb25140000000000000000000000000a8da8c5246752cfdba720ebcfb200a74f4f6fc7

-----Decoded View---------------
Arg [0] : token_addr (address): 0xfB4c64c144c2bD0E7F2A06da7d6aAc32d8cb2514
Arg [1] : art_proxy (address): 0x0A8dA8C5246752CfDba720ebCFB200A74f4F6FC7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fb4c64c144c2bd0e7f2a06da7d6aac32d8cb2514
Arg [1] : 0000000000000000000000000a8da8c5246752cfdba720ebcfb200a74f4f6fc7


[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.