Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
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:
PRESALEZKSYNC
Compiler Version
v0.8.20+commit.a1b79de6
ZkSolc Version
v1.5.11
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Prima Nocta pragma solidity ^0.8.20; import "./interfaces/IThresholdERC1155.sol"; import "./interfaces/INftVault.sol"; import "./interfaces/IAggregatorV3.sol"; import "./interfaces/IUniswapV3PoolState.sol"; import "./interfaces/IMagicSwapV2Router.sol"; import "./interfaces/INftVaultFactory.sol"; import "./interfaces/IMagicSwapUniswapV2Factory.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; // pyth price oracle aggregator for abstract chain import { IPyth } from "@pythnetwork/pyth-sdk-solidity/IPyth.sol"; import { PythAggregatorV3 } from "@pythnetwork/pyth-sdk-solidity/PythAggregatorV3.sol"; contract PRESALEZKSYNC { struct AltPairInfo { address lpaddress; address vaultaddress; bool approved; uint256 tokenid; string symbol; } struct PresaleInfo { bool readyToGraduate; bool graduated; uint256 targetBaseTokenToRaise; uint256 presalePrice; uint256 returnForOne; uint256 baseTokenRaised; uint256 totalsupply; address paircoin; uint256 amounttolp; uint256 amounttosell; IThresholdERC1155 memecoin; } IERC20 public baseToken; address public owner; address public stakingRewards; uint256 public constant MAX_TOTAL_SUPPLY = 1_000_000_000_000; // 1 trillion uint256 public constant MIN_TOTAL_SUPPLY = 1_000_000_000; // 1 billion uint256 public TARGETMCAP = 42000; uint256[] IDALWAYSZERO; mapping(address => PresaleInfo) public presaleInfo; mapping(address => AltPairInfo) public approvedpaircoins; INftVaultFactory factory; IMagicSwapV2Router router; IMagicSwapUniswapV2Factory msUniFactory; IThresholdERC1155 memecoinImplementation; address public pythPriceFeedsContract = 0x47F2A9BDAd52d65b66287253cf5ca0D2b763b486; bytes32 public ethFeedId; event MemeMade(string name, string symbol, string uri, uint256 amount, PresaleInfo presaleinfo); event Buy(address indexed memeCoinAddress, address indexed buyer, uint256 amountNFT, uint256 amountBaseToken); event Sell(address indexed memeCoinAddress, address indexed seller, uint256 amountNFT, uint256 amountBaseToken); event GraduationReady(address indexed memeCoinAddress, PresaleInfo presaleinfo); event Graduation(address indexed lpaddress, PresaleInfo presaleinfo); event PairCoinApproved(address indexed _collectionAddress, AltPairInfo alt); event PairCoinRemoved(address indexed _collectionAddress); constructor( IERC20 _baseToken, address _stakingRewards, INftVaultFactory _factory, IMagicSwapV2Router _router, IMagicSwapUniswapV2Factory _msufactory, IThresholdERC1155 _memecoinImplementation, address _pythPriceFeed, bytes32 _ethFeedId ) { owner = msg.sender; baseToken = _baseToken; IDALWAYSZERO.push(0); stakingRewards = _stakingRewards; factory = _factory; router = _router; msUniFactory = _msufactory; memecoinImplementation = _memecoinImplementation; pythPriceFeedsContract = _pythPriceFeed; ethFeedId = _ethFeedId; } modifier onlyOwner() { require(msg.sender == owner, 'not owner'); _; } function startPresale( string memory _name, string memory _symbol, uint256 _totalsupply, string memory _uri, uint256[] memory _thresholds, bytes[] calldata priceUpdateData ) external returns (address) { require(_totalsupply >= MIN_TOTAL_SUPPLY, "Total supply too low - min 10 million"); require(_totalsupply <= MAX_TOTAL_SUPPLY, "Total supply too high - max 1 trillion"); IThresholdERC1155 memecoin = IThresholdERC1155(Clones.clone(address(memecoinImplementation))); memecoin.initialize(msg.sender, stakingRewards, _totalsupply, _name, _symbol, _uri, _thresholds); ( uint amountmemecointolp, uint amountmemecointosell, uint baseTokenNeededToFill ) = _calculateAmounts(_totalsupply, address(0), priceUpdateData); uint adjustment = baseTokenNeededToFill % amountmemecointosell; PresaleInfo memory info; info.amounttolp = amountmemecointolp; info.amounttosell = amountmemecointosell; info.totalsupply = _totalsupply; info.memecoin = memecoin; info.targetBaseTokenToRaise = baseTokenNeededToFill - adjustment; info.presalePrice = info.targetBaseTokenToRaise / amountmemecointosell; info.returnForOne = 0; info.paircoin = address(baseToken); presaleInfo[address(memecoin)] = info; emit MemeMade(_name, _symbol, _uri, _totalsupply, info); return address(memecoin); } function startPresale1155(string memory _name, string memory _symbol, string memory _uri, address _paircoin1155, uint256[] memory _thresholds, bytes[] calldata priceUpdateData) external returns (address) { uint256 _totalsupply = 1000000000; AltPairInfo memory alt = approvedpaircoins[_paircoin1155]; require(alt.approved, "not approved"); IThresholdERC1155 memecoin = IThresholdERC1155(Clones.clone(address(memecoinImplementation))); memecoin.initialize(msg.sender, stakingRewards, _totalsupply, _name, _symbol, _uri, _thresholds); (uint amountmemecointolp, uint amountmemecointosell, uint paircoinneededtofill) = _calculateAmounts(_totalsupply, _paircoin1155, priceUpdateData); paircoinneededtofill = paircoinneededtofill / 1e18; PresaleInfo memory info; info.amounttolp = amountmemecointolp; info.amounttosell = amountmemecointosell; info.graduated = false; info.totalsupply = _totalsupply; info.memecoin = memecoin; info.paircoin = _paircoin1155; if (paircoinneededtofill > _totalsupply) { // this tweaks the targetBaseTokenToRaise so it is evenly divisable by the presalePrice info.presalePrice = paircoinneededtofill / amountmemecointosell; info.returnForOne = 0; uint adjustment = paircoinneededtofill % amountmemecointosell; info.targetBaseTokenToRaise = paircoinneededtofill - adjustment; } else { info.returnForOne = amountmemecointosell / paircoinneededtofill; info.presalePrice = 0; uint adjustment = amountmemecointosell % paircoinneededtofill; info.targetBaseTokenToRaise = paircoinneededtofill - adjustment; } presaleInfo[address(memecoin)] = info; emit MemeMade(_name, _symbol, _uri, _totalsupply, info); return address(memecoin); } function buyPresale(address _memeCoinAddress, uint256 _amountNftToBuy) external { PresaleInfo memory info = presaleInfo[_memeCoinAddress]; require(!info.readyToGraduate, "already ready to graduate"); (uint totalamountbaseToken, uint tax) = getQuote(_memeCoinAddress, _amountNftToBuy); // Check if purchase would exceed target and adjust if needed if (info.baseTokenRaised + totalamountbaseToken > info.targetBaseTokenToRaise) { totalamountbaseToken = info.targetBaseTokenToRaise - info.baseTokenRaised; _amountNftToBuy = totalamountbaseToken / info.presalePrice; } if (info.paircoin == address(baseToken)) { bool chaching = IERC20(info.paircoin).transferFrom(msg.sender, address(this), totalamountbaseToken + tax); bool taxed = IERC20(info.paircoin).transfer(stakingRewards, tax); require(chaching && taxed, "buy failed"); presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised + totalamountbaseToken; info.memecoin.safeTransferFrom(address(this), msg.sender, 0, _amountNftToBuy, ""); } else { IERC1155(info.paircoin).safeTransferFrom(msg.sender, address(this), 0, totalamountbaseToken, ""); presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised + totalamountbaseToken; info.memecoin.safeTransferFrom(address(this), msg.sender, 0, _amountNftToBuy, ""); } // Mark as ready to graduate if target is met if (info.baseTokenRaised + totalamountbaseToken >= info.targetBaseTokenToRaise) { _graduate(_memeCoinAddress); } emit Buy(_memeCoinAddress, msg.sender, _amountNftToBuy, totalamountbaseToken); } function sellPresale(address _memeCoinAddress, uint256 _sellAmountNFT) external { PresaleInfo memory info = presaleInfo[_memeCoinAddress]; require(!info.readyToGraduate, "already graduated"); (uint baseTokenToReturn, uint tax) = getQuote(_memeCoinAddress, _sellAmountNFT); require(baseTokenToReturn <= info.baseTokenRaised, "plunge protection"); if (info.paircoin == address(baseToken)) { bool sendtouser = IERC20(info.paircoin).transfer(msg.sender, baseTokenToReturn - tax); bool taxed = IERC20(info.paircoin).transfer(stakingRewards, tax); require(sendtouser && taxed, "sell failed"); presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised - baseTokenToReturn; info.memecoin.safeTransferFrom(msg.sender, address(this), 0, _sellAmountNFT, ""); } else { info.memecoin.safeTransferFrom(msg.sender, address(this), 0, _sellAmountNFT, ""); presaleInfo[_memeCoinAddress].baseTokenRaised = info.baseTokenRaised - baseTokenToReturn; IERC1155(info.paircoin).safeTransferFrom(address(this), msg.sender, 0, baseTokenToReturn, ""); } emit Sell(_memeCoinAddress, msg.sender, _sellAmountNFT, baseTokenToReturn); } function _graduateBaseTokenPool(PresaleInfo memory info, INftVault vaultMemeCoin, IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataMemeCoin) internal returns (address lpaddy) { IERC20(info.paircoin).approve(address(router), info.baseTokenRaised); (uint256 amountA, uint256 amountB, uint256 lpAmount) = router.addLiquidityNFT( vaultdataMemeCoin, address(info.paircoin), info.baseTokenRaised, info.baseTokenRaised, address(0), block.timestamp ); require(lpAmount > 0, "something bad happened"); lpaddy = msUniFactory.getPair(info.paircoin, address(vaultMemeCoin)); } function _graduate1155Pool(PresaleInfo memory info, INftVault vaultMemeCoin, IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataMemeCoin) internal returns (address lpaddy) { IERC1155(info.paircoin).setApprovalForAll(address(router), true); AltPairInfo memory alt = approvedpaircoins[info.paircoin]; INftVault vaultPaircoin = INftVault(alt.vaultaddress); address[] memory collection = new address[](1); uint256[] memory amount = new uint256[](1); collection[0] = info.paircoin; // cd.addr; amount[0] = info.baseTokenRaised; IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataPairCoin = IMagicSwapV2Router.NftVaultLiquidityData( vaultPaircoin, collection, IDALWAYSZERO, amount ); (uint256 amountA, uint256 amountB,) = router.addLiquidityNFTNFT( vaultdataMemeCoin, // shitcoin vaultdataPairCoin, // pair coin info.memecoin.balanceOf(address(this), 0), info.baseTokenRaised, address(0), block.timestamp ); lpaddy = msUniFactory.getPair(address(vaultPaircoin), address(vaultMemeCoin)); } function _graduate(address _memeCoinAddress) internal { PresaleInfo storage info = presaleInfo[_memeCoinAddress]; require(!info.readyToGraduate, "already ready to graduate"); require(info.baseTokenRaised >= info.targetBaseTokenToRaise, "target not met"); // Mark the presale as ready to graduate info.readyToGraduate = true; emit GraduationReady(_memeCoinAddress, info); } function graduatePresale(address _memeCoinAddress) external returns (address lpaddy) { require( presaleInfo[_memeCoinAddress].readyToGraduate && !presaleInfo[_memeCoinAddress].graduated, "not ready to graduate or already graduated" ); PresaleInfo memory info = presaleInfo[_memeCoinAddress]; presaleInfo[_memeCoinAddress].graduated = true; info.memecoin.setTradingOpen(true); (INftVault vaultMemeCoin, IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataMemeCoin) = _createMemeCoinVault(_memeCoinAddress); info.memecoin.setApprovalForAll(address(router), true); if (info.paircoin == address(baseToken)) { lpaddy = _graduateBaseTokenPool(info, vaultMemeCoin, vaultdataMemeCoin); } else { lpaddy = _graduate1155Pool(info, vaultMemeCoin, vaultdataMemeCoin); } require(lpaddy != address(0), "lp failed"); emit Graduation(lpaddy, presaleInfo[_memeCoinAddress]); } function _createMemeCoinVault(address _memeCoinAddress) internal returns (INftVault, IMagicSwapV2Router.NftVaultLiquidityData memory) { // creates a magicswap vault for the presaled 1155 address[] memory collection = new address[](1); uint256[] memory amount = new uint256[](1); INftVault.CollectionData[] memory vaultCD = new INftVault.CollectionData[](1); INftVault.CollectionData memory vaultCDData = INftVault.CollectionData(address(_memeCoinAddress), INftVault.NftType.ERC1155, false, IDALWAYSZERO); vaultCD[0] = vaultCDData; collection[0] = _memeCoinAddress; amount[0] = presaleInfo[_memeCoinAddress].memecoin.balanceOf(address(this), 0); bool exists = factory.exists(vaultCD); INftVault vault; if (exists) { vault = factory.getVault(vaultCD); } else { vault = factory.createVault(vaultCD); } IMagicSwapV2Router.NftVaultLiquidityData memory vaultdata = IMagicSwapV2Router.NftVaultLiquidityData( vault, collection, IDALWAYSZERO, amount ); return (vault, vaultdata); } function getQuote(address _memeCoinAddress, uint256 _amountOfNftToBuy) public view returns(uint totalbaseToken, uint tax ){ PresaleInfo memory info = presaleInfo[_memeCoinAddress]; if (info.presalePrice > 0) { totalbaseToken = info.presalePrice * _amountOfNftToBuy; tax = totalbaseToken / 200; // 0.5% } else { require(_amountOfNftToBuy % info.returnForOne == 0, "wrong multiple"); totalbaseToken = _amountOfNftToBuy / info.returnForOne; require(totalbaseToken > 0, 'xxxxx'); tax = 0; } } function getBaseTokenPriceUSD(bytes[] calldata priceUpdateData) public payable returns (uint baseTokenPrice) { // Get the latest BASE_TOKEN/USD price from the Pyth ETH/USD oracle PythAggregatorV3 ethAggregator = new PythAggregatorV3( pythPriceFeedsContract, ethFeedId ); //update price data using gas fees if the data is stale IPyth pyth = IPyth(pythPriceFeedsContract); uint value = pyth.getUpdateFee(priceUpdateData); pyth.updatePriceFeeds{ value: value }(priceUpdateData); (, int256 answer, , , ) = ethAggregator.latestRoundData(); // Convert from answers's 8 decimals to 6 decimals baseTokenPrice = uint256(answer) / 100; } function _calculateAmounts(uint256 _totalsupply, address _paircoin1155, bytes[] calldata priceUpdateData) internal returns (uint256, uint256, uint256) { require(_totalsupply >= MIN_TOTAL_SUPPLY, "Min 1B"); require(_totalsupply <= MAX_TOTAL_SUPPLY, "Max 1T"); require(_totalsupply % 1000 == 0, "Must be divisible by 1000"); // Calculate initial amount after staking rewards (10%) uint256 amount = (_totalsupply * 90) / 100; // Calculate amounts for LP and presale (50/50 split) uint256 amountmemecointolp = amount / 2; uint256 amountmemecointosell = amount / 2; uint256 baseTokenNeededToFill; if (_paircoin1155 == address(0)) { baseTokenNeededToFill = calculateBaseTokenNeededForTargetMarketCap( TARGETMCAP * 1e6, // $42k total target amountmemecointolp, getBaseTokenPriceUSD(priceUpdateData), 18 ); } else { baseTokenNeededToFill = calculateBaseTokenNeededForTargetMarketCap( TARGETMCAP * 1e6, amountmemecointolp, getAltPairCoinPriceUSD(_paircoin1155, priceUpdateData), 18 // Assuming the ERC1155 are using 18 decimals ); } require(baseTokenNeededToFill > 0, "bad amounts"); return (amountmemecointolp, amountmemecointosell, baseTokenNeededToFill); } function getAltPairCoinPriceUSD(address _altcoin, bytes[] calldata priceUpdateData) public returns(uint256) { AltPairInfo memory alt = approvedpaircoins[_altcoin]; require(alt.approved, "Pair not approved"); uint256 baseTokenBal = baseToken.balanceOf(alt.lpaddress); uint256 altPairBal = IERC20(alt.vaultaddress).balanceOf(alt.lpaddress); require(altPairBal > 0, "No liquidity"); uint256 altPairValInBaseToken = (baseTokenBal * 1e18) / altPairBal; uint256 baseTokenPriceUSD = getBaseTokenPriceUSD(priceUpdateData); return (altPairValInBaseToken * baseTokenPriceUSD) / 1e18; } function addAltPair(address _ca, AltPairInfo memory _alp) external onlyOwner { require(_ca != address(0), "Zero address not allowed"); require(_alp.lpaddress != address(0), "Invalid LP address"); require(_alp.vaultaddress != address(0), "Invalid vault address"); require(_alp.approved, "Pair must be approved"); approvedpaircoins[_ca] = _alp; emit PairCoinApproved(_ca, _alp); } function removePairCoin(address _ca) external onlyOwner { require(approvedpaircoins[_ca].approved, "Pair not found"); delete approvedpaircoins[_ca]; emit PairCoinRemoved(_ca); } function changeTargetMcap(uint256 _mcapindollars) external onlyOwner { require(_mcapindollars > 0, "mcap must be greater than 0"); TARGETMCAP = _mcapindollars; } function changeOwner(address _newowner) external onlyOwner { require(_newowner != address(0), "new owner is the zero address"); owner = _newowner; } function calculateBaseTokenNeededForTargetMarketCap( uint256 targetMcapUSD, // $42k in 6 decimals uint256 lpTokenAmount, uint256 pairPriceUSD, // Price in 6 decimals uint256 pairDecimals ) internal pure returns (uint256) { require(pairPriceUSD > 0, "Invalid price"); // We want half the target for each side (presale/LP) uint256 valuePerSideUSD = targetMcapUSD / 2; // $21k in 6 decimals // Calculate pair tokens needed for one side uint256 pairTokensForOneSide = (valuePerSideUSD * (10 ** pairDecimals)) / pairPriceUSD; // Double it (same amount needed for both presale and LP) return pairTokensForOneSide * 2; } function ceil(uint a, uint m) internal pure returns (uint r) { return (a + m - 1) / m * m; } function onERC1155Received( address, address, uint256, uint256, bytes calldata ) external virtual returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes calldata ) external virtual returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; interface IThresholdERC1155 { // Events event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 amount); event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] amounts); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); // ERC1155 core functions function setApprovalForAll(address operator, bool approved) external; function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; function balanceOf(address account, uint256 id) external view returns (uint256); function balanceOfBatch(address[] calldata owners, uint256[] calldata ids) external view returns (uint256[] memory); function isApprovedForAll(address owner, address operator) external view returns (bool); function supportsInterface(bytes4 interfaceId) external view returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function uri(uint256 id) external view returns (string memory); // Additional view functions function totalBalanceOf(address account) external view returns (uint256); function thresholds(uint256 index) external view returns (uint256); // Admin functions function initialize(address _creator, address _teamwallet, uint256 _totalSupply, string memory _name, string memory _symbol, string memory baseURI, uint256[] memory _thresholds) external; function setTradingOpen(bool _x) external; // State view functions function initialized() external view returns (bool); function creator() external view returns (address); function presalefactory() external view returns (address); function tradingEnabled() external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @title Vault contract for wrapping NFTs (ERC721/ERC1155) to ERC20 interface INftVault { enum NftType { ERC721, ERC1155 } /// @notice Vault configuration struct that specifies which NFTs are accepted in vault. /// @param addr address of nft contract /// @param nftType standard that NFT supports { ERC721, ERC1155 } /// @param allowAllIds if true, all tokens are allowed in the vault. If false, tokenIds must be /// listed one by one. /// @param tokenIds list of tokens supported by vault. If allowAllIds is true, list must be empty. struct CollectionData { address addr; NftType nftType; bool allowAllIds; uint256[] tokenIds; } /// @notice Struct for allowed tokens. Stores data in an optimized way to read it in vault. /// @param tokenIds mapping from tokenid to is-allowed /// @param tokenIdList list of all tokens that are allowed /// @param allowAllIds if true, all tokens are allowed struct AllowedTokenIds { mapping(uint256 => bool) tokenIds; uint256[] tokenIdList; bool allowAllIds; } /// @notice Emitted during initiation when collection added to allowed list /// @param collection collection details event CollectionAllowed(CollectionData collection); /// @notice Emitted on depositing NFT to vault /// @param to address that gets vault ERC20 tokens /// @param collection NFT address that is deposited /// @param tokenId token id that is deposited /// @param amount amount of token that is deposited, for ERC721 always 1 event Deposit(address indexed to, address indexed collection, uint256 tokenId, uint256 amount); /// @notice Emitted on withdrawing NFT from vault /// @param to address that gets withdrawn NFTs /// @param collection NFT address that is withdrawn /// @param tokenId token id that is withdrawn /// @param amount amount of token that is withdrawn, for ERC721 always 1 event Withdraw(address indexed to, address indexed collection, uint256 tokenId, uint256 amount); /// @dev Contract is already initialized error Initialized(); /// @dev Collection data is empty error InvalidCollections(); /// @dev Collection already added error DuplicateCollection(); /// @dev Token id is listed twice in CollectionData.tokenIds array error TokenIdAlreadySet(); /// @dev Token ids in CollectionData.tokenIds array are not sorted error TokenIdsMustBeSorted(); /// @dev ERC165 suggests that NFT is supporting ERC721 but ERC1155 is claimed error ExpectedERC721(); /// @dev ERC165 suggests that NFT is supporting ERC1155 but ERC721 is claimed error ExpectedERC1155(); /// @dev Collection does not support all token IDs however list of IDs is empty. /// CollectionData.tokenIds is empty and CollectionData.allowAllIds is false. error MissingTokenIds(); /// @dev CollectionData.tokenIds is not empty however Collection supports all token IDs. error TokenIdsMustBeEmpty(); /// @dev Token is not allowed in vault error DisallowedToken(); /// @dev Token amount is invalid eg. amount == 0 error WrongAmount(); /// @dev Token amount is invalid for ERC721, amount != 1 error WrongERC721Amount(); /// @dev Trying to interact with token that does not support ERC721 nor ERC1155 error UnsupportedNft(); /// @dev Token is allowed in vault but must not be error MustBeDisallowedToken(); /// @notice value of 1 token, including decimals function ONE() external view returns (uint256); /// @notice amount of token required for last NFT to be redeemed function LAST_NFT_AMOUNT() external view returns (uint256); /// @notice unique id of the vault generated using its configuration function VAULT_HASH() external view returns (bytes32); /// @notice Initialize Vault with collection config /// @dev Called by factory during deployment /// @param collections struct array of allowed collections and token IDs function init(CollectionData[] memory collections) external; /// @notice Returns hash of vault configuration /// @param collections struct array of allowed collections and token IDs /// @return configuration hash function hashVault(CollectionData[] memory collections) external pure returns (bytes32); /// @notice Returns balances of NFT deposited to the vault /// @param collectionAddr NFT address /// @param tokenId NFT's token ID /// @return amount amount of NFT deposited to the vault function balances(address collectionAddr, uint256 tokenId) external view returns (uint256 amount); /// @notice Get array of NFT addresses that are allowed to be deposited to the vault /// @dev Keep in mind that returned address(es) can be further restricted on token ID level /// @return collections array of NFT addresses that are allowed to be deposited to the vault function getAllowedCollections() external view returns (address[] memory collections); /// @return number of NFT addresses that are allowed to be deposited to the vault function getAllowedCollectionsLength() external view returns (uint256); /// @notice Get details of allowed collection /// @return struct with details of allowed collection function getAllowedCollectionData(address collectionAddr) external view returns (CollectionData memory); /// @notice Validates type of collection (ERC721 or ERC1155) /// @dev It uses ERC165 to check interface support. If support can not be detected without doubt, user input is trusted. /// @param collectionAddr NFT address /// @param nftType NFT type, ERC721 or ERC1155 /// @return validatedNftType returns validated enum NftType as uint256 function validateNftType(address collectionAddr, NftType nftType) external view returns (uint256 validatedNftType); /// @notice Returns if true token can be deposited /// @param collection NFT address /// @param tokenId NFT token ID /// @return true if allowed function isTokenAllowed(address collection, uint256 tokenId) external view returns (bool); /// @notice Returns balance of token sent to the vault /// @dev Reads balance of tokens freshy sent to the vault /// @param collection NFT address /// @param tokenId NFT token ID /// @return balance of sent token, for ERC721 it's always 1 function getSentTokenBalance(address collection, uint256 tokenId) external view returns (uint256); /// @notice Deposit NFT to vault /// @dev This low-level function should be called from a contract which performs important safety checks /// @param to address that gets minted ERC20 token /// @param collection address of deposited NFT /// @param tokenId token ID of deposited NFT /// @param amount amount of deposited NFT, for ERC721 it's always 1 /// @return amountMinted amount of minted ERC20 token function deposit(address to, address collection, uint256 tokenId, uint256 amount) external returns (uint256 amountMinted); /// @notice Deposit NFTs to vault /// @dev This low-level function should be called from a contract which performs important safety checks /// @param to address that gets minted ERC20 token /// @param collection array of addresses of deposited NFTs /// @param tokenId array of token IDs of deposited NFTs /// @param amount array if amounts of deposited NFTs, for ERC721 it's always 1 /// @return amountMinted amount of minted ERC20 token function depositBatch(address to, address[] memory collection, uint256[] memory tokenId, uint256[] memory amount) external returns (uint256 amountMinted); /// @notice Withdraw NFT from vault /// @dev This low-level function should be called from a contract which performs important safety checks /// @param to address that gets NFT /// @param collection address of NFT to withdraw /// @param tokenId token ID of NFT to withdraw /// @param amount amount of NFT to withdraw, for ERC721 it's always 1 /// @return amountBurned amount of burned ERC20 function withdraw(address to, address collection, uint256 tokenId, uint256 amount) external returns (uint256 amountBurned); /// @notice Withdraw NFTs from vault /// @dev This low-level function should be called from a contract which performs important safety checks /// @param to address that gets NFT /// @param collection array of addresses of NFTs to withdraw /// @param tokenId array of token IDs of NFTs to withdraw /// @param amount array of amounts of NFTs to withdraw, for ERC721 it's always 1 /// @return amountBurned amount of burned ERC20 function withdrawBatch(address to, address[] memory collection, uint256[] memory tokenId, uint256[] memory amount) external returns (uint256 amountBurned); /// @notice Allow anyone to withdraw tokens sent to this vault by accident /// Only unsupported NFTs can be skimmed. /// @param to address that gets NFT /// @param nftType NftType of skimmed NFT /// @param collection address of NFT to skim /// @param tokenId token ID of NFT to skim /// @param amount amount of NFT to skim, for ERC721 it's always 1 function skim(address to, NftType nftType, address collection, uint256 tokenId, uint256 amount) external; }
//SPDX-License-Identifier: Prima Nocta pragma solidity ^0.8.20; interface IUniswapV3PoolState { function slot0() external view returns ( uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked ); }
//SPDX-License-Identifier: Prima Nocta pragma solidity ^0.8.20; import "./INftVault.sol"; interface IMagicSwapV2Router { struct NftVaultLiquidityData { INftVault token; address[] collection; uint256[] tokenId; uint256[] amount; } function addLiquidityNFT( NftVaultLiquidityData calldata _vault, address _tokenB, uint256 _amountBDesired, uint256 _amountBMin, address _to, uint256 _deadline ) external returns (uint256 amountA, uint256 amountB, uint256 lpAmount); function addLiquidityNFTNFT( NftVaultLiquidityData calldata _vaultA, NftVaultLiquidityData calldata _vaultB, uint256 _amountAMin, uint256 _amountBMin, address _to, uint256 _deadline ) external returns (uint256 amountA, uint256 amountB, uint256 lpAmount); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); }
//SPDX-License-Identifier: Prima Nocta pragma solidity ^0.8.20; import "./INftVault.sol"; interface INftVaultFactory { function createVault(INftVault.CollectionData[] memory collections) external returns (INftVault vault); function getVault(INftVault.CollectionData[] memory collections) external view returns (INftVault vault); function getVaultLength() external view returns (uint256); function getVaultAt(uint256 index) external view returns (address); function exists(INftVault.CollectionData[] memory collections) external view returns (bool); }
//SPDX-License-Identifier: Prima Nocta pragma solidity ^0.8.20; interface IMagicSwapUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); }
//SPDX-License-Identifier: Prima Nocta pragma solidity ^0.8.20; interface IAggregatorV3 { function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// 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 pragma solidity ^0.8.0; import {PythStructs} from "./PythStructs.sol"; import {IPyth} from "./IPyth.sol"; // This interface is forked from the Zerolend Adapter found here: // https://github.com/zerolend/pyth-oracles/blob/master/contracts/PythAggregatorV3.sol // Original license found under licenses/zerolend-pyth-oracles.md /** * @title A port of the ChainlinkAggregatorV3 interface that supports Pyth price feeds * @notice This does not store any roundId information on-chain. Please review the code before using this implementation. * Users should deploy an instance of this contract to wrap every price feed id that they need to use. */ contract PythAggregatorV3 { bytes32 public priceId; IPyth public pyth; constructor(address _pyth, bytes32 _priceId) { priceId = _priceId; pyth = IPyth(_pyth); } // Wrapper function to update the underlying Pyth price feeds. Not part of the AggregatorV3 interface but useful. function updateFeeds(bytes[] calldata priceUpdateData) public payable { // Update the prices to the latest available values and pay the required fee for it. The `priceUpdateData` data // should be retrieved from our off-chain Price Service API using the `pyth-evm-js` package. // See section "How Pyth Works on EVM Chains" below for more information. uint fee = pyth.getUpdateFee(priceUpdateData); pyth.updatePriceFeeds{value: fee}(priceUpdateData); // refund remaining eth payable(msg.sender).call{value: address(this).balance}(""); } function decimals() public view virtual returns (uint8) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return uint8(-1 * int8(price.expo)); } function description() public pure returns (string memory) { return "A port of a chainlink aggregator powered by pyth network feeds"; } function version() public pure returns (uint256) { return 1; } function latestAnswer() public view virtual returns (int256) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return int256(price.price); } function latestTimestamp() public view returns (uint256) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return price.publishTime; } function latestRound() public view returns (uint256) { // use timestamp as the round id return latestTimestamp(); } function getAnswer(uint256) public view returns (int256) { return latestAnswer(); } function getTimestamp(uint256) external view returns (uint256) { return latestTimestamp(); } function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return ( _roundId, int256(price.price), price.publishTime, price.publishTime, _roundId ); } function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); roundId = uint80(price.publishTime); return ( roundId, int256(price.price), price.publishTime, price.publishTime, roundId ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[ERC]. */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the value of tokens of token type `id` owned by `account`. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the zero address. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155Received} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `value` amount. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155BatchReceived} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. * * Requirements: * * - `ids` and `values` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (proxy/Clones.sol) pragma solidity ^0.8.20; import {Errors} from "../utils/Errors.sol"; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[ERC-1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { return clone(implementation, 0); } /** * @dev Same as {xref-Clones-clone-address-}[clone], but with a `value` parameter to send native currency * to the new contract. * * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory) * to always have enough balance for new deployments. Consider exposing this function under a payable method. */ function clone(address implementation, uint256 value) internal returns (address instance) { if (address(this).balance < value) { revert Errors.InsufficientBalance(address(this).balance, value); } assembly ("memory-safe") { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create(value, 0x09, 0x37) } if (instance == address(0)) { revert Errors.FailedDeployment(); } } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { return cloneDeterministic(implementation, salt, 0); } /** * @dev Same as {xref-Clones-cloneDeterministic-address-bytes32-}[cloneDeterministic], but with * a `value` parameter to send native currency to the new contract. * * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory) * to always have enough balance for new deployments. Consider exposing this function under a payable method. */ function cloneDeterministic( address implementation, bytes32 salt, uint256 value ) internal returns (address instance) { if (address(this).balance < value) { revert Errors.InsufficientBalance(address(this).balance, value); } assembly ("memory-safe") { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create2(value, 0x09, 0x37, salt) } if (instance == address(0)) { revert Errors.FailedDeployment(); } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { assembly ("memory-safe") { let ptr := mload(0x40) mstore(add(ptr, 0x38), deployer) mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) mstore(add(ptr, 0x14), implementation) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) mstore(add(ptr, 0x58), salt) mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) predicted := and(keccak256(add(ptr, 0x43), 0x55), 0xffffffffffffffffffffffffffffffffffffffff) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt ) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol) pragma solidity ^0.8.20; /** * @dev Collection of common custom errors used in multiple contracts * * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. * It is recommended to avoid relying on the error API for critical functionality. * * _Available since v5.1._ */ library Errors { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error InsufficientBalance(uint256 balance, uint256 needed); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedCall(); /** * @dev The deployment failed. */ error FailedDeployment(); /** * @dev A necessary precompile is missing. */ error MissingPrecompile(address); }
// 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 // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// 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 ); }
{ "optimizer": { "enabled": true, "mode": "3" }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
[{"inputs":[{"internalType":"contract IERC20","name":"_baseToken","type":"address"},{"internalType":"address","name":"_stakingRewards","type":"address"},{"internalType":"contract INftVaultFactory","name":"_factory","type":"address"},{"internalType":"contract IMagicSwapV2Router","name":"_router","type":"address"},{"internalType":"contract IMagicSwapUniswapV2Factory","name":"_msufactory","type":"address"},{"internalType":"contract IThresholdERC1155","name":"_memecoinImplementation","type":"address"},{"internalType":"address","name":"_pythPriceFeed","type":"address"},{"internalType":"bytes32","name":"_ethFeedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memeCoinAddress","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBaseToken","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lpaddress","type":"address"},{"components":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.PresaleInfo","name":"presaleinfo","type":"tuple"}],"name":"Graduation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memeCoinAddress","type":"address"},{"components":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.PresaleInfo","name":"presaleinfo","type":"tuple"}],"name":"GraduationReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"components":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.PresaleInfo","name":"presaleinfo","type":"tuple"}],"name":"MemeMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_collectionAddress","type":"address"},{"components":[{"internalType":"address","name":"lpaddress","type":"address"},{"internalType":"address","name":"vaultaddress","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"indexed":false,"internalType":"struct PRESALEZKSYNC.AltPairInfo","name":"alt","type":"tuple"}],"name":"PairCoinApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_collectionAddress","type":"address"}],"name":"PairCoinRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memeCoinAddress","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountNFT","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBaseToken","type":"uint256"}],"name":"Sell","type":"event"},{"inputs":[],"name":"MAX_TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TARGETMCAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ca","type":"address"},{"components":[{"internalType":"address","name":"lpaddress","type":"address"},{"internalType":"address","name":"vaultaddress","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"internalType":"struct PRESALEZKSYNC.AltPairInfo","name":"_alp","type":"tuple"}],"name":"addAltPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedpaircoins","outputs":[{"internalType":"address","name":"lpaddress","type":"address"},{"internalType":"address","name":"vaultaddress","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"},{"internalType":"uint256","name":"_amountNftToBuy","type":"uint256"}],"name":"buyPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newowner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mcapindollars","type":"uint256"}],"name":"changeTargetMcap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethFeedId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_altcoin","type":"address"},{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"getAltPairCoinPriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"getBaseTokenPriceUSD","outputs":[{"internalType":"uint256","name":"baseTokenPrice","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"},{"internalType":"uint256","name":"_amountOfNftToBuy","type":"uint256"}],"name":"getQuote","outputs":[{"internalType":"uint256","name":"totalbaseToken","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"}],"name":"graduatePresale","outputs":[{"internalType":"address","name":"lpaddy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleInfo","outputs":[{"internalType":"bool","name":"readyToGraduate","type":"bool"},{"internalType":"bool","name":"graduated","type":"bool"},{"internalType":"uint256","name":"targetBaseTokenToRaise","type":"uint256"},{"internalType":"uint256","name":"presalePrice","type":"uint256"},{"internalType":"uint256","name":"returnForOne","type":"uint256"},{"internalType":"uint256","name":"baseTokenRaised","type":"uint256"},{"internalType":"uint256","name":"totalsupply","type":"uint256"},{"internalType":"address","name":"paircoin","type":"address"},{"internalType":"uint256","name":"amounttolp","type":"uint256"},{"internalType":"uint256","name":"amounttosell","type":"uint256"},{"internalType":"contract IThresholdERC1155","name":"memecoin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pythPriceFeedsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ca","type":"address"}],"name":"removePairCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_memeCoinAddress","type":"address"},{"internalType":"uint256","name":"_sellAmountNFT","type":"uint256"}],"name":"sellPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalsupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256[]","name":"_thresholds","type":"uint256[]"},{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"startPresale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"_paircoin1155","type":"address"},{"internalType":"uint256[]","name":"_thresholds","type":"uint256[]"},{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"startPresale1155","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010008292c06de28dcf6f5c7d36333e239957fe9bb29237bda553485b7bff66300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f9530000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a000000000000000000000000756162873526a6b9d6a15064a5be33e2de38bb5c00000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b486ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
Deployed Bytecode
0x000200000000000200100000000000020000000003020019000100000001035500000060021002700000078b0020019d0000078b022001970000000100300190000000440000c13d0000008003000039000000400030043f000000040020008c00000a390000413d000000000301043b000000e003300270000007930030009c000000c70000213d000007a30030009c000000ec0000213d000007ab0030009c0000013a0000213d000007af0030009c000004070000613d000007b00030009c000001be0000613d000007b10030009c00000a390000c13d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b001000000001001d0000078e0010009c00000a390000213d0000000101000039000000000101041a0000078e011001970000000002000411000000000012004b000005ab0000c13d0000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b0000000101100039000000000101041a000007d700100198000007380000c13d000000400100043d00000044021000390000080d03000041000000000032043500000024021000390000000e030000390000072d0000013d0000000003000416000000000003004b00000a390000c13d0000001f032000390000078c033001970000008003300039000000400030043f0000001f0420018f0000078d052001980000008003500039000000550000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000036004b000000510000c13d000000000004004b000000620000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000001000020008c00000a390000413d000000800100043d0000078e0010009c00000a390000213d000000a00200043d001000000002001d0000078e0020009c00000a390000213d000000c00200043d000f00000002001d0000078e0020009c00000a390000213d000000e00200043d000e00000002001d0000078e0020009c00000a390000213d000001000200043d000d00000002001d0000078e0020009c00000a390000213d000001200200043d000c00000002001d0000078e0020009c00000a390000213d000001400200043d000b00000002001d0000078e0020009c00000a390000213d0000078e01100197000001600200043d000a00000002001d0000a410020000390000000303000039000000000023041b0000000b03000039000000000203041a0000078f0220019700000790022001c7000000000023041b0000000102000039000000000302041a0000078f033001970000000004000411000000000343019f000000000032041b000000000200041a0000078f02200197000000000112019f000000000010041b0000000401000039000000000301041a000007910030009c0000048f0000813d000900000003001d0000000102300039000000000021041b000000000010043f000000200200003900000000010000191e241e050000040f0000000901100029000000000001041b0000000201000039000000000201041a0000078f0220019700000010022001af000000000021041b0000000701000039000000000201041a0000078f022001970000000f022001af000000000021041b0000000801000039000000000201041a0000078f022001970000000e022001af000000000021041b0000000901000039000000000201041a0000078f022001970000000d022001af000000000021041b0000000a01000039000000000201041a0000078f022001970000000c022001af000000000021041b0000000b03000039000000000103041a0000078f011001970000000b011001af000000000013041b0000000c010000390000000a02000029000000000021041b000000200100003900000100001004430000012000000443000007920100004100001e250001042e000007940030009c000000f90000213d0000079c0030009c0000014a0000213d000007a00030009c000004560000613d000007a10030009c000001c50000613d000007a20030009c00000a390000c13d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000078e0010009c00000a390000213d0000000102000039000000000302041a0000078e043001970000000005000411000000000045004b000005ab0000c13d000000000001004b000005e00000c13d000007b801000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f000007e501000041000000c40010043f000007e60100004100001e2600010430000007a40030009c000001870000213d000007a80030009c0000045b0000613d000007a90030009c000002cc0000613d000007aa0030009c00000a390000c13d0000000001000416000000000001004b00000a390000c13d00000002010000390000046b0000013d000007950030009c000001a30000213d000007990030009c000004620000613d0000079a0030009c000002e50000613d0000079b0030009c00000a390000c13d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000078e0010009c00000a390000213d000000000010043f0000000601000039000000200010043f000000400200003900000000010000191e241e050000040f0000000202100039000000000202041a000f00000002001d0000000102100039000000000202041a000e00000002001d000000000201041a001000000002001d00000003011000391e2417c80000040f0000000e050000290000078e02500197000000400400043d000d00000004001d00000020034000390000000000230435000007d7005001980000000002000039000000010200c0390000004003400039000000000023043500000060024000390000000f030000290000000000320435000000a0020000390000008003400039000000000023043500000010020000290000078e022001970000000000240435000000a0024000391e2418150000040f0000000d0200002900000000012100490000078b0010009c0000078b010080410000078b0020009c0000078b0200804100000060011002100000004002200210000000000121019f00001e250001042e000007ac0030009c000004670000613d000007ad0030009c000003020000613d000007ae0030009c00000a390000c13d000000240020008c00000a390000413d0000000401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417940000040f1e2418aa0000040f000002fb0000013d0000079d0030009c000004700000613d0000079e0030009c000003570000613d0000079f0030009c00000a390000c13d000000a40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b0000078e0030009c00000a390000213d0000002403100370000000000303043b0000078e0030009c00000a390000213d0000004403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b00000a390000813d0000000404300039000000000441034f000000000404043b000007b20040009c00000a390000213d000000050440021000000000034300190000002403300039000000000023004b00000a390000213d0000006403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b00000a390000813d0000000404300039000000000441034f000000000404043b000007b20040009c00000a390000213d000000050440021000000000034300190000002403300039000000000023004b00000a390000213d0000008401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417af0000040f000007e301000041000002fb0000013d000007a50030009c000004780000613d000007a60030009c0000038e0000613d000007a70030009c00000a390000c13d000000440020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000402100370000000000302043b0000078e0030009c00000a390000213d0000002401100370000000000201043b00000000010300191e2418270000040f000000400300043d0000002004300039000000000024043500000000001304350000078b0030009c0000078b030080410000004001300210000007fa011001c700001e250001042e000007960030009c000004950000613d000007970030009c000003930000613d000007980030009c00000a390000c13d000000a40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b0000078e0030009c00000a390000213d0000002403100370000000000303043b0000078e0030009c00000a390000213d0000008401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417af0000040f000007b301000041000002fb0000013d0000000001000416000000000001004b00000a390000c13d0000080e01000041000000800010043f000007e20100004100001e250001042e000000c40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000007cc0060009c0000048f0000213d0000008006600039000000400060043f000000800030043f00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f000000a004600039000001ef0000613d000000a008000039000000000905034f000000009a09043c0000000008a80436000000000048004b000001eb0000c13d000000000007004b000001fc0000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000000a00330003900000000000304350000002403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019001000000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f00000010060000290000000006360436000f00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000f046000290000022c0000613d000000000805034f0000000f09000029000000008a08043c0000000009a90436000000000049004b000002280000c13d000000000007004b000002390000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000f0330002900000000000304350000006403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019000e00000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f0000000e060000290000000006360436000d00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000d04600029000002690000613d000000000805034f0000000d09000029000000008a08043c0000000009a90436000000000049004b000002650000c13d000000000007004b000002760000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000d0330002900000000000304350000008403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b00000a390000813d0000000404300039000000000441034f000000000404043b000007b20040009c0000048f0000213d00000005054002100000003f06500039000007e706600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f0000000c06000029000000000046043500000024033000390000000005350019000000000025004b00000a390000213d000000000004004b000002a20000613d0000000c04000029000000000631034f000000000606043b000000200440003900000000006404350000002003300039000000000053004b0000029b0000413d000000a403100370000000000303043b000007b20030009c00000a390000213d0000002304300039000000000024004b0000000005000019000007e805008041000007e804400197000000000004004b0000000006000019000007e806004041000007e80040009c000000000605c019000000000006004b00000a390000c13d0000000404300039000000000441034f000000000404043b000b00000004001d000007b20040009c00000a390000213d000a00240030003d0000000b0300002900000005033002100000000a03300029000000000023004b00000a390000213d0000004401100370000000000101043b000007e90010009c00000d720000213d000000400100043d0000006402100039000007f80300004100000000003204350000004402100039000007f903000041000000000032043500000024021000390000002503000039000005c20000013d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000000102000039000000000202041a0000078e022001970000000003000411000000000023004b000005ab0000c13d000000000001004b000005b50000c13d000007b801000041000000800010043f0000002001000039000000840010043f0000001b01000039000000a40010043f0000080401000041000000c40010043f000007e60100004100001e2600010430000000440020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b001000000003001d0000078e0030009c00000a390000213d0000002401100370000000000101043b000007b20010009c00000a390000213d00000004011000391e2417940000040f000000000301001900000000040200190000001001000029000000000203001900000000030400191e241ab80000040f000000400200043d00000000001204350000078b0020009c0000078b020080410000004001200210000007b4011001c700001e250001042e000000440020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000402100370000000000202043b001000000002001d0000078e0020009c00000a390000213d0000002401100370000000000101043b000f00000001001d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000007c70020009c0000048f0000213d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000303041a000000600420003900000000003404350000000303100039000000000303041a000000800420003900000000003404350000000403100039000000000303041a000000a00520003900000000003504350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a0000078e03300197000000e00620003900000000003604350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a0000012004200039000000000034043500000140022000390000000901100039000000000101041a0000078e0110019700000000001204350000071d0000613d000000400100043d00000044021000390000080b030000410000072a0000013d000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b0000078e0010009c00000a390000213d000000000010043f0000000501000039000000200010043f000000400200003900000000010000191e241e050000040f0000000902100039000000000202041a0000000803100039000000000303041a0000000704100039000000000404041a0000000605100039000000000505041a0000000506100039000000000606041a0000000407100039000000000707041a0000000308100039000000000808041a0000000209100039000000000909041a000000010a100039000000000a0a041a000000000101041a000000ff00100190000000000b000039000000010b00c0390000008000b0043f0000ff00001001900000000001000039000000010100c039000000a00010043f000000c000a0043f000000e00090043f000001000080043f000001200070043f000001400060043f0000078e01500197000001600010043f000001800040043f000001a00030043f0000078e01200197000001c00010043f000007e40100004100001e250001042e0000000001000416000000000001004b00000a390000c13d0000000c01000039000004740000013d000000440020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000303043b001000000003001d0000078e0030009c00000a390000213d0000002403100370000000000403043b000007b20040009c00000a390000213d0000000003420049000007b50030009c00000a390000213d000000a40030008c00000a390000413d0000012003000039000000400030043f0000000405400039000000000651034f000000000606043b0000078e0060009c00000a390000213d000000800060043f0000002005500039000000000651034f000000000606043b0000078e0060009c00000a390000213d000000a00060043f0000002005500039000000000651034f000000000606043b000000000006004b0000000007000039000000010700c039000000000076004b00000a390000c13d000000c00060043f0000002006500039000000000661034f000000000606043b000000e00060043f0000004005500039000000000551034f000000000505043b000007b20050009c00000a390000213d00000000054500190000002304500039000000000024004b00000a390000813d0000000406500039000000000461034f000000000404043b000007b20040009c0000048f0000213d0000001f0740003900000816077001970000003f077000390000081607700197000007b60070009c0000048f0000213d0000012007700039000000400070043f000001200040043f00000000054500190000002405500039000000000025004b00000a390000213d0000002002600039000000000221034f00000816054001980000001f0640018f0000014001500039000003e80000613d0000014007000039000000000802034f000000008908043c0000000007970436000000000017004b000003e40000c13d000000000006004b000003f50000613d000000000252034f0000000305600210000000000601043300000000065601cf000000000656022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000262019f000000000021043500000140014000390000000000010435000001000030043f0000000101000039000000000101041a0000078e011001970000000002000411000000000012004b00000b3d0000c13d000000100000006b00000b440000c13d000000400100043d0000004402100039000007c3030000410000000000320435000000240210003900000018030000390000072d0000013d000000440020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000402100370000000000202043b001000000002001d0000078e0020009c00000a390000213d0000002401100370000000000101043b000f00000001001d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000001e002000039000000400020043f000000000301041a000000ff023001900000000004000039000000010400c039000000800040043f0000ff00003001900000000003000039000000010300c039000000a00030043f0000000103100039000000000303041a000000c00030043f0000000203100039000000000303041a000000e00030043f0000000303100039000000000303041a000001000030043f0000000403100039000000000303041a000001200030043f0000000503100039000000000303041a000001400030043f0000000603100039000000000303041a0000078e03300197000001600030043f0000000703100039000000000303041a000001800030043f0000000803100039000000000303041a000001a00030043f0000000901100039000000000101041a0000078e01100197000001c00010043f000000000002004b000005cd0000613d000007b801000041000001e00010043f0000002001000039000001e40010043f0000001901000039000002040010043f0000081001000041000002240010043f000008150100004100001e26000104300000000001000416000000000001004b00000a390000c13d00000001010000390000046b0000013d0000000001000416000000000001004b00000a390000c13d000007fb01000041000000800010043f000007e20100004100001e250001042e0000000001000416000000000001004b00000a390000c13d000000000100041a0000046c0000013d0000000001000416000000000001004b00000a390000c13d0000000b01000039000000000101041a0000078e01100197000000800010043f000007e20100004100001e250001042e0000000001000416000000000001004b00000a390000c13d0000000301000039000000000101041a000000800010043f000007e20100004100001e250001042e000000c40020008c00000a390000413d0000000003000416000000000003004b00000a390000c13d0000000403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000007cc0060009c000005e50000a13d000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000000240020008c00000a390000413d0000000002000416000000000002004b00000a390000c13d0000000401100370000000000101043b001000000001001d0000078e0010009c00000a390000213d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000000000101041a000000ff00100190000005b90000613d0000ff0000100190000005b90000c13d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000007c70020009c0000048f0000213d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000303041a000000600420003900000000003404350000000303100039000000000303041a000000800420003900000000003404350000000403100039000000000303041a000000a004200039000d00000004001d00000000003404350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a0000078e03300197000000e004200039000e00000004001d00000000003404350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a0000012004200039000000000034043500000140022000390000000901100039000000000101041a0000078e01100197000f00000002001d00000000001204350000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000000000201041a000008170220019700000100022001bf000000000021041b0000000f010000290000000001010433000007c80200004100000000002004430000078e01100197000c00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d000007ca010000410000000001130436000a00000001001d0000000401300039000000010200003900000000002104350000078b0030009c000b00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007cb011001c70000000c020000291e241e1a0000040f000000010020019000000b110000613d0000000b01000029000007b20010009c0000048f0000213d0000000b01000029000000400010043f000007cc0010009c0000048f0000213d0000000b020000290000008001200039000000400010043f000000600120003900000060030000390000000000310435000000400120003900000000003104350000000a0100002900000000003104350000000000020435000000400100043d000a00000001001d000007cd0010009c0000048f0000213d0000000a020000290000004001200039000000400010043f0000000101000039000000000112043600000000020000310000000102200367000000000202043b0000000000210435000000400400043d000800000004001d000007cd0040009c0000048f0000213d00000008050000290000004004500039000000400040043f00000001040000390000000004450436000c00000004001d0000000000240435000000400200043d000b00000002001d000007cd0020009c0000048f0000213d0000000b040000290000004002400039000000400020043f00000001020000390000000002240436000000400400043d000007cc0040009c0000048f0000213d0000008005400039000000400050043f00000060054000390000000000350435000000400340003900000000000304350000002003400039000000000003043500000000000404350000000000420435000000400300043d000007cc0030009c0000048f0000213d0000008004300039000000400040043f00000020043000390000000105000039000000000054043500000010040000290000000000430435000000400430003900000000000404350000000407000039000000000607041a000000400400043d0000000005640436000000000070043f000000000006004b0000058e0000613d000007ce070000410000000008000019000000000907041a000000000595043600000001077000390000000108800039000000000068004b000005880000413d00000000054500490000001f0550003900000816065001970000000005460019000000000065004b00000000060000390000000106004039000007b20050009c0000048f0000213d00000001006001900000048f0000c13d000000400050043f000000600530003900000000004504350000000b040000290000000004040433000000000004004b000005a50000613d00000000003204350000000a020000290000000002020433000000000002004b00000c680000c13d000007d401000041000000000010043f0000003201000039000000040010043f000007cb0100004100001e2600010430000007b801000041000000800010043f0000002001000039000000840010043f0000000901000039000000a40010043f000007b701000041000000c40010043f000007e60100004100001e26000104300000000302000039000000000012041b000000000100001900001e250001042e000000400100043d0000006402100039000007c40300004100000000003204350000004402100039000007c503000041000000000032043500000024021000390000002a030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007c6011001c700001e260001043000000010010000290000000f020000291e2418270000040f0000000004010019000001200100043d000000000041001a000005da0000413d0000000003410019000000c00500043d000000000053004b0000092f0000a13d000000000415004b000008550000813d000007d401000041000000000010043f0000001101000039000000040010043f000007cb0100004100001e26000104300000078f03300197000000000113019f000000000012041b000000000100001900001e250001042e0000008006600039000000400060043f000000800030043f00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f000000a004600039000005f80000613d000000a008000039000000000905034f000000009a09043c0000000008a80436000000000048004b000005f40000c13d000000000007004b000006050000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000000a00330003900000000000304350000002403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019001000000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f00000010060000290000000006360436000f00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000f04600029000006350000613d000000000805034f0000000f09000029000000008a08043c0000000009a90436000000000049004b000006310000c13d000000000007004b000006420000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000f0330002900000000000304350000004403100370000000000403043b000007b20040009c00000a390000213d0000002303400039000000000023004b00000a390000813d0000000405400039000000000351034f000000000303043b000007b20030009c0000048f0000213d0000001f0630003900000816066001970000003f066000390000081606600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000007b20060009c0000048f0000213d00000001007001900000048f0000c13d000000400060043f0000000c060000290000000006360436000e00000006001d00000000043400190000002404400039000000000024004b00000a390000213d0000002004500039000000000541034f00000816063001980000001f0730018f0000000e04600029000006720000613d000000000805034f0000000e09000029000000008a08043c0000000009a90436000000000049004b0000066e0000c13d000000000007004b0000067f0000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000e0330002900000000000304350000006403100370000000000303043b0000078e0030009c00000a390000213d0000008404100370000000000404043b000007b20040009c00000a390000213d0000002305400039000000000025004b00000a390000813d0000000405400039000000000551034f000000000505043b000007b20050009c0000048f0000213d00000005065002100000003f07600039000007e707700197000000400800043d0000000007780019000d00000008001d000000000087004b00000000080000390000000108004039000007b20070009c0000048f0000213d00000001008001900000048f0000c13d000000400070043f0000000d07000029000000000057043500000024044000390000000006460019000000000026004b00000a390000213d000000000005004b000006af0000613d0000000d05000029000000000741034f000000000707043b000000200550003900000000007504350000002004400039000000000064004b000006a80000413d000000a404100370000000000404043b000007b20040009c00000a390000213d0000002305400039000000000025004b0000000006000019000007e806008041000007e805500197000000000005004b0000000007000019000007e807004041000007e80050009c000000000706c019000000000007004b00000a390000c13d0000000405400039000000000151034f000000000101043b000b00000001001d000007b20010009c00000a390000213d000a00240040003d0000000b0100002900000005011002100000000a01100029000000000021004b00000a390000213d0000078e01300197000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000900000002001d000007d60020009c0000048f0000213d000000000101043b0000000905000029000000a002500039000000400020043f000000000201041a0000078e0220019700000000022504360000000103100039000000000303041a0000078e043001970000000000420435000007d7003001980000000002000039000000010200c0390000004003500039000700000003001d000000000023043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001042002700000007f0440618f000800000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000007550000c13d000000400400043d000600000004001d00000008050000290000000004540436000500000004001d000000000003004b00000ec00000613d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000805000029000000000005004b0000000002000019000000050600002900000ec60000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b000007150000413d00000ec60000013d000d00000006001d000c00000002001d00000010010000290000000f02000029000e00000005001d1e2418270000040f0000000e030000290000000003030433000000000031004b0000075b0000a13d000000400100043d00000044021000390000080a030000410000000000320435000000240210003900000011030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007b9011001c700001e26000104300000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b000000000001041b0000000102100039000000000002041b0000000202100039000000000002041b0000000303100039000000000103041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000010000390000000101002039000000000012004b000008fd0000613d000007d401000041000000000010043f0000002201000039000000040010043f000007cb0100004100001e260001043000000000040200190000000d020000290000000002020433000000000300041a000000000323013f0000078e00300198000b00000001001d0000085e0000c13d000a00000004001d000000000141004b000005da0000413d000000400400043d000900000004001d00000024034000390000000000130435000008070100004100000000001404350000000001000411000800000001001d0000078e031001970000000401400039000700000003001d00000000003104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b00002900000009057000290000078e0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000078a0000c13d000000000006004b0000079b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000af80000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000600000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000601000029000000400010043f000000200030008c00000a390000413d00000000020b0433000000000002004b0000000001000039000000010100c039000900000002001d000000000012004b00000a390000c13d0000000d0100002900000000020104330000000201000039000000000101041a000000060500002900000024035000390000000a040000290000000000430435000008070300004100000000003504350000078e01100197000000040350003900000000001304350000078b0050009c0000078b010000410000000001054019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000605700029000007db0000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b000007d70000c13d000000000006004b000007e80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000b4e0000613d0000001f01400039000000600110018f0000000601100029000007b20010009c0000048f0000213d000000400010043f000000200030008c00000a390000413d00000006020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a390000c13d000000090000006b00000c130000613d000000000002004b00000c130000613d0000000e010000290000000001010433000e000b00100074000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b00000004011000390000000e02000029000000000021041b0000000c010000290000000001010433000007c80200004100000000002004430000078e01100197000e00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f02000029000000000021043500000000010004100000078e011001970000002402300039000000000012043500000805010000410000000000130435000000040130003900000007020000290000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000d00000003001d0000078b010000410000000001034019000c00400010021800000000010004140000078b0010009c0000078b01008041000000c0011002100000000c011001af00000806011001c70000000e020000291e241e1a0000040f0000000100200190000008e70000c13d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000008500000c13d00000b1d0000013d000000e00100043d000000000001004b0000092e0000c13d000007d401000041000000000010043f0000001201000039000000040010043f000007cb0100004100001e26000104300000000c010000290000000001010433000007c80200004100000000002004430000078e01100197000c00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f0200002900000000002104350000080501000041000000000013043500000000010004100000078e021001970000002401300039000900000002001d00000000002104350000000001000411000800000001001d0000078e021001970000000401300039000700000002001d0000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000a00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000c020000291e241e1a0000040f000000010020019000000b040000613d0000000a01000029000007b20010009c0000048f0000213d0000000a01000029000000400010043f0000000e010000290000000001010433000e000b00100074000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b00000004011000390000000e02000029000000000021041b0000000d010000290000000001010433000007c80200004100000000002004430000078e01100197000e00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000b02000029000000000021043500000024013000390000000702000029000000000021043500000805010000410000000000130435000000040130003900000009020000290000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000d00000003001d0000078b010000410000000001034019000c00400010021800000000010004140000078b0010009c0000078b01008041000000c0011002100000000c011001af00000806011001c70000000e020000291e241e1a0000040f000000010020019000000b9c0000613d0000000d01000029000007b20010009c0000048f0000213d0000000d02000029000000400020043f0000000f01000029000000000012043500000020012000390000000b02000029000000000021043500000000010004140000078b0010009c0000078b01008041000000c0011002100000000c011001af000007ba011001c70000800d020000390000000303000039000008080400004100000010050000290000000806000029000009290000013d000f00000003001d000e00000004001d000000000004004b000009200000613d0000000e010000290000001f0010008c0000091e0000a13d0000000f01000029000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b0000000e020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b0000091b0000813d000000000003041b0000000103300039000000000023004b000009170000413d0000000f02000029000000000002041b000f00000001001d0000000f01000029000000000001041b00000000010004140000078b0010009c0000078b01008041000000c001100210000007be011001c70000800d0200003900000002030000390000080c0400004100000010050000291e241e1a0000040f000000010020019000000a390000613d000000000100001900001e250001042e000f0000001400e1000001600100043d0000078e03100197000000000100041a0000078e01100197000000000013004b000e00000004001d00000a290000c13d000000000024001a000005da0000413d000c00000002001d0000000001240019000000400400043d000d00000004001d000000440240003900000000001204350000080f0100004100000000001404350000002401400039000000000200041000000000002104350000000401400039000000000200041100000000002104350000078b0040009c0000078b010000410000000001044019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007b9011001c700000000020300191e241e1a0000040f0000000d0b00002900000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000009620000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000095e0000c13d000000000006004b0000096f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000a3b0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000b00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000b01000029000000400010043f000000200030008c00000a390000413d00000000020b0433000000000002004b0000000001000039000000010100c039000d00000002001d000000000012004b00000a390000c13d0000000201000039000000000101041a0000000b050000290000002402500039000001600300043d0000000c040000290000000000420435000008070200004100000000002504350000078e01100197000000040250003900000000001204350000078b0050009c0000078b010000410000000001054019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f0000078e02300197000007d0011001c71e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000b05700029000009ae0000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b000009aa0000c13d000000000006004b000009bb0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000b310000613d0000001f01400039000000600110018f0000000b01100029000007b20010009c0000048f0000213d000000400010043f000000200030008c00000a390000413d0000000b020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a390000c13d0000000d0000006b00000b6e0000613d000000000002004b00000b6e0000613d000001200200043d000d00000002001d0000000e0020002a000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000d030000290000000e02300029000000000101043b0000000401100039000000000021041b000001c00100043d000007c80200004100000000002004430000078e01100197000d00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f02000029000000000021043500000000010004110000078e01100197000000240230003900000000001204350000080501000041000000000013043500000000010004100000078e0110019700000004023000390000000000120435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000c00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000d020000291e241e1a0000040f000000010020019000000aca0000c13d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000a240000c13d00000b1d0000013d000007c8010000410000000000100443000d00000003001d000000040030044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a550000c13d000000000100001900001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000a420000c13d000000000005004b00000a530000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000b2c0000013d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000e0200002900000000002104350000080501000041000000000013043500000000010004100000078e021001970000002401300039000b00000002001d000000000021043500000000010004110000078e021001970000000401300039000a00000002001d0000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000c00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000d020000291e241e1a0000040f000000010020019000000aeb0000613d0000000c01000029000007b20010009c0000048f0000213d0000000c01000029000000400010043f000001200200043d000d00000002001d0000000e0020002a000005da0000413d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000d030000290000000e02300029000000000101043b0000000401100039000000000021041b000001c00100043d000007c80200004100000000002004430000078e01100197000d00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f02000029000000000021043500000024013000390000000a0200002900000000002104350000080501000041000000000013043500000004013000390000000b020000290000000000210435000000a4013000390000000000010435000000440130003900000000000104350000078b0030009c000c00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f00000806011001c70000000d020000291e241e1a0000040f000000010020019000000b5a0000613d0000000c01000029000007b20010009c0000048f0000213d0000000c01000029000000400010043f000001200100043d0000000e02000029000000000021001a000005da0000413d0000000001210019000000c00200043d000000000021004b00000b7e0000813d0000000c0300002900000020013000390000000e0200002900000000002104350000000f0100002900000000001304350000078b0030009c0000078b03008041000000400130021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007ba011001c70000800d02000039000000030300003900000000060004110000081304000041000009280000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000af30000c13d00000b1d0000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000aff0000c13d00000a460000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b0c0000c13d00000b1d0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b190000c13d0000078b06600197000000000004004b00000b2b0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060016002100000078b0020009c0000078b020080410000004002200210000000000112019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b380000c13d00000a460000013d000000400100043d0000004402100039000007b7030000410000000000320435000000240210003900000009030000390000072d0000013d000000800100043d0000078e0010019800000b670000c13d000000400100043d0000004402100039000007c2030000410000000000320435000000240210003900000012030000390000072d0000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b550000c13d00000a460000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b620000c13d00000b1d0000013d000000a00100043d0000078e0010019800000b740000c13d000000400100043d0000004402100039000007c10300004100000b7a0000013d00000044021000390000081403000041000000000032043500000024021000390000000a030000390000072d0000013d000000c00100043d000000000001004b00000ba90000c13d000000400100043d0000004402100039000007c0030000410000000000320435000000240210003900000015030000390000072d0000013d0000001001000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000000000101043b000000000401041a000000ff0040019000000c190000c13d0000000103100039000000000503041a0000000403100039000000000303041a000000000053004b00000c290000813d00000044012000390000081203000041000000000031043500000024012000390000000e0300003900000c1e0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ba40000c13d00000b1d0000013d0000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000800200043d0000078e02200197000000000101043b000000000301041a0000078f03300197000000000223019f000000000021041b000000a00200043d0000078e022001970000000103100039000000000403041a000007bb04400197000000000224019f000000c00400043d000000000004004b000007bc040000410000000004006019000000000242019f000000000023041b0000000202100039000000e00300043d000000000032041b000001000200043d000e00000002001d0000000032020434000d00000003001d000f00000002001d000007b20020009c0000048f0000213d0000000301100039000c00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000b00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000007550000c13d0000000b01000029000000200010008c00000bff0000413d0000000c01000029000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000f030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000b010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000bff0000813d000000000002041b0000000102200039000000000012004b00000bfb0000413d0000000f010000290000001f0010008c00000d650000a13d0000000c01000029000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000200200008a0000000f02200180000000000101043b00000dae0000c13d000000200300003900000dbb0000013d00000044021000390000080903000041000000000032043500000024021000390000000b030000390000072d0000013d000000440120003900000810030000410000000000310435000000240120003900000019030000390000000000310435000007b80100004100000000001204350000000401200039000000200300003900000000003104350000078b0020009c0000078b020080410000004001200210000007b9011001c700001e2600010430000008180640019700000001066001bf000000000061041b000000400620003900000000005604350000ff00004001900000000004000039000000010400c03900000020052000390000000000450435000000010400003900000000004204350000000204100039000000000404041a000000600520003900000000004504350000000304100039000000000404041a000000a0052000390000000000350435000000800320003900000000004304350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a0000078e03300197000000e00420003900000000003404350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a000001200420003900000000003404350000000901100039000000000101041a0000078e01100197000001400320003900000000001304350000078b0020009c0000078b02008041000000400120021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007de011001c70000800d020000390000000203000039000008110400004100000010050000291e241e1a0000040f000000010020019000000a390000613d000000400100043d000c00000001001d00000ad70000013d00000010020000290000000000210435000000000020043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000101043b0000000901100039000000000201041a000000400400043d000900000004001d000007cf010000410000000000140435000000040140003900000000030004100000000000310435000000240140003900000000000104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b000029000000090570002900000c9e0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000c9a0000c13d000000000006004b00000cab0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000d7e0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000007b20010009c0000048f0000213d00000001002001900000048f0000c13d000000400010043f000000200030008c00000a390000413d00000008010000290000000001010433000000000001004b000005a50000613d00000000010b04330000000c0200002900000000001204350000000701000039000000000101041a000000400400043d000007d10200004100000000002404350000000402400039000000200300003900000000003204350000000b02000029000000000302043300000024024000390000000000320435000c00000004001d00000044044000390000000502300210000000000b420019000000000003004b00000ee00000c13d0000078e021001970000000c0300002900000000013b00490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b030080410000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f000700000002001d1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000c0570002900000cf30000613d000000000801034f0000000c09000029000000008a08043c0000000009a90436000000000059004b00000cef0000c13d000000000006004b00000d000000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000f0c0000613d0000001f01400039000000600110018f0000000c02100029000000000012004b00000000010000390000000101004039000900000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000901000029000000400010043f000000200030008c00000a390000413d0000000c010000290000000002010433000000000002004b0000000001000039000000010100c039000000000012004b00000a390000c13d0000000903000029000000440130003900000024053000390000000403300039000000000002004b00000fef0000c13d000007d30200004100000009040000290000000000240435000000200200003900000000002304350000000b020000290000000003020433000000000035043500000005023002100000000002120019000000000003004b000011bc0000c13d000000090300002900000000013200490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b0200004100000000020340190000004002200210000000000121019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f00000007020000291e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090570002900000d4a0000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b00000d460000c13d000000000006004b00000d570000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000102c0000c13d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d600000c13d00000a460000013d0000000f0000006b000000000100001900000d6a0000613d0000000d0100002900000000010104330000000f040000290000000302400210000008190220027f0000081902200167000000000121016f0000000102400210000000000121019f00000dc90000013d000007ea0010009c00000d8a0000413d000000400100043d0000006402100039000007f60300004100000000003204350000004402100039000007f703000041000000000032043500000024021000390000002603000039000005c20000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d850000c13d00000a460000013d0000000a01000039000000000101041a0000008802100270000007eb02200197000007ec022001c7000000000020043f0000007801100210000007ed011001c7000000200010043f000007ee010000410000000002000414000000090010043f0000000d0000043f00000060010000390000004d0010043f0000004d0100008a0000006d0010043f0000078b0020009c0000078b02008041000000c001200210000007ef011001c700008006020000391e241e1a0000040f000000010020019000000da60000613d000000000101043b0009078e0010019c00000e0b0000c13d000000400100043d000008010200004100000000002104350000078b0010009c0000078b01008041000000400110021000000802011001c700001e2600010430000000010320008a00000005033002700000000004310019000000200300003900000001044000390000000e0600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b00000db40000c13d0000000f0020006c00000dc60000813d0000000f020000290000000302200210000000f80220018f000008190220027f00000819022001670000000e033000290000000003030433000000000223016f000000000021041b0000000f01000029000000010110021000000001011001bf0000000c02000029000000000012041b0000002002000039000000400100043d0000000002210436000000800300043d0000078e033001970000000000320435000000a00200043d0000078e0220019700000040031000390000000000230435000000c00200043d000000000002004b0000000002000039000000010200c039000000600310003900000000002304350000008002100039000000e00300043d0000000000320435000000a002100039000000a003000039000001000400043d0000000000320435000000c00210003900000000430404340000000000320435000000e002100039000000000003004b00000df00000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000de90000413d0000001f04300039000008160440019700000000033200190000000000030435000000000314004900000000022300190000078b0020009c0000078b0200804100000060022002100000078b0010009c0000078b010080410000004001100210000000000112019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f000007be011001c70000800d020000390000000203000039000007bf0400004100000010050000291e241e1a0000040f00000001002001900000092c0000c13d00000a390000013d0000000201000039000000000101041a000800000001001d000007c80100004100000000001004430000000901000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d00000008010000290000078e01100197000000400400043d000007f00200004100000000002404350000002402400039000700000002001d000000000012043500000004024000390000000001000411000600000002001d000000000012043500000044010000390000000101100367000000000101043b0000006402400039000000e00300003900000000003204350000004402400039000500000002001d0000000000120435000000e401400039000000800200043d0000000000210435000800000004001d0000010401400039000000000002004b00000e420000613d00000000030000190000000004130019000000a005300039000000000505043300000000005404350000002003300039000000000023004b00000e3b0000413d000000000312001900000000000304350000001f02200039000008160220019700000008030000290000008403300039000001000420003900000000004304350000000001120019000000100200002900000000020204330000000001210436000000000002004b0000000f0600002900000e590000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b00000e520000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000a40330003900000000002304350000000e0200002900000000020204330000000001210436000000000002004b0000000d0600002900000e710000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b00000e6a0000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000c40330003900000000002304350000000c0200002900000000020204330000000001210436000000000002004b00000e880000613d00000000030000190000000c050000290000002005500039000000000405043300000000014104360000000103300039000000000023004b00000e820000413d000000080300002900000000013100490000078b0010009c0000078b01008041000000600110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f0000078b0030009c0000078b020000410000000002034019000c0040002002180000000c011001af00000009020000291e241e1a0000040f000000010020019000000fd30000613d0000000801000029000007b20010009c0000048f0000213d0000000801000029000000400010043f00000044010000390000000101100367000000000101043b000003e82010011a000000000002004b00000fe00000c13d000c005a001000cd000000000001004b00000eac0000613d0000000c011000f90000005a0010008c000005da0000c13d0000000301000039000000000101041a000807f2001000d5000000000001004b00000eb40000613d00000008011000f9000007f20010009c000005da0000c13d0000000a010000290000000b020000291e2418aa0000040f000000000001004b000011a70000c13d000000400100043d00000044021000390000080003000041000000000032043500000024021000390000000d030000390000072d0000013d000008180120019700000005020000290000000000120435000000080000006b000000200200003900000000020060390000003f0120003900000816021001970000000601200029000000000021004b00000000020000390000000102004039000007b20010009c0000048f0000213d00000001002001900000048f0000c13d000000400010043f000000090100002900000080011000390000000602000029000000000021043500000007010000290000000001010433000000000001004b00000f180000c13d000000400100043d00000044021000390000080303000041000000000032043500000024021000390000000c030000390000072d0000013d0000000b05000029000000000600001900000ee60000013d0000000106600039000000000036004b00000cd30000813d0000000c07b0006a000000440770008a00000000047404360000002005500039000000000705043300000000980704340000078e0880019700000000088b04360000000009090433000000020090008c000012230000813d000000000098043500000040087000390000000008080433000000000008004b0000000008000039000000010800c0390000004009b000390000000000890435000000600770003900000000070704330000006008b00039000000800900003900000000009804350000008009b0003900000000080704330000000000890435000000a00bb00039000000000008004b00000ee30000613d00000000090000190000002007700039000000000a070433000000000bab04360000000109900039000000000089004b00000f050000413d00000ee30000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f130000c13d00000a460000013d0000000a01000039000000000101041a0000008802100270000007eb02200197000007ec022001c7000000000020043f0000007801100210000007ed011001c7000000200010043f000007ee010000410000000002000414000000090010043f0000000d0000043f00000060010000390000004d0010043f0000004d0100008a0000006d0010043f0000078b0020009c0000078b02008041000000c001200210000007ef011001c700008006020000391e241e1a0000040f000000010020019000000da60000613d000000000101043b0009078e0010019c00000da60000613d0000000201000039000000000101041a000800000001001d000007c80100004100000000001004430000000901000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d00000008010000290000078e01100197000000400400043d0000006402400039000000e00300003900000000003204350000004402400039000007fb03000041000000000032043500000024024000390000000000120435000007f0010000410000000000140435000000040140003900000000020004110000000000210435000000e401400039000000800200043d0000000000210435000800000004001d0000010401400039000000000002004b00000f660000613d00000000030000190000000004130019000000a005300039000000000505043300000000005404350000002003300039000000000023004b00000f5f0000413d000000000312001900000000000304350000001f02200039000008160220019700000008030000290000008403300039000001000420003900000000004304350000000001120019000000100200002900000000020204330000000001210436000000000002004b00000f7c0000613d000000000300001900000000041300190000000f05300029000000000505043300000000005404350000002003300039000000000023004b00000f750000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000a40330003900000000002304350000000c0200002900000000020204330000000001210436000000000002004b00000f930000613d000000000300001900000000041300190000000e05300029000000000505043300000000005404350000002003300039000000000023004b00000f8c0000413d000000000312001900000000000304350000001f022000390000081602200197000000000112001900000008030000290000000002310049000000040220008a000000c40330003900000000002304350000000d0200002900000000020204330000000001210436000000000002004b00000fab0000613d00000000030000190000000d040000290000002004400039000d00000004001d000000000404043300000000014104360000000103300039000000000023004b00000fa30000413d000000080200002900000000012100490000078b0010009c0000078b0100804100000060011002100000078b0020009c0000078b020080410000004002200210000000000121019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f00000009020000291e241e1a0000040f0000000100200190000011e90000613d0000000801000029000007b20010009c0000048f0000213d0000000801000029000000400010043f0000000301000039000000000201041a000d07f2002000d500000064010000390000000101100367000000000101043b0000078e00100198000013410000c13d000000000002004b00000fcf0000613d0000000d012000f9000007f20010009c000005da0000c13d0000000a010000290000000b020000291e2418aa0000040f000013490000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000fdb0000c13d00000b1d0000013d000007b80100004100000008020000290000000000120435000000200100003900000006020000290000000000120435000000190100003900000007020000290000000000120435000007f101000041000000050200002900000000001204350000000c01000029000007b9011001c700001e26000104300000000702000039000000000202041a000007d20400004100000009060000290000000000460435000000200400003900000000004304350000000b030000290000000004030433000000000045043500000005034002100000000003130019000000000004004b000011f60000c13d0000078e02200197000000090400002900000000014300490000078b0010009c0000078b0100804100000060011002100000078b0040009c0000078b0300004100000000030440190000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000009057000290000101d0000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b000010190000c13d000000000006004b0000102a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000012290000613d0000001f01400039000000600110018f0000000902100029000000000012004b00000000010000390000000101004039000c00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000c01000029000000400010043f000000200030008c00000a390000413d00000009010000290000000001010433000900000001001d0000078e0010009c00000a390000213d0000000c01000029000007cc0010009c0000048f0000213d0000000c020000290000008001200039000000400010043f000000090100002900000000021204360000000a01000029000700000002001d00000000001204350000000404000039000000000304041a000000400100043d0000000002310436000000000040043f000000000003004b0000105a0000613d000007ce040000410000000005000019000000000604041a000000000262043600000001044000390000000105500039000000000035004b000010540000413d00000000021200490000001f0220003900000816032001970000000002130019000000000032004b00000000030000390000000103004039000007b20020009c0000048f0000213d00000001003001900000048f0000c13d000000400020043f0000000c0400002900000060034000390000000802000029000600000003001d00000000002304350000004002400039000800000002001d00000000001204350000000801000039000000000101041a000a00000001001d0000000f010000290000000001010433000007c80200004100000000002004430000078e01100197000b00000001001d000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d0000000a010000290000078e01100197000000400300043d000007d502000041000000000023043500000024043000390000000102000039000500000004001d00000000002404350000000402300039000300000002001d00000000001204350000078b0030009c000a00000003001d0000078b010000410000000001034019000400400010021800000000010004140000078b0010009c0000078b01008041000000c00110021000000004011001af000007d0011001c70000000b020000291e241e1a0000040f0000000100200190000014610000613d0000000a01000029000007b20010009c0000048f0000213d0000000a01000029000000400010043f0000000801000039000000000101041a0002078e0010019b0000000e010000290000000001010433000b078e0010019b000000000100041a0000078e011001970000000b0010006b0000146e0000c13d0000000d010000290000000001010433000007dc020000410000000a0300002900000000002304350000000202000029000000030300002900000000002304350000000502000029000000000012043500000000010004140000078b0010009c0000078b01008041000000c00110021000000004011001af000007d0011001c70000000b020000291e241e1a0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a05700029000010cf0000613d000000000801034f0000000a09000029000000008a08043c0000000009a90436000000000059004b000010cb0000c13d000000000006004b000010dc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014ed0000613d0000001f01400039000000600110018f0000000a01100029000b00000001001d000007b20010009c0000048f0000213d0000000b01000029000000400010043f000000200030008c000000800600003900000a390000413d0000000a010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b00000a390000c13d0000000d0100002900000000010104330000000802000039000000000202041a000d00000002001d0000000e020000290000000002020433000007dd030000410000000b0700002900000000003704350000000403700039000000c00400003900000000004304350000000c0300002900000000030304330000078e04300197000000c403700039000000000043043500000007040000290000000005040433000000e40470003900000000006404350000014404700039000000000605043300000000006404350000016404700039000000000006004b000011140000613d0000000007000019000000200550003900000000080504330000078e0880019700000000048404360000000107700039000000000067004b0000110d0000413d0000000006340049000000080500002900000000050504330000000b070000290000010407700039000000000067043500000000060504330000000004640436000000000006004b000011250000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b0000111f0000413d0000078e022001970000000005340049000000060300002900000000030304330000000b060000290000012406600039000000000056043500000000050304330000000004540436000f00000004001d000000000005004b0000113a0000613d0000000004000019000000200330003900000000060304330000000f070000290000000007670436000f00000007001d0000000104400039000000000054004b000011320000413d0000000b0400002900000064034000390000000000130435000000440340003900000000001304350000002401400039000000000021043500000084014000390000000000010435000007d901000041000000000010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007da011001c70000800b020000391e241e1f0000040f00000001002001900000171c0000613d0000000d020000290000078e02200197000000000101043b0000000b04000029000000a40340003900000000001304350000000f014000690000078b0010009c0000078b0100804100000060011002100000078b0040009c0000078b0300004100000000030440190000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f1e241e1a0000040f00000060031002700000078b03300197000000600030008c000000600400003900000000040340190000001f0640018f00000060074001900000000b05700029000011720000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b0000116e0000c13d000000000006004b0000117f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014f90000613d0000001f01400039000000e00110018f0000000b02100029000000000012004b00000000010000390000000101004039000f00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000f01000029000000400010043f000000600030008c00000a390000413d0000000f02000029000000240120003900000004022000390000000b0300002900000040033000390000000003030433000000000003004b000015050000c13d000007b8030000410000000f04000029000000000034043500000020030000390000000000320435000000160200003900000000002104350000004401400039000007e10200004100000000002104350000078b0040009c0000078b040080410000004001400210000007b9011001c700001e260001043000000008040000290000000102400270000007f3032000d1000000000004004b000011af0000613d00000000022300d9000007f30020009c000005da0000c13d00000000041300d90000000102400210000000000013004b000011b60000413d00000000014200d9000000020010008c000005da0000c13d000000000002004b000012350000c13d000000400100043d0000004402100039000007ff0300004100000c150000013d0000000004000019000011c10000013d0000000104400039000000000034004b00000d2a0000813d000000090520006a000000440550008a00000000015104360000000b050000290000002005500039000b00000005001d000000000505043300000000760504340000078e0660019700000000066204360000000007070433000000010070008c000012230000213d000000000076043500000040065000390000000006060433000000000006004b0000000006000039000000010600c0390000004007200039000000000067043500000060055000390000000005050433000000600620003900000080070000390000000000760435000000800720003900000000060504330000000000670435000000a002200039000000000006004b000011be0000613d00000000070000190000002005500039000000000805043300000000028204360000000107700039000000000067004b000011e20000413d000011be0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000011f10000c13d00000b1d0000013d0000000005000019000011fb0000013d0000000105500039000000000045004b00000ffd0000813d000000090630006a000000440660008a00000000016104360000000b060000290000002006600039000b00000006001d000000000606043300000000870604340000078e0770019700000000077304360000000008080433000000010080008c000012230000213d000000000087043500000040076000390000000007070433000000000007004b0000000007000039000000010700c0390000004008300039000000000078043500000060066000390000000006060433000000600730003900000080080000390000000000870435000000800830003900000000070604330000000000780435000000a003300039000000000007004b000011f80000613d00000000080000190000002006600039000000000906043300000000039304360000000108800039000000000078004b0000121c0000413d000011f80000013d000007d401000041000000000010043f0000002101000039000000040010043f000007cb0100004100001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012300000c13d00000a460000013d0000000c01000029000000c80010008c000008580000413d000000400100043d000b00000001001d000007c70010009c0000048f0000213d0000000c01000029000000640110011a000000010110027000000000431200d900000000024200490000000b050000290000016004500039000000400040043f0000012004500039000c00000004001d00000000001404350000010004500039000a00000004001d0000000000140435000000a001500039000700000001001d00000000000104350000002001500039000300000001001d0000000000010435000000000005043500000044010000390000000101100367000000000101043b0000006004500039000400000004001d0000000000340435000000c003500039000600000003001d00000000001304350000004001500039000100000001001d000000000021043500000140015000390000000902000029000800000001001d00000000002104350000008001500039000200000001001d0000000000010435000000e003500039000000000100041a0000078e01100197000500000003001d0000000000130435000000000020043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000b020000290000000002020433000000000002004b000000000101043b000000000201041a000007f402200197000000010220c1bf00000003030000290000000003030433000000000003004b000001000220c1bf000000000021041b000000010200002900000000020204330000000103100039000000000023041b000000040200002900000000020204330000000203100039000000000023041b000000020200002900000000020204330000000303100039000000000023041b000000070200002900000000020204330000000403100039000000000023041b000000060200002900000000020204330000000503100039000000000023041b000000050200002900000000020204330000078e022001970000000603100039000000000403041a0000078f04400197000000000224019f000000000023041b0000000a0200002900000000020204330000000703100039000000000023041b0000000c0200002900000000020204330000000803100039000000000023041b0000000901100039000000080200002900000000020204330000078e02200197000000000301041a0000078f03300197000000000223019f000000000021041b000001e002000039000000400100043d0000000002210436000001e004100039000000800300043d00000000003404350000020004100039000000000003004b000012be0000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b000012b70000413d000000000543001900000000000504350000001f033000390000081603300197000000000443001900000000031400490000000000320435000000100200002900000000030204330000000002340436000000000003004b000012d20000613d000000000400001900000000052400190000000f06400029000000000606043300000000006504350000002004400039000000000034004b000012cb0000413d000000000423001900000000000404350000001f03300039000008160330019700000000022300190000000003120049000000400410003900000000003404350000000e0300002900000000030304330000000002320436000000000003004b000012e70000613d000000000400001900000000052400190000000d06400029000000000606043300000000006504350000002004400039000000000034004b000012e00000413d0000000004230019000000000004043500000044040000390000000104400367000000000404043b000000600510003900000000004504350000000b040000290000000004040433000000000004004b0000000004000039000000010400c0390000008005100039000000000045043500000003040000290000000004040433000000000004004b0000000004000039000000010400c039000000a005100039000000000045043500000001040000290000000004040433000000c005100039000000000045043500000004040000290000000004040433000000e0051000390000000000450435000000020400002900000000040404330000010005100039000000000045043500000007040000290000000004040433000001200510003900000000004504350000000604000029000000000404043300000140051000390000000000450435000000050400002900000000040404330000078e04400197000001600510003900000000004504350000000a040000290000000004040433000001800510003900000000004504350000000c040000290000000004040433000001a0051000390000000000450435000000080400002900000000040404330000078e04400197000001c00510003900000000004504350000001f033000390000081603300197000000000212004900000000023200190000078b0020009c0000078b0200804100000060022002100000078b0010009c0000078b010080410000004001100210000000000112019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007be011001c70000800d020000390000000103000039000007f5040000411e241e1a0000040f000000010020019000000a390000613d000000400100043d000000090200002900000000002104350000078b0010009c0000078b010080410000004001100210000007b4011001c700001e250001042e000000000002004b000013460000613d0000000d022000f9000007f20020009c000005da0000c13d0000000a020000290000000b030000291e241ab80000040f000000000001004b00000eb90000613d0000000d040000290000000102400270000007f3032000d1000000000004004b000013530000613d00000000022300d9000007f30020009c000005da0000c13d00000000041300d90000000102400210000000000013004b0000135a0000413d00000000014200d9000000020010008c000005da0000c13d000000000002004b000011b80000613d000000400100043d000d00000001001d000007c70010009c0000048f0000213d0000000d040000290000016001400039000000400010043f0000012003400039000007fc01000041000700000003001d00000000001304350000010003400039000500000003001d000000000013043500000140034000390000000901000029000600000003001d0000000000130435000000c003400039000007fb01000041000400000003001d0000000000130435000000a001400039000300000001001d00000000000104350000008001400039000800000001001d00000000000104350000006001400039000a00000001001d00000000000104350000004001400039000b00000001001d00000000000104350000000001040436000100000001001d0000000000010435000000e00340003900000064010000390000000101100367000000000101043b0000078e01100197000200000003001d0000000000130435000007f30120012a000007fd0020009c000013950000813d000007f30020009c000008580000413d0000078b02100197000007fc022001290000000803000029000000000023043500000000021200a9000007fc022000990000078b02200197000013990000013d000007fe0220012a0000000a030000290000000000230435000007fc2010012a00000000012100490000000b0200002900000000001204350000000901000029000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000d020000290000000002020433000000000002004b000000000101043b000000000201041a000007f402200197000000010220c1bf00000001030000290000000003030433000000000003004b000001000220c1bf000000000021041b0000000b0200002900000000020204330000000103100039000000000023041b0000000a0200002900000000020204330000000203100039000000000023041b000000080200002900000000020204330000000303100039000000000023041b000000030200002900000000020204330000000403100039000000000023041b000000040200002900000000020204330000000503100039000000000023041b000000020200002900000000020204330000078e022001970000000603100039000000000403041a0000078f04400197000000000224019f000000000023041b000000050200002900000000020204330000000703100039000000000023041b000000070200002900000000020204330000000803100039000000000023041b0000000901100039000000060200002900000000020204330000078e02200197000000000301041a0000078f03300197000000000223019f000000000021041b000001e002000039000000400100043d0000000002210436000001e004100039000000800300043d00000000003404350000020004100039000000000003004b000013f20000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b000013eb0000413d000000000543001900000000000504350000001f033000390000081603300197000000000443001900000000031400490000000000320435000000100200002900000000030204330000000002340436000000000003004b000014060000613d000000000400001900000000052400190000000f06400029000000000606043300000000006504350000002004400039000000000034004b000013ff0000413d000000000423001900000000000404350000001f03300039000008160330019700000000022300190000000003120049000000400410003900000000003404350000000c0300002900000000030304330000000002320436000000000003004b0000141b0000613d000000000400001900000000052400190000000e06400029000000000606043300000000006504350000002004400039000000000034004b000014140000413d000000000423001900000000000404350000006004100039000007fb0500004100000000005404350000000d040000290000000004040433000000000004004b0000000004000039000000010400c0390000008005100039000000000045043500000001040000290000000004040433000000000004004b0000000004000039000000010400c039000000a00510003900000000004504350000000b040000290000000004040433000000c00510003900000000004504350000000a040000290000000004040433000000e0051000390000000000450435000000080400002900000000040404330000010005100039000000000045043500000003040000290000000004040433000001200510003900000000004504350000000404000029000000000404043300000140051000390000000000450435000000020400002900000000040404330000078e0440019700000160051000390000000000450435000000050400002900000000040404330000018005100039000000000045043500000007040000290000000004040433000001a0051000390000000000450435000000060400002900000000040404330000078e04400197000001c00510003900000000004504350000001f033000390000081603300197000000000212004900000000023200190000078b0020009c0000078b0200804100000060022002100000078b0010009c0000078b010080410000004001100210000000000112019f00000000020004140000132e0000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000014690000c13d00000b1d0000013d000007c80100004100000000001004430000000b01000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f00000001002001900000171c0000613d000000000101043b000000000001004b00000a390000613d000000400300043d000000240130003900000001020000390000000000210435000007d50100004100000000001304350000000401300039000000020200002900000000002104350000078b0030009c000a00000003001d0000078b010000410000000001034019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007d0011001c70000000b020000291e241e1a0000040f0000000100200190000015460000613d0000000a01000029000007b20010009c0000048f0000213d0000000a01000029000000400010043f0000000e0100002900000000010104330000078e01100197000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000400200043d000500000002001d000007d60020009c0000048f0000213d000000000101043b0000000505000029000000a002500039000000400020043f000000000201041a0000078e0220019700000000062504360000000102100039000000000202041a000007d7002001980000000003000039000000010300c039000000400450003900000000003404350000078e02200197000300000006001d000000000026043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001042002700000007f0440618f000b00000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000007550000c13d000000400400043d000400000004001d0000000b050000290000000004540436000a00000004001d000000000003004b000015530000613d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d0000000b0000006b0000000002000019000015590000613d000000000101043b00000000020000190000000a03200029000000000401041a0000000000430435000000010110003900000020022000390000000b0020006c000014e50000413d000015590000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014f40000c13d00000a460000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000015000000c13d00000a460000013d0000000903000039000000000303041a0000000e040000290000000004040433000007db050000410000000f0600002900000000005604350000078e044001970000000000420435000000090200002900000000002104350000078b0060009c0000078b010000410000000001064019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f0000078e02300197000007d0011001c71e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f057000290000152b0000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b000015270000c13d000000000006004b000015380000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000170a0000c13d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000015410000c13d00000a460000013d00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900000b1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000154e0000c13d00000b1d0000013d00000818012001970000000a0200002900000000001204350000000b0000006b000000200200003900000000020060390000003f0120003900000816021001970000000401200029000000000021004b00000000020000390000000102004039000007b20010009c0000048f0000213d00000001002001900000048f0000c13d000000400010043f0000000501000029000000800110003900000004020000290000000000210435000000400200043d000007cd0020009c0000048f0000213d000000030100002900000000030104330000004001200039000000400010043f0000000101000039000000000412043600000000010000310000000101100367000000000601043b0000000000640435000000400100043d000007cd0010009c0000048f0000213d0000004005100039000000400050043f0000000105000039000000000551043600000000006504350000000006020433000000000006004b000005a50000613d0000000e0600002900000000060604330000078e0660019700000000006404350000000004010433000000000004004b000005a50000613d0000000d0400002900000000040404330000000000450435000000400400043d000b00000004001d000007cc0040009c0000048f0000213d0000078e043001970000000b050000290000008003500039000000400030043f000a00000004001d0000000003450436000300000003001d00000000002304350000000405000039000000000405041a000000400200043d0000000003420436000000000050043f000000000004004b000015a50000613d000007ce050000410000000006000019000000000705041a000000000373043600000001055000390000000106600039000000000046004b0000159f0000413d00000000032300490000001f0330003900000816043001970000000003240019000000000043004b00000000040000390000000104004039000007b20030009c0000048f0000213d00000001004001900000048f0000c13d000000400030043f0000000b040000290000006003400039000400000003001d00000000001304350000004001400039000200000001001d00000000002104350000000801000039000000000101041a000500000001001d0000000f010000290000000002010433000000400400043d000f00000004001d000007cf010000410000000000140435000000040140003900000000030004100000000000310435000000240140003900000000000104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0b0000290000000f05700029000015e20000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000015de0000c13d000000000006004b000015ef0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000171d0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000e00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000e01000029000000400010043f000000200030008c000000800600003900000a390000413d0000000d01000029000000000201043300000000010b0433000007d8030000410000000e0700002900000000003704350000000403700039000000c00400003900000000004304350000000c0300002900000000030304330000078e04300197000000c403700039000000000043043500000007040000290000000005040433000000e40470003900000000006404350000014404700039000000000605043300000000006404350000016404700039000000000006004b000016210000613d0000000007000019000000200550003900000000080504330000078e0880019700000000048404360000000107700039000000000067004b0000161a0000413d0000000006340049000000080500002900000000050504330000000e070000290000010407700039000000000067043500000000060504330000000004640436000000000006004b000016320000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b0000162c0000413d0000000003340049000000060500002900000000050504330000000e060000290000012406600039000000000036043500000000060504330000000003640436000000000006004b000016430000613d00000000040000190000002005500039000000000705043300000000037304360000000104400039000000000064004b0000163d0000413d0000000e050000290000000004530049000000040440008a000000240550003900000000004504350000000b0400002900000000040404330000078e0440019700000000044304360000000305000029000000000505043300000080060000390000000000640435000000800430003900000000060504330000000000640435000000a004300039000000000006004b0000165e0000613d0000000007000019000000200550003900000000080504330000078e0880019700000000048404360000000107700039000000000067004b000016570000413d0000000205000029000000000505043300000000063400490000004007300039000000000067043500000000060504330000000004640436000000000006004b0000166e0000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b000016680000413d0000000405000029000000000505043300000000063400490000006003300039000000000063043500000000030504330000000004340436000f00000004001d000000000003004b000016810000613d0000000004000019000000200550003900000000060504330000000f070000290000000007670436000f00000007001d0000000104400039000000000034004b000016790000413d0000000e04000029000000640340003900000000002304350000004402400039000000000012043500000084014000390000000000010435000007d901000041000000000010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007da011001c70000800b020000391e241e1f0000040f00000001002001900000171c0000613d00000005020000290000078e02200197000000000101043b0000000e04000029000000a40340003900000000001304350000000f014000690000078b0010009c0000078b0100804100000060011002100000078b0040009c0000078b0300004100000000030440190000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f1e241e1a0000040f00000060031002700000078b03300197000000600030008c000000600400003900000000040340190000001f0640018f00000060074001900000000e05700029000016b70000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b000016b30000c13d000000000006004b000016c40000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017290000613d0000001f01400039000000e00110018f0000000e02100029000000000012004b00000000010000390000000101004039000f00000002001d000007b20020009c0000048f0000213d00000001001001900000048f0000c13d0000000f01000029000000400010043f000000600030008c00000a390000413d0000000901000039000000000201041a0000000f04000029000000240140003900000009030000290000000000310435000007db01000041000000000014043500000004014000390000000a0300002900000000003104350000078b0040009c0000078b010000410000000001044019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007d0011001c70000078e022001971e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f05700029000016fb0000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b000016f70000c13d000000000006004b000017080000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017350000613d0000001f01400039000000600110018f0000000f01100029000007b20010009c0000048f0000213d000000400010043f000000200030008c00000a390000413d0000000f020000290000000002020433000f00000002001d0000078e0020009c00000a390000213d0000000f0000006b000017410000c13d0000004402100039000007e00300004100000b400000013d000000000001042f0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017240000c13d00000a460000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017300000c13d00000a460000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900000a460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000173c0000c13d00000a460000013d00000010010000290000078e01100197000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000000a390000613d000000000201043b000000000302041a0000ff00003001900000000004000039000000010400c039000000400100043d00000020051000390000000000450435000000ff003001900000000003000039000000010300c03900000000003104350000000103200039000000000303041a000000400410003900000000003404350000000203200039000000000303041a000000600410003900000000003404350000000303200039000000000303041a000000800410003900000000003404350000000403200039000000000303041a000000a00410003900000000003404350000000503200039000000000303041a000000c00410003900000000003404350000000603200039000000000303041a0000078e03300197000000e00410003900000000003404350000000703200039000000000303041a000001000410003900000000003404350000000803200039000000000303041a000001200410003900000000003404350000000902200039000000000202041a0000078e02200197000001400310003900000000002304350000078b0010009c0000078b01008041000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007de011001c70000800d020000390000000203000039000007df040000410000000f050000291e241e1a0000040f000000010020019000000a390000613d000000400100043d0000000f020000290000133b0000013d0000001f03100039000000000023004b0000000004000019000007e804004041000007e805200197000007e803300197000000000653013f000000000053004b0000000003000019000007e803002041000007e80060009c000000000304c019000000000003004b000017ad0000613d0000000103100367000000000303043b000007b20030009c000017ad0000213d000000050430021000000020011000390000000004410019000000000024004b000017ad0000213d0000000002030019000000000001042d000000000100001900001e26000104300000001f03100039000000000023004b0000000004000019000007e804004041000007e805200197000007e803300197000000000653013f000000000053004b0000000003000019000007e803002041000007e80060009c000000000304c019000000000003004b000017c60000613d0000000103100367000000000303043b000007b20030009c000017c60000213d00000000013100190000002001100039000000000021004b000017c60000213d000000000001042d000000000100001900001e26000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000018070000c13d000000400500043d0000000004650436000000000003004b000017f20000613d000100000004001d000300000006001d000200000005001d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f0000000100200190000018130000613d0000000306000029000000000006004b000017f80000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000017ea0000413d000017fa0000013d00000818012001970000000000140435000000000006004b00000020010000390000000001006039000017fa0000013d000000000100001900000002050000290000003f0110003900000816021001970000000001520019000000000021004b00000000020000390000000102004039000007b20010009c0000180d0000213d00000001002001900000180d0000c13d000000400010043f0000000001050019000000000001042d000007d401000041000000000010043f0000002201000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000000000100001900001e260001043000000000430104340000000001320436000000000003004b000018210000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b0000181a0000413d000000000231001900000000000204350000001f0230003900000816022001970000000001210019000000000001042d0001000000000002000100000002001d0000078e01100197000000000010043f0000000501000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f00000001002001900000187e0000613d000000400200043d0000081a0020009c000018800000813d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000403041a000000600320003900000000004304350000000303100039000000000303041a000000800520003900000000003504350000000405100039000000000505041a000000a00620003900000000005604350000000505100039000000000505041a000000c00620003900000000005604350000000605100039000000000505041a0000078e05500197000000e00620003900000000005604350000000705100039000000000505041a000001000620003900000000005604350000000805100039000000000505041a0000012006200039000000000056043500000140022000390000000901100039000000000101041a0000078e011001970000000000120435000000000004004b000018740000613d00000001014000b900000000024100d9000000010020006c000018860000c13d000000c80210011a000000000001042d000000000003004b0000188c0000613d000000010400002900000000213400d9000000000002004b000018920000c13d000000000043004b0000000002000019000018990000213d000000000001042d000000000100001900001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000001101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000001201000039000000040010043f000007cb0100004100001e2600010430000000400100043d00000044021000390000081b03000041000000000032043500000024021000390000000e030000390000189f0000013d000000400100043d00000044021000390000081c030000410000000000320435000000240210003900000005030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007b9011001c700001e26000104300008000000000002000800000002001d000700000001001d000000400100043d0000081d0010009c00001a440000813d0000000b02000039000000000202041a0000000c03000039000000000303041a000000a404100039000000000034043500000024031000390000078a0400004100000000004304350000078e02200197000000840310003900000000002304350000006402100039000000000300041400000040040000390000000000420435000000440210003900000060040000390000000000420435000007ee020000410000000000210435000000040210003900000000000204350000078b0010009c0000078b0100804100000040011002100000078b0030009c0000078b03008041000000c002300210000000000112019f0000081e011001c700008006020000391e241e1a0000040f000000010020019000001a4a0000613d00000001020003670000000003000031000000000101043b000000000001004b00001a4d0000613d0000000b04000039000000000404041a000500000004001d000000400600043d0000081f040000410000000000460435000000040460003900000020050000390000000000540435000000240460003900000008050000290000000000540435000600000006001d000000440460003900040005005002180000000409400029000000000005004b000300000001001d000019380000613d000000070800002900000000058300490000001f0550008a000007e8065001970000000007000019000018fa0000013d0000001f01a000390000081601100197000000000a9a001900000000000a0435000000000991001900000020088000390000000107700039000000080070006c000019380000813d000000060a90006a000000440aa0008a0000000004a40436000000000a82034f000000000a0a043b000007e80ba00197000000000c6b013f00000000006b004b000000000b000019000007e80b00204100000000005a004b000000000d000019000007e80d004041000007e800c0009c000000000b0dc01900000000000b004b00001a420000613d000000070ba00029000000000ab2034f000000000a0a043b000007b200a0009c00001a420000213d000000200bb00039000000000ca300490000000000cb004b000000000d000019000007e80d002041000007e80cc00197000007e80eb00197000000000fce013f0000000000ce004b000000000c000019000007e80c004041000007e800f0009c000000000c0dc01900000000000c004b00001a420000c13d000000000cb2034f0000000009a90436000008160da00198000000000bd900190000192a0000613d000000000e0c034f000000000f09001900000000e10e043c000000000f1f04360000000000bf004b000019260000c13d0000001f0ea00190000018f10000613d0000000001dc034f000000030ce00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000101043b000001000cc000890000000001c1022f0000000001c101cf0000000001d1019f00000000001b0435000018f10000013d00000005010000290000078e02100197000000060300002900000000013900490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b030080410000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f000500000002001d1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000605700029000019590000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b000019550000c13d000000000006004b000019660000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a6d0000613d0000001f01400039000000600210018f0000000601200029000000000021004b00000000020000390000000102004039000007b20010009c00001a440000213d000000010020019000001a440000c13d000000400010043f000000200030008c00001a420000413d00000006010000290000000001010433000200000001001d000007c80100004100000000001004430000000501000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f000000010020019000001a790000613d000000000101043b000000000001004b00001a420000613d000000400900043d00000820010000410000000001190436000100000001001d00000004019000390000002002000039000000000021043500000024019000390000000802000029000000000021043500000044019000390000000408100029000000000002004b000600000009001d000019e70000613d00000000020000310000000707000029000000000472004900000001030003670000001f0440008a000007e8054001970000000006000019000019a90000013d0000001f0a900039000008160aa001970000000009890019000000000009043500000000088a001900000020077000390000000106600039000000080060006c0000000609000029000019e70000813d0000000009980049000000440990008a0000000001910436000000000973034f000000000909043b000007e80a900197000000000b5a013f00000000005a004b000000000a000019000007e80a004041000000000049004b000000000c000019000007e80c008041000007e800b0009c000000000a0cc01900000000000a004b00001a420000c13d000000070a9000290000000009a3034f000000000909043b000007b20090009c00001a420000213d000000200aa00039000000000b9200490000000000ba004b000000000c000019000007e80c002041000007e80bb00197000007e80da00197000000000ebd013f0000000000bd004b000000000b000019000007e80b004041000007e800e0009c000000000b0cc01900000000000b004b00001a420000c13d000000000ba3034f0000000008980436000008160c900198000000000ac80019000019d90000613d000000000d0b034f000000000e08001900000000df0d043c000000000efe04360000000000ae004b000019d50000c13d0000001f0d9001900000199f0000613d000000000bcb034f000000030cd00210000000000d0a0433000000000dcd01cf000000000dcd022f000000000b0b043b000001000cc00089000000000bcb022f000000000bcb01cf000000000bdb019f0000000000ba04350000199f0000013d00000000019800490000078b0010009c0000078b0100804100000060011002100000078b0090009c0000078b020000410000000002094019000800400020021800000008011001af00000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f0000000203000029000000000003004b000019fd0000613d000007be011001c7000080090200003900000005040000290000000005000019000019fe0000013d00000005020000291e241e1a0000040f0000000100200190000000060200002900001a7a0000613d000007b20020009c00001a440000213d000000400020043f0000082101000041000000000012043500000000010004140000078b0010009c0000078b01008041000000c00110021000000008011001af00000802011001c700000003020000290000078e022001971e241e1f0000040f000000060b00002900000060031002700000078b03300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057b001900001a200000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001a1c0000c13d000000000006004b00001a2d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a9a0000613d0000001f01400039000001e00110018f0000000001b10019000007b20010009c00001a440000213d000000400010043f000000a00030008c00001a420000413d00000000010b0433000008220010009c00001a420000213d0000008001b000390000000001010433000008220010009c00001a420000213d00000001010000290000000001010433000000640110011a000000000001042d000000000100001900001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e260001043000000060021002700000078b0220019700001a4f0000013d000000000132034f00000000020000190000001f0520018f0000078d06200198000000400300043d000000000463001900001a5a0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b00001a560000c13d000000000005004b00001a670000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060012002100000078b0030009c0000078b030080410000004002300210000000000112019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a740000c13d00001aa50000013d000000000001042f00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900001a860000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00001a820000c13d0000078b06600197000000000004004b00001a940000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060016002100000078b0020009c0000078b020080410000004002200210000000000121019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001aa50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001aa10000c13d000000000005004b00001ab20000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000078b0020009c0000078b020080410000004002200210000000000112019f00001e2600010430000a000000000002000a00000003001d000900000002001d0000078e01100197000000000010043f0000000601000039000000200010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007ba011001c700008010020000391e241e1f0000040f000000010020019000001d4f0000613d000000400500043d000008230050009c00001d510000813d000000000101043b000000a002500039000000400020043f000000000201041a0000078e0220019700000000042504360000000102100039000000000202041a0000078e03200197000700000004001d0000000000340435000007d7002001980000000002000039000000010200c0390000004007500039000000000027043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001082002700000007f0880618f0000001f0080008c00000000040000390000000104002039000000000043004b00001d5d0000c13d000000400600043d0000000004860436000000000003004b000800000005001d00001b0d0000613d000300000004001d000400000008001d000500000006001d000600000007001d000000000010043f00000000010004140000078b0010009c0000078b01008041000000c001100210000007bd011001c700008010020000391e241e1f0000040f0000000805000029000000010020019000001d4f0000613d0000000408000029000000000008004b00001b130000613d000000000201043b00000000010000190000000607000029000000050600002900000003090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00001b050000413d00001b160000013d00000818012001970000000000140435000000000008004b0000002001000039000000000100603900001b160000013d0000000001000019000000060700002900000005060000290000003f0110003900000816021001970000000001620019000000000021004b00000000020000390000000102004039000007b20010009c00001d510000213d000000010020019000001d510000c13d000000400010043f00000080015000390000000000610435000000400600043d00000004016000390000000002070433000000000002004b00001d630000613d0000000002050433000000000300041a000008240400004100000000004604350000078e0220019700000000002104350000078b0060009c0000078b010000410000000001064019000000400110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f0000078e02300197000007cb011001c7000600000006001d1e241e1f0000040f000000060b00002900000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001b4b0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001b470000c13d000000000006004b00001b580000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001d720000613d0000001f01400039000000600110018f0000000005b10019000000000015004b00000000010000390000000101004039000007b20050009c000000080400002900001d510000213d000000010010019000001d510000c13d000000400050043f000000200030008c00001d4f0000413d00000000010b0433000600000001001d000000070100002900000000020104330000000001040433000008240300004100000000003504350000078e01100197000000040350003900000000001304350000078b0050009c0000078b010000410000000001054019000000400110021000000000030004140000078b0030009c0000078b03008041000000c003300210000000000113019f000007cb011001c70000078e02200197000800000005001d1e241e1f0000040f000000080b00002900000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001b8f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001b8b0000c13d000000000006004b00001b9c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001d7e0000613d0000001f01400039000000600110018f0000000001b10019000007b20010009c00001d510000213d000000400010043f000000200030008c00001d4f0000413d00000000030b0433000000000003004b00001d8a0000613d0000000602000029000007f3042000d1000000000002004b00001bb00000613d00000000022400d9000007f30020009c00001d570000c13d000300000004001d000400000003001d000008250010009c00001d510000213d0000000b02000039000000000202041a0000000c03000039000000000303041a000000a404100039000000000034043500000024031000390000078a0400004100000000004304350000078e02200197000000840310003900000000002304350000006402100039000000000300041400000040040000390000000000420435000000440210003900000060040000390000000000420435000007ee020000410000000000210435000000040210003900000000000204350000078b0010009c0000078b0100804100000040011002100000078b0030009c0000078b03008041000000c002300210000000000112019f0000081e011001c700008006020000391e241e1a0000040f000000010020019000001d9a0000613d00000001020003670000000003000031000000000101043b000500000001001d000000000001004b00001d9d0000613d0000000b01000039000000000101041a000700000001001d000000400500043d0000081f04000041000000000045043500000004045000390000002001000039000000000014043500000024045000390000000a010000290000000000140435000800000005001d000000440450003900060005001002180000000609400029000000000001004b00001c3c0000613d000000090800002900000000058300490000001f0550008a000007e806500197000000000700001900001bfe0000013d0000001f01a000390000081601100197000000000a9a001900000000000a04350000000009910019000000200880003900000001077000390000000a0070006c00001c3c0000813d000000080a90006a000000440aa0008a0000000004a40436000000000a82034f000000000a0a043b000007e80ba00197000000000c6b013f00000000006b004b000000000b000019000007e80b00404100000000005a004b000000000d000019000007e80d008041000007e800c0009c000000000b0dc01900000000000b004b00001d4f0000c13d000000090ba00029000000000ab2034f000000000a0a043b000007b200a0009c00001d4f0000213d000000200bb00039000000000ca300490000000000cb004b000000000d000019000007e80d002041000007e80cc00197000007e80eb00197000000000fce013f0000000000ce004b000000000c000019000007e80c004041000007e800f0009c000000000c0dc01900000000000c004b00001d4f0000c13d000000000cb2034f0000000009a90436000008160da00198000000000bd9001900001c2e0000613d000000000e0c034f000000000f09001900000000e10e043c000000000f1f04360000000000bf004b00001c2a0000c13d0000001f0ea0019000001bf50000613d0000000001dc034f000000030ce00210000000000d0b0433000000000dcd01cf000000000dcd022f000000000101043b000001000cc000890000000001c1022f0000000001c101cf0000000001d1019f00000000001b043500001bf50000013d00000007010000290000078e02100197000000080300002900000000013900490000078b0010009c0000078b0100804100000060011002100000078b0030009c0000078b030080410000004003300210000000000131019f00000000030004140000078b0030009c0000078b03008041000000c003300210000000000131019f000700000002001d1e241e1f0000040f00000060031002700000078b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000080570002900001c5d0000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b00001c590000c13d000000000006004b00001c6a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001dbd0000613d0000001f01400039000000600210018f0000000801200029000000000021004b00000000020000390000000102004039000007b20010009c00001d510000213d000000010020019000001d510000c13d000000400010043f000000200030008c00001d4f0000413d00000008010000290000000001010433000200000001001d000007c80100004100000000001004430000000701000029000000040010044300000000010004140000078b0010009c0000078b01008041000000c001100210000007c9011001c700008002020000391e241e1f0000040f000000010020019000001dc90000613d000000000101043b000000000001004b00001d4f0000613d000000400900043d00000820010000410000000001190436000100000001001d00000004019000390000002002000039000000000021043500000024019000390000000a02000029000000000021043500000044019000390000000608100029000000000002004b000800000009001d00001ceb0000613d00000000020000310000000907000029000000000472004900000001030003670000001f0440008a000007e805400197000000000600001900001cad0000013d0000001f0a900039000008160aa001970000000009890019000000000009043500000000088a0019000000200770003900000001066000390000000a0060006c000000080900002900001ceb0000813d0000000009980049000000440990008a0000000001910436000000000973034f000000000909043b000007e80a900197000000000b5a013f00000000005a004b000000000a000019000007e80a004041000000000049004b000000000c000019000007e80c008041000007e800b0009c000000000a0cc01900000000000a004b00001d4f0000c13d000000090a9000290000000009a3034f000000000909043b000007b20090009c00001d4f0000213d000000200aa00039000000000b9200490000000000ba004b000000000c000019000007e80c002041000007e80bb00197000007e80da00197000000000ebd013f0000000000bd004b000000000b000019000007e80b004041000007e800e0009c000000000b0cc01900000000000b004b00001d4f0000c13d000000000ba3034f0000000008980436000008160c900198000000000ac8001900001cdd0000613d000000000d0b034f000000000e08001900000000df0d043c000000000efe04360000000000ae004b00001cd90000c13d0000001f0d90019000001ca30000613d000000000bcb034f000000030cd00210000000000d0a0433000000000dcd01cf000000000dcd022f000000000b0b043b000001000cc00089000000000bcb022f000000000bcb01cf000000000bdb019f0000000000ba043500001ca30000013d00000000019800490000078b0010009c0000078b01008041000000600110021000000000020004140000078b0020009c0000078b02008041000000c002200210000000000121019f0000078b0090009c0000078b020000410000000002094019000a0040002002180000000a011001af0000000203000029000000000003004b00001d010000613d000007be011001c700008009020000390000000704000029000000000500001900001d020000013d00000007020000291e241e1a0000040f0000000100200190000000080200002900001dca0000613d000007b20020009c00001d510000213d000000400020043f0000082101000041000000000012043500000000010004140000078b0010009c0000078b01008041000000c0011002100000000a011001af00000802011001c700000005020000290000078e022001971e241e1f0000040f000000080b00002900000060031002700000078b03300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057b001900001d240000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001d200000c13d000000000006004b00001d310000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001de60000613d0000001f01400039000001e00110018f0000000001b10019000007b20010009c00001d510000213d000000400010043f000000a00030008c00001d4f0000413d00000000010b0433000008220010009c00001d4f0000213d0000008001b000390000000001010433000008220010009c00001d4f0000213d000000030500002900000004025000fa00000001010000290000000001010433000000640310011a00000000012300a9000000040050006b00001d4d0000213d00000000022100d9000000000032004b00001d570000c13d000007f30110012a000000000001042d000000000100001900001e2600010430000007d401000041000000000010043f0000004101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000001101000039000000040010043f000007cb0100004100001e2600010430000007d401000041000000000010043f0000002201000039000000040010043f000007cb0100004100001e2600010430000007b8020000410000000000260435000000200200003900000000002104350000004401600039000008270200004100000000002104350000002401600039000000110200003900000000002104350000078b0060009c0000078b060080410000004001600210000007b9011001c700001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d790000c13d00001df10000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d850000c13d00001df10000013d00000044021000390000082603000041000000000032043500000024021000390000000c030000390000000000320435000007b80200004100000000002104350000000402100039000000200300003900000000003204350000078b0010009c0000078b010080410000004001100210000007b9011001c700001e260001043000000060021002700000078b0220019700001d9f0000013d000000000132034f00000000020000190000001f0520018f0000078d06200198000000400300043d000000000463001900001daa0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b00001da60000c13d000000000005004b00001db70000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060012002100000078b0030009c0000078b030080410000004002300210000000000112019f00001e26000104300000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001dc40000c13d00001df10000013d000000000001042f00000060061002700000001f0460018f0000078d05600198000000400200043d000000000352001900001dd60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00001dd20000c13d0000078b06600197000000000004004b00001de40000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000600160021000001dff0000013d0000001f0530018f0000078d06300198000000400200043d000000000462001900001df10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001ded0000c13d000000000005004b00001dfe0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000078b0020009c0000078b020080410000004002200210000000000112019f00001e2600010430000000000001042f0000078b0010009c0000078b0100804100000040011002100000078b0020009c0000078b020080410000006002200210000000000112019f00000000020004140000078b0020009c0000078b02008041000000c002200210000000000112019f000007be011001c700008010020000391e241e1f0000040f000000010020019000001e180000613d000000000101043b000000000001042d000000000100001900001e260001043000001e1d002104210000000102000039000000000001042d0000000002000019000000000001042d00001e22002104230000000102000039000000000001042d0000000002000019000000000001042d00001e240000043200001e250001042e00001e260001043000000000000000000100016b3a464d69a0e34c8b719f571485a6faabaa092c5a12040dd5321a96c200000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b48600000000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000c55dae6200000000000000000000000000000000000000000000000000000000df2bafcc00000000000000000000000000000000000000000000000000000000df2bafcd00000000000000000000000000000000000000000000000000000000e408247000000000000000000000000000000000000000000000000000000000f23a6e6100000000000000000000000000000000000000000000000000000000c55dae6300000000000000000000000000000000000000000000000000000000d7e606bb00000000000000000000000000000000000000000000000000000000da2de2b400000000000000000000000000000000000000000000000000000000aa6a997300000000000000000000000000000000000000000000000000000000aa6a997400000000000000000000000000000000000000000000000000000000b4423e2600000000000000000000000000000000000000000000000000000000bc197c81000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000a3750e9d00000000000000000000000000000000000000000000000000000000a6f9dae1000000000000000000000000000000000000000000000000000000005122c4080000000000000000000000000000000000000000000000000000000078f9208d0000000000000000000000000000000000000000000000000000000078f9208e000000000000000000000000000000000000000000000000000000007bcf6cde0000000000000000000000000000000000000000000000000000000082c0ab21000000000000000000000000000000000000000000000000000000005122c40900000000000000000000000000000000000000000000000000000000532ab8a10000000000000000000000000000000000000000000000000000000064b87a700000000000000000000000000000000000000000000000000000000048de101d0000000000000000000000000000000000000000000000000000000048de101e0000000000000000000000000000000000000000000000000000000049da42ad000000000000000000000000000000000000000000000000000000004fccc826000000000000000000000000000000000000000000000000000000002649cdfd0000000000000000000000000000000000000000000000000000000033039d3d00000000000000000000000000000000000000000000000000000000367fc743000000000000000000000000000000000000000000000000fffffffffffffffff23a6e610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffedf6e6f74206f776e6572000000000000000000000000000000000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002c22db012d065378eeffaebe1908e1afcbdc3be6e6adc686b5239d4e1144e74f50616972206d75737420626520617070726f7665640000000000000000000000496e76616c6964207661756c7420616464726573730000000000000000000000496e76616c6964204c50206164647265737300000000000000000000000000005a65726f2061646472657373206e6f7420616c6c6f776564000000000000000020677261647561746564000000000000000000000000000000000000000000006e6f7420726561647920746f206772616475617465206f7220616c72656164790000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe9f1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000021c03a97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffffbf8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b00fdd58e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000f68790c700000000000000000000000000000000000000000000000000000000f39645510000000000000000000000000000000000000000000000000000000054af84a1000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f0000000000000000000000ff000000000000000000000000000000000000000050838b3400000000000000000000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000e6a4390500000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000b3175330000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000160000000000000000000000000ef0331b07d4c03673c89e5c43b02687583aca8fddab934113e3f052d3738bda46c70206661696c65640000000000000000000000000000000000000000000000736f6d657468696e67206261642068617070656e6564000000000000000000000000000000000000000000000000000000000020000000800000000000000000bc197c810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000008000000000000000006e6577206f776e657220697320746865207a65726f206164647265737300000000000000000000000000000000000000000000640000008000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000000000000000000000000000000000e8d4a510010000000000000000000000000000000000000000000000000000000000ffffff0000000000000000003d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000000000000000000005af43d82803e903d91602b57fd5bf39c4d535bdea7cd8a978f128b93471df48c7dbab89d703809115bdc118c235bfd0200000000000000000000000000000000000037000000090000000000000000a565dbad000000000000000000000000000000000000000000000000000000004d75737420626520646976697369626c6520627920313030300000000000000000000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000de0b6b3a7640000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009eebf593e2999b320300f54bf9a3684f78f4c621194ff1d94bbf97de231a3b60696c6c696f6e0000000000000000000000000000000000000000000000000000546f74616c20737570706c7920746f6f2068696768202d206d617820312074726c6c696f6e000000000000000000000000000000000000000000000000000000546f74616c20737570706c7920746f6f206c6f77202d206d696e203130206d690000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000001ad274800000000000000000000000000000000000000000033b2e3cadb136f08f640000000000000000000000000000000000000000000001743b34e18439b50200000062616420616d6f756e7473000000000000000000000000000000000000000000496e76616c696420707269636500000000000000000000000000000000000000b06ebf3d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000006e6f7420617070726f76656400000000000000000000000000000000000000006d636170206d7573742062652067726561746572207468616e20300000000000f242432a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000a082022e93cfcd9f1da5f9236718053910f7e840da080c789c7845698dc032ff73656c6c206661696c6564000000000000000000000000000000000000000000706c756e67652070726f74656374696f6e000000000000000000000000000000616c7265616479206772616475617465640000000000000000000000000000001b579ea76e206cbd9ddc721b0fa25e81998b224ad6fba1366e08f6f960f3fe1750616972206e6f7420666f756e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8d4a5100023b872dd00000000000000000000000000000000000000000000000000000000616c726561647920726561647920746f20677261647561746500000000000000e9699692476d33666a890b3e41ba09c4c0c1abf5266f070b65764b82033754c0746172676574206e6f74206d657400000000000000000000000000000000000089f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e627579206661696c6564000000000000000000000000000000000000000000000000000000000000000000000000000000000064000001e00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffea077726f6e67206d756c7469706c650000000000000000000000000000000000007878787878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7c02000000000000000000000000000000000000c4000000000000000000000000d47eed4500000000000000000000000000000000000000000000000000000000ef9e5e2800000000000000000000000000000000000000000000000000000000feaf968c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff6070a0823100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7b4e6f206c6971756964697479000000000000000000000000000000000000000050616972206e6f7420617070726f7665640000000000000000000000000000003e48d1eef5e95419ebdeecc8480e9bebdaeef206f00ca86b64f2979c28675e9d
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f9530000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a000000000000000000000000756162873526a6b9d6a15064a5be33e2de38bb5c00000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b486ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
-----Decoded View---------------
Arg [0] : _baseToken (address): 0xE642F7D1F07aF75ed8198F0b4D68F14244bAAAB5
Arg [1] : _stakingRewards (address): 0x0000000000000000000000000000000000000001
Arg [2] : _factory (address): 0x259A75B880d1ac494fC84D8b77bcb4754eeC3435
Arg [3] : _router (address): 0xa314cA85f158776847ad0A9dbB6C41Fd3DA5F953
Arg [4] : _msufactory (address): 0x8CC9c8f3890B16264A70Cd7b35FA52fe6E11984A
Arg [5] : _memecoinImplementation (address): 0x756162873526A6B9d6A15064a5bE33e2DE38Bb5C
Arg [6] : _pythPriceFeed (address): 0x47F2A9BDAd52d65b66287253cf5ca0D2b763b486
Arg [7] : _ethFeedId (bytes32): 0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435
Arg [3] : 000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f953
Arg [4] : 0000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a
Arg [5] : 000000000000000000000000756162873526a6b9d6a15064a5be33e2de38bb5c
Arg [6] : 00000000000000000000000047f2a9bdad52d65b66287253cf5ca0d2b763b486
Arg [7] : ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.