ERC-721
Overview
Max Total Supply
0 HUETIX2
Holders
94
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 HUETIX2Loading...
Loading
Loading...
Loading
Loading...
Loading
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 Name:
HueGachaV2
Compiler Version
0.8.19+commit.580a8fe5
ZkSolc Version
v1.5.11
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@pythnetwork/pyth-sdk-solidity/IPyth.sol"; import "@pythnetwork/pyth-sdk-solidity/PythStructs.sol"; import "@pythnetwork/entropy-sdk-solidity/IEntropy.sol"; import "@pythnetwork/entropy-sdk-solidity/IEntropyConsumer.sol"; import "@pythnetwork/entropy-sdk-solidity/EntropyStructs.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/utils/Base64.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "./HueGachaSVG.sol"; contract HueGachaV2 is Ownable, ReentrancyGuard, ERC721, IEntropyConsumer { using Strings for uint256; using HueGachaSVG for *; IPyth public pyth; IEntropy public immutable entropy; uint64 public lastSequenceNumber; bool public randomnessRequested; bytes32 public constant ETH_USD_PRICE_ID = 0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace; uint256 public constant TICKET_PRICE_USD = 2 * 10**6; // 2 USD with 6 decimals uint256 public constant HUE_HOLDER_PRICE_USD = 1 * 10**6; // 1 USD with 6 decimals uint256 public drawTime; uint256 public constant WEEK = 7 days; struct Round { uint256 roundId; mapping(uint256 => address) ticketMapping; // ticketIndex => participant address mapping(address => uint256) ticketCount; uint256 totalTickets; bool completed; address winner; bytes32 randomness; bool drawn; uint256 winningTicketId; } mapping(uint256 => Round) public rounds; uint256 public currentRoundId; mapping(address => bool) public isHueHolder; uint256 public purchaseDeadline; event TicketPurchased(address indexed buyer, uint256 amount, uint256 roundId, bool paidInETH); event WinnerSelected(uint256 indexed roundId, address indexed winner); event NewRoundStarted(uint256 indexed roundId, uint256 drawTime); event HueHolderAdded(address indexed holder); event HueHolderRemoved(address indexed holder); event DrawSkipped(uint256 indexed roundId, string reason); event AutoDrawTriggered(uint256 indexed roundId, address indexed triggeredBy); event RoundDrawAttempted(uint256 indexed roundId, bool success, string reason); event RandomnessRequested(uint256 indexed roundId, bytes32 indexed requestId); bool public testingMode; uint256 private _tokenIds; mapping(uint256 => uint256[]) public roundTokens; uint256 public constant MAX_TICKETS_PER_TX = 100; bool public autoDrawEnabled = true; constructor( address _pythAddress, address _entropyAddress ) ERC721("HueGacha Ticket V2", "HUETIX2") { pyth = IPyth(_pythAddress); entropy = IEntropy(_entropyAddress); // Set initial draw time to next Sunday uint256 timestamp = block.timestamp; drawTime = timestamp - (timestamp % WEEK) + WEEK; purchaseDeadline = drawTime - 1 days; currentRoundId = 1; emit NewRoundStarted(currentRoundId, drawTime); } function setTestingMode(bool _enabled) external onlyOwner { testingMode = _enabled; } function setDrawTime(uint256 _newDrawTime) external onlyOwner { require(testingMode, "Testing mode not enabled"); drawTime = _newDrawTime; purchaseDeadline = drawTime - 1 days; } function updateHueHolders(address[] calldata holders, bool[] calldata statuses) external onlyOwner { require(holders.length == statuses.length, "Length mismatch"); for (uint i = 0; i < holders.length; i++) { isHueHolder[holders[i]] = statuses[i]; if (statuses[i]) { emit HueHolderAdded(holders[i]); } else { emit HueHolderRemoved(holders[i]); } } } function _transfer(address from, address to, uint256 tokenId) internal virtual override { require(to == address(0), "Tickets are soulbound - only burning allowed"); super._transfer(from, to, tokenId); } function burnTicket(uint256 tokenId) external { require(ownerOf(tokenId) == msg.sender, "Not ticket owner"); _burn(tokenId); } function getRequiredETHAmount(uint256 amount, address user) public view returns (uint256) { PythStructs.Price memory ethPrice = pyth.getPriceUnsafe(ETH_USD_PRICE_ID); uint256 priceUSD = isHueHolder[user] ? HUE_HOLDER_PRICE_USD : TICKET_PRICE_USD; uint256 totalPriceUSD = priceUSD * amount; return (totalPriceUSD * 1e18 * 100) / uint256(uint64(ethPrice.price)); } function buyTickets(uint256 amount) external payable nonReentrant { require(amount > 0 && amount <= MAX_TICKETS_PER_TX, "Invalid amount"); if (autoDrawEnabled && block.timestamp >= drawTime) { try this.requestRandomnessAndDraw() { emit RoundDrawAttempted(currentRoundId, true, "Success"); } catch Error(string memory reason) { emit RoundDrawAttempted(currentRoundId, false, reason); require(block.timestamp < purchaseDeadline, "Purchases closed for this round"); } } else { require(block.timestamp < purchaseDeadline, "Purchases closed for this round"); } uint256 ethRequired = getRequiredETHAmount(amount, msg.sender); require(msg.value >= ethRequired, "Incorrect ETH amount"); if (msg.value > ethRequired) { (bool success, ) = payable(msg.sender).call{value: msg.value - ethRequired}(""); require(success, "Refund failed"); } _addTickets(msg.sender, amount); emit TicketPurchased(msg.sender, amount, currentRoundId, true); } function _addTickets(address buyer, uint256 amount) internal { Round storage round = rounds[currentRoundId]; uint256 startIndex = round.totalTickets; for (uint256 i = 0; i < amount; i++) { round.ticketMapping[startIndex + i] = buyer; } round.ticketCount[buyer] += amount; round.totalTickets += amount; for (uint256 i = 0; i < amount; i++) { _tokenIds++; _safeMint(buyer, _tokenIds); roundTokens[currentRoundId].push(_tokenIds); } } function requestRandomnessAndDraw() external payable onlyOwner { Round storage round = rounds[currentRoundId]; require(!round.drawn, "Winner already drawn"); require(round.totalTickets > 0, "No tickets sold"); require(block.timestamp >= drawTime, "Too early"); require(!randomnessRequested, "Randomness already requested"); // Request randomness from Pyth address provider = entropy.getDefaultProvider(); uint256 fee = entropy.getFee(provider); require(msg.value >= fee, "Insufficient fee"); // Generate a random number for the user commitment bytes32 userRandomNumber = keccak256(abi.encodePacked(block.timestamp, msg.sender, round.totalTickets)); lastSequenceNumber = entropy.requestWithCallback{value: fee}( provider, userRandomNumber ); randomnessRequested = true; emit RandomnessRequested(currentRoundId, bytes32(uint256(lastSequenceNumber))); } function entropyCallback( uint64 sequenceNumber, address provider, bytes32 randomNumber ) internal override { require(sequenceNumber == lastSequenceNumber, "Wrong sequence number"); require(randomnessRequested, "No randomness requested"); Round storage round = rounds[currentRoundId]; require(!round.drawn, "Winner already drawn"); require(round.totalTickets > 0, "No tickets sold"); round.randomness = randomNumber; uint256 winningTicket = uint256(randomNumber) % round.totalTickets; round.winner = round.ticketMapping[winningTicket]; // Find the actual token ID for the winning ticket uint256[] memory roundTokensList = roundTokens[currentRoundId]; require(roundTokensList.length > winningTicket, "Invalid winning ticket index"); round.winningTicketId = roundTokensList[winningTicket]; round.drawn = true; // Reset randomness request state randomnessRequested = false; lastSequenceNumber = 0; emit WinnerSelected(currentRoundId, round.winner); currentRoundId++; drawTime = block.timestamp - (block.timestamp % WEEK) + WEEK; purchaseDeadline = drawTime - 1 days; emit NewRoundStarted(currentRoundId, drawTime); } function getEntropy() internal view override returns (address) { return address(entropy); } function setAutoDrawEnabled(bool enabled) external onlyOwner { autoDrawEnabled = enabled; } function isTicketFromCompletedRound(uint256 tokenId) public view returns (bool) { uint256 roundId = getCurrentRoundForToken(tokenId); return rounds[roundId].drawn; } function isPurchaseOpen() external view returns (bool) { return block.timestamp < purchaseDeadline; } function getCurrentRoundInfo() external view returns ( uint256 roundId, uint256 totalTickets, uint256 timeUntilDraw, bool drawn ) { Round storage round = rounds[currentRoundId]; return ( currentRoundId, round.totalTickets, drawTime > block.timestamp ? drawTime - block.timestamp : 0, round.drawn ); } function getRoundWinner(uint256 roundId) external view returns ( address winner, bool drawn, uint256 totalTickets ) { Round storage round = rounds[roundId]; return (round.winner, round.drawn, round.totalTickets); } function getTicketCount(uint256 roundId, address participant) external view returns (uint256) { return rounds[roundId].ticketCount[participant]; } function withdrawETH() external onlyOwner { uint256 balance = address(this).balance; (bool success, ) = payable(owner()).call{value: balance}(""); require(success, "ETH withdrawal failed"); } receive() external payable {} function generateSVG(uint256 roundId) internal pure returns (string memory) { return HueGachaSVG.generateSVG(roundId); } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "Token does not exist"); uint256 roundId = getCurrentRoundForToken(tokenId); bool isCompleted = rounds[roundId].drawn; address roundWinner = rounds[roundId].winner; bool isWinningTicket = tokenId == rounds[roundId].winningTicketId; string memory svg = generateSVG(roundId); string memory imageURI = string(abi.encodePacked( "data:image/svg+xml;base64,", Base64.encode(bytes(svg)) )); string memory status = isCompleted ? (isWinningTicket ? "Winner!" : "Better luck next time!") : "Active ticket"; string memory json = Base64.encode(bytes(string(abi.encodePacked( '{"name": "HueGacha Ticket #', tokenId.toString(), '", "description": "', status, ' - Week #', roundId.toString(), '", "image": "', imageURI, '", "attributes": [{"trait_type": "Status", "value": "', status, '"}, {"trait_type": "Week", "value": "', roundId.toString(), '"}]}' )))); return string(abi.encodePacked("data:application/json;base64,", json)); } function getCurrentRoundForToken(uint256 tokenId) public view returns (uint256) { for (uint256 i = 1; i <= currentRoundId; i++) { uint256[] memory tokens = roundTokens[i]; for (uint256 j = 0; j < tokens.length; j++) { if (tokens[j] == tokenId) { return i; } } } revert("Token not found in any round"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner or approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _safeTransfer(from, to, tokenId, data); } /** * @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. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _ownerOf(tokenId) != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId, 1); // Check that tokenId was not minted by `_beforeTokenTransfer` hook require(!_exists(tokenId), "ERC721: token already minted"); unchecked { // Will not overflow unless all 2**256 token ids are minted to the same owner. // Given that tokens are minted one by one, it is impossible in practice that // this ever happens. Might change if we allow batch minting. // The ERC fails to describe this case. _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId, 1); // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook owner = ERC721.ownerOf(tokenId); // Clear approvals delete _tokenApprovals[tokenId]; unchecked { // Cannot overflow, as that would require more tokens to be burned/transferred // out than the owner initially received through minting and transferring in. _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId, 1); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId, 1); // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); // Clear approvals from the previous owner delete _tokenApprovals[tokenId]; unchecked { // `_balances[from]` cannot overflow for the same reason as described in `_burn`: // `from`'s balance is the number of token held, which is at least one before the current // transfer. // `_balances[to]` could overflow in the conditions described in `_mint`. That would require // all 2**256 token ids to be minted, which in practice is impossible. _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`. * - When `from` is zero, the tokens will be minted for `to`. * - When `to` is zero, ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`. * - When `from` is zero, the tokens were minted for `to`. * - When `to` is zero, ``from``'s tokens were burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {} /** * @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override. * * WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant * being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such * that `ownerOf(tokenId)` is `a`. */ // solhint-disable-next-line func-name-mixedcase function __unsafe_increaseBalance(address account, uint256 amount) internal { _balances[account] += amount; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @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(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the 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 have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol) pragma solidity ^0.8.0; /** * @dev Provides a set of functions to operate with Base64 strings. * * _Available since v4.5._ */ library Base64 { /** * @dev Base64 Encoding/Decoding Table */ string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /** * @dev Converts a `bytes` to its Bytes64 `string` representation. */ function encode(bytes memory data) internal pure returns (string memory) { /** * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol */ if (data.length == 0) return ""; // Loads the table into memory string memory table = _TABLE; // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter // and split into 4 numbers of 6 bits. // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up // - `data.length + 2` -> Round up // - `/ 3` -> Number of 3-bytes chunks // - `4 *` -> 4 characters for each chunk string memory result = new string(4 * ((data.length + 2) / 3)); /// @solidity memory-safe-assembly assembly { // Prepare the lookup table (skip the first "length" byte) let tablePtr := add(table, 1) // Prepare result pointer, jump over length let resultPtr := add(result, 32) // Run over the input, 3 bytes at a time for { let dataPtr := data let endPtr := add(data, mload(data)) } lt(dataPtr, endPtr) { } { // Advance 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // To write each character, shift the 3 bytes (18 bits) chunk // 4 times in blocks of 6 bits for each character (18, 12, 6, 0) // and apply logical AND with 0x3F which is the number of // the previous character in the ASCII table prior to the Base64 Table // The result is then added to the table to get the character to write, // and finally write it in the result pointer but with a left shift // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F)))) resultPtr := add(resultPtr, 1) // Advance } // When data `bytes` is not exactly 3 bytes long // it is padded with `=` characters at the end switch mod(mload(data), 3) case 1 { mstore8(sub(resultPtr, 1), 0x3d) mstore8(sub(resultPtr, 2), 0x3d) } case 2 { mstore8(sub(resultPtr, 1), 0x3d) } } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; import "./math/Math.sol"; import "./math/SignedMath.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./EntropyStructs.sol"; interface EntropyEvents { event Registered(EntropyStructs.ProviderInfo provider); event Requested(EntropyStructs.Request request); event RequestedWithCallback( address indexed provider, address indexed requestor, uint64 indexed sequenceNumber, bytes32 userRandomNumber, EntropyStructs.Request request ); event Revealed( EntropyStructs.Request request, bytes32 userRevelation, bytes32 providerRevelation, bytes32 blockHash, bytes32 randomNumber ); event RevealedWithCallback( EntropyStructs.Request request, bytes32 userRandomNumber, bytes32 providerRevelation, bytes32 randomNumber ); event ProviderFeeUpdated(address provider, uint128 oldFee, uint128 newFee); event ProviderUriUpdated(address provider, bytes oldUri, bytes newUri); event ProviderFeeManagerUpdated( address provider, address oldFeeManager, address newFeeManager ); event Withdrawal( address provider, address recipient, uint128 withdrawnAmount ); }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; contract EntropyStructs { struct ProviderInfo { uint128 feeInWei; uint128 accruedFeesInWei; // The commitment that the provider posted to the blockchain, and the sequence number // where they committed to this. This value is not advanced after the provider commits, // and instead is stored to help providers track where they are in the hash chain. bytes32 originalCommitment; uint64 originalCommitmentSequenceNumber; // Metadata for the current commitment. Providers may optionally use this field to help // manage rotations (i.e., to pick the sequence number from the correct hash chain). bytes commitmentMetadata; // Optional URI where clients can retrieve revelations for the provider. // Client SDKs can use this field to automatically determine how to retrieve random values for each provider. // TODO: specify the API that must be implemented at this URI bytes uri; // The first sequence number that is *not* included in the current commitment (i.e., an exclusive end index). // The contract maintains the invariant that sequenceNumber <= endSequenceNumber. // If sequenceNumber == endSequenceNumber, the provider must rotate their commitment to add additional random values. uint64 endSequenceNumber; // The sequence number that will be assigned to the next inbound user request. uint64 sequenceNumber; // The current commitment represents an index/value in the provider's hash chain. // These values are used to verify requests for future sequence numbers. Note that // currentCommitmentSequenceNumber < sequenceNumber. // // The currentCommitment advances forward through the provider's hash chain as values // are revealed on-chain. bytes32 currentCommitment; uint64 currentCommitmentSequenceNumber; // An address that is authorized to set / withdraw fees on behalf of this provider. address feeManager; } struct Request { // Storage slot 1 // address provider; uint64 sequenceNumber; // The number of hashes required to verify the provider revelation. uint32 numHashes; // Storage slot 2 // // The commitment is keccak256(userCommitment, providerCommitment). Storing the hash instead of both saves 20k gas by // eliminating 1 store. bytes32 commitment; // Storage slot 3 // // The number of the block where this request was created. // Note that we're using a uint64 such that we have an additional space for an address and other fields in // this storage slot. Although block.number returns a uint256, 64 bits should be plenty to index all of the // blocks ever generated. uint64 blockNumber; // The address that requested this random number. address requester; // If true, incorporate the blockhash of blockNumber into the generated random value. bool useBlockhash; // If true, the requester will be called back with the generated random value. bool isRequestWithCallback; // There are 2 remaining bytes of free space in this slot. } }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; import "./EntropyEvents.sol"; interface IEntropy is EntropyEvents { // Register msg.sender as a randomness provider. The arguments are the provider's configuration parameters // and initial commitment. Re-registering the same provider rotates the provider's commitment (and updates // the feeInWei). // // chainLength is the number of values in the hash chain *including* the commitment, that is, chainLength >= 1. function register( uint128 feeInWei, bytes32 commitment, bytes calldata commitmentMetadata, uint64 chainLength, bytes calldata uri ) external; // Withdraw a portion of the accumulated fees for the provider msg.sender. // Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient // balance of fees in the contract). function withdraw(uint128 amount) external; // Withdraw a portion of the accumulated fees for provider. The msg.sender must be the fee manager for this provider. // Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient // balance of fees in the contract). function withdrawAsFeeManager(address provider, uint128 amount) external; // As a user, request a random number from `provider`. Prior to calling this method, the user should // generate a random number x and keep it secret. The user should then compute hash(x) and pass that // as the userCommitment argument. (You may call the constructUserCommitment method to compute the hash.) // // This method returns a sequence number. The user should pass this sequence number to // their chosen provider (the exact method for doing so will depend on the provider) to retrieve the provider's // number. The user should then call fulfillRequest to construct the final random number. // // This method will revert unless the caller provides a sufficient fee (at least getFee(provider)) as msg.value. // Note that excess value is *not* refunded to the caller. function request( address provider, bytes32 userCommitment, bool useBlockHash ) external payable returns (uint64 assignedSequenceNumber); // Request a random number. The method expects the provider address and a secret random number // in the arguments. It returns a sequence number. // // The address calling this function should be a contract that inherits from the IEntropyConsumer interface. // The `entropyCallback` method on that interface will receive a callback with the generated random number. // // This method will revert unless the caller provides a sufficient fee (at least getFee(provider)) as msg.value. // Note that excess value is *not* refunded to the caller. function requestWithCallback( address provider, bytes32 userRandomNumber ) external payable returns (uint64 assignedSequenceNumber); // Fulfill a request for a random number. This method validates the provided userRandomness and provider's proof // against the corresponding commitments in the in-flight request. If both values are validated, this function returns // the corresponding random number. // // Note that this function can only be called once per in-flight request. Calling this function deletes the stored // request information (so that the contract doesn't use a linear amount of storage in the number of requests). // If you need to use the returned random number more than once, you are responsible for storing it. function reveal( address provider, uint64 sequenceNumber, bytes32 userRevelation, bytes32 providerRevelation ) external returns (bytes32 randomNumber); // Fulfill a request for a random number. This method validates the provided userRandomness // and provider's revelation against the corresponding commitment in the in-flight request. If both values are validated // and the requestor address is a contract address, this function calls the requester's entropyCallback method with the // sequence number, provider address and the random number as arguments. Else if the requestor is an EOA, it won't call it. // // Note that this function can only be called once per in-flight request. Calling this function deletes the stored // request information (so that the contract doesn't use a linear amount of storage in the number of requests). // If you need to use the returned random number more than once, you are responsible for storing it. // // Anyone can call this method to fulfill a request, but the callback will only be made to the original requester. function revealWithCallback( address provider, uint64 sequenceNumber, bytes32 userRandomNumber, bytes32 providerRevelation ) external; function getProviderInfo( address provider ) external view returns (EntropyStructs.ProviderInfo memory info); function getDefaultProvider() external view returns (address provider); function getRequest( address provider, uint64 sequenceNumber ) external view returns (EntropyStructs.Request memory req); function getFee(address provider) external view returns (uint128 feeAmount); function getAccruedPythFees() external view returns (uint128 accruedPythFeesInWei); function setProviderFee(uint128 newFeeInWei) external; function setProviderFeeAsFeeManager( address provider, uint128 newFeeInWei ) external; function setProviderUri(bytes calldata newUri) external; // Set manager as the fee manager for the provider msg.sender. // After calling this function, manager will be able to set the provider's fees and withdraw them. // Only one address can be the fee manager for a provider at a time -- calling this function again with a new value // will override the previous value. Call this function with the all-zero address to disable the fee manager role. function setFeeManager(address manager) external; function constructUserCommitment( bytes32 userRandomness ) external pure returns (bytes32 userCommitment); function combineRandomValues( bytes32 userRandomness, bytes32 providerRandomness, bytes32 blockHash ) external pure returns (bytes32 combinedRandomness); }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; abstract contract IEntropyConsumer { // This method is called by Entropy to provide the random number to the consumer. // It asserts that the msg.sender is the Entropy contract. It is not meant to be // override by the consumer. function _entropyCallback( uint64 sequence, address provider, bytes32 randomNumber ) external { address entropy = getEntropy(); require(entropy != address(0), "Entropy address not set"); require(msg.sender == entropy, "Only Entropy can call this function"); entropyCallback(sequence, provider, randomNumber); } // getEntropy returns Entropy contract address. The method is being used to check that the // callback is indeed from Entropy contract. The consumer is expected to implement this method. // Entropy address can be found here - https://docs.pyth.network/entropy/contract-addresses function getEntropy() internal view virtual returns (address); // This method is expected to be implemented by the consumer to handle the random number. // It will be called by _entropyCallback after _entropyCallback ensures that the call is // indeed from Entropy contract. function entropyCallback( uint64 sequence, address provider, bytes32 randomNumber ) internal virtual; }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./PythStructs.sol"; import "./IPythEvents.sol"; /// @title Consume prices from the Pyth Network (https://pyth.network/). /// @dev Please refer to the guidance at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how to consume prices safely. /// @author Pyth Data Association interface IPyth is IPythEvents { /// @notice Returns the price of a price feed without any sanity checks. /// @dev This function returns the most recent price update in this contract without any recency checks. /// This function is unsafe as the returned price update may be arbitrarily far in the past. /// /// Users of this function should check the `publishTime` in the price to ensure that the returned price is /// sufficiently recent for their application. If you are considering using this function, it may be /// safer / easier to use `getPriceNoOlderThan`. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getPriceUnsafe( bytes32 id ) external view returns (PythStructs.Price memory price); /// @notice Returns the price that is no older than `age` seconds of the current time. /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently /// recently. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getPriceNoOlderThan( bytes32 id, uint age ) external view returns (PythStructs.Price memory price); /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks. /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available. /// However, if the price is not recent this function returns the latest available price. /// /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that /// the returned price is recent or useful for any particular application. /// /// Users of this function should check the `publishTime` in the price to ensure that the returned price is /// sufficiently recent for their application. If you are considering using this function, it may be /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getEmaPriceUnsafe( bytes32 id ) external view returns (PythStructs.Price memory price); /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds /// of the current time. /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently /// recently. /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely. function getEmaPriceNoOlderThan( bytes32 id, uint age ) external view returns (PythStructs.Price memory price); /// @notice Update price feeds with given update messages. /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling /// `getUpdateFee` with the length of the `updateData` array. /// Prices will be updated if they are more recent than the current stored prices. /// The call will succeed even if the update is not the most recent. /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid. /// @param updateData Array of price update data. function updatePriceFeeds(bytes[] calldata updateData) external payable; /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`. /// /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling /// `getUpdateFee` with the length of the `updateData` array. /// /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas. /// Otherwise, it calls updatePriceFeeds method to update the prices. /// /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid. /// @param updateData Array of price update data. /// @param priceIds Array of price ids. /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]` function updatePriceFeedsIfNecessary( bytes[] calldata updateData, bytes32[] calldata priceIds, uint64[] calldata publishTimes ) external payable; /// @notice Returns the required fee to update an array of price updates. /// @param updateData Array of price update data. /// @return feeAmount The required fee in Wei. function getUpdateFee( bytes[] calldata updateData ) external view returns (uint feeAmount); /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published /// within `minPublishTime` and `maxPublishTime`. /// /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price; /// otherwise, please consider using `updatePriceFeeds`. This method may store the price updates on-chain, if they /// are more recent than the current stored prices. /// /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling /// `getUpdateFee` with the length of the `updateData` array. /// /// /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is /// no update for any of the given `priceIds` within the given time range. /// @param updateData Array of price update data. /// @param priceIds Array of price ids. /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`. /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`. /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order). function parsePriceFeedUpdates( bytes[] calldata updateData, bytes32[] calldata priceIds, uint64 minPublishTime, uint64 maxPublishTime ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds); /// @notice Similar to `parsePriceFeedUpdates` but ensures the updates returned are /// the first updates published in minPublishTime. That is, if there are multiple updates for a given timestamp, /// this method will return the first update. This method may store the price updates on-chain, if they /// are more recent than the current stored prices. /// /// /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is /// no update for any of the given `priceIds` within the given time range and uniqueness condition. /// @param updateData Array of price update data. /// @param priceIds Array of price ids. /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`. /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`. /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order). function parsePriceFeedUpdatesUnique( bytes[] calldata updateData, bytes32[] calldata priceIds, uint64 minPublishTime, uint64 maxPublishTime ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; /// @title IPythEvents contains the events that Pyth contract emits. /// @dev This interface can be used for listening to the updates for off-chain and testing purposes. interface IPythEvents { /// @dev Emitted when the price feed with `id` has received a fresh update. /// @param id The Pyth Price Feed ID. /// @param publishTime Publish time of the given price update. /// @param price Price of the given price update. /// @param conf Confidence interval of the given price update. event PriceFeedUpdate( bytes32 indexed id, uint64 publishTime, int64 price, uint64 conf ); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; contract PythStructs { // A price with a degree of uncertainty, represented as a price +- a confidence interval. // // The confidence interval roughly corresponds to the standard error of a normal distribution. // Both the price and confidence are stored in a fixed-point numeric representation, // `x * (10^expo)`, where `expo` is the exponent. // // Please refer to the documentation at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how // to how this price safely. struct Price { // Price int64 price; // Confidence interval around the price uint64 conf; // Price exponent int32 expo; // Unix timestamp describing when the price was published uint publishTime; } // PriceFeed represents a current aggregate price from pyth publisher feeds. struct PriceFeed { // The price ID. bytes32 id; // Latest available price Price price; // Latest available exponentially-weighted moving average price Price emaPrice; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; library HueGachaSVG { struct ColorScheme { string primary; string secondary; string accent1; string accent2; string highlight; } function getColorScheme(uint256 roundId) internal pure returns (ColorScheme memory) { // Use the round number to determine the color scheme uint256 schemeId = roundId % 5; // 5 different color schemes if (schemeId == 0) { // Original purple scheme return ColorScheme({ primary: "#2A2D59", secondary: "#3B3F7A", accent1: "#4D5297", accent2: "#6B6EB7", highlight: "#15FC9B" }); } else if (schemeId == 1) { // Cyber pink scheme return ColorScheme({ primary: "#2D1B2C", secondary: "#5C2751", accent1: "#943D7C", accent2: "#E855A3", highlight: "#00FFD1" }); } else if (schemeId == 2) { // Ocean blue scheme return ColorScheme({ primary: "#0A192F", secondary: "#172A45", accent1: "#303C55", accent2: "#4C8BF5", highlight: "#64FFDA" }); } else if (schemeId == 3) { // Sunset orange scheme return ColorScheme({ primary: "#2D1A12", secondary: "#5C2E17", accent1: "#A34E2A", accent2: "#FF7F50", highlight: "#FFD700" }); } else { // Emerald green scheme return ColorScheme({ primary: "#0B2B26", secondary: "#164B45", accent1: "#1E6B62", accent2: "#2AAA8A", highlight: "#FFE162" }); } } function generateSVG(uint256 roundId) internal pure returns (string memory) { ColorScheme memory colors = getColorScheme(roundId); return string(abi.encodePacked( '<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">', '<g transform="scale(50)">', // Row 0 '<rect x="2" y="0" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="3" y="0" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="4" y="0" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="5" y="0" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="6" y="0" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="7" y="0" width="1" height="1" fill="', colors.primary, '"/>', // Row 1 '<rect x="1" y="1" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="2" y="1" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="3" y="1" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="4" y="1" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="5" y="1" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="6" y="1" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="7" y="1" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="1" width="1" height="1" fill="', colors.primary, '"/>', // Row 2 '<rect x="0" y="2" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="1" y="2" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="2" y="2" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="3" y="2" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="4" y="2" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="5" y="2" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="6" y="2" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="7" y="2" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="2" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="9" y="2" width="1" height="1" fill="', colors.primary, '"/>', // Row 3-7 '<rect x="0" y="3" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="1" y="3" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="2" y="3" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="7" y="3" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="3" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="9" y="3" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="0" y="4" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="1" y="4" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="2" y="4" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="7" y="4" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="4" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="9" y="4" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="0" y="5" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="1" y="5" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="2" y="5" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="7" y="5" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="5" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="9" y="5" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="0" y="6" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="1" y="6" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="2" y="6" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="7" y="6" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="6" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="9" y="6" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="0" y="7" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="1" y="7" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="2" y="7" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="3" y="7" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="4" y="7" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="5" y="7" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="6" y="7" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="7" y="7" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="7" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="9" y="7" width="1" height="1" fill="', colors.primary, '"/>', // Row 8 '<rect x="1" y="8" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="2" y="8" width="1" height="1" fill="', colors.accent1, '"/>', '<rect x="3" y="8" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="4" y="8" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="5" y="8" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="6" y="8" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="7" y="8" width="1" height="1" fill="', colors.secondary, '"/>', '<rect x="8" y="8" width="1" height="1" fill="', colors.primary, '"/>', // Row 9 '<rect x="2" y="9" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="3" y="9" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="4" y="9" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="5" y="9" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="6" y="9" width="1" height="1" fill="', colors.primary, '"/>', '<rect x="7" y="9" width="1" height="1" fill="', colors.primary, '"/>', // Pattern '<rect x="3" y="3" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="4" y="3" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="5" y="3" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="6" y="3" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="3" y="4" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="4" y="4" width="1" height="1" fill="', colors.highlight, '"/>', '<rect x="5" y="4" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="6" y="4" width="1" height="1" fill="', colors.highlight, '"/>', '<rect x="3" y="5" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="4" y="5" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="5" y="5" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="6" y="5" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="3" y="6" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="4" y="6" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="5" y="6" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="6" y="6" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="3" y="7" width="1" height="1" fill="', colors.accent2, '"/>', '<rect x="5" y="7" width="1" height="1" fill="', colors.accent2, '"/>', '</g>', '</svg>' )); } }
{ "compilationTarget": { "contracts/HueGachaV2.sol": "HueGachaV2" }, "optimizer": { "enabled": true, "runs": 200, "mode": "3" }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "storageLayout", "abi", "evm.methodIdentifiers", "metadata" ], "": [ "ast" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs": [{"internalType": "address","name": "_pythAddress","type": "address"},{"internalType": "address","name": "_entropyAddress","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": "uint256","name": "roundId","type": "uint256"},{"indexed": true,"internalType": "address","name": "triggeredBy","type": "address"}],"name": "AutoDrawTriggered","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "uint256","name": "roundId","type": "uint256"},{"indexed": false,"internalType": "string","name": "reason","type": "string"}],"name": "DrawSkipped","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "holder","type": "address"}],"name": "HueHolderAdded","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "holder","type": "address"}],"name": "HueHolderRemoved","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "uint256","name": "roundId","type": "uint256"},{"indexed": false,"internalType": "uint256","name": "drawTime","type": "uint256"}],"name": "NewRoundStarted","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "previousOwner","type": "address"},{"indexed": true,"internalType": "address","name": "newOwner","type": "address"}],"name": "OwnershipTransferred","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "uint256","name": "roundId","type": "uint256"},{"indexed": true,"internalType": "bytes32","name": "requestId","type": "bytes32"}],"name": "RandomnessRequested","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "uint256","name": "roundId","type": "uint256"},{"indexed": false,"internalType": "bool","name": "success","type": "bool"},{"indexed": false,"internalType": "string","name": "reason","type": "string"}],"name": "RoundDrawAttempted","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "buyer","type": "address"},{"indexed": false,"internalType": "uint256","name": "amount","type": "uint256"},{"indexed": false,"internalType": "uint256","name": "roundId","type": "uint256"},{"indexed": false,"internalType": "bool","name": "paidInETH","type": "bool"}],"name": "TicketPurchased","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": "uint256","name": "roundId","type": "uint256"},{"indexed": true,"internalType": "address","name": "winner","type": "address"}],"name": "WinnerSelected","type": "event"},{"inputs": [],"name": "ETH_USD_PRICE_ID","outputs": [{"internalType": "bytes32","name": "","type": "bytes32"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "HUE_HOLDER_PRICE_USD","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "MAX_TICKETS_PER_TX","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "TICKET_PRICE_USD","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "WEEK","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint64","name": "sequence","type": "uint64"},{"internalType": "address","name": "provider","type": "address"},{"internalType": "bytes32","name": "randomNumber","type": "bytes32"}],"name": "_entropyCallback","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "to","type": "address"},{"internalType": "uint256","name": "tokenId","type": "uint256"}],"name": "approve","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "autoDrawEnabled","outputs": [{"internalType": "bool","name": "","type": "bool"}],"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"}],"name": "burnTicket","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "uint256","name": "amount","type": "uint256"}],"name": "buyTickets","outputs": [],"stateMutability": "payable","type": "function"},{"inputs": [],"name": "currentRoundId","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "drawTime","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "entropy","outputs": [{"internalType": "contract IEntropy","name": "","type": "address"}],"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": "getCurrentRoundForToken","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "getCurrentRoundInfo","outputs": [{"internalType": "uint256","name": "roundId","type": "uint256"},{"internalType": "uint256","name": "totalTickets","type": "uint256"},{"internalType": "uint256","name": "timeUntilDraw","type": "uint256"},{"internalType": "bool","name": "drawn","type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "amount","type": "uint256"},{"internalType": "address","name": "user","type": "address"}],"name": "getRequiredETHAmount","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "roundId","type": "uint256"}],"name": "getRoundWinner","outputs": [{"internalType": "address","name": "winner","type": "address"},{"internalType": "bool","name": "drawn","type": "bool"},{"internalType": "uint256","name": "totalTickets","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "roundId","type": "uint256"},{"internalType": "address","name": "participant","type": "address"}],"name": "getTicketCount","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","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": "","type": "address"}],"name": "isHueHolder","outputs": [{"internalType": "bool","name": "","type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "isPurchaseOpen","outputs": [{"internalType": "bool","name": "","type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "tokenId","type": "uint256"}],"name": "isTicketFromCompletedRound","outputs": [{"internalType": "bool","name": "","type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "lastSequenceNumber","outputs": [{"internalType": "uint64","name": "","type": "uint64"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "name","outputs": [{"internalType": "string","name": "","type": "string"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "owner","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "tokenId","type": "uint256"}],"name": "ownerOf","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "purchaseDeadline","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "pyth","outputs": [{"internalType": "contract IPyth","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "randomnessRequested","outputs": [{"internalType": "bool","name": "","type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "renounceOwnership","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "requestRandomnessAndDraw","outputs": [],"stateMutability": "payable","type": "function"},{"inputs": [{"internalType": "uint256","name": "","type": "uint256"},{"internalType": "uint256","name": "","type": "uint256"}],"name": "roundTokens","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint256","name": "","type": "uint256"}],"name": "rounds","outputs": [{"internalType": "uint256","name": "roundId","type": "uint256"},{"internalType": "uint256","name": "totalTickets","type": "uint256"},{"internalType": "bool","name": "completed","type": "bool"},{"internalType": "address","name": "winner","type": "address"},{"internalType": "bytes32","name": "randomness","type": "bytes32"},{"internalType": "bool","name": "drawn","type": "bool"},{"internalType": "uint256","name": "winningTicketId","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": "operator","type": "address"},{"internalType": "bool","name": "approved","type": "bool"}],"name": "setApprovalForAll","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "bool","name": "enabled","type": "bool"}],"name": "setAutoDrawEnabled","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "uint256","name": "_newDrawTime","type": "uint256"}],"name": "setDrawTime","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "bool","name": "_enabled","type": "bool"}],"name": "setTestingMode","outputs": [],"stateMutability": "nonpayable","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": "testingMode","outputs": [{"internalType": "bool","name": "","type": "bool"}],"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": "from","type": "address"},{"internalType": "address","name": "to","type": "address"},{"internalType": "uint256","name": "tokenId","type": "uint256"}],"name": "transferFrom","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "newOwner","type": "address"}],"name": "transferOwnership","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address[]","name": "holders","type": "address[]"},{"internalType": "bool[]","name": "statuses","type": "bool[]"}],"name": "updateHueHolders","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "withdrawETH","outputs": [],"stateMutability": "nonpayable","type": "function"},{"stateMutability": "payable","type": "receive"}]
Contract Creation Code
0002000000000002001600000000000200010000000103550000006003100270000007000030019d000007000330019700000001002001900000003f0000c13d0000008004000039000000400040043f000000040030008c000000b90000413d000000000201043b000000e002200270000007180020009c000000bd0000a13d000007190020009c0000011c0000a13d0000071a0020009c000001630000a13d0000071b0020009c000001b70000a13d0000071c0020009c000002810000213d0000071f0020009c0000045d0000613d000007200020009c000006d90000c13d000000000100041a00000703011001970000000002000411000000000021004b000005750000c13d0000000b01000039000000000101041a000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000602100039000000000202041a000000ff002001900000147a0000c13d0000000301100039000000000101041a000000000001004b000006b20000c13d000000400100043d00000044021000390000081f03000041000000000032043500000024021000390000000f03000039000014800000013d0000000002000416000000000002004b000006d90000c13d0000001f023000390000070102200197000000a002200039000000400020043f0000001f0430018f0000070205300198000000a002500039000000500000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b0000004c0000c13d000000000004004b0000005d0000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000400030008c000006d90000413d000000a00700043d000007030070009c000006d90000213d000000c00100043d000900000001001d000007030010009c000006d90000213d000000400300043d000007040030009c000007860000813d0000004001300039000000400010043f0000001201000039000000000413043600000705010000410000000000140435000000400200043d000007060020009c000007860000213d000600000004001d000700000003001d0000004001200039000000400010043f0000000701000039000800000002001d00000000021204360000070701000041000400000002001d0000000000120435000000000100041a00000708021001970000000006000411000000000262019f000000000020041b00000000020004140000070305100197000007000020009c0000070002008041000000c00120021000000709011001c70000800d0200003900000003030000390000070a04000041000500000007001d1bea1be00000040f0000000100200190000006d90000613d0000000101000039000000000011041b000000070900002900000000020904330000070b0020009c00000008080000290000000606000029000007860000213d0000000201000039000000000301041a000000010430019000000001033002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000054004b0000036d0000c13d000000200030008c000000b10000413d000000000010043f0000001f0420003900000005044002700000070c0440009a000000200020008c0000070d040040410000001f0330003900000005033002700000070c0330009a000000000034004b000000b10000813d000000000004041b0000000104400039000000000034004b000000ad0000413d0000001f0020008c000006a70000a13d000000000010043f0000083f052001980000076a0000c13d00000020040000390000070d03000041000007760000013d000000000003004b000006d90000c13d000000000100001900001beb0001042e0000073a0020009c000000e90000213d0000074a0020009c0000017e0000213d000007520020009c000001d90000213d000007560020009c0000028b0000613d000007570020009c000002ad0000613d000007580020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000203000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0010008c00000000060000390000000106002039000000000662013f00000001006001900000036d0000c13d000000800010043f000000000005004b000005900000613d000000000030043f000000020020008c000005ca0000413d0000070d0200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b000000e00000413d000006f50000013d0000073b0020009c000001990000213d000007430020009c000001f30000213d000007470020009c000002c00000613d000007480020009c000002d10000613d000007490020009c000006d90000c13d000000640030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d0000070b0020009c000006d90000213d0000002402100370000000000202043b000007030020009c000006d90000213d0000004401100370000000000101043b000800000001001d000007630100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007000010009c0000070001008041000000c00110021000000764011001c700008005020000391bea1be50000040f0000000100200190000016380000613d000000000101043b0000070301100198000007cb0000c13d000000400100043d00000044021000390000082103000041000000000032043500000024021000390000001703000039000014800000013d0000072b0020009c000001a60000213d000007330020009c000002030000213d000007370020009c000004640000613d000007380020009c000002de0000613d000007390020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000b01000039000000000101041a000900000001001d000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d0000000902000039000000000202041a000600000002001d000000000101043b000700000001001d0000000301100039000000000101041a000800000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000060110006b000000000100401900000007020000290000000602200039000000000202041a000000400300043d00000020043000390000000805000029000000000054043500000040043000390000000000140435000000ff002001900000000001000039000000010100c0390000006002300039000000000012043500000009010000290000000000130435000007000030009c000007000300804100000040013002100000080f011001c700001beb0001042e000007240020009c0000020e0000213d000007280020009c0000047b0000613d000007290020009c000002f20000613d0000072a0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000d01000039000000000101041a000900000001001d0000800b0100003900000004030000390000000004000415000000160440008a000000050440021000000710020000411bea1bc20000040f000000090010006c00000000010000390000000101004039000000800010043f000007590100004100001beb0001042e0000074b0020009c000002340000213d0000074f0020009c0000033b0000613d000007500020009c0000034b0000613d000300000004001d000007510020009c000006d90000c13d000000240030008c000006d90000413d0000000401100370000000000301043b0000000102000039000000000102041a000000020010008c0000057e0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000083501000041000000c40010043f0000075c0100004100001bec000104300000073c0020009c0000024f0000213d000007400020009c000003500000613d000007410020009c000003570000613d000007420020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000d01000039000004590000013d0000072c0020009c0000025c0000213d000007300020009c0000049a0000613d000007310020009c0000035e0000613d000007320020009c000006d90000c13d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea1b340000040f000004350000013d000007210020009c000003730000613d000007220020009c0000037a0000613d000007230020009c000006d90000c13d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000601043b000007030060009c000006d90000213d000000000100041a00000703021001970000000005000411000000000052004b000005750000c13d000000000006004b000006cb0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f0000077501000041000000c40010043f0000077601000041000000e40010043f000007770100004100001bec00010430000007530020009c000003940000613d000007540020009c0000039d0000613d000007550020009c000006d90000c13d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea1b340000040f000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000601100039000000000101041a000000ff001001900000000001000039000000010100c039000004350000013d000007440020009c000003c60000613d000007450020009c000003e30000613d000007460020009c000006d90000c13d000000240030008c000006d90000413d0000000001000416000000000001004b000006d90000c13d1bea182f0000040f000900000001001d1bea18570000040f0000000e01000039000003ec0000013d000007340020009c000004a40000613d000007350020009c000003f30000613d000007360020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d000000000100041a000002cd0000013d000007250020009c000004ba0000613d000007260020009c0000041c0000613d000007270020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d000000000100041a00000703011001970000000002000411000000000021004b000005750000c13d00000778010000410000000000100443000000000100041000000004001004430000000001000414000007000010009c0000070001008041000000c00110021000000779011001c70000800a020000391bea1be50000040f0000000100200190000016380000613d000000000200041a0000070304200197000000000301043b0000000001000414000007000010009c0000070001008041000000c001100210000000000003004b000006db0000c13d0000000002040019000006de0000013d0000074c0020009c000004210000613d0000074d0020009c000004280000613d0000074e0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d00000000010300191bea181d0000040f000800000001001d000700000002001d000900000003001d000000400100043d000600000001001d1bea183a0000040f00000006010000290000000000010435000000000100041100000009020000291bea18eb0000040f1bea18c70000040f0000000801000029000000070200002900000009030000291bea195b0000040f0000073d0020009c0000042d0000613d0000073e0020009c0000043c0000613d0000073f0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000006401000039000000800010043f000007590100004100001beb0001042e0000072d0020009c000004d70000613d0000072e0020009c000004550000613d0000072f0020009c000006d90000c13d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000002401100370000000000201043b000000000002004b0000000001000039000000010100c039000800000002001d000000000012004b000006d90000c13d0000000002000411000000090020006c0000072f0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000001901000039000000a40010043f0000080901000041000000c40010043f0000075c0100004100001bec000104300000071d0020009c000004f10000613d0000071e0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000801000039000000000101041a000002cd0000013d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000002402100370000000000202043b000900000002001d0000000401100370000000000101043b000000000010043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000000090020006b000006d90000813d00000009020000291bea17e30000040f0000000302200210000000000101041a000000000121022f000000ff0020008c0000000001002019000004350000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000201043b0000082500200198000006d90000c13d00000001010000390000083c0020009c000005d30000613d0000083d0020009c000005d30000613d0000083e0020009c000000000100c019000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000000001000412001500000001001d001400000000003d000080050100003900000044030000390000000004000415000000150440008a000000050440021000000763020000411bea1bc20000040f0000070301100197000000800010043f000007590100004100001beb0001042e000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000002402100370000000000202043b000007030020009c000006d90000213d0000000401100370000000000101043b1bea199c0000040f000004350000013d0000000001000416000000000001004b000006d90000c13d000000000100041a00000703021001970000000005000411000000000052004b000005750000c13d0000070801100197000000000010041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000003030000390000070a040000410000000006000019000006d60000013d000000840030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000002402100370000000000202043b000800000002001d000007030020009c000006d90000213d0000004402100370000000000902043b0000006402100370000000000402043b0000070b0040009c000006d90000213d0000002302400039000000000032004b000006d90000813d0000000405400039000000000251034f000000000202043b0000070b0020009c000007860000213d0000001f072000390000083f077001970000003f077000390000083f077001970000076b0070009c000007860000213d0000008007700039000000400070043f000000800020043f00000000042400190000002404400039000000000034004b000006d90000213d0000002003500039000000000331034f0000083f042001980000001f0520018f000000a001400039000003280000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000003240000c13d000000000005004b000003350000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a001200039000000000001043500000000010004110000000002090019000700000009001d000003450000013d0000000001000416000000000001004b000006d90000c13d00000000010300191bea181d0000040f000900000001001d000800000002001d0000000002030019000700000003001d00000000010004111bea18eb0000040f1bea18c70000040f0000000901000029000000080200002900000007030000291bea195b0000040f0000000001000416000000000001004b000006d90000c13d0000000901000039000004590000013d0000000001000416000000000001004b000006d90000c13d0000081401000041000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000081301000041000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000000303000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0010008c00000000060000390000000106002039000000000662013f00000001006001900000058d0000613d0000083001000041000000000010043f0000002201000039000000040010043f000007690100004100001bec000104300000000001000416000000000001004b000006d90000c13d0000000801000039000000000101041a0000076000100198000004b50000013d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000007030020009c000006d90000213d0000002401100370000000000101043b000900000001001d000007030010009c000006d90000213d000000000020043f0000000701000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000902000029000000000020043f000000200010043f00000000010000190000004002000039000004b20000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea18910000040f000004350000013d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000002401100370000000000101043b000800000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070301100198000004930000613d000000090010006b000007da0000c13d000000400100043d00000064021000390000083903000041000000000032043500000044021000390000083a03000041000000000032043500000024021000390000002103000039000009160000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000302100039000000000202041a0000000603100039000000000303041a0000000401100039000000000101041a00000008011002700000070301100197000000800010043f000000ff003001900000000001000039000000010100c039000000a00010043f000000c00020043f000008150100004100001beb0001042e000000240030008c000006d90000413d0000000001000416000000000001004b000006d90000c13d1bea182f0000040f000900000001001d1bea18570000040f0000001101000039000000000201041a0000084002200197000000090000006b000000010220c1bf000000000021041b000000000100001900001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000702100039000000000202041a0000000603100039000000000303041a0000000504100039000000000404041a0000000405100039000000000505041a0000000306100039000000000606041a000000000101041a000000800010043f000000a00060043f000000ff005001900000000001000039000000010100c039000000c00010043f00000008015002700000070301100197000000e00010043f000001000040043f000000ff003001900000000001000039000000010100c039000001200010043f000001400020043f0000080e0100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000000e01000039000004b30000013d0000000001000416000000000001004b000006d90000c13d0000082201000041000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000001101000039000004b30000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea186d0000040f000000400200043d0000000000120435000007000020009c000007000200804100000040012002100000080c011001c700001beb0001042e000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000002402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000000401100370000000000101043b000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000902000029000000000020043f0000000201100039000000200010043f00000000010000190000004002000039000005d10000013d0000000001000416000000000001004b000006d90000c13d0000000b01000039000000000101041a000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000071201000041000000800010043f000007590100004100001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000007030010009c000006d90000213d000000000001004b000005cc0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000081101000041000000c40010043f0000081201000041000000e40010043f000007770100004100001bec00010430000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000900000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070301100198000005d60000c13d000000400100043d00000044021000390000083b03000041000000000032043500000024021000390000001803000039000014800000013d0000000001000416000000000001004b000006d90000c13d0000000801000039000000000101041a000000a0011002700000070b01100197000000800010043f000007590100004100001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000007030010009c000006d90000213d000000000010043f0000000c01000039000000200010043f000000400200003900000000010000191bea1bad0000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f000007590100004100001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b001300000001001d000900000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a00000703001001980000063d0000c13d000000400100043d000000440210003900000805030000410000147d0000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000000000200041a00000703022001970000000003000411000000000032004b000005750000c13d0000000e02000039000000000202041a000000ff002001900000069d0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000080b01000041000000c40010043f0000075c0100004100001bec00010430000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b0000070b0020009c000006d90000213d0000002304200039000000000034004b000006d90000813d0000000404200039000000000441034f000000000404043b000500000004001d0000070b0040009c000006d90000213d000400240020003d000000050200002900000005022002100000000402200029000000000032004b000006d90000213d0000002402100370000000000202043b0000070b0020009c000006d90000213d0000002304200039000000000034004b000006d90000813d0000000404200039000000000141034f000000000101043b0000070b0010009c000006d90000213d000300240020003d00000005021002100000000302200029000000000032004b000006d90000213d000000000200041a00000703022001970000000003000411000000000032004b000005750000c13d000000050010006b0000150b0000c13d000000050000006b000000bb0000613d000900000000001d0000052a0000013d00000009020000290000000102200039000900000002001d000000050020006c000000bb0000813d000000090100002900000005011002100000000302100029000800000002001d0000000102200367000000000302043b000000000003004b0000000002000039000000010200c039000700000003001d000000000023004b000006d90000c13d0000000401100029000600000001001d0000000101100367000000000101043b000007030010009c000006d90000213d000000000010043f0000000c01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000008400220019700000007022001af000000000021041b00000001010003670000000802100360000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000006d90000c13d0000000601100360000000000501043b000000000002004b000005670000613d000007030050009c000006d90000213d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000002030000390000075e040000411bea1be00000040f0000000100200190000005250000c13d000006d90000013d000007030050009c000006d90000213d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000002030000390000075f040000411bea1be00000040f0000000100200190000005250000c13d000006d90000013d0000075a01000041000000800010043f0000002001000039000000840010043f000000a40010043f0000081001000041000000c40010043f0000075c0100004100001bec000104300000000201000039000000000012041b000000650130008a000008410010009c000005960000213d0000075a01000041000000800010043f0000002001000039000000840010043f0000000e01000039000000a40010043f0000083401000041000000c40010043f0000075c0100004100001bec00010430000000800010043f000000000005004b000005c70000c13d0000084001200197000000a00010043f000000000004004b000000c001000039000000a001006039000006f60000013d000800000003001d0000001101000039000000000101041a000000ff00100190000005ac0000613d0000000901000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000090010006c000008210000813d0000000d01000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000090010006c0000080e0000813d000000000200041100000008010000291bea199c0000040f0000000002000416000000000312004b000009480000813d000000400100043d000000440210003900000833030000410000147d0000013d000000000030043f000000020020008c000006eb0000813d000000a001000039000006f60000013d000000000010043f0000000501000039000000200010043f000000400200003900000000010000191bea1bad0000040f000000000101041a000000800010043f000007590100004100001beb0001042e0000000002000411000000000021004b0000075f0000c13d0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070300100198000004930000613d0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a000807030010019c000004930000613d0000000901000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a0000070802200197000000000021041b0000000801000029000000000010043f0000000501000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000000010220008a000000000021041b0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a0000070802200197000000000021041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d02000039000000040300003900000807040000410000000805000029000000000600001900000009070000291bea1be00000040f0000000100200190000000bb0000c13d000006d90000013d00000009010000291bea1b340000040f001200000001001d000800000001001d000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000602100039000000000202041a001100ff002001930000000701100039000000000101041a000000090010006b001000000000003d001000010000603d000000400100043d0000077c0010009c000007860000213d000000a002100039000000400020043f00000080021000390000006003000039000000000032043500000060021000390000000000320435000000400210003900000000003204350000002002100039000000000032043500000000003104350000000801000029000000051010011a000000030010008c000006fc0001a13e000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c00410003900000792050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000079306000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f000000200450003900000794060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000795070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d000007960200004100000ac50000013d0000000902000039000000000012041b0000080a0110009c000007660000813d0000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec00010430000000000002004b0000000003000019000006ab0000613d00000000030604330000000304200210000008420440027f0000084204400167000000000343016f0000000102200210000000000223019f000007820000013d000800000001001d0000000901000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000090010006c000008630000813d000000400100043d00000044021000390000077403000041000000000032043500000024021000390000000903000039000014800000013d0000070801100197000000000161019f000000000010041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000003030000390000070a040000411bea1be00000040f0000000100200190000000bb0000c13d000000000100001900001bec0001043000000709011001c7000080090200003900000000050000191bea1be00000040f00000060031002700000070003300198000007090000c13d0000000100200190000000bb0000c13d000000400100043d00000044021000390000077b03000041000000000032043500000024021000390000001503000039000014800000013d0000080d0200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b000006ed0000413d000000c001300039000000800210008a00000080010000391bea18450000040f0000002001000039000000400200043d000900000002001d000000000212043600000080010000391bea180b0000040f00000009020000290000000001210049000007000010009c00000700010080410000006001100210000007000020009c00000700020080410000004002200210000000000121019f00001beb0001042e0000001f0430003900000701044001970000003f044000390000077a04400197000000400500043d0000000004450019000000000054004b000000000600003900000001060040390000070b0040009c000007860000213d0000000100600190000007860000c13d000000400040043f0000001f0430018f000000000635043600000702053001980000000003560019000007210000613d000000000701034f000000007807043c0000000006860436000000000036004b0000071d0000c13d000000000004004b000006e20000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006e20000013d000000000020043f0000000701000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000902000029000000000020043f000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a00000840022001970000000803000029000000000232019f000000000021041b000000400100043d0000000000310435000007000010009c000007000100804100000040011002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000070f011001c70000800d020000390000000303000039000008080400004100000000050004110000000906000029000006d60000013d000000400100043d00000044021000390000080603000041000000000032043500000024021000390000001003000039000014800000013d0000000d02000039000000000012041b000000000100001900001beb0001042e0000070d030000410000002004000039000000010650008a00000005066002700000070e0660009a00000000079400190000000007070433000000000073041b00000020044000390000000103300039000000000063004b0000076f0000c13d000000000025004b000007800000813d0000000305200210000000f80550018f000008420550027f000008420550016700000000049400190000000004040433000000000454016f000000000043041b000000010220021000000001022001bf000000000021041b00000000040804330000070b0040009c0000078c0000a13d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000000301000039000000000101041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f00000001001001900000036d0000c13d000000200030008c000007b70000413d000600000003001d000700000004001d0000000301000039000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000006010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000007b70000813d000000000002041b0000000102200039000000000012004b000007b30000413d0000001f0040008c000008150000a13d000700000004001d0000000301000039000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000200200008a0000000702200180000000000101043b000013580000c13d0000002003000039000013650000013d0000000002000411000000000012004b0000090d0000c13d0000000801000039000000000101041a000000a002100270000000090220014f0000070b00200198000009eb0000c13d0000076000100198000013b70000c13d000000400100043d00000044021000390000082003000041000001180000013d0000000002000411000000000012004b000009210000c13d0000000801000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000007080220019700000009022001af000000000021041b0000000801000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070305100198000004930000613d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000004030000390000083804000041000000090600002900000008070000291bea1be00000040f0000000100200190000000bb0000c13d000006d90000013d000000400100043d00000044021000390000082a03000041000000000032043500000024021000390000001f03000039000014800000013d000000000004004b00000000010000190000081a0000613d000000040100002900000000010104330000000302400210000008420220027f0000084202200167000000000121016f0000000102400210000000000121019f000013720000013d00000823010000410000000000100443000000000100041000000004001004430000000001000414000007000010009c0000070001008041000000c00110021000000779011001c700008002020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000000001004b000006d90000613d000000400200043d00000824010000410000000001120436000600000001001d000007000020009c000900000002001d0000070001000041000000000102401900070040001002180000000001000414000007000010009c0000070001008041000000c00110021000000007011001af00000766011001c700000000020004101bea1be00000040f00000001002001900000148b0000613d00000009010000290000070b0010009c000007860000213d0000000903000029000000400030043f0000000b01000039000000000501041a000000600130003900000828020000410000000000210435000000400130003900000007020000390000000000210435000000400100003900000006020000290000000000120435000000010100003900000000001304350000000001000414000007000010009c0000070001008041000000c00110021000000007011001af00000829011001c70000800d02000039000000020300003900000827040000411bea1be00000040f0000000100200190000005bd0000c13d000006d90000013d000900000001001d0000000801000039000000000101041a0000076000100198000009ef0000c13d000007630100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007000010009c0000070001008041000000c00110021000000764011001c700008005020000391bea1be50000040f0000000100200190000016380000613d000000000201043b000000400300043d000700000003001d00000765010000410000000000130435000007000030009c0000070001000041000000000103401900000040011002100000000003000414000007000030009c0000070003008041000000c003300210000000000113019f00000766011001c70000070302200197000600000002001d1bea1be50000040f00000060031002700000070003300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000070b0000290000000705700029000008980000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000008940000c13d000000000006004b000008a50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014ed0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000500000002001d0000070b0020009c000007860000213d0000000100100190000007860000c13d0000000501000029000000400010043f000000200030008c000006d90000413d00000000010b0433000700000001001d000007670010009c000006d90000813d000007680100004100000005030000290000000000130435000000040130003900000007020000290000000000210435000007000030009c0000070001000041000000000103401900000040011002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000769011001c700000006020000291bea1be50000040f00000060031002700000070003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000505700029000008db0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b000008d70000c13d000000000006004b000008e80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000016390000613d0000001f01400039000000600110018f0000000501100029000400000001001d0000070b0010009c000007860000213d0000000401000029000000400010043f000000200030008c000006d90000413d00000005010000290000000001010433000500000001001d0000076a0010009c000006d90000213d0000000001000416000000050010006c000017270000813d00000004030000290000004401300039000007730200004100000000002104350000002401300039000000100200003900000000002104350000075a010000410000000000130435000000040130003900000020020000390000000000210435000007000030009c0000070003008041000000400130021000000762011001c700001bec00010430000000400100043d0000006402100039000008160300004100000000003204350000004402100039000008170300004100000000003204350000002402100039000000230300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec00010430000000000010043f0000000701000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a000000ff00100190000007dd0000c13d000000400100043d00000064021000390000083603000041000000000032043500000044021000390000083703000041000000000032043500000024021000390000003d03000039000009160000013d0000097c0000a13d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800902000039000000000400041100000000050000191bea1be00000040f000000600310027000000700033001980000097a0000613d0000001f0430003900000701044001970000003f044000390000077a04400197000000400500043d0000000004450019000000000054004b000000000600003900000001060040390000070b0040009c000007860000213d0000000100600190000007860000c13d000000400040043f0000001f0430018f0000000006350436000007020530019800000000035600190000096d0000613d000000000701034f000000007807043c0000000006860436000000000036004b000009690000c13d000000000004004b0000097a0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000000100200190000015150000613d0000000b01000039000000000101041a000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000400000001001d000500030010003d000000080000006b000009b00000613d0000000401000029000700010010003d0000000501000029000000000101041a000600000001001d00000000020000190000000601000029000000000012001a000006a10000413d000900000002001d0000000001120019000000000010043f0000000701000029000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a00000708022001970000000003000411000000000232019f000000000021041b00000009020000290000000102200039000000080020006c000009950000413d0000000001000411000000000010043f00000004010000290000000201100039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000000080020002a000006a10000413d0000000802200029000000000021041b0000000501000029000000000101041a000000080010002a000006a10000413d000000080500002900000000015100190000000502000029000000000012041b000000000005004b0000151c0000c13d0000000b01000039000000000101041a000000400200043d000000400320003900000001040000390000000000430435000000200320003900000000001304350000000000520435000007000020009c000007000200804100000040012002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000831011001c70000800d020000390000000203000039000008320400004100000000050004111bea1be00000040f0000000100200190000006d90000613d0000000101000039000000000011041b000000000100001900001beb0001042e000000400100043d00000044021000390000081903000041000006e70000013d000000400100043d00000044021000390000076103000041000000000032043500000024021000390000001c03000039000014800000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c0041000390000078d050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000078e06000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f00000020045000390000078f060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000790070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d000007910200004100000ac50000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c00410003900000788050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000078906000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f00000020045000390000078a060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f00000020056000390000078b070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d0000078c0200004100000ac50000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c00410003900000783050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000078406000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f000000200450003900000785060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000786070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d000007870200004100000ac50000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c0041000390000077e050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000077f06000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f000000200450003900000780060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000781070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d00000782020000410000004007600039000000400070043f0000002007600039000000000027043500000007020000390000000000260435000000800210003900000000006204350000000002010433000f00000002001d0000000007050433000e00000007001d0000000001040433000d00000001001d0000000004030433000b00000006001d000c00000004001d000000400500043d000a00000005001d0000079703000041000000600650003900000000003604350000079803000041000000610650003900000000003604350000079903000041000000400650003900000000003604350000079a03000041000000200650003900000000003604350000079b060000410000009a0350003900000000006304350000079c030000410000007a0850003900000000003804350000002003200039000000a7085000390000000009020433000000000009004b00000af70000613d000000000a000019000000000b8a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000009a004b00000af00000413d000000000a8900190000079d0800004100000000008a04350000000005590019000000ca095000390000000000690435000000aa065000390000079e090000410000000000960435000000d7095000390000000006020433000000000006004b00000b0c0000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000006a004b00000b050000413d000000000996001900000000000904350000000006650019000000d7056000390000000000850435000000fa086000390000079b050000410000000000580435000000da086000390000079f09000041000000000098043500000107096000390000000008020433000000000008004b00000b230000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b00000b1c0000413d00000000099800190000000000090435000000000668001900000107096000390000079d0800004100000000008904350000012a0960003900000000005904350000010a05600039000007a009000041000000000095043500000137096000390000000005020433000000000005004b00000b3a0000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000005a004b00000b330000413d000000000995001900000000000904350000000006650019000001370560003900000000008504350000015a086000390000079b0500004100000000005804350000013a08600039000007a109000041000000000098043500000167096000390000000008020433000000000008004b00000b510000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b00000b4a0000413d00000000099800190000000000090435000000000668001900000167096000390000079d0800004100000000008904350000018a0960003900000000005904350000016a05600039000007a209000041000000000095043500000197096000390000000005020433000000000005004b00000b680000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000005a004b00000b610000413d00000000099500190000000000090435000000000565001900000197065000390000000000860435000001ba085000390000079b0600004100000000006804350000019a08500039000007a3090000410000000000980435000001c7095000390000000008020433000000000008004b00000b7f0000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b00000b780000413d000000000998001900000000000904350000000005580019000001c7085000390000079d090000410000000000980435000001ea085000390000000000680435000001ca06500039000007a40800004100000000008604350000002008700039000001f70a5000390000000006070433000000000006004b00000b970000613d000000000b000019000000000cab0019000000000d8b0019000000000d0d04330000000000dc0435000000200bb0003900000000006b004b00000b900000413d000000000aa6001900000000009a043500000000096500190000021a059000390000079b060000410000000000650435000001fa05900039000007a50a0000410000000000a504350000002005100039000002270b900039000000000a01043300000000000a004b00000bad0000613d000000000c000019000000000dbc0019000000000e5c0019000000000e0e04330000000000ed0435000000200cc000390000000000ac004b00000ba60000413d000000000bba001900000000000b04350000000009a90019000002270b9000390000079d0a0000410000000000ab04350000024a0b90003900000000006b04350000022a06900039000007a60b0000410000000000b60435000002570b9000390000000006010433000000000006004b00000bc40000613d000000000c000019000000000dbc0019000000000e5c0019000000000e0e04330000000000ed0435000000200cc0003900000000006c004b00000bbd0000413d000000000bb6001900000000000b0435000000000696001900000257096000390000000000a904350000027a096000390000079b0a0000410000000000a904350000025a09600039000007a70b0000410000000000b904350000028709600039000000000b01043300000000000b004b00000bdb0000613d000000000c000019000000000d9c0019000000000e5c0019000000000e0e04330000000000ed0435000000200cc000390000000000bc004b00000bd40000413d000000000c9b00190000079d0900004100000000009c0435000000000b6b0019000002aa06b000390000000000a604350000028a06b00039000007a80a0000410000000000a604350000002006400039000002b70cb00039000000000a04043300000000000a004b00000bf10000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000ad004b00000bea0000413d000000000cca001900000000000c0435000000000aab0019000002b70ba0003900000000009b0435000002da0ba000390000079b0900004100000000009b0435000002ba0ba00039000007a90c0000410000000000cb0435000002e70ca00039000000000b04043300000000000b004b00000c080000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c010000413d000000000ccb001900000000000c0435000000000aab0019000002e70ca000390000079d0b0000410000000000bc04350000030a0ca0003900000000009c0435000002ea09a00039000007aa0c0000410000000000c90435000003170ca000390000000009020433000000000009004b00000c1f0000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000c180000413d000000000cc9001900000000000c0435000000000aa900190000031709a000390000000000b904350000033a0ba000390000079b0900004100000000009b04350000031a0ba00039000007ab0c0000410000000000cb0435000003470ca00039000000000b02043300000000000b004b00000c360000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c2f0000413d000000000ccb001900000000000c0435000000000aab0019000003470ca000390000079d0b0000410000000000bc04350000036a0ca0003900000000009c04350000034a09a00039000007ac0c0000410000000000c90435000003770ca000390000000009070433000000000009004b00000c4d0000613d000000000d000019000000000ecd0019000000000f8d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000c460000413d000000000cc9001900000000000c0435000000000aa900190000037709a000390000000000b904350000039a0ba000390000079b0900004100000000009b04350000037a0ba00039000007ad0c0000410000000000cb0435000003a70ca00039000000000b07043300000000000b004b00000c640000613d000000000d000019000000000ecd0019000000000f8d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c5d0000413d000000000ccb001900000000000c0435000000000aab0019000003a70ca000390000079d0b0000410000000000bc0435000003ca0ca0003900000000009c0435000003aa09a00039000007ae0c0000410000000000c90435000003d70ca000390000000009010433000000000009004b00000c7b0000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000c740000413d000000000cc9001900000000000c0435000000000aa90019000003d709a000390000000000b90435000003fa0ba000390000079b0900004100000000009b0435000003da0ba00039000007af0c0000410000000000cb0435000004070ca00039000000000b01043300000000000b004b00000c920000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c8b0000413d000000000ccb001900000000000c0435000000000aab0019000004070ca000390000079d0b0000410000000000bc04350000042a0ca0003900000000009c04350000040a09a00039000007b00c0000410000000000c90435000004370ca000390000000009010433000000000009004b00000ca90000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000ca20000413d000000000cc9001900000000000c04350000000009a90019000004370a9000390000000000ba04350000045a0b9000390000079b0a0000410000000000ab04350000043a0b900039000007b10c0000410000000000cb0435000004670b900039000000000c01043300000000000c004b00000cc00000613d000000000d000019000000000ebd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd000390000000000cd004b00000cb90000413d000000000dbc00190000079d0b0000410000000000bd043500000000099c00190000048a0c9000390000000000ac04350000046a0a900039000007b20c0000410000000000ca0435000004970c900039000000000a04043300000000000a004b00000cd50000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000ad004b00000cce0000413d000000000cca00190000000000bc0435000000000aa90019000004ba0ba000390000079b0900004100000000009b04350000049a0ba00039000007b30c0000410000000000cb0435000004c70ca00039000000000b04043300000000000b004b00000cea0000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000ce30000413d000000000ccb001900000000000c0435000000000bba0019000004c70cb000390000079d0a0000410000000000ac0435000004ea0cb0003900000000009c0435000004ca09b00039000007b40c0000410000000000c90435000004f70cb00039000000a709b00039000000000b02043300000000000b004b00000d020000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000cfb0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007b50c0000410000000000ca0435000004800cb00039000000300ab00039000000000b02043300000000000b004b00000d1a0000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d130000413d000000000ccb001900000000000c0435000000000bba0019000004500cb000390000079d0a0000410000000000ac0435000004730cb0003900000000009c04350000045309b00039000007b60c0000410000000000c90435000004800cb000390000003009b00039000000000b07043300000000000b004b00000d320000613d000000000d000019000000000ecd0019000000000f8d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d2b0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007b70c0000410000000000ca0435000004800cb00039000000300ab00039000000000b01043300000000000b004b00000d4a0000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d430000413d000000000ccb001900000000000c0435000000000bba0019000004500cb000390000079d0a0000410000000000ac0435000004730cb0003900000000009c04350000045309b00039000007b80c0000410000000000c90435000004800cb000390000003009b00039000000000b04043300000000000b004b00000d620000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d5b0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007b90c0000410000000000ca0435000004800cb00039000000300ab00039000000000b04043300000000000b004b00000d7a0000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d730000413d000000000ccb001900000000000c0435000000000bba0019000004500cb000390000079d0a0000410000000000ac0435000004730cb0003900000000009c04350000045309b00039000007ba0c0000410000000000c90435000004800cb000390000003009b00039000000000b02043300000000000b004b00000d920000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d8b0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007bb0c0000410000000000ca0435000004800cb00039000000300ab00039000000000b02043300000000000b004b00000daa0000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000da30000413d000000000ccb001900000000000c0435000000000cba0019000004500bc000390000079d0a0000410000000000ab0435000004730bc0003900000000009b04350000045309c00039000007bc0b0000410000000000b90435000004800bc000390000003009c000390000000007070433000000000007004b00000dc20000613d000000000c000019000000000dbc0019000000000e8c0019000000000e0e04330000000000ed0435000000200cc0003900000000007c004b00000dbb0000413d0000000008b700190000000000080435000000000879001900000450078000390000000000a7043500000473098000390000079b0700004100000000007904350000045309800039000007bd0a0000410000000000a90435000004800a80003900000030088000390000000009010433000000000009004b00000dda0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000dd30000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007be0a0000410000000000a70435000004800a90003900000030079000390000000009040433000000000009004b00000df20000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000deb0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007bf0a0000410000000000a80435000004800a90003900000030089000390000000009040433000000000009004b00000e0a0000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e030000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c00a0000410000000000a70435000004800a90003900000030079000390000000009020433000000000009004b00000e220000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e1b0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c10a0000410000000000a80435000004800a90003900000030089000390000000009020433000000000009004b00000e3a0000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e330000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c20a0000410000000000a70435000004800a90003900000030079000390000000009010433000000000009004b00000e520000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e4b0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c30a0000410000000000a80435000004800a90003900000030089000390000000009010433000000000009004b00000e6a0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e630000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c40a0000410000000000a70435000004800a90003900000030079000390000000009040433000000000009004b00000e820000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e7b0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c50a0000410000000000a80435000004800a90003900000030089000390000000009040433000000000009004b00000e9a0000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e930000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c60a0000410000000000a70435000004800a90003900000030079000390000000009020433000000000009004b00000eb20000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000eab0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c70a0000410000000000a80435000004800a90003900000030089000390000000009020433000000000009004b00000eca0000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000ec30000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c80a0000410000000000a70435000004800a90003900000030079000390000000009010433000000000009004b00000ee20000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000edb0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c90a0000410000000000a80435000004800a90003900000030089000390000000009010433000000000009004b00000efa0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000ef30000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007ca0a0000410000000000a70435000004800a90003900000030079000390000000009040433000000000009004b00000f120000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000f0b0000413d000000000aa9001900000000000a0435000000000a9700190000045007a0003900000000008704350000047308a000390000079b0700004100000000007804350000045308a00039000007cb0900004100000000009804350000048009a000390000003008a000390000000004040433000000000004004b00000f2a0000613d000000000a000019000000000b9a0019000000000c6a0019000000000c0c04330000000000cb0435000000200aa0003900000000004a004b00000f230000413d00000000069400190000000000060435000000000648001900000450086000390000079d040000410000000000480435000004730860003900000000007804350000045307600039000007cc080000410000000000870435000004800860003900000030066000390000000007020433000000000007004b00000f420000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b00000f3b0000413d0000000008870019000000000008043500000000067600190000045007600039000000000047043500000473076000390000079b0400004100000000004704350000045307600039000007cd080000410000000000870435000004800760003900000030066000390000000002020433000000000002004b00000f5a0000613d00000000080000190000000009780019000000000a380019000000000a0a04330000000000a904350000002008800039000000000028004b00000f530000413d00000000037200190000000000030435000000000326001900000450063000390000079d020000410000000000260435000004730630003900000000004604350000045304300039000007ce060000410000000000640435000004800630003900000030033000390000000004010433000000000004004b00000f720000613d000000000700001900000000086700190000000009570019000000000909043300000000009804350000002007700039000000000047004b00000f6b0000413d0000000006640019000000000006043500000000034300190000045004300039000000000024043500000473043000390000079b0200004100000000002404350000045304300039000007cf060000410000000000640435000004800430003900000030033000390000000001010433000000000001004b00000f8a0000613d000000000600001900000000074600190000000008560019000000000808043300000000008704350000002006600039000000000016004b00000f830000413d00000000044100190000000000040435000000000113001900000450031000390000079d040000410000000000430435000004730310003900000000002304350000045302100039000007d003000041000000000032043500000480031000390000000e0200002900000020012000390000000005020433000000000005004b00000fa30000613d000000000600001900000000073600190000000008160019000000000808043300000000008704350000002006600039000000000056004b00000f9c0000413d000000000735001900000023057000390000079b03000041000000000035043500000000004704350000000304700039000007d105000041000000000054043500000030047000390000000c0600002900000020056000390000000008060433000000000008004b00000fb90000613d0000000009000019000000000a490019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000089004b00000fb20000413d00000000044800190000000000040435000000000778001900000030087000390000079d040000410000000000480435000000530870003900000000003804350000003303700039000007d208000041000000000083043500000060037000390000000007020433000000000007004b00000fd00000613d00000000080000190000000009380019000000000a180019000000000a0a04330000000000a904350000002008800039000000000078004b00000fc90000413d000000000737001900000023087000390000079b03000041000000000038043500000000004704350000000304700039000007d308000041000000000084043500000030087000390000000004060433000000000004004b00000fe40000613d0000000009000019000000000a890019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000049004b00000fdd0000413d00000000088400190000000000080435000000000474001900000030084000390000079d070000410000000000780435000000530840003900000000003804350000003303400039000007d408000041000000000083043500000060084000390000000003060433000000000003004b00000ffb0000613d0000000009000019000000000a890019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000039004b00000ff40000413d0000000008830019000000000008043500000000044300190000006003400039000000000073043500000083074000390000079b0300004100000000003704350000006307400039000007d508000041000000000087043500000090084000390000000007060433000000000007004b000010120000613d0000000009000019000000000a890019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000079004b0000100b0000413d00000000088700190000000000080435000000000747001900000090047000390000079d080000410000000000840435000000b30470003900000000003404350000009303700039000007d6040000410000000000430435000000c0097000390000000f040000290000002003400039000000000a04043300000000000a004b0000102b0000613d000000000b000019000000000c9b0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb000390000000000ab004b000010240000413d00000000099a0019000000000009043500000000077a0019000000c0097000390000000000890435000000e3097000390000079b080000410000000000890435000000c309700039000007d70a0000410000000000a90435000000f00a7000390000000009040433000000000009004b000010420000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b0000103b0000413d000000000aa9001900000000000a04350000000007790019000000f00a7000390000079d0900004100000000009a0435000001130a70003900000000008a0435000000f308700039000007d80a0000410000000000a80435000001200a7000390000000d0800002900000000b8080434000000000008004b0000105a0000613d000000000c000019000000000dac0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc0003900000000008c004b000010530000413d000000000aa8001900000000000a043500000000087800190000012007800039000000000097043500000143098000390000079b0700004100000000007904350000012309800039000007d90a0000410000000000a90435000001500a8000390000000009060433000000000009004b000010710000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b0000106a0000413d000000000aa9001900000000000a04350000000008890019000001500a8000390000079d0900004100000000009a0435000001730a80003900000000007a04350000015307800039000007da0a0000410000000000a70435000001800a8000390000000007060433000000000007004b000010880000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000007b004b000010810000413d000000000aa7001900000000000a0435000000000887001900000180078000390000000000970435000001a3098000390000079b0700004100000000007904350000018309800039000007db0a0000410000000000a90435000001b00a8000390000000009060433000000000009004b0000109f0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b000010980000413d000000000aa9001900000000000a04350000000008890019000001b00a8000390000079d0900004100000000009a0435000001d30a80003900000000007a0435000001b307800039000007dc0a0000410000000000a70435000001e00a8000390000000007060433000000000007004b000010b60000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000007b004b000010af0000413d000000000aa7001900000000000a04350000000008870019000001e007800039000000000097043500000203098000390000079b070000410000000000790435000001e309800039000007dd0a0000410000000000a9043500000210098000390000000006060433000000000006004b000010cd0000613d000000000a000019000000000b9a0019000000000c5a0019000000000c0c04330000000000cb0435000000200aa0003900000000006a004b000010c60000413d00000000059600190000000000050435000000000586001900000210065000390000079d080000410000000000860435000002330650003900000000007604350000021306500039000007de07000041000000000076043500000240075000390000000006040433000000000006004b000010e40000613d0000000009000019000000000a790019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000069004b000010dd0000413d0000000007760019000000000007043500000000065600190000024005600039000000000085043500000263076000390000079b0500004100000000005704350000024307600039000007df08000041000000000087043500000270086000390000000007040433000000000007004b000010fb0000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b000010f40000413d00000000088700190000000000080435000000000667001900000270086000390000079d070000410000000000780435000002930860003900000000005804350000027305600039000007e0080000410000000000850435000002a0086000390000000005040433000000000005004b000011120000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000059004b0000110b0000413d000000000885001900000000000804350000000006650019000002a0056000390000000000750435000002c3076000390000079b050000410000000000570435000002a307600039000007e1080000410000000000870435000002d0086000390000000007040433000000000007004b000011290000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b000011220000413d000000000887001900000000000804350000000006670019000002d0086000390000079d070000410000000000780435000002f3086000390000000000580435000002d305600039000007e208000041000000000085043500000300086000390000000005040433000000000005004b000011400000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000059004b000011390000413d0000000008850019000000000008043500000000066500190000030005600039000000000075043500000323076000390000079b0500004100000000005704350000030307600039000007e308000041000000000087043500000330086000390000000007040433000000000007004b000011570000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b000011500000413d00000000088700190000000000080435000000000667001900000330086000390000079d070000410000000000780435000003530860003900000000005804350000033305600039000007e408000041000000000085043500000360056000390000000004040433000000000004004b0000116e0000613d00000000080000190000000009580019000000000a380019000000000a0a04330000000000a904350000002008800039000000000048004b000011670000413d0000000003540019000000000003043500000000046400190000036003400039000000000073043500000383054000390000079b0300004100000000003504350000036305400039000007e506000041000000000065043500000390064000390000000005020433000000000005004b000011850000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000117e0000413d00000000066500190000000000060435000000000445001900000390064000390000079d050000410000000000560435000003b30640003900000000003604350000039303400039000007e6060000410000000000630435000003c0064000390000000003020433000000000003004b0000119c0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000037004b000011950000413d000000000663001900000000000604350000000004430019000003c0034000390000000000530435000003e3054000390000079b030000410000000000350435000003c305400039000007e7060000410000000000650435000003f0064000390000000005020433000000000005004b000011b30000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000011ac0000413d000000000665001900000000000604350000000004450019000003f0064000390000079d05000041000000000056043500000413064000390000000000360435000003f303400039000007e806000041000000000063043500000420064000390000000003020433000000000003004b000011ca0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000037004b000011c30000413d0000000006630019000000000006043500000000044300190000042003400039000000000053043500000443054000390000079b0300004100000000003504350000042305400039000007e906000041000000000065043500000450064000390000000005020433000000000005004b000011e10000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000011da0000413d00000000066500190000000000060435000000000445001900000450064000390000079d050000410000000000560435000004730640003900000000003604350000045303400039000007ea060000410000000000630435000004800740003900000030064000390000000b0400002900000020034000390000000008040433000000000008004b000011fb0000613d0000000009000019000000000a790019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000089004b000011f40000413d0000000007780019000000000007043500000000068600190000045007600039000000000057043500000473076000390000079b0500004100000000005704350000045307600039000007eb080000410000000000870435000004800860003900000030066000390000000007020433000000000007004b000012130000613d0000000009000019000000000a890019000000000b190019000000000b0b04330000000000ba04350000002009900039000000000079004b0000120c0000413d00000000088700190000000000080435000000000876001900000450078000390000079d060000410000000000670435000004730780003900000000005704350000045305800039000007ec070000410000000000750435000004800780003900000030058000390000000004040433000000000004004b0000122b0000613d00000000080000190000000009780019000000000a380019000000000a0a04330000000000a904350000002008800039000000000048004b000012240000413d0000000003740019000000000003043500000000044500190000045003400039000000000063043500000473054000390000079b0300004100000000003504350000045305400039000007ed060000410000000000650435000004800640003900000030044000390000000005020433000000000005004b000012430000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000123c0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007ee060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b0000125b0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012540000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007ef060000410000000000640435000004800650003900000030045000390000000005020433000000000005004b000012730000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000126c0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007f0060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b0000128b0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012840000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007f1060000410000000000640435000004800650003900000030045000390000000005020433000000000005004b000012a30000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000129c0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007f2060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b000012bb0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012b40000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007f3060000410000000000640435000004800650003900000030045000390000000005020433000000000005004b000012d30000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012cc0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007f4060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b000012eb0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012e40000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007d006000041000000000064043500000480045000390000000005020433000000000005004b000013020000613d000000000600001900000000074600190000000008160019000000000808043300000000008704350000002006600039000000000056004b000012fb0000413d0000000004450019000000230540003900000000003504350000079d0300004100000000003404350000000305400039000007d206000041000000000065043500000030044000390000000002020433000000000002004b000013160000613d000000000500001900000000064500190000000007150019000000000707043300000000007604350000002005500039000000000025004b0000130f0000413d000000000242001900000000003204350000000301200039000007f50300004100000000003104350000000701200039000007f60300004100000000003104350000000a010000290000000002120049000000130320008a00000000003104350000002c022000390000083f032001970000000002130019000000000032004b000000000300003900000001030040390000070b0020009c000007860000213d0000000100300190000007860000c13d000000400020043f1bea1a5f0000040f000000400400043d0000002003400039000007f702000041000800000003001d0000000000230435000900000004001d0000003a024000390000000031010434000000000001004b000013400000613d000000000400001900000000052400190000000006430019000000000606043300000000006504350000002004400039000000000014004b000013390000413d000000000221001900000000000204350000001a021000390000000903000029000000000023043500000059011000390000083f011001970000000002310019000000000012004b000000000100003900000001010040390000070b0020009c000007860000213d0000000100100190000007860000c13d0000000003020019000000400020043f000000110000002a000016450000c13d000007060030009c000007860000213d000007fa010000410000000d020000390000164c0000013d000000010320008a0000000503300270000000000431001900000020030000390000000104400039000000080600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000135e0000c13d0000000705000029000000000052004b000013700000813d0000000302500210000000f80220018f000008420220027f000008420220016700000008033000290000000003030433000000000223016f000000000021041b000000010150021000000001011001bf000000090400002900000005050000290000000302000039000000000012041b0000001101000039000000000201041a000008400220019700000001022001bf000000000021041b00000703015001970000000802000039000000000302041a0000070803300197000000000113019f000000000012041b0000070301400197000000800010043f000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000007122010012a0000000002210049000007130120009c000006a10000813d0000000903000039000000000013041b000007150220009a000000000012004b000006a10000213d0000000d03000039000000000023041b0000000b020000390000000105000039000000000052041b000000400200043d0000000000120435000007000020009c000007000200804100000040012002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000070f011001c70000800d02000039000000020300003900000716040000411bea1be00000040f0000000100200190000006d90000613d000000800100043d000001400000044300000160001004430000002001000039000001000010044300000001010000390000012000100443000007170100004100001beb0001042e0000000b01000039000000000101041a000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000900000001001d0000000601100039000700000001001d000000000101041a000600000001001d000000ff001001900000147a0000c13d00000009010000290000000301100039000000000101041a000000000001004b000000380000613d000000090300002900000005023000390000000804000029000000000042041b00000000101400d9000800000001001d000000000010043f0000000101300039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d00000009020000290000000403200039000000000203041a0000081b02200197000000000101043b000000000101041a00000008011002100000081c01100197000000000112019f000500000003001d000000000013041b0000000b01000039000000000101041a000000000010043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000301041a000000400200043d000300000002001d000200000003001d0000000002320436000400000002001d000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d0000000205000029000000000005004b00000004020000290000141b0000613d000000000101043b00000000030000190000000402000029000000000401041a000000000242043600000001011000390000000103300039000000000053004b000014150000413d000000030120006a0000001f011000390000083f021001970000000301200029000000000021004b000000000200003900000001020040390000070b0010009c000007860000213d0000000100200190000007860000c13d000000400010043f00000003020000290000000002020433000000080020006c000016d40000a13d000000080100002900000005011002100000000401100029000000000101043300000009020000290000000702200039000000000012041b000001000100008a000000060110017f00000001011001bf0000000702000029000000000012041b0000000802000039000000000102041a0000076f01100197000000000012041b0000000b01000039000000000501041a0000000501000029000000000101041a000000080110027000000000020004140000070306100197000007000020009c0000070002008041000000c00120021000000709011001c70000800d0200003900000003030000390000081e04000041000900000005001d1bea1be00000040f0000000100200190000006d90000613d0000000901000029000900010010003e000006a10000613d0000000b010000390000000902000029000000000021041b000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000007122010012a0000000002210049000007130120009c000006a10000813d0000000903000039000000000013041b000007150220009a000000000012004b000006a10000213d0000000d03000039000000000023041b000000400200043d0000000000120435000007000020009c000007000200804100000040012002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000070f011001c70000800d02000039000000020300003900000716040000410000000905000029000006d60000013d000000400100043d00000044021000390000081a0300004100000000003204350000002402100039000000140300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec0001043000000060021002700000070002200197000000040420008c000014cf0000413d000000000300043d0000082503300197000000000501043b0000082605500197000000000335019f000000000030043f000000440020008c000014cf0000413d00000826033001970000075a0030009c000014cf0000c13d00000004071003700000083f084001980000001f0940018f000000400500043d0000000006850019000014a60000613d000000000a07034f000000000b05001900000000ac0a043c000000000bcb043600000000006b004b000014a20000c13d000000000009004b000014b30000613d000000000787034f0000000308900210000000000906043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f000000000076043500000000080504330000070b0080009c000014cf0000213d0000002406800039000000000026004b000014cf0000213d000000000758001900000000690704340000070b0090009c000014cf0000213d0000000004450019000000000a69001900000000004a004b000014cf0000213d00000000049800190000003f044000390000083f084001970000000004580019000000000084004b000000000500003900000001050040390000070b0040009c000007860000213d0000000100500190000007860000c13d000000400040043f000000000007004b000016d70000c13d0000001f0520018f0000070206200198000000400300043d0000000004630019000014da0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000014d60000c13d000000000005004b000014e70000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001200210000007000030009c00000700030080410000004002300210000000000112019f00001bec000104300000001f0530018f0000070206300198000000400200043d0000000004620019000014f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014f40000c13d000000000005004b000015050000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007000020009c00000700020080410000004002200210000000000112019f00001bec000104300000075a01000041000000800010043f0000002001000039000000840010043f0000000f01000039000000a40010043f0000075b01000041000000c40010043f0000075c0100004100001bec00010430000000400100043d00000044021000390000082b03000041000000000032043500000024021000390000000d03000039000014800000013d0000000001000411000000000001004b000015350000c13d0000000f01000039000000000201041a000000010220003a000006a10000613d000000000021041b000000400100043d0000082c0010009c000007860000213d0000002002100039000000400020043f0000000000010435000000400100043d00000044021000390000082f0300004100000000003204350000075a0200004100000000002104350000002402100039000000200300003900000000003204350000000402100039000014850000013d000407030010019b0000000001000019000600000001001d0000000f02000039000000000102041a000000010310003a000006a10000613d000000000032041b000000400200043d0000082c0020009c000007860000213d0000002001200039000700000001001d000000400010043f000500000002001d0000000000020435000900000003001d000000000030043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070300100198000016d00000c13d0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070300100198000016d00000c13d0000000001000411000000000010043f0000000501000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a0000000102200039000000000021041b0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a00000708022001970000000006000411000000000262019f000000000021041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000004030000390000080704000041000000000500001900000009070000291bea1be00000040f0000000100200190000006d90000613d00000823010000410000000000100443000000000100041100000004001004430000000001000414000007000010009c0000070001008041000000c00110021000000779011001c700008002020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000000001004b00000007060000290000160c0000613d000000400700043d0000006401700039000000800200003900000000002104350000004401700039000000090200002900000000002104350000082e010000410000000000170435000000040170003900000000020004110000000000210435000000240170003900000000000104350000000501000029000000000101043300000084027000390000000000120435000000a402700039000000000001004b000015c60000613d000000000300001900000000042300190000000005630019000000000505043300000000005404350000002003300039000000000013004b000015bf0000413d0000001f031000390000083f0330019700000000012100190000000000010435000000a401300039000007000010009c00000700010080410000006001100210000007000070009c000007000200004100000000020740190000004002200210000000000121019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000000402000029000900000007001d1bea1be00000040f000000090a00002900000060031002700000070003300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000015ea0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000015e60000c13d0000001f07400190000015f70000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000065043500000001002001900000170a0000613d0000001f01400039000000600110018f0000000004a10019000000000014004b000000000100003900000001010040390000070b0040009c000007860000213d0000000100100190000007860000c13d000000400040043f000000200030008c000006d90000413d00000000010a04330000082500100198000006d90000c13d00000826011001970000082e0010009c000017180000c13d0000000b01000039000000000101041a000000000010043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d0000000f02000039000000000202041a000900000002001d000000000101043b000000000201041a0000070b0020009c000007860000213d000700000002001d0000000102200039000000000021041b000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b00000007011000290000000902000029000000000021041b000000060100002900000001011000390000000805000029000000000051004b000015370000413d000009ce0000013d000000000001042f0000001f0530018f0000070206300198000000400200043d0000000004620019000014f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000016400000c13d000014f80000013d000000100000002a000007f901000041000007f80100604100000007020000390000001602006039000007060030009c000007860000213d0000000004030019000500000003001d0000004003300039000000400030043f0000002003400039000600000003001d0000000000130435000000000024043500000013010000291bea1ae80000040f000400000001001d0000001201000029000700000001001d1bea1ae80000040f000300000001001d00000007010000291bea1ae80000040f000007fb02000041000000400400043d000700000004001d00000020034000390000000000230435000000040200002900000020052000390000000003020433000200000003001d000400000001001d0000003b0240003900000000010500191bea17fe0000040f00000002020000290000000704200029000200000004001d000007fc010000410000003b02400039000000000012043500000005010000290000000003010433000100000003001d0000004e0240003900000006010000291bea17fe0000040f00000001020000290000000204200029000200000004001d000007fd010000410000004e024000390000000000120435000000030200002900000020012000390000000003020433000300000003001d00000057024000391bea17fe0000040f00000003020000290000000204200029000300000004001d000007fe010000410000005702400039000000000012043500000009010000290000000003010433000900000003001d000000640240003900000008010000291bea17fe0000040f00000009020000290000000304200029000900000004001d000007ff010000410000008402400039000000000012043500000800010000410000006402400039000000000012043500000005010000290000000003010433000800000003001d000000990240003900000006010000291bea17fe0000040f00000008020000290000000904200029000900000004001d0000080101000041000000b9024000390000000000120435000008020100004100000099024000390000000000120435000000040200002900000020012000390000000003020433000800000003001d000000be024000391bea17fe0000040f000000080200002900000009042000290000080302000041000000be03400039000000000023043500000007010000290000000003140049000000a2023000390000000000210435000000c2023000391bea18450000040f00000007010000291bea1a5f0000040f0000080402000041000000400400043d000900000004001d000000200340003900000000002304350000000013010434000800000003001d0000003d024000391bea17fe0000040f00000008030000290000001d02300039000000090100002900000000002104350000003d023000391bea18450000040f0000002001000039000000400200043d000800000002001d000000000212043600000009010000291bea180b0000040f0000000802000029000007000000013d000000400100043d00000044021000390000082d03000041000009f20000013d00000044021000390000081d03000041000009f20000013d0000000b01000039000000000501041a00000020014000390000004002000039000000000021043500000000000404350000000001070433000000400240003900000000001204350000006002400039000000000001004b000016eb0000613d000000000700001900000000082700190000000009670019000000000909043300000000009804350000002007700039000000000017004b000016e40000413d0000001f061000390000083f03600197000000000121001900000000000104350000006001300039000007000010009c00000700010080410000006001100210000007000040009c00000700040080410000004002400210000000000121019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000709011001c70000800d02000039000000020300003900000827040000411bea1be00000040f0000000100200190000006d90000613d0000000d01000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000005b20000013d000000000003004b000017630000c13d00000060020000390000000001020433000000000001004b0000178b0000c13d000000400200043d000900000002001d0000075a01000041000000000012043500000004012000391bea18de0000040f00000009020000290000171e0000013d0000075a01000041000700000004001d000000000014043500000004014000391bea18de0000040f00000007020000290000000001210049000007000010009c00000700010080410000006001100210000007000020009c00000700020080410000004002200210000000000121019f00001bec000104300000000001000411000000600110021000000004030000290000004002300039000000000012043500000054013000390000000802000029000000000021043500000054010000390000000001130436000000090200002900000000002104350000076b0030009c000007860000213d00000004030000290000008002300039000900000002001d000000400020043f000007000010009c000007000100804100000040011002100000000002030433000007000020009c00000700020080410000006002200210000000000112019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000709011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000076c02000041000000090300002900000000002304350000000404000029000000a4024000390000000000120435000000840140003900000007020000290000000000210435000007000030009c0000070001000041000000000103401900000040011002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f000000050000006b000017940000c13d0000076e011001c70000000602000029000017990000013d0000001f0230003900000701022001970000003f022000390000077a04200197000000400200043d0000000004420019000000000024004b000000000500003900000001050040390000070b0040009c000007860000213d0000000100500190000007860000c13d000000400040043f0000001f0430018f00000000063204360000070205300198000300000006001d00000000035600190000177d0000613d000000000601034f0000000307000029000000006806043c0000000007870436000000000037004b000017790000c13d000000000004004b0000170d0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000170d0000013d0000000302000029000007000020009c00000700020080410000004002200210000007000010009c00000700010080410000006001100210000000000121019f00001bec000104300000076d011001c700008009020000390000000503000029000000060400002900000000050000191bea1be00000040f00000060031002700000070003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000905700029000017a90000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b000017a50000c13d000000000006004b000017b60000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017d70000613d0000001f01400039000000600110018f00000009011000290000070b0010009c000007860000213d000000400010043f000000200030008c000006d90000413d000000090100002900000000060104330000070b0060009c000006d90000213d0000000803000039000000000103041a0000076f01100197000000a0026002100000077002200197000000000112019f00000771011001c7000000000013041b0000000b01000039000000000501041a0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000003030000390000077204000041000006d60000013d0000001f0530018f0000070206300198000000400200043d0000000004620019000014f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017de0000c13d000014f80000013d0001000000000002000000000301041a000100000002001d000000000023004b000017f60000a13d000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000017fc0000613d000000000101043b00000001011000290000000002000019000000000001042d0000083001000041000000000010043f0000003201000039000000040010043f000007690100004100001bec00010430000000000100001900001bec00010430000000000003004b000018080000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000034004b000018010000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000003004b000018170000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000018100000413d000000000213001900000000000204350000001f023000390000083f022001970000000001210019000000000001042d000008430010009c0000182d0000213d000000630010008c0000182d0000a13d00000001030003670000000401300370000000000101043b000007030010009c0000182d0000213d0000002402300370000000000202043b000007030020009c0000182d0000213d0000004403300370000000000303043b000000000001042d000000000100001900001bec0001043000000004010000390000000101100367000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b000018380000c13d000000000001042d000000000100001900001bec00010430000008440010009c0000183f0000813d0000002001100039000000400010043f000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000001f022000390000083f022001970000000001120019000000000021004b000000000200003900000001020040390000070b0010009c000018510000213d0000000100200190000018510000c13d000000400010043f000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec00010430000000000100041a00000703011001970000000002000411000000000021004b0000185d0000c13d000000000001042d000000400100043d0000004402100039000008100300004100000000003204350000075a02000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec00010430000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f00000001002001900000187e0000613d000000000101043b000000000101041a0000070301100198000018800000613d000000000001042d000000000100001900001bec00010430000000400100043d00000044021000390000083b0300004100000000003204350000002402100039000000180300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec000104300001000000000002000100000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000018b40000613d000000000101043b000000000101041a0000070300100198000018b60000613d0000000101000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000018b40000613d000000000101043b000000000101041a0000070301100197000000000001042d000000000100001900001bec00010430000000400100043d00000044021000390000083b0300004100000000003204350000002402100039000000180300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec00010430000000000001004b000018ca0000613d000000000001042d000000400100043d00000064021000390000084503000041000000000032043500000044021000390000084603000041000000000032043500000024021000390000002d0300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec00010430000000600210003900000847030000410000000000320435000000400210003900000848030000410000000000320435000000200210003900000032030000390000000000320435000000200200003900000000002104350000008001100039000000000001042d0002000000000002000200000001001d000100000002001d000000000020043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a00000703011001980000194a0000613d00000002020000290000070302200197000000000012004b000019040000c13d0000000101000039000000000001042d000200000002001d000000000010043f0000000701000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b0000000202000029000000000020043f000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a000000ff01100190000019230000613d000000000001042d0000000101000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a00000703001001980000194a0000613d0000000101000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a0000070301100197000000020010006c00000000010000390000000101006039000000000001042d000000000100001900001bec00010430000000400100043d00000044021000390000083b0300004100000000003204350000002402100039000000180300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec0001043000010000000000020000070300200198000019710000c13d000100000001001d00000000010300191bea186d0000040f00000001020000290000070302200197000000000021004b000000000100003900000001010060391bea19850000040f000000400100043d00000064021000390000084b03000041000000000032043500000044021000390000084c030000410000000000320435000000240210003900000024030000390000197a0000013d000000400100043d00000064021000390000084903000041000000000032043500000044021000390000084a03000041000000000032043500000024021000390000002c0300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec00010430000000000001004b000019880000613d000000000001042d000000400100043d00000064021000390000084d03000041000000000032043500000044021000390000084e0300004100000000003204350000002402100039000000250300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec000104300004000000000002000200000002001d000100000001001d0000000801000039000000000201041a000000400400043d000400000004001d0000084f010000410000000001140436000300000001001d000000040140003900000813030000410000000000310435000007000040009c0000070001000041000000000104401900000040011002100000000003000414000007000030009c0000070003008041000000c003300210000000000113019f00000769011001c700000703022001971bea1be50000040f000000040b00002900000060031002700000070003300197000000800030008c000000800400003900000000040340190000001f0640018f000000e00740019000000000057b0019000019c50000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000019c10000c13d000000000006004b000019d20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a3b0000613d0000001f01400039000001e00110018f0000000004b10019000000000014004b000000000100003900000001010040390000070b0040009c00001a350000213d000000010010019000001a350000c13d000000400040043f0000007f0030008c00001a330000a13d0000076b0040009c00001a350000213d0000008001400039000000400010043f00000000010b04330000085000100198000008510200004100000000020060190000085203100197000000000232019f000000000021004b00001a330000c13d0000000001140436000000030200002900000000020204330000070b0020009c00001a330000213d00000000002104350000004001b0003900000000010104330000085300100198000008540200004100000000020060190000085503100197000000000232019f000000000021004b00001a330000c13d0000004002400039000000000012043500000060014000390000006002b000390000000002020433000000000021043500000002010000290000070301100197000000000010043f0000000c01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c70000801002000039000400000004001d1bea1be50000040f0000000404000029000000010020019000001a330000613d000000000101043b000000000101041a000000ff001001900000082202000041000008140200604100000001012000b900000000022100d9000000010020006c00001a270000c13d000000000001004b00001a2d0000613d00000856021000d100000000031200d9000008560030009c00001a270000c13d00000857011000d1000000000002004b00001a2e0000613d00000000022100d9000000640020008c00001a2e0000613d0000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec00010430000000000100001900000000020404330000070b0220019800001a590000613d00000000012100d9000000000001042d000000000100001900001bec000104300000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000001f0530018f0000070206300198000000400200043d000000000462001900001a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a420000c13d000000000005004b00001a530000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007000020009c00000700020080410000004002200210000000000112019f00001bec000104300000083001000041000000000010043f0000001201000039000000040010043f000007690100004100001bec00010430000000400200043d0000000003010433000000000003004b00001ace0000613d000008580020009c00001adc0000213d0000006003200039000000400030043f00000040032000390000085904000041000000000043043500000020032000390000085a0400004100000000004304350000004003000039000000000032043500000000030104330000085b0030009c00001ae20000813d0000085c0030009c00001adc0000213d0000000203300039000000030330011a00000002043002100000001f034000390000083f053001970000003f035000390000083f06300197000000400300043d0000000006630019000000000036004b000000000700003900000001070040390000070b0060009c00001adc0000213d000000010070019000001adc0000c13d000000400060043f0000000004430436000000000005004b00001a900000613d0000000005540019000000000600003100000001066003670000000007040019000000006806043c0000000007870436000000000057004b00001a8c0000c13d00000000060104330000000005160019000000000015004b00001ac20000a13d000000010220003900000000060100190000000306600039000000000706043300000012087002700000003f0880018f00000000088200190000000008080433000000f80880021000000000090404330000085d09900197000000000889019f00000000008404350000000c087002700000003f0880018f00000000088200190000000008080433000000f8088002100000000109400039000000000a0904330000085d0aa0019700000000088a019f000000000089043500000006087002700000003f0880018f00000000088200190000000008080433000000f8088002100000000209400039000000000a0904330000085d0aa0019700000000088a019f00000000008904350000003f0770018f00000000077200190000000007070433000000f807700210000000030840003900000000090804330000085d09900197000000000779019f00000000007804350000000404400039000000000056004b00001a960000413d0000000006010433000000031060011a000000020010008c00001ad50000613d000000010010008c00001ada0000c13d000000010140008a00000000020104330000085d022001970000085e022001c70000000000210435000000020140008a00001ad60000013d000008440020009c00001adc0000813d0000002001200039000000400010043f00000000000204350000000001020019000000000001042d000000010140008a00000000020104330000085d022001970000085e022001c700000000002104350000000001030019000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec000104300000085f0010009c00001aed0000413d00000040030000390000085f0210012a00001af60000013d000008610010009c0000000002010019000008600220212a00000000030000390000002003002039000008620020009c00000010033081bf0000076a02208197000008620220812a000008630020009c00000008033080390000070b02208197000008630220812a000027100020008c00000004033080390000070002208197000027100220811a000000640020008c00000002033080390000ffff0220818f000000640220811a000000090020008c00000001033020390000083f063001970000005f026000390000083f07200197000000400200043d0000000004270019000000000074004b000000000700003900000001070040390000070b0040009c00001b2e0000213d000000010070019000001b2e0000c13d000000400040043f0000000104300039000000000442043600000020076000390000083f067001980000001f0570018f00001b1e0000613d000000000664001900000000070000310000000107700367000000007807043c0000000004840436000000000064004b00001b1a0000c13d000000000005004b00000000033200190000002103300039000000090010008c0000000a4110011a0000000304400210000000010330008a00000000050304330000085d05500197000008640440021f0000086504400197000000000445019f000000000043043500001b210000213d0000000001020019000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec0001043000060000000000020000000b02000039000000000202041a000100000002001d000000000002004b00001b950000613d000200000001001d00000001030000390000801006000039000600000003001d000000000030043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700000000020600191bea1be50000040f000000010020019000001b8d0000613d000000000101043b000000000301041a000000400200043d000500000002001d000400000003001d0000000002320436000300000002001d000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f000000010020019000001b8d0000613d00008010060000390000000405000029000000000005004b0000000307000029000000000207001900001b6a0000613d000000000101043b00000000030000190000000002070019000000000401041a000000000242043600000001011000390000000103300039000000000053004b00001b640000413d000000050300002900000000013200490000001f011000390000083f021001970000000001320019000000000021004b000000000200003900000001020040390000070b0010009c000000020500002900001b8f0000213d000000010020019000001b8f0000c13d000000400010043f0000000002030433000000000002004b00001b840000613d0000000003000019000000050430021000000000047400190000000004040433000000000054004b00001b8b0000613d0000000103300039000000000023004b00001b7c0000413d0000000603000029000000010030003a00001ba60000413d000000010030006c000000010330003900001b3d0000413d00001b960000013d0000000601000029000000000001042d000000000100001900001bec000104300000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec00010430000000400100043d00000044021000390000086603000041000000000032043500000024021000390000001c0300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec000104300000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec00010430000000000001042f000007000010009c00000700010080410000004001100210000007000020009c00000700020080410000006002200210000000000112019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000709011001c700008010020000391bea1be50000040f000000010020019000001bc00000613d000000000101043b000000000001042d000000000100001900001bec0001043000000000050100190000000000200443000000050030008c00001bd00000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b00001bc80000413d000007000030009c000007000300804100000060013002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000867011001c700000000020500191bea1be50000040f000000010020019000001bdf0000613d000000000101043b000000000001042d000000000001042f00001be3002104210000000102000039000000000001042d0000000002000019000000000001042d00001be8002104230000000102000039000000000001042d0000000002000019000000000001042d00001bea0000043200001beb0001042e00001bec0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f60000000000000000000000000000000000000000000000000000000000000a2a0000000000000000000000000000000000000000000000000000000000000a5e0000000000000000000000000000000000000000000000000000000000000a9200000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffc04875654761636861205469636b65742056320000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf4855455449583200000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000ffffffffffffffffbfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a532405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acebfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a5310200000000000000000000000000000000000020000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000093a80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c580fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81700fee93879a5e67f5411452c57c1bc6f494462a67847f16a8ae120e5ff78e8b9c300000002000000000000000000000000000000800000010000000000000000000000000000000000000000000000000000000000000000000000000070a0823000000000000000000000000000000000000000000000000000000000a476b73c00000000000000000000000000000000000000000000000000000000e5b8bdab00000000000000000000000000000000000000000000000000000000f4359ce400000000000000000000000000000000000000000000000000000000f94ab8f700000000000000000000000000000000000000000000000000000000f94ab8f800000000000000000000000000000000000000000000000000000000f98d06f000000000000000000000000000000000000000000000000000000000f4359ce500000000000000000000000000000000000000000000000000000000f929d63000000000000000000000000000000000000000000000000000000000e5b8bdac00000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000c87b56dc00000000000000000000000000000000000000000000000000000000c87b56dd00000000000000000000000000000000000000000000000000000000c8f35b5d00000000000000000000000000000000000000000000000000000000e086e5ec00000000000000000000000000000000000000000000000000000000a476b73d00000000000000000000000000000000000000000000000000000000b88d4fde00000000000000000000000000000000000000000000000000000000bdd7006d00000000000000000000000000000000000000000000000000000000955112cc00000000000000000000000000000000000000000000000000000000997e84d100000000000000000000000000000000000000000000000000000000997e84d2000000000000000000000000000000000000000000000000000000009cbe5efd00000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000955112cd0000000000000000000000000000000000000000000000000000000095d89b410000000000000000000000000000000000000000000000000000000099646b1300000000000000000000000000000000000000000000000000000000821628310000000000000000000000000000000000000000000000000000000082162832000000000000000000000000000000000000000000000000000000008c65c81f000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000070a0823100000000000000000000000000000000000000000000000000000000715018a600000000000000000000000000000000000000000000000000000000747dff420000000000000000000000000000000000000000000000000000000047ce07cb0000000000000000000000000000000000000000000000000000000059728bbe000000000000000000000000000000000000000000000000000000006352211d000000000000000000000000000000000000000000000000000000006352211e000000000000000000000000000000000000000000000000000000006a14dffd000000000000000000000000000000000000000000000000000000006ddfe3390000000000000000000000000000000000000000000000000000000059728bbf000000000000000000000000000000000000000000000000000000005bbf7491000000000000000000000000000000000000000000000000000000005d6f2f790000000000000000000000000000000000000000000000000000000054a8fb460000000000000000000000000000000000000000000000000000000054a8fb47000000000000000000000000000000000000000000000000000000005789d9dd00000000000000000000000000000000000000000000000000000000596d7a680000000000000000000000000000000000000000000000000000000047ce07cc000000000000000000000000000000000000000000000000000000004e4a47c40000000000000000000000000000000000000000000000000000000052a5f1f80000000000000000000000000000000000000000000000000000000023b872dc000000000000000000000000000000000000000000000000000000003f1a91fd000000000000000000000000000000000000000000000000000000003f1a91fe00000000000000000000000000000000000000000000000000000000424e3e100000000000000000000000000000000000000000000000000000000042842e0e0000000000000000000000000000000000000000000000000000000023b872dd0000000000000000000000000000000000000000000000000000000024ac60a7000000000000000000000000000000000000000000000000000000002f36663700000000000000000000000000000000000000000000000000000000081812fb00000000000000000000000000000000000000000000000000000000081812fc00000000000000000000000000000000000000000000000000000000095ea7b3000000000000000000000000000000000000000000000000000000001aa3396d00000000000000000000000000000000000000000000000000000000006f48cc0000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000002000000080000000000000000008c379a0000000000000000000000000000000000000000000000000000000004c656e677468206d69736d617463680000000000000000000000000000000000000000000000000000000000000000000000006400000080000000000000000002000000000000000000000000000000000000400000000000000000000000004d24c043f76453a6d1681b9eccfa5446cae9997ccfc84dfb1090f03160b00c5051347c61d80ecc7fa2679c0a85405fc4d437684e0fe2902b07742085a1b3c2f5000000ff0000000000000000000000000000000000000000000000000000000052616e646f6d6e65737320616c726561647920726571756573746564000000000000000000000000000000000000000000000064000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000082ee990c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000b88c914800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff7f19cb825f0000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000044000000000000000000000000ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000587602b661da57eff43c58d2ebb4b7c66d08862f786faf29f390136b3309a128496e73756666696369656e742066656500000000000000000000000000000000546f6f206561726c7900000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffe0455448207769746864726177616c206661696c65640000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff1f23324431413132000000000000000000000000000000000000000000000000002335433245313700000000000000000000000000000000000000000000000000234133344532410000000000000000000000000000000000000000000000000023464637463530000000000000000000000000000000000000000000000000002346464437303000000000000000000000000000000000000000000000000000233041313932460000000000000000000000000000000000000000000000000023313732413435000000000000000000000000000000000000000000000000002333303343353500000000000000000000000000000000000000000000000000233443384246350000000000000000000000000000000000000000000000000023363446464441000000000000000000000000000000000000000000000000002332443142324300000000000000000000000000000000000000000000000000233543323735310000000000000000000000000000000000000000000000000023393433443743000000000000000000000000000000000000000000000000002345383535413300000000000000000000000000000000000000000000000000233030464644310000000000000000000000000000000000000000000000000023324132443539000000000000000000000000000000000000000000000000002333423346374100000000000000000000000000000000000000000000000000233444353239370000000000000000000000000000000000000000000000000023364236454237000000000000000000000000000000000000000000000000002331354643394200000000000000000000000000000000000000000000000000233042324232360000000000000000000000000000000000000000000000000023313634423435000000000000000000000000000000000000000000000000002331453642363200000000000000000000000000000000000000000000000000233241414138410000000000000000000000000000000000000000000000000023464645313632000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003c67207472616e73666f726d3d227363616c6528353029223e000000000000006c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223c7376672077696474683d2235303022206865696768743d223530302220786d68743d2231222066696c6c3d22000000000000000000000000000000000000003c7265637420783d22322220793d2230222077696474683d2231222068656967222f3e00000000000000000000000000000000000000000000000000000000003c7265637420783d22332220793d2230222077696474683d22312220686569673c7265637420783d22342220793d2230222077696474683d22312220686569673c7265637420783d22352220793d2230222077696474683d22312220686569673c7265637420783d22362220793d2230222077696474683d22312220686569673c7265637420783d22372220793d2230222077696474683d22312220686569673c7265637420783d22312220793d2231222077696474683d22312220686569673c7265637420783d22322220793d2231222077696474683d22312220686569673c7265637420783d22332220793d2231222077696474683d22312220686569673c7265637420783d22342220793d2231222077696474683d22312220686569673c7265637420783d22352220793d2231222077696474683d22312220686569673c7265637420783d22362220793d2231222077696474683d22312220686569673c7265637420783d22372220793d2231222077696474683d22312220686569673c7265637420783d22382220793d2231222077696474683d22312220686569673c7265637420783d22302220793d2232222077696474683d22312220686569673c7265637420783d22312220793d2232222077696474683d22312220686569673c7265637420783d22322220793d2232222077696474683d22312220686569673c7265637420783d22332220793d2232222077696474683d22312220686569673c7265637420783d22342220793d2232222077696474683d22312220686569673c7265637420783d22352220793d2232222077696474683d22312220686569673c7265637420783d22362220793d2232222077696474683d22312220686569673c7265637420783d22372220793d2232222077696474683d22312220686569673c7265637420783d22382220793d2232222077696474683d22312220686569673c7265637420783d22392220793d2232222077696474683d22312220686569673c7265637420783d22302220793d2233222077696474683d22312220686569673c7265637420783d22312220793d2233222077696474683d22312220686569673c7265637420783d22322220793d2233222077696474683d22312220686569673c7265637420783d22372220793d2233222077696474683d22312220686569673c7265637420783d22382220793d2233222077696474683d22312220686569673c7265637420783d22392220793d2233222077696474683d22312220686569673c7265637420783d22302220793d2234222077696474683d22312220686569673c7265637420783d22312220793d2234222077696474683d22312220686569673c7265637420783d22322220793d2234222077696474683d22312220686569673c7265637420783d22372220793d2234222077696474683d22312220686569673c7265637420783d22382220793d2234222077696474683d22312220686569673c7265637420783d22392220793d2234222077696474683d22312220686569673c7265637420783d22302220793d2235222077696474683d22312220686569673c7265637420783d22312220793d2235222077696474683d22312220686569673c7265637420783d22322220793d2235222077696474683d22312220686569673c7265637420783d22372220793d2235222077696474683d22312220686569673c7265637420783d22382220793d2235222077696474683d22312220686569673c7265637420783d22392220793d2235222077696474683d22312220686569673c7265637420783d22302220793d2236222077696474683d22312220686569673c7265637420783d22312220793d2236222077696474683d22312220686569673c7265637420783d22322220793d2236222077696474683d22312220686569673c7265637420783d22372220793d2236222077696474683d22312220686569673c7265637420783d22382220793d2236222077696474683d22312220686569673c7265637420783d22392220793d2236222077696474683d22312220686569673c7265637420783d22302220793d2237222077696474683d22312220686569673c7265637420783d22312220793d2237222077696474683d22312220686569673c7265637420783d22322220793d2237222077696474683d22312220686569673c7265637420783d22332220793d2237222077696474683d22312220686569673c7265637420783d22342220793d2237222077696474683d22312220686569673c7265637420783d22352220793d2237222077696474683d22312220686569673c7265637420783d22362220793d2237222077696474683d22312220686569673c7265637420783d22372220793d2237222077696474683d22312220686569673c7265637420783d22382220793d2237222077696474683d22312220686569673c7265637420783d22392220793d2237222077696474683d22312220686569673c7265637420783d22312220793d2238222077696474683d22312220686569673c7265637420783d22322220793d2238222077696474683d22312220686569673c7265637420783d22332220793d2238222077696474683d22312220686569673c7265637420783d22342220793d2238222077696474683d22312220686569673c7265637420783d22352220793d2238222077696474683d22312220686569673c7265637420783d22362220793d2238222077696474683d22312220686569673c7265637420783d22372220793d2238222077696474683d22312220686569673c7265637420783d22382220793d2238222077696474683d22312220686569673c7265637420783d22322220793d2239222077696474683d22312220686569673c7265637420783d22332220793d2239222077696474683d22312220686569673c7265637420783d22342220793d2239222077696474683d22312220686569673c7265637420783d22352220793d2239222077696474683d22312220686569673c7265637420783d22362220793d2239222077696474683d22312220686569673c7265637420783d22372220793d2239222077696474683d22312220686569673c7265637420783d22332220793d2233222077696474683d22312220686569673c7265637420783d22342220793d2233222077696474683d22312220686569673c7265637420783d22352220793d2233222077696474683d22312220686569673c7265637420783d22362220793d2233222077696474683d22312220686569673c7265637420783d22332220793d2234222077696474683d22312220686569673c7265637420783d22342220793d2234222077696474683d22312220686569673c7265637420783d22352220793d2234222077696474683d22312220686569673c7265637420783d22362220793d2234222077696474683d22312220686569673c7265637420783d22332220793d2235222077696474683d22312220686569673c7265637420783d22342220793d2235222077696474683d22312220686569673c7265637420783d22352220793d2235222077696474683d22312220686569673c7265637420783d22362220793d2235222077696474683d22312220686569673c7265637420783d22332220793d2236222077696474683d22312220686569673c7265637420783d22342220793d2236222077696474683d22312220686569673c7265637420783d22352220793d2236222077696474683d22312220686569673c7265637420783d22362220793d2236222077696474683d22312220686569673c2f673e000000000000000000000000000000000000000000000000000000003c2f7376673e0000000000000000000000000000000000000000000000000000646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000426574746572206c75636b206e6578742074696d65210000000000000000000057696e6e65722100000000000000000000000000000000000000000000000000416374697665207469636b6574000000000000000000000000000000000000007b226e616d65223a20224875654761636861205469636b657420230000000000222c20226465736372697074696f6e223a202200000000000000000000000000202d205765656b20230000000000000000000000000000000000000000000000222c2022696d616765223a2022000000000000000000000000000000000000002022537461747573222c202276616c7565223a20220000000000000000000000222c202261747472696275746573223a205b7b2274726169745f74797065223a65223a2022000000000000000000000000000000000000000000000000000000227d2c207b2274726169745f74797065223a20225765656b222c202276616c75227d5d7d00000000000000000000000000000000000000000000000000000000646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000546f6b656e20646f6573206e6f742065786973740000000000000000000000004e6f74207469636b6574206f776e657200000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c314552433732313a20617070726f766520746f2063616c6c657200000000000000000000000000000000000000000000000000000000000000000000000001518054657374696e67206d6f6465206e6f7420656e61626c656400000000000000000000000000000000000000000000000000000020000000000000000000000000c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b00000000000000000000000000000000000000e000000080000000000000000000000000000000000000000000000000000000800000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a2061646472657373207a65726f206973206e6f7420612076616c6964206f776e65720000000000000000000000000000000000000000000000ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace00000000000000000000000000000000000000000000000000000000001e84800000000000000000000000000000000000000060000000800000000000000000696f6e00000000000000000000000000000000000000000000000000000000004f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e6374000000000000000000000000000000000000008400000000000000000000000057726f6e672073657175656e6365206e756d626572000000000000000000000057696e6e657220616c726561647920647261776e000000000000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000ff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff00496e76616c69642077696e6e696e67207469636b657420696e6465780000000003fb57eb449654e24e1b240d3d06702cf79362a065d5c0323aee642d4702fa4b4e6f207469636b65747320736f6c6400000000000000000000000000000000004e6f2072616e646f6d6e65737320726571756573746564000000000000000000456e74726f70792061646472657373206e6f742073657400000000000000000000000000000000000000000000000000000000000000000000000000000f42401806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83f929d6300000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000e6689ff54066b592f85a9441ebb4a960b0be56b00ac16f014496f93d4d3356565375636365737300000000000000000000000000000000000000000000000000020000000000000000000000000000000000008000000000000000000000000050757263686173657320636c6f73656420666f72207468697320726f756e6400526566756e64206661696c656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf4552433732313a20746f6b656e20616c7265616479206d696e74656400000000150b7a02000000000000000000000000000000000000000000000000000000004552433732313a206d696e7420746f20746865207a65726f20616464726573734e487b71000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000060000000000000000000000000371dfd3ce9c287253fda2eb12211e88bc30c0d6bc09017a8bda6d439f03962cf496e636f72726563742045544820616d6f756e74000000000000000000000000496e76616c696420616d6f756e740000000000000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c006b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000004552433732313a20617070726f76652063616c6c6572206973206e6f7420746f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92572000000000000000000000000000000000000000000000000000000000000004552433732313a20617070726f76616c20746f2063757272656e74206f776e654552433732313a20696e76616c696420746f6b656e204944000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000005b5e139f0000000000000000000000000000000000000000000000000000000080ac58cd00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffe072206f7220617070726f766564000000000000000000000000000000000000004552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6563656976657220696d706c656d656e74657200000000000000000000000000004552433732313a207472616e7366657220746f206e6f6e2045524337323152656e696e6720616c6c6f77656400000000000000000000000000000000000000005469636b6574732061726520736f756c626f756e64202d206f6e6c792062757272657373000000000000000000000000000000000000000000000000000000004552433732313a207472616e7366657220746f20746865207a65726f206164646f776e65720000000000000000000000000000000000000000000000000000004552433732313a207472616e736665722066726f6d20696e636f72726563742096834ad3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffff0000000000000000000000000000000000000000000000000000000080000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000ffffffffffffff9f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000bffffffffffffffd00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3d000000000000000000000000000000000000000000000000000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000546f6b656e206e6f7420666f756e6420696e20616e7920726f756e64000000000200000200000000000000000000000000000000000000000000000000000000415cbed00e43fc2d297bd20fcc0aa734149ecb7a393c538c2922249f5ae92f3c
Deployed Bytecode
0x0002000000000002001600000000000200010000000103550000006003100270000007000030019d000007000330019700000001002001900000003f0000c13d0000008004000039000000400040043f000000040030008c000000b90000413d000000000201043b000000e002200270000007180020009c000000bd0000a13d000007190020009c0000011c0000a13d0000071a0020009c000001630000a13d0000071b0020009c000001b70000a13d0000071c0020009c000002810000213d0000071f0020009c0000045d0000613d000007200020009c000006d90000c13d000000000100041a00000703011001970000000002000411000000000021004b000005750000c13d0000000b01000039000000000101041a000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000602100039000000000202041a000000ff002001900000147a0000c13d0000000301100039000000000101041a000000000001004b000006b20000c13d000000400100043d00000044021000390000081f03000041000000000032043500000024021000390000000f03000039000014800000013d0000000002000416000000000002004b000006d90000c13d0000001f023000390000070102200197000000a002200039000000400020043f0000001f0430018f0000070205300198000000a002500039000000500000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b0000004c0000c13d000000000004004b0000005d0000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000400030008c000006d90000413d000000a00700043d000007030070009c000006d90000213d000000c00100043d000900000001001d000007030010009c000006d90000213d000000400300043d000007040030009c000007860000813d0000004001300039000000400010043f0000001201000039000000000413043600000705010000410000000000140435000000400200043d000007060020009c000007860000213d000600000004001d000700000003001d0000004001200039000000400010043f0000000701000039000800000002001d00000000021204360000070701000041000400000002001d0000000000120435000000000100041a00000708021001970000000006000411000000000262019f000000000020041b00000000020004140000070305100197000007000020009c0000070002008041000000c00120021000000709011001c70000800d0200003900000003030000390000070a04000041000500000007001d1bea1be00000040f0000000100200190000006d90000613d0000000101000039000000000011041b000000070900002900000000020904330000070b0020009c00000008080000290000000606000029000007860000213d0000000201000039000000000301041a000000010430019000000001033002700000007f0330618f0000001f0030008c00000000050000390000000105002039000000000054004b0000036d0000c13d000000200030008c000000b10000413d000000000010043f0000001f0420003900000005044002700000070c0440009a000000200020008c0000070d040040410000001f0330003900000005033002700000070c0330009a000000000034004b000000b10000813d000000000004041b0000000104400039000000000034004b000000ad0000413d0000001f0020008c000006a70000a13d000000000010043f0000083f052001980000076a0000c13d00000020040000390000070d03000041000007760000013d000000000003004b000006d90000c13d000000000100001900001beb0001042e0000073a0020009c000000e90000213d0000074a0020009c0000017e0000213d000007520020009c000001d90000213d000007560020009c0000028b0000613d000007570020009c000002ad0000613d000007580020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000203000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0010008c00000000060000390000000106002039000000000662013f00000001006001900000036d0000c13d000000800010043f000000000005004b000005900000613d000000000030043f000000020020008c000005ca0000413d0000070d0200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b000000e00000413d000006f50000013d0000073b0020009c000001990000213d000007430020009c000001f30000213d000007470020009c000002c00000613d000007480020009c000002d10000613d000007490020009c000006d90000c13d000000640030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d0000070b0020009c000006d90000213d0000002402100370000000000202043b000007030020009c000006d90000213d0000004401100370000000000101043b000800000001001d000007630100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007000010009c0000070001008041000000c00110021000000764011001c700008005020000391bea1be50000040f0000000100200190000016380000613d000000000101043b0000070301100198000007cb0000c13d000000400100043d00000044021000390000082103000041000000000032043500000024021000390000001703000039000014800000013d0000072b0020009c000001a60000213d000007330020009c000002030000213d000007370020009c000004640000613d000007380020009c000002de0000613d000007390020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000b01000039000000000101041a000900000001001d000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d0000000902000039000000000202041a000600000002001d000000000101043b000700000001001d0000000301100039000000000101041a000800000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000060110006b000000000100401900000007020000290000000602200039000000000202041a000000400300043d00000020043000390000000805000029000000000054043500000040043000390000000000140435000000ff002001900000000001000039000000010100c0390000006002300039000000000012043500000009010000290000000000130435000007000030009c000007000300804100000040013002100000080f011001c700001beb0001042e000007240020009c0000020e0000213d000007280020009c0000047b0000613d000007290020009c000002f20000613d0000072a0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000d01000039000000000101041a000900000001001d0000800b0100003900000004030000390000000004000415000000160440008a000000050440021000000710020000411bea1bc20000040f000000090010006c00000000010000390000000101004039000000800010043f000007590100004100001beb0001042e0000074b0020009c000002340000213d0000074f0020009c0000033b0000613d000007500020009c0000034b0000613d000300000004001d000007510020009c000006d90000c13d000000240030008c000006d90000413d0000000401100370000000000301043b0000000102000039000000000102041a000000020010008c0000057e0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000083501000041000000c40010043f0000075c0100004100001bec000104300000073c0020009c0000024f0000213d000007400020009c000003500000613d000007410020009c000003570000613d000007420020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000d01000039000004590000013d0000072c0020009c0000025c0000213d000007300020009c0000049a0000613d000007310020009c0000035e0000613d000007320020009c000006d90000c13d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea1b340000040f000004350000013d000007210020009c000003730000613d000007220020009c0000037a0000613d000007230020009c000006d90000c13d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000601043b000007030060009c000006d90000213d000000000100041a00000703021001970000000005000411000000000052004b000005750000c13d000000000006004b000006cb0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f0000077501000041000000c40010043f0000077601000041000000e40010043f000007770100004100001bec00010430000007530020009c000003940000613d000007540020009c0000039d0000613d000007550020009c000006d90000c13d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea1b340000040f000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000601100039000000000101041a000000ff001001900000000001000039000000010100c039000004350000013d000007440020009c000003c60000613d000007450020009c000003e30000613d000007460020009c000006d90000c13d000000240030008c000006d90000413d0000000001000416000000000001004b000006d90000c13d1bea182f0000040f000900000001001d1bea18570000040f0000000e01000039000003ec0000013d000007340020009c000004a40000613d000007350020009c000003f30000613d000007360020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d000000000100041a000002cd0000013d000007250020009c000004ba0000613d000007260020009c0000041c0000613d000007270020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d000000000100041a00000703011001970000000002000411000000000021004b000005750000c13d00000778010000410000000000100443000000000100041000000004001004430000000001000414000007000010009c0000070001008041000000c00110021000000779011001c70000800a020000391bea1be50000040f0000000100200190000016380000613d000000000200041a0000070304200197000000000301043b0000000001000414000007000010009c0000070001008041000000c001100210000000000003004b000006db0000c13d0000000002040019000006de0000013d0000074c0020009c000004210000613d0000074d0020009c000004280000613d0000074e0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d00000000010300191bea181d0000040f000800000001001d000700000002001d000900000003001d000000400100043d000600000001001d1bea183a0000040f00000006010000290000000000010435000000000100041100000009020000291bea18eb0000040f1bea18c70000040f0000000801000029000000070200002900000009030000291bea195b0000040f0000073d0020009c0000042d0000613d0000073e0020009c0000043c0000613d0000073f0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000006401000039000000800010043f000007590100004100001beb0001042e0000072d0020009c000004d70000613d0000072e0020009c000004550000613d0000072f0020009c000006d90000c13d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000002401100370000000000201043b000000000002004b0000000001000039000000010100c039000800000002001d000000000012004b000006d90000c13d0000000002000411000000090020006c0000072f0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000001901000039000000a40010043f0000080901000041000000c40010043f0000075c0100004100001bec000104300000071d0020009c000004f10000613d0000071e0020009c000006d90000c13d0000000001000416000000000001004b000006d90000c13d0000000801000039000000000101041a000002cd0000013d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000002402100370000000000202043b000900000002001d0000000401100370000000000101043b000000000010043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000000090020006b000006d90000813d00000009020000291bea17e30000040f0000000302200210000000000101041a000000000121022f000000ff0020008c0000000001002019000004350000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000201043b0000082500200198000006d90000c13d00000001010000390000083c0020009c000005d30000613d0000083d0020009c000005d30000613d0000083e0020009c000000000100c019000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000000001000412001500000001001d001400000000003d000080050100003900000044030000390000000004000415000000150440008a000000050440021000000763020000411bea1bc20000040f0000070301100197000000800010043f000007590100004100001beb0001042e000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000002402100370000000000202043b000007030020009c000006d90000213d0000000401100370000000000101043b1bea199c0000040f000004350000013d0000000001000416000000000001004b000006d90000c13d000000000100041a00000703021001970000000005000411000000000052004b000005750000c13d0000070801100197000000000010041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000003030000390000070a040000410000000006000019000006d60000013d000000840030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000002402100370000000000202043b000800000002001d000007030020009c000006d90000213d0000004402100370000000000902043b0000006402100370000000000402043b0000070b0040009c000006d90000213d0000002302400039000000000032004b000006d90000813d0000000405400039000000000251034f000000000202043b0000070b0020009c000007860000213d0000001f072000390000083f077001970000003f077000390000083f077001970000076b0070009c000007860000213d0000008007700039000000400070043f000000800020043f00000000042400190000002404400039000000000034004b000006d90000213d0000002003500039000000000331034f0000083f042001980000001f0520018f000000a001400039000003280000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000003240000c13d000000000005004b000003350000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a001200039000000000001043500000000010004110000000002090019000700000009001d000003450000013d0000000001000416000000000001004b000006d90000c13d00000000010300191bea181d0000040f000900000001001d000800000002001d0000000002030019000700000003001d00000000010004111bea18eb0000040f1bea18c70000040f0000000901000029000000080200002900000007030000291bea195b0000040f0000000001000416000000000001004b000006d90000c13d0000000901000039000004590000013d0000000001000416000000000001004b000006d90000c13d0000081401000041000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000081301000041000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000000303000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0010008c00000000060000390000000106002039000000000662013f00000001006001900000058d0000613d0000083001000041000000000010043f0000002201000039000000040010043f000007690100004100001bec000104300000000001000416000000000001004b000006d90000c13d0000000801000039000000000101041a0000076000100198000004b50000013d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000007030020009c000006d90000213d0000002401100370000000000101043b000900000001001d000007030010009c000006d90000213d000000000020043f0000000701000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000902000029000000000020043f000000200010043f00000000010000190000004002000039000004b20000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea18910000040f000004350000013d000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000002401100370000000000101043b000800000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070301100198000004930000613d000000090010006b000007da0000c13d000000400100043d00000064021000390000083903000041000000000032043500000044021000390000083a03000041000000000032043500000024021000390000002103000039000009160000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000302100039000000000202041a0000000603100039000000000303041a0000000401100039000000000101041a00000008011002700000070301100197000000800010043f000000ff003001900000000001000039000000010100c039000000a00010043f000000c00020043f000008150100004100001beb0001042e000000240030008c000006d90000413d0000000001000416000000000001004b000006d90000c13d1bea182f0000040f000900000001001d1bea18570000040f0000001101000039000000000201041a0000084002200197000000090000006b000000010220c1bf000000000021041b000000000100001900001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000702100039000000000202041a0000000603100039000000000303041a0000000504100039000000000404041a0000000405100039000000000505041a0000000306100039000000000606041a000000000101041a000000800010043f000000a00060043f000000ff005001900000000001000039000000010100c039000000c00010043f00000008015002700000070301100197000000e00010043f000001000040043f000000ff003001900000000001000039000000010100c039000001200010043f000001400020043f0000080e0100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000000e01000039000004b30000013d0000000001000416000000000001004b000006d90000c13d0000082201000041000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000001101000039000004b30000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b1bea186d0000040f000000400200043d0000000000120435000007000020009c000007000200804100000040012002100000080c011001c700001beb0001042e000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000002402100370000000000202043b000900000002001d000007030020009c000006d90000213d0000000401100370000000000101043b000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191bea1bad0000040f0000000902000029000000000020043f0000000201100039000000200010043f00000000010000190000004002000039000005d10000013d0000000001000416000000000001004b000006d90000c13d0000000b01000039000000000101041a000000800010043f000007590100004100001beb0001042e0000000001000416000000000001004b000006d90000c13d0000071201000041000000800010043f000007590100004100001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000007030010009c000006d90000213d000000000001004b000005cc0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000081101000041000000c40010043f0000081201000041000000e40010043f000007770100004100001bec00010430000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000900000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070301100198000005d60000c13d000000400100043d00000044021000390000083b03000041000000000032043500000024021000390000001803000039000014800000013d0000000001000416000000000001004b000006d90000c13d0000000801000039000000000101041a000000a0011002700000070b01100197000000800010043f000007590100004100001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000007030010009c000006d90000213d000000000010043f0000000c01000039000000200010043f000000400200003900000000010000191bea1bad0000040f000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f000007590100004100001beb0001042e000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b001300000001001d000900000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a00000703001001980000063d0000c13d000000400100043d000000440210003900000805030000410000147d0000013d000000240030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000401100370000000000101043b000000000200041a00000703022001970000000003000411000000000032004b000005750000c13d0000000e02000039000000000202041a000000ff002001900000069d0000c13d0000075a01000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000080b01000041000000c40010043f0000075c0100004100001bec00010430000000440030008c000006d90000413d0000000002000416000000000002004b000006d90000c13d0000000402100370000000000202043b0000070b0020009c000006d90000213d0000002304200039000000000034004b000006d90000813d0000000404200039000000000441034f000000000404043b000500000004001d0000070b0040009c000006d90000213d000400240020003d000000050200002900000005022002100000000402200029000000000032004b000006d90000213d0000002402100370000000000202043b0000070b0020009c000006d90000213d0000002304200039000000000034004b000006d90000813d0000000404200039000000000141034f000000000101043b0000070b0010009c000006d90000213d000300240020003d00000005021002100000000302200029000000000032004b000006d90000213d000000000200041a00000703022001970000000003000411000000000032004b000005750000c13d000000050010006b0000150b0000c13d000000050000006b000000bb0000613d000900000000001d0000052a0000013d00000009020000290000000102200039000900000002001d000000050020006c000000bb0000813d000000090100002900000005011002100000000302100029000800000002001d0000000102200367000000000302043b000000000003004b0000000002000039000000010200c039000700000003001d000000000023004b000006d90000c13d0000000401100029000600000001001d0000000101100367000000000101043b000007030010009c000006d90000213d000000000010043f0000000c01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000008400220019700000007022001af000000000021041b00000001010003670000000802100360000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000006d90000c13d0000000601100360000000000501043b000000000002004b000005670000613d000007030050009c000006d90000213d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000002030000390000075e040000411bea1be00000040f0000000100200190000005250000c13d000006d90000013d000007030050009c000006d90000213d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000002030000390000075f040000411bea1be00000040f0000000100200190000005250000c13d000006d90000013d0000075a01000041000000800010043f0000002001000039000000840010043f000000a40010043f0000081001000041000000c40010043f0000075c0100004100001bec000104300000000201000039000000000012041b000000650130008a000008410010009c000005960000213d0000075a01000041000000800010043f0000002001000039000000840010043f0000000e01000039000000a40010043f0000083401000041000000c40010043f0000075c0100004100001bec00010430000000800010043f000000000005004b000005c70000c13d0000084001200197000000a00010043f000000000004004b000000c001000039000000a001006039000006f60000013d000800000003001d0000001101000039000000000101041a000000ff00100190000005ac0000613d0000000901000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000090010006c000008210000813d0000000d01000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000090010006c0000080e0000813d000000000200041100000008010000291bea199c0000040f0000000002000416000000000312004b000009480000813d000000400100043d000000440210003900000833030000410000147d0000013d000000000030043f000000020020008c000006eb0000813d000000a001000039000006f60000013d000000000010043f0000000501000039000000200010043f000000400200003900000000010000191bea1bad0000040f000000000101041a000000800010043f000007590100004100001beb0001042e0000000002000411000000000021004b0000075f0000c13d0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070300100198000004930000613d0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a000807030010019c000004930000613d0000000901000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a0000070802200197000000000021041b0000000801000029000000000010043f0000000501000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000000010220008a000000000021041b0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a0000070802200197000000000021041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d02000039000000040300003900000807040000410000000805000029000000000600001900000009070000291bea1be00000040f0000000100200190000000bb0000c13d000006d90000013d00000009010000291bea1b340000040f001200000001001d000800000001001d000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000602100039000000000202041a001100ff002001930000000701100039000000000101041a000000090010006b001000000000003d001000010000603d000000400100043d0000077c0010009c000007860000213d000000a002100039000000400020043f00000080021000390000006003000039000000000032043500000060021000390000000000320435000000400210003900000000003204350000002002100039000000000032043500000000003104350000000801000029000000051010011a000000030010008c000006fc0001a13e000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c00410003900000792050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000079306000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f000000200450003900000794060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000795070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d000007960200004100000ac50000013d0000000902000039000000000012041b0000080a0110009c000007660000813d0000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec00010430000000000002004b0000000003000019000006ab0000613d00000000030604330000000304200210000008420440027f0000084204400167000000000343016f0000000102200210000000000223019f000007820000013d000800000001001d0000000901000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000090010006c000008630000813d000000400100043d00000044021000390000077403000041000000000032043500000024021000390000000903000039000014800000013d0000070801100197000000000161019f000000000010041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000003030000390000070a040000411bea1be00000040f0000000100200190000000bb0000c13d000000000100001900001bec0001043000000709011001c7000080090200003900000000050000191bea1be00000040f00000060031002700000070003300198000007090000c13d0000000100200190000000bb0000c13d000000400100043d00000044021000390000077b03000041000000000032043500000024021000390000001503000039000014800000013d0000080d0200004100000000040000190000000003040019000000000402041a000000a005300039000000000045043500000001022000390000002004300039000000000014004b000006ed0000413d000000c001300039000000800210008a00000080010000391bea18450000040f0000002001000039000000400200043d000900000002001d000000000212043600000080010000391bea180b0000040f00000009020000290000000001210049000007000010009c00000700010080410000006001100210000007000020009c00000700020080410000004002200210000000000121019f00001beb0001042e0000001f0430003900000701044001970000003f044000390000077a04400197000000400500043d0000000004450019000000000054004b000000000600003900000001060040390000070b0040009c000007860000213d0000000100600190000007860000c13d000000400040043f0000001f0430018f000000000635043600000702053001980000000003560019000007210000613d000000000701034f000000007807043c0000000006860436000000000036004b0000071d0000c13d000000000004004b000006e20000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006e20000013d000000000020043f0000000701000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000902000029000000000020043f000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a00000840022001970000000803000029000000000232019f000000000021041b000000400100043d0000000000310435000007000010009c000007000100804100000040011002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000070f011001c70000800d020000390000000303000039000008080400004100000000050004110000000906000029000006d60000013d000000400100043d00000044021000390000080603000041000000000032043500000024021000390000001003000039000014800000013d0000000d02000039000000000012041b000000000100001900001beb0001042e0000070d030000410000002004000039000000010650008a00000005066002700000070e0660009a00000000079400190000000007070433000000000073041b00000020044000390000000103300039000000000063004b0000076f0000c13d000000000025004b000007800000813d0000000305200210000000f80550018f000008420550027f000008420550016700000000049400190000000004040433000000000454016f000000000043041b000000010220021000000001022001bf000000000021041b00000000040804330000070b0040009c0000078c0000a13d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000000301000039000000000101041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f00000001001001900000036d0000c13d000000200030008c000007b70000413d000600000003001d000700000004001d0000000301000039000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000006010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000007b70000813d000000000002041b0000000102200039000000000012004b000007b30000413d0000001f0040008c000008150000a13d000700000004001d0000000301000039000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000200200008a0000000702200180000000000101043b000013580000c13d0000002003000039000013650000013d0000000002000411000000000012004b0000090d0000c13d0000000801000039000000000101041a000000a002100270000000090220014f0000070b00200198000009eb0000c13d0000076000100198000013b70000c13d000000400100043d00000044021000390000082003000041000001180000013d0000000002000411000000000012004b000009210000c13d0000000801000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000007080220019700000009022001af000000000021041b0000000801000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070305100198000004930000613d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000004030000390000083804000041000000090600002900000008070000291bea1be00000040f0000000100200190000000bb0000c13d000006d90000013d000000400100043d00000044021000390000082a03000041000000000032043500000024021000390000001f03000039000014800000013d000000000004004b00000000010000190000081a0000613d000000040100002900000000010104330000000302400210000008420220027f0000084202200167000000000121016f0000000102400210000000000121019f000013720000013d00000823010000410000000000100443000000000100041000000004001004430000000001000414000007000010009c0000070001008041000000c00110021000000779011001c700008002020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000000001004b000006d90000613d000000400200043d00000824010000410000000001120436000600000001001d000007000020009c000900000002001d0000070001000041000000000102401900070040001002180000000001000414000007000010009c0000070001008041000000c00110021000000007011001af00000766011001c700000000020004101bea1be00000040f00000001002001900000148b0000613d00000009010000290000070b0010009c000007860000213d0000000903000029000000400030043f0000000b01000039000000000501041a000000600130003900000828020000410000000000210435000000400130003900000007020000390000000000210435000000400100003900000006020000290000000000120435000000010100003900000000001304350000000001000414000007000010009c0000070001008041000000c00110021000000007011001af00000829011001c70000800d02000039000000020300003900000827040000411bea1be00000040f0000000100200190000005bd0000c13d000006d90000013d000900000001001d0000000801000039000000000101041a0000076000100198000009ef0000c13d000007630100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007000010009c0000070001008041000000c00110021000000764011001c700008005020000391bea1be50000040f0000000100200190000016380000613d000000000201043b000000400300043d000700000003001d00000765010000410000000000130435000007000030009c0000070001000041000000000103401900000040011002100000000003000414000007000030009c0000070003008041000000c003300210000000000113019f00000766011001c70000070302200197000600000002001d1bea1be50000040f00000060031002700000070003300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000070b0000290000000705700029000008980000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000008940000c13d000000000006004b000008a50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014ed0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000500000002001d0000070b0020009c000007860000213d0000000100100190000007860000c13d0000000501000029000000400010043f000000200030008c000006d90000413d00000000010b0433000700000001001d000007670010009c000006d90000813d000007680100004100000005030000290000000000130435000000040130003900000007020000290000000000210435000007000030009c0000070001000041000000000103401900000040011002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000769011001c700000006020000291bea1be50000040f00000060031002700000070003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000505700029000008db0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b000008d70000c13d000000000006004b000008e80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000016390000613d0000001f01400039000000600110018f0000000501100029000400000001001d0000070b0010009c000007860000213d0000000401000029000000400010043f000000200030008c000006d90000413d00000005010000290000000001010433000500000001001d0000076a0010009c000006d90000213d0000000001000416000000050010006c000017270000813d00000004030000290000004401300039000007730200004100000000002104350000002401300039000000100200003900000000002104350000075a010000410000000000130435000000040130003900000020020000390000000000210435000007000030009c0000070003008041000000400130021000000762011001c700001bec00010430000000400100043d0000006402100039000008160300004100000000003204350000004402100039000008170300004100000000003204350000002402100039000000230300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec00010430000000000010043f0000000701000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a000000ff00100190000007dd0000c13d000000400100043d00000064021000390000083603000041000000000032043500000044021000390000083703000041000000000032043500000024021000390000003d03000039000009160000013d0000097c0000a13d0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800902000039000000000400041100000000050000191bea1be00000040f000000600310027000000700033001980000097a0000613d0000001f0430003900000701044001970000003f044000390000077a04400197000000400500043d0000000004450019000000000054004b000000000600003900000001060040390000070b0040009c000007860000213d0000000100600190000007860000c13d000000400040043f0000001f0430018f0000000006350436000007020530019800000000035600190000096d0000613d000000000701034f000000007807043c0000000006860436000000000036004b000009690000c13d000000000004004b0000097a0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000000100200190000015150000613d0000000b01000039000000000101041a000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000400000001001d000500030010003d000000080000006b000009b00000613d0000000401000029000700010010003d0000000501000029000000000101041a000600000001001d00000000020000190000000601000029000000000012001a000006a10000413d000900000002001d0000000001120019000000000010043f0000000701000029000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a00000708022001970000000003000411000000000232019f000000000021041b00000009020000290000000102200039000000080020006c000009950000413d0000000001000411000000000010043f00000004010000290000000201100039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a000000080020002a000006a10000413d0000000802200029000000000021041b0000000501000029000000000101041a000000080010002a000006a10000413d000000080500002900000000015100190000000502000029000000000012041b000000000005004b0000151c0000c13d0000000b01000039000000000101041a000000400200043d000000400320003900000001040000390000000000430435000000200320003900000000001304350000000000520435000007000020009c000007000200804100000040012002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000831011001c70000800d020000390000000203000039000008320400004100000000050004111bea1be00000040f0000000100200190000006d90000613d0000000101000039000000000011041b000000000100001900001beb0001042e000000400100043d00000044021000390000081903000041000006e70000013d000000400100043d00000044021000390000076103000041000000000032043500000024021000390000001c03000039000014800000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c0041000390000078d050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000078e06000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f00000020045000390000078f060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000790070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d000007910200004100000ac50000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c00410003900000788050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000078906000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f00000020045000390000078a060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f00000020056000390000078b070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d0000078c0200004100000ac50000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c00410003900000783050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000078406000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f000000200450003900000785060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000786070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d000007870200004100000ac50000013d000000400100043d0000077c0010009c000007860000213d000000a003100039000000400030043f0000077d0010009c000007860000213d000000e002100039000000400020043f000000070200003900000000002304350000000003310436000000c0041000390000077e050000410000000000540435000000400400043d000007060040009c000007860000213d0000004005400039000000400050043f00000020054000390000077f06000041000000000065043500000000002404350000000000430435000000400500043d000007060050009c000007860000213d0000004004500039000000400040043f000000200450003900000780060000410000000000640435000000000025043500000040041000390000000000540435000000400600043d000007060060009c000007860000213d0000004005600039000000400050043f000000200560003900000781070000410000000000750435000000000026043500000060051000390000000000650435000000400600043d000007060060009c000007860000213d00000782020000410000004007600039000000400070043f0000002007600039000000000027043500000007020000390000000000260435000000800210003900000000006204350000000002010433000f00000002001d0000000007050433000e00000007001d0000000001040433000d00000001001d0000000004030433000b00000006001d000c00000004001d000000400500043d000a00000005001d0000079703000041000000600650003900000000003604350000079803000041000000610650003900000000003604350000079903000041000000400650003900000000003604350000079a03000041000000200650003900000000003604350000079b060000410000009a0350003900000000006304350000079c030000410000007a0850003900000000003804350000002003200039000000a7085000390000000009020433000000000009004b00000af70000613d000000000a000019000000000b8a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000009a004b00000af00000413d000000000a8900190000079d0800004100000000008a04350000000005590019000000ca095000390000000000690435000000aa065000390000079e090000410000000000960435000000d7095000390000000006020433000000000006004b00000b0c0000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000006a004b00000b050000413d000000000996001900000000000904350000000006650019000000d7056000390000000000850435000000fa086000390000079b050000410000000000580435000000da086000390000079f09000041000000000098043500000107096000390000000008020433000000000008004b00000b230000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b00000b1c0000413d00000000099800190000000000090435000000000668001900000107096000390000079d0800004100000000008904350000012a0960003900000000005904350000010a05600039000007a009000041000000000095043500000137096000390000000005020433000000000005004b00000b3a0000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000005a004b00000b330000413d000000000995001900000000000904350000000006650019000001370560003900000000008504350000015a086000390000079b0500004100000000005804350000013a08600039000007a109000041000000000098043500000167096000390000000008020433000000000008004b00000b510000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b00000b4a0000413d00000000099800190000000000090435000000000668001900000167096000390000079d0800004100000000008904350000018a0960003900000000005904350000016a05600039000007a209000041000000000095043500000197096000390000000005020433000000000005004b00000b680000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000005a004b00000b610000413d00000000099500190000000000090435000000000565001900000197065000390000000000860435000001ba085000390000079b0600004100000000006804350000019a08500039000007a3090000410000000000980435000001c7095000390000000008020433000000000008004b00000b7f0000613d000000000a000019000000000b9a0019000000000c3a0019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b00000b780000413d000000000998001900000000000904350000000005580019000001c7085000390000079d090000410000000000980435000001ea085000390000000000680435000001ca06500039000007a40800004100000000008604350000002008700039000001f70a5000390000000006070433000000000006004b00000b970000613d000000000b000019000000000cab0019000000000d8b0019000000000d0d04330000000000dc0435000000200bb0003900000000006b004b00000b900000413d000000000aa6001900000000009a043500000000096500190000021a059000390000079b060000410000000000650435000001fa05900039000007a50a0000410000000000a504350000002005100039000002270b900039000000000a01043300000000000a004b00000bad0000613d000000000c000019000000000dbc0019000000000e5c0019000000000e0e04330000000000ed0435000000200cc000390000000000ac004b00000ba60000413d000000000bba001900000000000b04350000000009a90019000002270b9000390000079d0a0000410000000000ab04350000024a0b90003900000000006b04350000022a06900039000007a60b0000410000000000b60435000002570b9000390000000006010433000000000006004b00000bc40000613d000000000c000019000000000dbc0019000000000e5c0019000000000e0e04330000000000ed0435000000200cc0003900000000006c004b00000bbd0000413d000000000bb6001900000000000b0435000000000696001900000257096000390000000000a904350000027a096000390000079b0a0000410000000000a904350000025a09600039000007a70b0000410000000000b904350000028709600039000000000b01043300000000000b004b00000bdb0000613d000000000c000019000000000d9c0019000000000e5c0019000000000e0e04330000000000ed0435000000200cc000390000000000bc004b00000bd40000413d000000000c9b00190000079d0900004100000000009c0435000000000b6b0019000002aa06b000390000000000a604350000028a06b00039000007a80a0000410000000000a604350000002006400039000002b70cb00039000000000a04043300000000000a004b00000bf10000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000ad004b00000bea0000413d000000000cca001900000000000c0435000000000aab0019000002b70ba0003900000000009b0435000002da0ba000390000079b0900004100000000009b0435000002ba0ba00039000007a90c0000410000000000cb0435000002e70ca00039000000000b04043300000000000b004b00000c080000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c010000413d000000000ccb001900000000000c0435000000000aab0019000002e70ca000390000079d0b0000410000000000bc04350000030a0ca0003900000000009c0435000002ea09a00039000007aa0c0000410000000000c90435000003170ca000390000000009020433000000000009004b00000c1f0000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000c180000413d000000000cc9001900000000000c0435000000000aa900190000031709a000390000000000b904350000033a0ba000390000079b0900004100000000009b04350000031a0ba00039000007ab0c0000410000000000cb0435000003470ca00039000000000b02043300000000000b004b00000c360000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c2f0000413d000000000ccb001900000000000c0435000000000aab0019000003470ca000390000079d0b0000410000000000bc04350000036a0ca0003900000000009c04350000034a09a00039000007ac0c0000410000000000c90435000003770ca000390000000009070433000000000009004b00000c4d0000613d000000000d000019000000000ecd0019000000000f8d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000c460000413d000000000cc9001900000000000c0435000000000aa900190000037709a000390000000000b904350000039a0ba000390000079b0900004100000000009b04350000037a0ba00039000007ad0c0000410000000000cb0435000003a70ca00039000000000b07043300000000000b004b00000c640000613d000000000d000019000000000ecd0019000000000f8d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c5d0000413d000000000ccb001900000000000c0435000000000aab0019000003a70ca000390000079d0b0000410000000000bc0435000003ca0ca0003900000000009c0435000003aa09a00039000007ae0c0000410000000000c90435000003d70ca000390000000009010433000000000009004b00000c7b0000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000c740000413d000000000cc9001900000000000c0435000000000aa90019000003d709a000390000000000b90435000003fa0ba000390000079b0900004100000000009b0435000003da0ba00039000007af0c0000410000000000cb0435000004070ca00039000000000b01043300000000000b004b00000c920000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000c8b0000413d000000000ccb001900000000000c0435000000000aab0019000004070ca000390000079d0b0000410000000000bc04350000042a0ca0003900000000009c04350000040a09a00039000007b00c0000410000000000c90435000004370ca000390000000009010433000000000009004b00000ca90000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000ca20000413d000000000cc9001900000000000c04350000000009a90019000004370a9000390000000000ba04350000045a0b9000390000079b0a0000410000000000ab04350000043a0b900039000007b10c0000410000000000cb0435000004670b900039000000000c01043300000000000c004b00000cc00000613d000000000d000019000000000ebd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd000390000000000cd004b00000cb90000413d000000000dbc00190000079d0b0000410000000000bd043500000000099c00190000048a0c9000390000000000ac04350000046a0a900039000007b20c0000410000000000ca0435000004970c900039000000000a04043300000000000a004b00000cd50000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000ad004b00000cce0000413d000000000cca00190000000000bc0435000000000aa90019000004ba0ba000390000079b0900004100000000009b04350000049a0ba00039000007b30c0000410000000000cb0435000004c70ca00039000000000b04043300000000000b004b00000cea0000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000ce30000413d000000000ccb001900000000000c0435000000000bba0019000004c70cb000390000079d0a0000410000000000ac0435000004ea0cb0003900000000009c0435000004ca09b00039000007b40c0000410000000000c90435000004f70cb00039000000a709b00039000000000b02043300000000000b004b00000d020000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000cfb0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007b50c0000410000000000ca0435000004800cb00039000000300ab00039000000000b02043300000000000b004b00000d1a0000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d130000413d000000000ccb001900000000000c0435000000000bba0019000004500cb000390000079d0a0000410000000000ac0435000004730cb0003900000000009c04350000045309b00039000007b60c0000410000000000c90435000004800cb000390000003009b00039000000000b07043300000000000b004b00000d320000613d000000000d000019000000000ecd0019000000000f8d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d2b0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007b70c0000410000000000ca0435000004800cb00039000000300ab00039000000000b01043300000000000b004b00000d4a0000613d000000000d000019000000000ecd0019000000000f5d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d430000413d000000000ccb001900000000000c0435000000000bba0019000004500cb000390000079d0a0000410000000000ac0435000004730cb0003900000000009c04350000045309b00039000007b80c0000410000000000c90435000004800cb000390000003009b00039000000000b04043300000000000b004b00000d620000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d5b0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007b90c0000410000000000ca0435000004800cb00039000000300ab00039000000000b04043300000000000b004b00000d7a0000613d000000000d000019000000000ecd0019000000000f6d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d730000413d000000000ccb001900000000000c0435000000000bba0019000004500cb000390000079d0a0000410000000000ac0435000004730cb0003900000000009c04350000045309b00039000007ba0c0000410000000000c90435000004800cb000390000003009b00039000000000b02043300000000000b004b00000d920000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000d8b0000413d000000000ccb001900000000000c0435000000000bb900190000045009b000390000000000a90435000004730ab000390000079b0900004100000000009a0435000004530ab00039000007bb0c0000410000000000ca0435000004800cb00039000000300ab00039000000000b02043300000000000b004b00000daa0000613d000000000d000019000000000ecd0019000000000f3d0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b00000da30000413d000000000ccb001900000000000c0435000000000cba0019000004500bc000390000079d0a0000410000000000ab0435000004730bc0003900000000009b04350000045309c00039000007bc0b0000410000000000b90435000004800bc000390000003009c000390000000007070433000000000007004b00000dc20000613d000000000c000019000000000dbc0019000000000e8c0019000000000e0e04330000000000ed0435000000200cc0003900000000007c004b00000dbb0000413d0000000008b700190000000000080435000000000879001900000450078000390000000000a7043500000473098000390000079b0700004100000000007904350000045309800039000007bd0a0000410000000000a90435000004800a80003900000030088000390000000009010433000000000009004b00000dda0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000dd30000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007be0a0000410000000000a70435000004800a90003900000030079000390000000009040433000000000009004b00000df20000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000deb0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007bf0a0000410000000000a80435000004800a90003900000030089000390000000009040433000000000009004b00000e0a0000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e030000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c00a0000410000000000a70435000004800a90003900000030079000390000000009020433000000000009004b00000e220000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e1b0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c10a0000410000000000a80435000004800a90003900000030089000390000000009020433000000000009004b00000e3a0000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e330000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c20a0000410000000000a70435000004800a90003900000030079000390000000009010433000000000009004b00000e520000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e4b0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c30a0000410000000000a80435000004800a90003900000030089000390000000009010433000000000009004b00000e6a0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e630000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c40a0000410000000000a70435000004800a90003900000030079000390000000009040433000000000009004b00000e820000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e7b0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c50a0000410000000000a80435000004800a90003900000030089000390000000009040433000000000009004b00000e9a0000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000e930000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c60a0000410000000000a70435000004800a90003900000030079000390000000009020433000000000009004b00000eb20000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000eab0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c70a0000410000000000a80435000004800a90003900000030089000390000000009020433000000000009004b00000eca0000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000ec30000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007c80a0000410000000000a70435000004800a90003900000030079000390000000009010433000000000009004b00000ee20000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000edb0000413d000000000aa9001900000000000a043500000000099700190000045007900039000000000087043500000473089000390000079b0700004100000000007804350000045308900039000007c90a0000410000000000a80435000004800a90003900000030089000390000000009010433000000000009004b00000efa0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000ef30000413d000000000aa9001900000000000a04350000000009980019000004500a9000390000079d0800004100000000008a0435000004730a90003900000000007a04350000045307900039000007ca0a0000410000000000a70435000004800a90003900000030079000390000000009040433000000000009004b00000f120000613d000000000b000019000000000cab0019000000000d6b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00000f0b0000413d000000000aa9001900000000000a0435000000000a9700190000045007a0003900000000008704350000047308a000390000079b0700004100000000007804350000045308a00039000007cb0900004100000000009804350000048009a000390000003008a000390000000004040433000000000004004b00000f2a0000613d000000000a000019000000000b9a0019000000000c6a0019000000000c0c04330000000000cb0435000000200aa0003900000000004a004b00000f230000413d00000000069400190000000000060435000000000648001900000450086000390000079d040000410000000000480435000004730860003900000000007804350000045307600039000007cc080000410000000000870435000004800860003900000030066000390000000007020433000000000007004b00000f420000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b00000f3b0000413d0000000008870019000000000008043500000000067600190000045007600039000000000047043500000473076000390000079b0400004100000000004704350000045307600039000007cd080000410000000000870435000004800760003900000030066000390000000002020433000000000002004b00000f5a0000613d00000000080000190000000009780019000000000a380019000000000a0a04330000000000a904350000002008800039000000000028004b00000f530000413d00000000037200190000000000030435000000000326001900000450063000390000079d020000410000000000260435000004730630003900000000004604350000045304300039000007ce060000410000000000640435000004800630003900000030033000390000000004010433000000000004004b00000f720000613d000000000700001900000000086700190000000009570019000000000909043300000000009804350000002007700039000000000047004b00000f6b0000413d0000000006640019000000000006043500000000034300190000045004300039000000000024043500000473043000390000079b0200004100000000002404350000045304300039000007cf060000410000000000640435000004800430003900000030033000390000000001010433000000000001004b00000f8a0000613d000000000600001900000000074600190000000008560019000000000808043300000000008704350000002006600039000000000016004b00000f830000413d00000000044100190000000000040435000000000113001900000450031000390000079d040000410000000000430435000004730310003900000000002304350000045302100039000007d003000041000000000032043500000480031000390000000e0200002900000020012000390000000005020433000000000005004b00000fa30000613d000000000600001900000000073600190000000008160019000000000808043300000000008704350000002006600039000000000056004b00000f9c0000413d000000000735001900000023057000390000079b03000041000000000035043500000000004704350000000304700039000007d105000041000000000054043500000030047000390000000c0600002900000020056000390000000008060433000000000008004b00000fb90000613d0000000009000019000000000a490019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000089004b00000fb20000413d00000000044800190000000000040435000000000778001900000030087000390000079d040000410000000000480435000000530870003900000000003804350000003303700039000007d208000041000000000083043500000060037000390000000007020433000000000007004b00000fd00000613d00000000080000190000000009380019000000000a180019000000000a0a04330000000000a904350000002008800039000000000078004b00000fc90000413d000000000737001900000023087000390000079b03000041000000000038043500000000004704350000000304700039000007d308000041000000000084043500000030087000390000000004060433000000000004004b00000fe40000613d0000000009000019000000000a890019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000049004b00000fdd0000413d00000000088400190000000000080435000000000474001900000030084000390000079d070000410000000000780435000000530840003900000000003804350000003303400039000007d408000041000000000083043500000060084000390000000003060433000000000003004b00000ffb0000613d0000000009000019000000000a890019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000039004b00000ff40000413d0000000008830019000000000008043500000000044300190000006003400039000000000073043500000083074000390000079b0300004100000000003704350000006307400039000007d508000041000000000087043500000090084000390000000007060433000000000007004b000010120000613d0000000009000019000000000a890019000000000b590019000000000b0b04330000000000ba04350000002009900039000000000079004b0000100b0000413d00000000088700190000000000080435000000000747001900000090047000390000079d080000410000000000840435000000b30470003900000000003404350000009303700039000007d6040000410000000000430435000000c0097000390000000f040000290000002003400039000000000a04043300000000000a004b0000102b0000613d000000000b000019000000000c9b0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb000390000000000ab004b000010240000413d00000000099a0019000000000009043500000000077a0019000000c0097000390000000000890435000000e3097000390000079b080000410000000000890435000000c309700039000007d70a0000410000000000a90435000000f00a7000390000000009040433000000000009004b000010420000613d000000000b000019000000000cab0019000000000d3b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b0000103b0000413d000000000aa9001900000000000a04350000000007790019000000f00a7000390000079d0900004100000000009a0435000001130a70003900000000008a0435000000f308700039000007d80a0000410000000000a80435000001200a7000390000000d0800002900000000b8080434000000000008004b0000105a0000613d000000000c000019000000000dac0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc0003900000000008c004b000010530000413d000000000aa8001900000000000a043500000000087800190000012007800039000000000097043500000143098000390000079b0700004100000000007904350000012309800039000007d90a0000410000000000a90435000001500a8000390000000009060433000000000009004b000010710000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b0000106a0000413d000000000aa9001900000000000a04350000000008890019000001500a8000390000079d0900004100000000009a0435000001730a80003900000000007a04350000015307800039000007da0a0000410000000000a70435000001800a8000390000000007060433000000000007004b000010880000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000007b004b000010810000413d000000000aa7001900000000000a0435000000000887001900000180078000390000000000970435000001a3098000390000079b0700004100000000007904350000018309800039000007db0a0000410000000000a90435000001b00a8000390000000009060433000000000009004b0000109f0000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b000010980000413d000000000aa9001900000000000a04350000000008890019000001b00a8000390000079d0900004100000000009a0435000001d30a80003900000000007a0435000001b307800039000007dc0a0000410000000000a70435000001e00a8000390000000007060433000000000007004b000010b60000613d000000000b000019000000000cab0019000000000d5b0019000000000d0d04330000000000dc0435000000200bb0003900000000007b004b000010af0000413d000000000aa7001900000000000a04350000000008870019000001e007800039000000000097043500000203098000390000079b070000410000000000790435000001e309800039000007dd0a0000410000000000a9043500000210098000390000000006060433000000000006004b000010cd0000613d000000000a000019000000000b9a0019000000000c5a0019000000000c0c04330000000000cb0435000000200aa0003900000000006a004b000010c60000413d00000000059600190000000000050435000000000586001900000210065000390000079d080000410000000000860435000002330650003900000000007604350000021306500039000007de07000041000000000076043500000240075000390000000006040433000000000006004b000010e40000613d0000000009000019000000000a790019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000069004b000010dd0000413d0000000007760019000000000007043500000000065600190000024005600039000000000085043500000263076000390000079b0500004100000000005704350000024307600039000007df08000041000000000087043500000270086000390000000007040433000000000007004b000010fb0000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b000010f40000413d00000000088700190000000000080435000000000667001900000270086000390000079d070000410000000000780435000002930860003900000000005804350000027305600039000007e0080000410000000000850435000002a0086000390000000005040433000000000005004b000011120000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000059004b0000110b0000413d000000000885001900000000000804350000000006650019000002a0056000390000000000750435000002c3076000390000079b050000410000000000570435000002a307600039000007e1080000410000000000870435000002d0086000390000000007040433000000000007004b000011290000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b000011220000413d000000000887001900000000000804350000000006670019000002d0086000390000079d070000410000000000780435000002f3086000390000000000580435000002d305600039000007e208000041000000000085043500000300086000390000000005040433000000000005004b000011400000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000059004b000011390000413d0000000008850019000000000008043500000000066500190000030005600039000000000075043500000323076000390000079b0500004100000000005704350000030307600039000007e308000041000000000087043500000330086000390000000007040433000000000007004b000011570000613d0000000009000019000000000a890019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000079004b000011500000413d00000000088700190000000000080435000000000667001900000330086000390000079d070000410000000000780435000003530860003900000000005804350000033305600039000007e408000041000000000085043500000360056000390000000004040433000000000004004b0000116e0000613d00000000080000190000000009580019000000000a380019000000000a0a04330000000000a904350000002008800039000000000048004b000011670000413d0000000003540019000000000003043500000000046400190000036003400039000000000073043500000383054000390000079b0300004100000000003504350000036305400039000007e506000041000000000065043500000390064000390000000005020433000000000005004b000011850000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000117e0000413d00000000066500190000000000060435000000000445001900000390064000390000079d050000410000000000560435000003b30640003900000000003604350000039303400039000007e6060000410000000000630435000003c0064000390000000003020433000000000003004b0000119c0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000037004b000011950000413d000000000663001900000000000604350000000004430019000003c0034000390000000000530435000003e3054000390000079b030000410000000000350435000003c305400039000007e7060000410000000000650435000003f0064000390000000005020433000000000005004b000011b30000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000011ac0000413d000000000665001900000000000604350000000004450019000003f0064000390000079d05000041000000000056043500000413064000390000000000360435000003f303400039000007e806000041000000000063043500000420064000390000000003020433000000000003004b000011ca0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000037004b000011c30000413d0000000006630019000000000006043500000000044300190000042003400039000000000053043500000443054000390000079b0300004100000000003504350000042305400039000007e906000041000000000065043500000450064000390000000005020433000000000005004b000011e10000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000011da0000413d00000000066500190000000000060435000000000445001900000450064000390000079d050000410000000000560435000004730640003900000000003604350000045303400039000007ea060000410000000000630435000004800740003900000030064000390000000b0400002900000020034000390000000008040433000000000008004b000011fb0000613d0000000009000019000000000a790019000000000b390019000000000b0b04330000000000ba04350000002009900039000000000089004b000011f40000413d0000000007780019000000000007043500000000068600190000045007600039000000000057043500000473076000390000079b0500004100000000005704350000045307600039000007eb080000410000000000870435000004800860003900000030066000390000000007020433000000000007004b000012130000613d0000000009000019000000000a890019000000000b190019000000000b0b04330000000000ba04350000002009900039000000000079004b0000120c0000413d00000000088700190000000000080435000000000876001900000450078000390000079d060000410000000000670435000004730780003900000000005704350000045305800039000007ec070000410000000000750435000004800780003900000030058000390000000004040433000000000004004b0000122b0000613d00000000080000190000000009780019000000000a380019000000000a0a04330000000000a904350000002008800039000000000048004b000012240000413d0000000003740019000000000003043500000000044500190000045003400039000000000063043500000473054000390000079b0300004100000000003504350000045305400039000007ed060000410000000000650435000004800640003900000030044000390000000005020433000000000005004b000012430000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000123c0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007ee060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b0000125b0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012540000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007ef060000410000000000640435000004800650003900000030045000390000000005020433000000000005004b000012730000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000126c0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007f0060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b0000128b0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012840000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007f1060000410000000000640435000004800650003900000030045000390000000005020433000000000005004b000012a30000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b0000129c0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007f2060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b000012bb0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012b40000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007f3060000410000000000640435000004800650003900000030045000390000000005020433000000000005004b000012d30000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012cc0000413d00000000066500190000000000060435000000000554001900000450065000390000079d040000410000000000460435000004730650003900000000003604350000045303500039000007f4060000410000000000630435000004800650003900000030035000390000000005020433000000000005004b000012eb0000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000057004b000012e40000413d0000000006650019000000000006043500000000055300190000045003500039000000000043043500000473045000390000079b0300004100000000003404350000045304500039000007d006000041000000000064043500000480045000390000000005020433000000000005004b000013020000613d000000000600001900000000074600190000000008160019000000000808043300000000008704350000002006600039000000000056004b000012fb0000413d0000000004450019000000230540003900000000003504350000079d0300004100000000003404350000000305400039000007d206000041000000000065043500000030044000390000000002020433000000000002004b000013160000613d000000000500001900000000064500190000000007150019000000000707043300000000007604350000002005500039000000000025004b0000130f0000413d000000000242001900000000003204350000000301200039000007f50300004100000000003104350000000701200039000007f60300004100000000003104350000000a010000290000000002120049000000130320008a00000000003104350000002c022000390000083f032001970000000002130019000000000032004b000000000300003900000001030040390000070b0020009c000007860000213d0000000100300190000007860000c13d000000400020043f1bea1a5f0000040f000000400400043d0000002003400039000007f702000041000800000003001d0000000000230435000900000004001d0000003a024000390000000031010434000000000001004b000013400000613d000000000400001900000000052400190000000006430019000000000606043300000000006504350000002004400039000000000014004b000013390000413d000000000221001900000000000204350000001a021000390000000903000029000000000023043500000059011000390000083f011001970000000002310019000000000012004b000000000100003900000001010040390000070b0020009c000007860000213d0000000100100190000007860000c13d0000000003020019000000400020043f000000110000002a000016450000c13d000007060030009c000007860000213d000007fa010000410000000d020000390000164c0000013d000000010320008a0000000503300270000000000431001900000020030000390000000104400039000000080600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000135e0000c13d0000000705000029000000000052004b000013700000813d0000000302500210000000f80220018f000008420220027f000008420220016700000008033000290000000003030433000000000223016f000000000021041b000000010150021000000001011001bf000000090400002900000005050000290000000302000039000000000012041b0000001101000039000000000201041a000008400220019700000001022001bf000000000021041b00000703015001970000000802000039000000000302041a0000070803300197000000000113019f000000000012041b0000070301400197000000800010043f000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000007122010012a0000000002210049000007130120009c000006a10000813d0000000903000039000000000013041b000007150220009a000000000012004b000006a10000213d0000000d03000039000000000023041b0000000b020000390000000105000039000000000052041b000000400200043d0000000000120435000007000020009c000007000200804100000040012002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000070f011001c70000800d02000039000000020300003900000716040000411bea1be00000040f0000000100200190000006d90000613d000000800100043d000001400000044300000160001004430000002001000039000001000010044300000001010000390000012000100443000007170100004100001beb0001042e0000000b01000039000000000101041a000000000010043f0000000a01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000900000001001d0000000601100039000700000001001d000000000101041a000600000001001d000000ff001001900000147a0000c13d00000009010000290000000301100039000000000101041a000000000001004b000000380000613d000000090300002900000005023000390000000804000029000000000042041b00000000101400d9000800000001001d000000000010043f0000000101300039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d00000009020000290000000403200039000000000203041a0000081b02200197000000000101043b000000000101041a00000008011002100000081c01100197000000000112019f000500000003001d000000000013041b0000000b01000039000000000101041a000000000010043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000301041a000000400200043d000300000002001d000200000003001d0000000002320436000400000002001d000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d0000000205000029000000000005004b00000004020000290000141b0000613d000000000101043b00000000030000190000000402000029000000000401041a000000000242043600000001011000390000000103300039000000000053004b000014150000413d000000030120006a0000001f011000390000083f021001970000000301200029000000000021004b000000000200003900000001020040390000070b0010009c000007860000213d0000000100200190000007860000c13d000000400010043f00000003020000290000000002020433000000080020006c000016d40000a13d000000080100002900000005011002100000000401100029000000000101043300000009020000290000000702200039000000000012041b000001000100008a000000060110017f00000001011001bf0000000702000029000000000012041b0000000802000039000000000102041a0000076f01100197000000000012041b0000000b01000039000000000501041a0000000501000029000000000101041a000000080110027000000000020004140000070306100197000007000020009c0000070002008041000000c00120021000000709011001c70000800d0200003900000003030000390000081e04000041000900000005001d1bea1be00000040f0000000100200190000006d90000613d0000000901000029000900010010003e000006a10000613d0000000b010000390000000902000029000000000021041b000007100100004100000000001004430000000001000414000007000010009c0000070001008041000000c00110021000000711011001c70000800b020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000007122010012a0000000002210049000007130120009c000006a10000813d0000000903000039000000000013041b000007150220009a000000000012004b000006a10000213d0000000d03000039000000000023041b000000400200043d0000000000120435000007000020009c000007000200804100000040012002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000070f011001c70000800d02000039000000020300003900000716040000410000000905000029000006d60000013d000000400100043d00000044021000390000081a0300004100000000003204350000002402100039000000140300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec0001043000000060021002700000070002200197000000040420008c000014cf0000413d000000000300043d0000082503300197000000000501043b0000082605500197000000000335019f000000000030043f000000440020008c000014cf0000413d00000826033001970000075a0030009c000014cf0000c13d00000004071003700000083f084001980000001f0940018f000000400500043d0000000006850019000014a60000613d000000000a07034f000000000b05001900000000ac0a043c000000000bcb043600000000006b004b000014a20000c13d000000000009004b000014b30000613d000000000787034f0000000308900210000000000906043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f000000000076043500000000080504330000070b0080009c000014cf0000213d0000002406800039000000000026004b000014cf0000213d000000000758001900000000690704340000070b0090009c000014cf0000213d0000000004450019000000000a69001900000000004a004b000014cf0000213d00000000049800190000003f044000390000083f084001970000000004580019000000000084004b000000000500003900000001050040390000070b0040009c000007860000213d0000000100500190000007860000c13d000000400040043f000000000007004b000016d70000c13d0000001f0520018f0000070206200198000000400300043d0000000004630019000014da0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000014d60000c13d000000000005004b000014e70000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001200210000007000030009c00000700030080410000004002300210000000000112019f00001bec000104300000001f0530018f0000070206300198000000400200043d0000000004620019000014f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014f40000c13d000000000005004b000015050000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007000020009c00000700020080410000004002200210000000000112019f00001bec000104300000075a01000041000000800010043f0000002001000039000000840010043f0000000f01000039000000a40010043f0000075b01000041000000c40010043f0000075c0100004100001bec00010430000000400100043d00000044021000390000082b03000041000000000032043500000024021000390000000d03000039000014800000013d0000000001000411000000000001004b000015350000c13d0000000f01000039000000000201041a000000010220003a000006a10000613d000000000021041b000000400100043d0000082c0010009c000007860000213d0000002002100039000000400020043f0000000000010435000000400100043d00000044021000390000082f0300004100000000003204350000075a0200004100000000002104350000002402100039000000200300003900000000003204350000000402100039000014850000013d000407030010019b0000000001000019000600000001001d0000000f02000039000000000102041a000000010310003a000006a10000613d000000000032041b000000400200043d0000082c0020009c000007860000213d0000002001200039000700000001001d000000400010043f000500000002001d0000000000020435000900000003001d000000000030043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070300100198000016d00000c13d0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000101041a0000070300100198000016d00000c13d0000000001000411000000000010043f0000000501000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a0000000102200039000000000021041b0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b000000000201041a00000708022001970000000006000411000000000262019f000000000021041b0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000004030000390000080704000041000000000500001900000009070000291bea1be00000040f0000000100200190000006d90000613d00000823010000410000000000100443000000000100041100000004001004430000000001000414000007000010009c0000070001008041000000c00110021000000779011001c700008002020000391bea1be50000040f0000000100200190000016380000613d000000000101043b000000000001004b00000007060000290000160c0000613d000000400700043d0000006401700039000000800200003900000000002104350000004401700039000000090200002900000000002104350000082e010000410000000000170435000000040170003900000000020004110000000000210435000000240170003900000000000104350000000501000029000000000101043300000084027000390000000000120435000000a402700039000000000001004b000015c60000613d000000000300001900000000042300190000000005630019000000000505043300000000005404350000002003300039000000000013004b000015bf0000413d0000001f031000390000083f0330019700000000012100190000000000010435000000a401300039000007000010009c00000700010080410000006001100210000007000070009c000007000200004100000000020740190000004002200210000000000121019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f0000000402000029000900000007001d1bea1be00000040f000000090a00002900000060031002700000070003300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000015ea0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000015e60000c13d0000001f07400190000015f70000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000065043500000001002001900000170a0000613d0000001f01400039000000600110018f0000000004a10019000000000014004b000000000100003900000001010040390000070b0040009c000007860000213d0000000100100190000007860000c13d000000400040043f000000200030008c000006d90000413d00000000010a04330000082500100198000006d90000c13d00000826011001970000082e0010009c000017180000c13d0000000b01000039000000000101041a000000000010043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d0000000f02000039000000000202041a000900000002001d000000000101043b000000000201041a0000070b0020009c000007860000213d000700000002001d0000000102200039000000000021041b000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b00000007011000290000000902000029000000000021041b000000060100002900000001011000390000000805000029000000000051004b000015370000413d000009ce0000013d000000000001042f0000001f0530018f0000070206300198000000400200043d0000000004620019000014f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000016400000c13d000014f80000013d000000100000002a000007f901000041000007f80100604100000007020000390000001602006039000007060030009c000007860000213d0000000004030019000500000003001d0000004003300039000000400030043f0000002003400039000600000003001d0000000000130435000000000024043500000013010000291bea1ae80000040f000400000001001d0000001201000029000700000001001d1bea1ae80000040f000300000001001d00000007010000291bea1ae80000040f000007fb02000041000000400400043d000700000004001d00000020034000390000000000230435000000040200002900000020052000390000000003020433000200000003001d000400000001001d0000003b0240003900000000010500191bea17fe0000040f00000002020000290000000704200029000200000004001d000007fc010000410000003b02400039000000000012043500000005010000290000000003010433000100000003001d0000004e0240003900000006010000291bea17fe0000040f00000001020000290000000204200029000200000004001d000007fd010000410000004e024000390000000000120435000000030200002900000020012000390000000003020433000300000003001d00000057024000391bea17fe0000040f00000003020000290000000204200029000300000004001d000007fe010000410000005702400039000000000012043500000009010000290000000003010433000900000003001d000000640240003900000008010000291bea17fe0000040f00000009020000290000000304200029000900000004001d000007ff010000410000008402400039000000000012043500000800010000410000006402400039000000000012043500000005010000290000000003010433000800000003001d000000990240003900000006010000291bea17fe0000040f00000008020000290000000904200029000900000004001d0000080101000041000000b9024000390000000000120435000008020100004100000099024000390000000000120435000000040200002900000020012000390000000003020433000800000003001d000000be024000391bea17fe0000040f000000080200002900000009042000290000080302000041000000be03400039000000000023043500000007010000290000000003140049000000a2023000390000000000210435000000c2023000391bea18450000040f00000007010000291bea1a5f0000040f0000080402000041000000400400043d000900000004001d000000200340003900000000002304350000000013010434000800000003001d0000003d024000391bea17fe0000040f00000008030000290000001d02300039000000090100002900000000002104350000003d023000391bea18450000040f0000002001000039000000400200043d000800000002001d000000000212043600000009010000291bea180b0000040f0000000802000029000007000000013d000000400100043d00000044021000390000082d03000041000009f20000013d00000044021000390000081d03000041000009f20000013d0000000b01000039000000000501041a00000020014000390000004002000039000000000021043500000000000404350000000001070433000000400240003900000000001204350000006002400039000000000001004b000016eb0000613d000000000700001900000000082700190000000009670019000000000909043300000000009804350000002007700039000000000017004b000016e40000413d0000001f061000390000083f03600197000000000121001900000000000104350000006001300039000007000010009c00000700010080410000006001100210000007000040009c00000700040080410000004002400210000000000121019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000709011001c70000800d02000039000000020300003900000827040000411bea1be00000040f0000000100200190000006d90000613d0000000d01000039000000000101041a000900000001001d000007100100004100000000001004430000000001000414000005b20000013d000000000003004b000017630000c13d00000060020000390000000001020433000000000001004b0000178b0000c13d000000400200043d000900000002001d0000075a01000041000000000012043500000004012000391bea18de0000040f00000009020000290000171e0000013d0000075a01000041000700000004001d000000000014043500000004014000391bea18de0000040f00000007020000290000000001210049000007000010009c00000700010080410000006001100210000007000020009c00000700020080410000004002200210000000000121019f00001bec000104300000000001000411000000600110021000000004030000290000004002300039000000000012043500000054013000390000000802000029000000000021043500000054010000390000000001130436000000090200002900000000002104350000076b0030009c000007860000213d00000004030000290000008002300039000900000002001d000000400020043f000007000010009c000007000100804100000040011002100000000002030433000007000020009c00000700020080410000006002200210000000000112019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000709011001c700008010020000391bea1be50000040f0000000100200190000006d90000613d000000000101043b0000076c02000041000000090300002900000000002304350000000404000029000000a4024000390000000000120435000000840140003900000007020000290000000000210435000007000030009c0000070001000041000000000103401900000040011002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f000000050000006b000017940000c13d0000076e011001c70000000602000029000017990000013d0000001f0230003900000701022001970000003f022000390000077a04200197000000400200043d0000000004420019000000000024004b000000000500003900000001050040390000070b0040009c000007860000213d0000000100500190000007860000c13d000000400040043f0000001f0430018f00000000063204360000070205300198000300000006001d00000000035600190000177d0000613d000000000601034f0000000307000029000000006806043c0000000007870436000000000037004b000017790000c13d000000000004004b0000170d0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000170d0000013d0000000302000029000007000020009c00000700020080410000004002200210000007000010009c00000700010080410000006001100210000000000121019f00001bec000104300000076d011001c700008009020000390000000503000029000000060400002900000000050000191bea1be00000040f00000060031002700000070003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000905700029000017a90000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b000017a50000c13d000000000006004b000017b60000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017d70000613d0000001f01400039000000600110018f00000009011000290000070b0010009c000007860000213d000000400010043f000000200030008c000006d90000413d000000090100002900000000060104330000070b0060009c000006d90000213d0000000803000039000000000103041a0000076f01100197000000a0026002100000077002200197000000000112019f00000771011001c7000000000013041b0000000b01000039000000000501041a0000000001000414000007000010009c0000070001008041000000c00110021000000709011001c70000800d0200003900000003030000390000077204000041000006d60000013d0000001f0530018f0000070206300198000000400200043d0000000004620019000014f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017de0000c13d000014f80000013d0001000000000002000000000301041a000100000002001d000000000023004b000017f60000a13d000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f0000000100200190000017fc0000613d000000000101043b00000001011000290000000002000019000000000001042d0000083001000041000000000010043f0000003201000039000000040010043f000007690100004100001bec00010430000000000100001900001bec00010430000000000003004b000018080000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000034004b000018010000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000003004b000018170000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000018100000413d000000000213001900000000000204350000001f023000390000083f022001970000000001210019000000000001042d000008430010009c0000182d0000213d000000630010008c0000182d0000a13d00000001030003670000000401300370000000000101043b000007030010009c0000182d0000213d0000002402300370000000000202043b000007030020009c0000182d0000213d0000004403300370000000000303043b000000000001042d000000000100001900001bec0001043000000004010000390000000101100367000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b000018380000c13d000000000001042d000000000100001900001bec00010430000008440010009c0000183f0000813d0000002001100039000000400010043f000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000001f022000390000083f022001970000000001120019000000000021004b000000000200003900000001020040390000070b0010009c000018510000213d0000000100200190000018510000c13d000000400010043f000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec00010430000000000100041a00000703011001970000000002000411000000000021004b0000185d0000c13d000000000001042d000000400100043d0000004402100039000008100300004100000000003204350000075a02000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec00010430000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f00000001002001900000187e0000613d000000000101043b000000000101041a0000070301100198000018800000613d000000000001042d000000000100001900001bec00010430000000400100043d00000044021000390000083b0300004100000000003204350000002402100039000000180300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec000104300001000000000002000100000001001d000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000018b40000613d000000000101043b000000000101041a0000070300100198000018b60000613d0000000101000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000018b40000613d000000000101043b000000000101041a0000070301100197000000000001042d000000000100001900001bec00010430000000400100043d00000044021000390000083b0300004100000000003204350000002402100039000000180300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec00010430000000000001004b000018ca0000613d000000000001042d000000400100043d00000064021000390000084503000041000000000032043500000044021000390000084603000041000000000032043500000024021000390000002d0300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec00010430000000600210003900000847030000410000000000320435000000400210003900000848030000410000000000320435000000200210003900000032030000390000000000320435000000200200003900000000002104350000008001100039000000000001042d0002000000000002000200000001001d000100000002001d000000000020043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a00000703011001980000194a0000613d00000002020000290000070302200197000000000012004b000019040000c13d0000000101000039000000000001042d000200000002001d000000000010043f0000000701000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b0000000202000029000000000020043f000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a000000ff01100190000019230000613d000000000001042d0000000101000029000000000010043f0000000401000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a00000703001001980000194a0000613d0000000101000029000000000010043f0000000601000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700008010020000391bea1be50000040f0000000100200190000019480000613d000000000101043b000000000101041a0000070301100197000000020010006c00000000010000390000000101006039000000000001042d000000000100001900001bec00010430000000400100043d00000044021000390000083b0300004100000000003204350000002402100039000000180300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec0001043000010000000000020000070300200198000019710000c13d000100000001001d00000000010300191bea186d0000040f00000001020000290000070302200197000000000021004b000000000100003900000001010060391bea19850000040f000000400100043d00000064021000390000084b03000041000000000032043500000044021000390000084c030000410000000000320435000000240210003900000024030000390000197a0000013d000000400100043d00000064021000390000084903000041000000000032043500000044021000390000084a03000041000000000032043500000024021000390000002c0300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec00010430000000000001004b000019880000613d000000000001042d000000400100043d00000064021000390000084d03000041000000000032043500000044021000390000084e0300004100000000003204350000002402100039000000250300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000818011001c700001bec000104300004000000000002000200000002001d000100000001001d0000000801000039000000000201041a000000400400043d000400000004001d0000084f010000410000000001140436000300000001001d000000040140003900000813030000410000000000310435000007000040009c0000070001000041000000000104401900000040011002100000000003000414000007000030009c0000070003008041000000c003300210000000000113019f00000769011001c700000703022001971bea1be50000040f000000040b00002900000060031002700000070003300197000000800030008c000000800400003900000000040340190000001f0640018f000000e00740019000000000057b0019000019c50000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000019c10000c13d000000000006004b000019d20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a3b0000613d0000001f01400039000001e00110018f0000000004b10019000000000014004b000000000100003900000001010040390000070b0040009c00001a350000213d000000010010019000001a350000c13d000000400040043f0000007f0030008c00001a330000a13d0000076b0040009c00001a350000213d0000008001400039000000400010043f00000000010b04330000085000100198000008510200004100000000020060190000085203100197000000000232019f000000000021004b00001a330000c13d0000000001140436000000030200002900000000020204330000070b0020009c00001a330000213d00000000002104350000004001b0003900000000010104330000085300100198000008540200004100000000020060190000085503100197000000000232019f000000000021004b00001a330000c13d0000004002400039000000000012043500000060014000390000006002b000390000000002020433000000000021043500000002010000290000070301100197000000000010043f0000000c01000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c70000801002000039000400000004001d1bea1be50000040f0000000404000029000000010020019000001a330000613d000000000101043b000000000101041a000000ff001001900000082202000041000008140200604100000001012000b900000000022100d9000000010020006c00001a270000c13d000000000001004b00001a2d0000613d00000856021000d100000000031200d9000008560030009c00001a270000c13d00000857011000d1000000000002004b00001a2e0000613d00000000022100d9000000640020008c00001a2e0000613d0000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec00010430000000000100001900000000020404330000070b0220019800001a590000613d00000000012100d9000000000001042d000000000100001900001bec000104300000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000001f0530018f0000070206300198000000400200043d000000000462001900001a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a420000c13d000000000005004b00001a530000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007000020009c00000700020080410000004002200210000000000112019f00001bec000104300000083001000041000000000010043f0000001201000039000000040010043f000007690100004100001bec00010430000000400200043d0000000003010433000000000003004b00001ace0000613d000008580020009c00001adc0000213d0000006003200039000000400030043f00000040032000390000085904000041000000000043043500000020032000390000085a0400004100000000004304350000004003000039000000000032043500000000030104330000085b0030009c00001ae20000813d0000085c0030009c00001adc0000213d0000000203300039000000030330011a00000002043002100000001f034000390000083f053001970000003f035000390000083f06300197000000400300043d0000000006630019000000000036004b000000000700003900000001070040390000070b0060009c00001adc0000213d000000010070019000001adc0000c13d000000400060043f0000000004430436000000000005004b00001a900000613d0000000005540019000000000600003100000001066003670000000007040019000000006806043c0000000007870436000000000057004b00001a8c0000c13d00000000060104330000000005160019000000000015004b00001ac20000a13d000000010220003900000000060100190000000306600039000000000706043300000012087002700000003f0880018f00000000088200190000000008080433000000f80880021000000000090404330000085d09900197000000000889019f00000000008404350000000c087002700000003f0880018f00000000088200190000000008080433000000f8088002100000000109400039000000000a0904330000085d0aa0019700000000088a019f000000000089043500000006087002700000003f0880018f00000000088200190000000008080433000000f8088002100000000209400039000000000a0904330000085d0aa0019700000000088a019f00000000008904350000003f0770018f00000000077200190000000007070433000000f807700210000000030840003900000000090804330000085d09900197000000000779019f00000000007804350000000404400039000000000056004b00001a960000413d0000000006010433000000031060011a000000020010008c00001ad50000613d000000010010008c00001ada0000c13d000000010140008a00000000020104330000085d022001970000085e022001c70000000000210435000000020140008a00001ad60000013d000008440020009c00001adc0000813d0000002001200039000000400010043f00000000000204350000000001020019000000000001042d000000010140008a00000000020104330000085d022001970000085e022001c700000000002104350000000001030019000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec000104300000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec000104300000085f0010009c00001aed0000413d00000040030000390000085f0210012a00001af60000013d000008610010009c0000000002010019000008600220212a00000000030000390000002003002039000008620020009c00000010033081bf0000076a02208197000008620220812a000008630020009c00000008033080390000070b02208197000008630220812a000027100020008c00000004033080390000070002208197000027100220811a000000640020008c00000002033080390000ffff0220818f000000640220811a000000090020008c00000001033020390000083f063001970000005f026000390000083f07200197000000400200043d0000000004270019000000000074004b000000000700003900000001070040390000070b0040009c00001b2e0000213d000000010070019000001b2e0000c13d000000400040043f0000000104300039000000000442043600000020076000390000083f067001980000001f0570018f00001b1e0000613d000000000664001900000000070000310000000107700367000000007807043c0000000004840436000000000064004b00001b1a0000c13d000000000005004b00000000033200190000002103300039000000090010008c0000000a4110011a0000000304400210000000010330008a00000000050304330000085d05500197000008640440021f0000086504400197000000000445019f000000000043043500001b210000213d0000000001020019000000000001042d0000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec0001043000060000000000020000000b02000039000000000202041a000100000002001d000000000002004b00001b950000613d000200000001001d00000001030000390000801006000039000600000003001d000000000030043f0000001001000039000000200010043f0000000001000414000007000010009c0000070001008041000000c0011002100000075d011001c700000000020600191bea1be50000040f000000010020019000001b8d0000613d000000000101043b000000000301041a000000400200043d000500000002001d000400000003001d0000000002320436000300000002001d000000000010043f0000000001000414000007000010009c0000070001008041000000c0011002100000070f011001c700008010020000391bea1be50000040f000000010020019000001b8d0000613d00008010060000390000000405000029000000000005004b0000000307000029000000000207001900001b6a0000613d000000000101043b00000000030000190000000002070019000000000401041a000000000242043600000001011000390000000103300039000000000053004b00001b640000413d000000050300002900000000013200490000001f011000390000083f021001970000000001320019000000000021004b000000000200003900000001020040390000070b0010009c000000020500002900001b8f0000213d000000010020019000001b8f0000c13d000000400010043f0000000002030433000000000002004b00001b840000613d0000000003000019000000050430021000000000047400190000000004040433000000000054004b00001b8b0000613d0000000103300039000000000023004b00001b7c0000413d0000000603000029000000010030003a00001ba60000413d000000010030006c000000010330003900001b3d0000413d00001b960000013d0000000601000029000000000001042d000000000100001900001bec000104300000083001000041000000000010043f0000004101000039000000040010043f000007690100004100001bec00010430000000400100043d00000044021000390000086603000041000000000032043500000024021000390000001c0300003900000000003204350000075a020000410000000000210435000000040210003900000020030000390000000000320435000007000010009c0000070001008041000000400110021000000762011001c700001bec000104300000083001000041000000000010043f0000001101000039000000040010043f000007690100004100001bec00010430000000000001042f000007000010009c00000700010080410000004001100210000007000020009c00000700020080410000006002200210000000000112019f0000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000709011001c700008010020000391bea1be50000040f000000010020019000001bc00000613d000000000101043b000000000001042d000000000100001900001bec0001043000000000050100190000000000200443000000050030008c00001bd00000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b00001bc80000413d000007000030009c000007000300804100000060013002100000000002000414000007000020009c0000070002008041000000c002200210000000000112019f00000867011001c700000000020500191bea1be50000040f000000010020019000001bdf0000613d000000000101043b000000000001042d000000000001042f00001be3002104210000000102000039000000000001042d0000000002000019000000000001042d00001be8002104230000000102000039000000000001042d0000000002000019000000000001042d00001bea0000043200001beb0001042e00001bec0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009f60000000000000000000000000000000000000000000000000000000000000a2a0000000000000000000000000000000000000000000000000000000000000a5e0000000000000000000000000000000000000000000000000000000000000a9200000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffc04875654761636861205469636b65742056320000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf4855455449583200000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000ffffffffffffffffbfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a532405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acebfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a5310200000000000000000000000000000000000020000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000093a80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c580fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81700fee93879a5e67f5411452c57c1bc6f494462a67847f16a8ae120e5ff78e8b9c300000002000000000000000000000000000000800000010000000000000000000000000000000000000000000000000000000000000000000000000070a0823000000000000000000000000000000000000000000000000000000000a476b73c00000000000000000000000000000000000000000000000000000000e5b8bdab00000000000000000000000000000000000000000000000000000000f4359ce400000000000000000000000000000000000000000000000000000000f94ab8f700000000000000000000000000000000000000000000000000000000f94ab8f800000000000000000000000000000000000000000000000000000000f98d06f000000000000000000000000000000000000000000000000000000000f4359ce500000000000000000000000000000000000000000000000000000000f929d63000000000000000000000000000000000000000000000000000000000e5b8bdac00000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000c87b56dc00000000000000000000000000000000000000000000000000000000c87b56dd00000000000000000000000000000000000000000000000000000000c8f35b5d00000000000000000000000000000000000000000000000000000000e086e5ec00000000000000000000000000000000000000000000000000000000a476b73d00000000000000000000000000000000000000000000000000000000b88d4fde00000000000000000000000000000000000000000000000000000000bdd7006d00000000000000000000000000000000000000000000000000000000955112cc00000000000000000000000000000000000000000000000000000000997e84d100000000000000000000000000000000000000000000000000000000997e84d2000000000000000000000000000000000000000000000000000000009cbe5efd00000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000955112cd0000000000000000000000000000000000000000000000000000000095d89b410000000000000000000000000000000000000000000000000000000099646b1300000000000000000000000000000000000000000000000000000000821628310000000000000000000000000000000000000000000000000000000082162832000000000000000000000000000000000000000000000000000000008c65c81f000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000070a0823100000000000000000000000000000000000000000000000000000000715018a600000000000000000000000000000000000000000000000000000000747dff420000000000000000000000000000000000000000000000000000000047ce07cb0000000000000000000000000000000000000000000000000000000059728bbe000000000000000000000000000000000000000000000000000000006352211d000000000000000000000000000000000000000000000000000000006352211e000000000000000000000000000000000000000000000000000000006a14dffd000000000000000000000000000000000000000000000000000000006ddfe3390000000000000000000000000000000000000000000000000000000059728bbf000000000000000000000000000000000000000000000000000000005bbf7491000000000000000000000000000000000000000000000000000000005d6f2f790000000000000000000000000000000000000000000000000000000054a8fb460000000000000000000000000000000000000000000000000000000054a8fb47000000000000000000000000000000000000000000000000000000005789d9dd00000000000000000000000000000000000000000000000000000000596d7a680000000000000000000000000000000000000000000000000000000047ce07cc000000000000000000000000000000000000000000000000000000004e4a47c40000000000000000000000000000000000000000000000000000000052a5f1f80000000000000000000000000000000000000000000000000000000023b872dc000000000000000000000000000000000000000000000000000000003f1a91fd000000000000000000000000000000000000000000000000000000003f1a91fe00000000000000000000000000000000000000000000000000000000424e3e100000000000000000000000000000000000000000000000000000000042842e0e0000000000000000000000000000000000000000000000000000000023b872dd0000000000000000000000000000000000000000000000000000000024ac60a7000000000000000000000000000000000000000000000000000000002f36663700000000000000000000000000000000000000000000000000000000081812fb00000000000000000000000000000000000000000000000000000000081812fc00000000000000000000000000000000000000000000000000000000095ea7b3000000000000000000000000000000000000000000000000000000001aa3396d00000000000000000000000000000000000000000000000000000000006f48cc0000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000002000000080000000000000000008c379a0000000000000000000000000000000000000000000000000000000004c656e677468206d69736d617463680000000000000000000000000000000000000000000000000000000000000000000000006400000080000000000000000002000000000000000000000000000000000000400000000000000000000000004d24c043f76453a6d1681b9eccfa5446cae9997ccfc84dfb1090f03160b00c5051347c61d80ecc7fa2679c0a85405fc4d437684e0fe2902b07742085a1b3c2f5000000ff0000000000000000000000000000000000000000000000000000000052616e646f6d6e65737320616c726561647920726571756573746564000000000000000000000000000000000000000000000064000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000082ee990c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000b88c914800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff7f19cb825f0000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000044000000000000000000000000ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000587602b661da57eff43c58d2ebb4b7c66d08862f786faf29f390136b3309a128496e73756666696369656e742066656500000000000000000000000000000000546f6f206561726c7900000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffe0455448207769746864726177616c206661696c65640000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff1f23324431413132000000000000000000000000000000000000000000000000002335433245313700000000000000000000000000000000000000000000000000234133344532410000000000000000000000000000000000000000000000000023464637463530000000000000000000000000000000000000000000000000002346464437303000000000000000000000000000000000000000000000000000233041313932460000000000000000000000000000000000000000000000000023313732413435000000000000000000000000000000000000000000000000002333303343353500000000000000000000000000000000000000000000000000233443384246350000000000000000000000000000000000000000000000000023363446464441000000000000000000000000000000000000000000000000002332443142324300000000000000000000000000000000000000000000000000233543323735310000000000000000000000000000000000000000000000000023393433443743000000000000000000000000000000000000000000000000002345383535413300000000000000000000000000000000000000000000000000233030464644310000000000000000000000000000000000000000000000000023324132443539000000000000000000000000000000000000000000000000002333423346374100000000000000000000000000000000000000000000000000233444353239370000000000000000000000000000000000000000000000000023364236454237000000000000000000000000000000000000000000000000002331354643394200000000000000000000000000000000000000000000000000233042324232360000000000000000000000000000000000000000000000000023313634423435000000000000000000000000000000000000000000000000002331453642363200000000000000000000000000000000000000000000000000233241414138410000000000000000000000000000000000000000000000000023464645313632000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003c67207472616e73666f726d3d227363616c6528353029223e000000000000006c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223c7376672077696474683d2235303022206865696768743d223530302220786d68743d2231222066696c6c3d22000000000000000000000000000000000000003c7265637420783d22322220793d2230222077696474683d2231222068656967222f3e00000000000000000000000000000000000000000000000000000000003c7265637420783d22332220793d2230222077696474683d22312220686569673c7265637420783d22342220793d2230222077696474683d22312220686569673c7265637420783d22352220793d2230222077696474683d22312220686569673c7265637420783d22362220793d2230222077696474683d22312220686569673c7265637420783d22372220793d2230222077696474683d22312220686569673c7265637420783d22312220793d2231222077696474683d22312220686569673c7265637420783d22322220793d2231222077696474683d22312220686569673c7265637420783d22332220793d2231222077696474683d22312220686569673c7265637420783d22342220793d2231222077696474683d22312220686569673c7265637420783d22352220793d2231222077696474683d22312220686569673c7265637420783d22362220793d2231222077696474683d22312220686569673c7265637420783d22372220793d2231222077696474683d22312220686569673c7265637420783d22382220793d2231222077696474683d22312220686569673c7265637420783d22302220793d2232222077696474683d22312220686569673c7265637420783d22312220793d2232222077696474683d22312220686569673c7265637420783d22322220793d2232222077696474683d22312220686569673c7265637420783d22332220793d2232222077696474683d22312220686569673c7265637420783d22342220793d2232222077696474683d22312220686569673c7265637420783d22352220793d2232222077696474683d22312220686569673c7265637420783d22362220793d2232222077696474683d22312220686569673c7265637420783d22372220793d2232222077696474683d22312220686569673c7265637420783d22382220793d2232222077696474683d22312220686569673c7265637420783d22392220793d2232222077696474683d22312220686569673c7265637420783d22302220793d2233222077696474683d22312220686569673c7265637420783d22312220793d2233222077696474683d22312220686569673c7265637420783d22322220793d2233222077696474683d22312220686569673c7265637420783d22372220793d2233222077696474683d22312220686569673c7265637420783d22382220793d2233222077696474683d22312220686569673c7265637420783d22392220793d2233222077696474683d22312220686569673c7265637420783d22302220793d2234222077696474683d22312220686569673c7265637420783d22312220793d2234222077696474683d22312220686569673c7265637420783d22322220793d2234222077696474683d22312220686569673c7265637420783d22372220793d2234222077696474683d22312220686569673c7265637420783d22382220793d2234222077696474683d22312220686569673c7265637420783d22392220793d2234222077696474683d22312220686569673c7265637420783d22302220793d2235222077696474683d22312220686569673c7265637420783d22312220793d2235222077696474683d22312220686569673c7265637420783d22322220793d2235222077696474683d22312220686569673c7265637420783d22372220793d2235222077696474683d22312220686569673c7265637420783d22382220793d2235222077696474683d22312220686569673c7265637420783d22392220793d2235222077696474683d22312220686569673c7265637420783d22302220793d2236222077696474683d22312220686569673c7265637420783d22312220793d2236222077696474683d22312220686569673c7265637420783d22322220793d2236222077696474683d22312220686569673c7265637420783d22372220793d2236222077696474683d22312220686569673c7265637420783d22382220793d2236222077696474683d22312220686569673c7265637420783d22392220793d2236222077696474683d22312220686569673c7265637420783d22302220793d2237222077696474683d22312220686569673c7265637420783d22312220793d2237222077696474683d22312220686569673c7265637420783d22322220793d2237222077696474683d22312220686569673c7265637420783d22332220793d2237222077696474683d22312220686569673c7265637420783d22342220793d2237222077696474683d22312220686569673c7265637420783d22352220793d2237222077696474683d22312220686569673c7265637420783d22362220793d2237222077696474683d22312220686569673c7265637420783d22372220793d2237222077696474683d22312220686569673c7265637420783d22382220793d2237222077696474683d22312220686569673c7265637420783d22392220793d2237222077696474683d22312220686569673c7265637420783d22312220793d2238222077696474683d22312220686569673c7265637420783d22322220793d2238222077696474683d22312220686569673c7265637420783d22332220793d2238222077696474683d22312220686569673c7265637420783d22342220793d2238222077696474683d22312220686569673c7265637420783d22352220793d2238222077696474683d22312220686569673c7265637420783d22362220793d2238222077696474683d22312220686569673c7265637420783d22372220793d2238222077696474683d22312220686569673c7265637420783d22382220793d2238222077696474683d22312220686569673c7265637420783d22322220793d2239222077696474683d22312220686569673c7265637420783d22332220793d2239222077696474683d22312220686569673c7265637420783d22342220793d2239222077696474683d22312220686569673c7265637420783d22352220793d2239222077696474683d22312220686569673c7265637420783d22362220793d2239222077696474683d22312220686569673c7265637420783d22372220793d2239222077696474683d22312220686569673c7265637420783d22332220793d2233222077696474683d22312220686569673c7265637420783d22342220793d2233222077696474683d22312220686569673c7265637420783d22352220793d2233222077696474683d22312220686569673c7265637420783d22362220793d2233222077696474683d22312220686569673c7265637420783d22332220793d2234222077696474683d22312220686569673c7265637420783d22342220793d2234222077696474683d22312220686569673c7265637420783d22352220793d2234222077696474683d22312220686569673c7265637420783d22362220793d2234222077696474683d22312220686569673c7265637420783d22332220793d2235222077696474683d22312220686569673c7265637420783d22342220793d2235222077696474683d22312220686569673c7265637420783d22352220793d2235222077696474683d22312220686569673c7265637420783d22362220793d2235222077696474683d22312220686569673c7265637420783d22332220793d2236222077696474683d22312220686569673c7265637420783d22342220793d2236222077696474683d22312220686569673c7265637420783d22352220793d2236222077696474683d22312220686569673c7265637420783d22362220793d2236222077696474683d22312220686569673c2f673e000000000000000000000000000000000000000000000000000000003c2f7376673e0000000000000000000000000000000000000000000000000000646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000426574746572206c75636b206e6578742074696d65210000000000000000000057696e6e65722100000000000000000000000000000000000000000000000000416374697665207469636b6574000000000000000000000000000000000000007b226e616d65223a20224875654761636861205469636b657420230000000000222c20226465736372697074696f6e223a202200000000000000000000000000202d205765656b20230000000000000000000000000000000000000000000000222c2022696d616765223a2022000000000000000000000000000000000000002022537461747573222c202276616c7565223a20220000000000000000000000222c202261747472696275746573223a205b7b2274726169745f74797065223a65223a2022000000000000000000000000000000000000000000000000000000227d2c207b2274726169745f74797065223a20225765656b222c202276616c75227d5d7d00000000000000000000000000000000000000000000000000000000646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000546f6b656e20646f6573206e6f742065786973740000000000000000000000004e6f74207469636b6574206f776e657200000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c314552433732313a20617070726f766520746f2063616c6c657200000000000000000000000000000000000000000000000000000000000000000000000001518054657374696e67206d6f6465206e6f7420656e61626c656400000000000000000000000000000000000000000000000000000020000000000000000000000000c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b00000000000000000000000000000000000000e000000080000000000000000000000000000000000000000000000000000000800000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a2061646472657373207a65726f206973206e6f7420612076616c6964206f776e65720000000000000000000000000000000000000000000000ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace00000000000000000000000000000000000000000000000000000000001e84800000000000000000000000000000000000000060000000800000000000000000696f6e00000000000000000000000000000000000000000000000000000000004f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e6374000000000000000000000000000000000000008400000000000000000000000057726f6e672073657175656e6365206e756d626572000000000000000000000057696e6e657220616c726561647920647261776e000000000000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000ff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff00496e76616c69642077696e6e696e67207469636b657420696e6465780000000003fb57eb449654e24e1b240d3d06702cf79362a065d5c0323aee642d4702fa4b4e6f207469636b65747320736f6c6400000000000000000000000000000000004e6f2072616e646f6d6e65737320726571756573746564000000000000000000456e74726f70792061646472657373206e6f742073657400000000000000000000000000000000000000000000000000000000000000000000000000000f42401806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83f929d6300000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000e6689ff54066b592f85a9441ebb4a960b0be56b00ac16f014496f93d4d3356565375636365737300000000000000000000000000000000000000000000000000020000000000000000000000000000000000008000000000000000000000000050757263686173657320636c6f73656420666f72207468697320726f756e6400526566756e64206661696c656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf4552433732313a20746f6b656e20616c7265616479206d696e74656400000000150b7a02000000000000000000000000000000000000000000000000000000004552433732313a206d696e7420746f20746865207a65726f20616464726573734e487b71000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000060000000000000000000000000371dfd3ce9c287253fda2eb12211e88bc30c0d6bc09017a8bda6d439f03962cf496e636f72726563742045544820616d6f756e74000000000000000000000000496e76616c696420616d6f756e740000000000000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c006b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000004552433732313a20617070726f76652063616c6c6572206973206e6f7420746f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92572000000000000000000000000000000000000000000000000000000000000004552433732313a20617070726f76616c20746f2063757272656e74206f776e654552433732313a20696e76616c696420746f6b656e204944000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000005b5e139f0000000000000000000000000000000000000000000000000000000080ac58cd00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffe072206f7220617070726f766564000000000000000000000000000000000000004552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6563656976657220696d706c656d656e74657200000000000000000000000000004552433732313a207472616e7366657220746f206e6f6e2045524337323152656e696e6720616c6c6f77656400000000000000000000000000000000000000005469636b6574732061726520736f756c626f756e64202d206f6e6c792062757272657373000000000000000000000000000000000000000000000000000000004552433732313a207472616e7366657220746f20746865207a65726f206164646f776e65720000000000000000000000000000000000000000000000000000004552433732313a207472616e736665722066726f6d20696e636f72726563742096834ad3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffff0000000000000000000000000000000000000000000000000000000080000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000ffffffffffffff9f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000bffffffffffffffd00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3d000000000000000000000000000000000000000000000000000000000000000000000000184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000000000000000000000000000000000000000004ee2d6d415b85acef810000000000000000000000000000000000000000000004ee2d6d415b85acef80ffffffff000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000005f5e10030313233343536373839616263646566000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000546f6b656e206e6f7420666f756e6420696e20616e7920726f756e64000000000200000200000000000000000000000000000000000000000000000000000000415cbed00e43fc2d297bd20fcc0aa734149ecb7a393c538c2922249f5ae92f3c
[ Download: CSV Export ]
[ 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.