Source Code
Overview
ETH Balance
0 ETH
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Start Presale | 5785597 | 5 hrs ago | IN | 0 ETH | 0.00001724 | ||||
Buy Presale | 5771386 | 11 hrs ago | IN | 0 ETH | 0.00000449 | ||||
Buy Presale | 5770777 | 11 hrs ago | IN | 0 ETH | 0.00000259 | ||||
Start Presale | 5770676 | 11 hrs ago | IN | 0 ETH | 0.0000169 | ||||
Sell Presale | 5770358 | 12 hrs ago | IN | 0 ETH | 0.00000252 | ||||
Buy Presale | 5770272 | 12 hrs ago | IN | 0 ETH | 0.00000508 | ||||
Buy Presale | 5766299 | 13 hrs ago | IN | 0 ETH | 0.00000469 | ||||
Buy Presale | 5654305 | 2 days ago | IN | 0 ETH | 0.0000045 | ||||
Sell Presale | 5634762 | 2 days ago | IN | 0 ETH | 0.00000252 | ||||
Buy Presale | 5634746 | 2 days ago | IN | 0 ETH | 0.0000069 | ||||
Start Presale | 5634531 | 2 days ago | IN | 0 ETH | 0.00005151 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5785597 | 5 hrs ago | 0 ETH | ||||
5785597 | 5 hrs ago | 0 ETH | ||||
5785597 | 5 hrs ago | 0 ETH | ||||
5785597 | 5 hrs ago | 0 ETH | ||||
5785597 | 5 hrs ago | 0 ETH | ||||
5785597 | 5 hrs ago | 0 ETH | ||||
5785597 | 5 hrs ago | Contract Creation | 0 ETH | |||
5785597 | 5 hrs ago | 0 ETH | ||||
5785597 | 5 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5771386 | 11 hrs ago | 0 ETH | ||||
5770777 | 11 hrs ago | 0 ETH | ||||
5770777 | 11 hrs ago | 0 ETH | ||||
5770777 | 11 hrs ago | 0 ETH | ||||
5770777 | 11 hrs ago | 0 ETH | ||||
5770777 | 11 hrs ago | 0 ETH | ||||
5770777 | 11 hrs ago | 0 ETH | ||||
5770777 | 11 hrs ago | 0 ETH |
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:
PRESALE
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 "./ThresholdERC1155.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"; contract PRESALE { 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; address 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 immutable BASE_USD_AGGREGATOR; 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 _baseUsdAggregator) { owner = msg.sender; baseToken = _baseToken; IDALWAYSZERO.push(0); stakingRewards = _stakingRewards; factory = _factory; router = _router; msUniFactory = _msufactory; memecoinImplementation = _memecoinImplementation; BASE_USD_AGGREGATOR = _baseUsdAggregator; } modifier onlyOwner() { require(msg.sender == owner, 'not owner'); _; } function startPresale(string memory _name, string memory _symbol, uint256 _totalsupply, string memory _uri, uint256[] memory _thresholds) 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"); ThresholdERC1155 memecoin = new ThresholdERC1155(); memecoin.initialize(msg.sender, stakingRewards, _totalsupply, _name, _symbol, _uri, _thresholds); (uint amountmemecointolp, uint amountmemecointosell, uint baseTokenNeededToFill) = _calculateAmounts(_totalsupply, address(0)); uint adjustment = baseTokenNeededToFill % amountmemecointosell; PresaleInfo memory info; info.amounttolp = amountmemecointolp; info.amounttosell = amountmemecointosell; info.totalsupply = _totalsupply; info.memecoin = address(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) external returns (address) { uint256 _totalsupply = 1000000000; AltPairInfo memory alt = approvedpaircoins[_paircoin1155]; require(alt.approved, "not approved"); ThresholdERC1155 memecoin = new ThresholdERC1155(); memecoin.initialize(msg.sender, stakingRewards, _totalsupply, _name, _symbol, _uri, _thresholds); (uint amountmemecointolp, uint amountmemecointosell, uint paircoinneededtofill) = _calculateAmounts(_totalsupply, _paircoin1155); paircoinneededtofill = paircoinneededtofill / 1e18; PresaleInfo memory info; info.amounttolp = amountmemecointolp; info.amounttosell = amountmemecointosell; info.graduated = false; info.totalsupply = _totalsupply; info.memecoin = address(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; IThresholdERC1155(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; IThresholdERC1155(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; IThresholdERC1155(info.memecoin).safeTransferFrom(msg.sender, address(this), 0, _sellAmountNFT, ""); } else { IThresholdERC1155(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 IThresholdERC1155(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; IThresholdERC1155(info.memecoin).setTradingOpen(true); (INftVault vaultMemeCoin, IMagicSwapV2Router.NftVaultLiquidityData memory vaultdataMemeCoin) = _createMemeCoinVault(_memeCoinAddress); IThresholdERC1155(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] = IThresholdERC1155(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 _calculateAmounts(uint256 _totalsupply, address _paircoin1155) internal view returns (uint256, uint256, uint256) { require(_totalsupply >= MIN_TOTAL_SUPPLY, "Min 10M"); 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(), 18 ); } else { baseTokenNeededToFill = calculateBaseTokenNeededForTargetMarketCap( TARGETMCAP * 1e6, amountmemecointolp, getAltPairCoinPriceUSD(_paircoin1155), 18 // Assuming the ERC1155 are using 18 decimals ); } require(baseTokenNeededToFill > 0, "bad amounts"); return (amountmemecointolp, amountmemecointosell, baseTokenNeededToFill); } function getAltPairCoinPriceUSD(address _altcoin) public view 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(); 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 getBaseTokenPriceUSD() public view returns (uint baseTokenPrice) { // Get the latest BASE_TOKEN/USD price from the Chainlink oracle IAggregatorV3 baseUsdOracle = IAggregatorV3(BASE_USD_AGGREGATOR); ( , int256 basePrice, , , ) = baseUsdOracle.latestRoundData(); // Convert from Chainlink's 8 decimals to 6 decimals baseTokenPrice = uint256(basePrice) / 100; } 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.17; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; contract ThresholdERC1155 is ERC165, IERC1155 { using Address for address; // Core state - just track total balances mapping(address => uint256) private _totalBalances; mapping(address => mapping(address => bool)) private _operatorApprovals; uint256[] public thresholds; uint256 public totalSupply; // Token metadata string private _baseURI; string public name; string public symbol; // Admin state bool public initialized; address public creator; address public presalefactory; bool public tradingEnabled; event ThresholdAdded(uint256 threshold, uint256 index); constructor() {} modifier onlyPresaleFactory() { require(msg.sender == presalefactory, "not factory"); _; } modifier onlyCreator() { require(msg.sender == creator, "not creator"); _; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || super.supportsInterface(interfaceId); } function setTradingOpen(bool _x) public onlyPresaleFactory() { tradingEnabled = _x; } function uri(uint256 id) public view virtual returns (string memory) { require(id <= thresholds.length, "Invalid token ID"); return _baseURI; } function setBaseURI(string memory newuri) public onlyCreator { _baseURI = newuri; } function addThreshold(uint256 newThreshold) external onlyCreator { // Must be higher than the last threshold require(thresholds.length > 0, "Thresholds array is empty"); require(newThreshold > thresholds[thresholds.length - 1], "New threshold must be higher than existing ones"); require(newThreshold < totalSupply, "Threshold must be less than total supply"); thresholds.push(newThreshold); emit ThresholdAdded(newThreshold, thresholds.length); } function initialize( address _creator, address _stakingRewards, uint256 _totalSupply, string memory _name, string memory _symbol, string memory baseURI, uint256[] memory _thresholds // New parameter ) external { require(!initialized, "Already initialized"); require(_creator != address(0), "Zero creator address"); require(_thresholds.length > 0, "Empty thresholds"); // Verify thresholds are in ascending order for(uint256 i = 1; i < _thresholds.length; i++) { require(_thresholds[i] > _thresholds[i-1], "Thresholds must be ascending"); } require(_thresholds[_thresholds.length - 1] < _totalSupply, "Highest threshold must be less than total supply"); thresholds = _thresholds; creator = _creator; presalefactory = msg.sender; initialized = true; name = _name; symbol = _symbol; _baseURI = baseURI; // Initial distribution (90/10 split) uint256 presaleAmount = _totalSupply * 90 / 100; uint256 stakingAmount = _totalSupply - presaleAmount; _totalBalances[msg.sender] = presaleAmount; _totalBalances[_stakingRewards] = stakingAmount; totalSupply = _totalSupply; // Emit transfer events with appropriate IDs emit TransferSingle(msg.sender, address(0), msg.sender, 0, presaleAmount); emit TransferSingle(msg.sender, address(0), _stakingRewards, 0, stakingAmount); } // Core balance view functions function balanceOf(address account, uint256 id) public view override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); // For contracts, only show balance at id 0 if (!isExternallyOwned(account)) { return id == 0 ? _totalBalances[account] : 0; } // For EOAs, show balance only at appropriate id uint256 appropriateId = _getAppropriateId(_totalBalances[account]); return id == appropriateId ? _totalBalances[account] : 0; } function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) public view override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } // Transfer functions function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) public override { require( from == msg.sender || isApprovedForAll(from, msg.sender), "ERC1155: caller is not owner nor approved" ); require(to != address(0), "ERC1155: transfer to the zero address"); require(tradingEnabled || to == presalefactory || from == presalefactory, "Trading not enabled"); require(id <= thresholds.length, "Invalid token ID"); // Verify balance require(_totalBalances[from] >= amount, "ERC1155: insufficient balance for transfer"); // Update total balances _totalBalances[from] -= amount; _totalBalances[to] += amount; // Determine recipient's appropriate ID uint256 toId = !isExternallyOwned(to) ? 0 : _getAppropriateId(_totalBalances[to]); emit TransferSingle(msg.sender, from, to, toId, amount); _doSafeTransferAcceptanceCheck(msg.sender, from, to, toId, amount, data); } function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) public override { require( from == msg.sender || isApprovedForAll(from, msg.sender), "ERC1155: transfer caller is not owner nor approved" ); require(to != address(0), "ERC1155: transfer to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(tradingEnabled || to == presalefactory || from == presalefactory, "Trading not enabled"); // Calculate total amount and verify balances uint256 totalAmount = 0; for (uint256 i = 0; i < ids.length; i++) { totalAmount += amounts[i]; } require(_totalBalances[from] >= totalAmount, "ERC1155: insufficient balance for transfer"); // Update total balances _totalBalances[from] -= totalAmount; _totalBalances[to] += totalAmount; // For the batch event, use the appropriate ID for the recipient uint256 toId = !isExternallyOwned(to) ? 0 : _getAppropriateId(_totalBalances[to]); uint256[] memory newIds = new uint256[](ids.length); for (uint256 i = 0; i < ids.length; i++) { newIds[i] = toId; } emit TransferBatch(msg.sender, from, to, newIds, amounts); _doSafeBatchTransferAcceptanceCheck(msg.sender, from, to, newIds, amounts, data); } // Approval functions function setApprovalForAll(address operator, bool approved) public override { require(msg.sender != operator, "ERC1155: setting approval status for self"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function isApprovedForAll(address account, address operator) public view override returns (bool) { return _operatorApprovals[account][operator]; } function totalBalanceOf(address account) public view returns (uint256) { return _totalBalances[account]; } // Internal helpers function isExternallyOwned(address account) private view returns (bool) { return account.code.length == 0; } function _getAppropriateId(uint256 balance) internal view returns (uint256) { for (uint256 i = thresholds.length; i > 0; i--) { if (balance >= thresholds[i - 1]) { return i; } } return 0; } function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (!isExternallyOwned(to)) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (!isExternallyOwned(to)) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } }
// 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: 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: 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 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; 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; interface IMagicSwapUniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); }
// 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: 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) (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) (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/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) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Interface that must be implemented by smart contracts in order to receive * ERC-1155 token transfers. */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC-1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC-1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol) pragma solidity ^0.8.20; import {Errors} from "./Errors.sol"; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert Errors.InsufficientBalance(address(this).balance, amount); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert Errors.FailedCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {Errors.FailedCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert Errors.InsufficientBalance(address(this).balance, value); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case * of an unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {Errors.FailedCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly ("memory-safe") { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert Errors.FailedCall(); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// 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: 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); }
{ "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":"_baseUsdAggregator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALE.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":"address","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALE.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":"address","name":"memecoin","type":"address"}],"indexed":false,"internalType":"struct PRESALE.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 PRESALE.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":"BASE_USD_AGGREGATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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 PRESALE.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":[{"internalType":"address","name":"_altcoin","type":"address"}],"name":"getAltPairCoinPriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseTokenPriceUSD","outputs":[{"internalType":"uint256","name":"baseTokenPrice","type":"uint256"}],"stateMutability":"view","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":"address","name":"memecoin","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[]"}],"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[]"}],"name":"startPresale1155","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b00000000000000000000000000000000000000000000000000000000000000000100075513fdd63726b0ac75bbb2ef40cb650c91800e20bccb82ad0880c460c0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f9530000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a00000000000000000000000059e50421be2c049cc822c75c2d08c7ebd5153e760000000000000000000000000a88341f5a312258dd2fcd366b1098196ab0fba4
Deployed Bytecode
0x00020000000000020012000000000002000000000302001900010000000103550000006002100270000006bf0020019d000006bf022001970000000100300190000000360000c13d0000008003000039000000400030043f000000040020008c0000065b0000413d000000000301043b000000e003300270000006c60030009c000000af0000a13d000006c70030009c000000d20000213d000006cf0030009c000001440000213d000006d30030009c000004c50000613d000006d40030009c000002200000613d000006d50030009c0000065b0000c13d000000240020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000401100370000000000101043b000006c20010009c0000065b0000213d0000000102000039000000000302041a000006c2043001970000000005000411000000000045004b0000065d0000c13d000000000001004b000006870000c13d000006ea01000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f0000072501000041000000c40010043f000007260100004100001af6000104300000000003000416000000000003004b0000065b0000c13d0000001f03200039000006c003300197000000a003300039000000400030043f0000001f0420018f000006c105200198000000a003500039000000470000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000036004b000000430000c13d000000000004004b000000540000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000e00020008c0000065b0000413d000000a00100043d000006c20010009c0000065b0000213d000000c00200043d001000000002001d000006c20020009c0000065b0000213d000000e00200043d000f00000002001d000006c20020009c0000065b0000213d000001000200043d000e00000002001d000006c20020009c0000065b0000213d000001200200043d000d00000002001d000006c20020009c0000065b0000213d000001400200043d000c00000002001d000006c20020009c0000065b0000213d000001600200043d000b00000002001d000006c20020009c0000065b0000213d000006c2011001970000a410020000390000000303000039000000000023041b0000000104000039000000000204041a000006c3022001970000000003000411000000000232019f000000000024041b000000000200041a000006c302200197000000000112019f000000000010041b0000000401000039000000000301041a000006c40030009c0000064c0000813d000a00000003001d0000000102300039000000000021041b000000000010043f000000200200003900000000010000191af41ab70000040f0000000a01100029000000000001041b0000000201000039000000000201041a000006c30220019700000010022001af000000000021041b0000000701000039000000000201041a000006c3022001970000000f022001af000000000021041b0000000801000039000000000201041a000006c3022001970000000e022001af000000000021041b0000000901000039000000000201041a000006c3022001970000000d022001af000000000021041b0000000a01000039000000000201041a000006c3022001970000000c022001af000000000021041b0000000b01000029000000800010043f000001400000044300000160001004430000002001000039000001000010044300000001010000390000012000100443000006c50100004100001af50001042e000006d60030009c000001130000a13d000006d70030009c0000019c0000213d000006db0030009c0000062f0000613d000006dc0030009c0000061f0000613d000006dd0030009c0000065b0000c13d000000240020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000401100370000000000101043b0000000102000039000000000202041a000006c2022001970000000003000411000000000023004b0000065d0000c13d000000000001004b0000066f0000c13d000006ea01000041000000800010043f0000002001000039000000840010043f0000001b01000039000000a40010043f0000073101000041000000c40010043f000007260100004100001af600010430000006c80030009c000001810000213d000006cc0030009c000004ca0000613d000006cd0030009c0000030b0000613d000006ce0030009c0000065b0000c13d000000240020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000401100370000000000101043b000006c20010009c0000065b0000213d000000000010043f0000000601000039000000200010043f000000400200003900000000010000191af41ab70000040f0000000202100039000000000202041a000f00000002001d0000000102100039000000000202041a000e00000002001d000000000201041a001000000002001d00000003011000391af417990000040f0000000e05000029000006c202500197000000400400043d000d00000004001d0000002003400039000000000023043500000709005001980000000002000039000000010200c0390000004003400039000000000023043500000060024000390000000f030000290000000000320435000000a002000039000000800340003900000000002304350000001002000029000006c2022001970000000000240435000000a0024000391af417e60000040f0000000d020000290000000001210049000006bf0010009c000006bf01008041000006bf0020009c000006bf0200804100000060011002100000004002200210000000000121019f00001af50001042e000006de0030009c000001b80000a13d000006df0030009c000001c80000613d000006e00030009c000001c10000613d000006e10030009c0000065b0000c13d000000240020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000401100370000000000101043b001000000001001d000006c20010009c0000065b0000213d0000000101000039000000000101041a000006c2011001970000000002000411000000000012004b0000065d0000c13d0000001001000029000000000010043f0000000601000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b0000000101100039000000000101041a0000070900100198000006e30000c13d000000400100043d00000044021000390000073a03000041000000000032043500000024021000390000000e03000039000007160000013d000006d00030009c000005010000613d000006d10030009c000003100000613d000006d20030009c0000065b0000c13d000000240020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000401100370000000000101043b000006c20010009c0000065b0000213d000000000010043f0000000501000039000000200010043f000000400200003900000000010000191af41ab70000040f0000000902100039000000000202041a0000000803100039000000000303041a0000000704100039000000000404041a0000000605100039000000000505041a0000000506100039000000000606041a0000000407100039000000000707041a0000000308100039000000000808041a0000000209100039000000000909041a000000010a100039000000000a0a041a000000000101041a000000ff00100190000000000b000039000000010b00c0390000008000b0043f0000ff00001001900000000001000039000000010100c039000000a00010043f000000c000a0043f000000e00090043f000001000080043f000001200070043f000001400060043f000006c201500197000001600010043f000001800040043f000001a00030043f000006c201200197000001c00010043f000007160100004100001af50001042e000006c90030009c000005090000613d000006ca0030009c000004430000613d000006cb0030009c0000065b0000c13d000000a40020008c0000065b0000413d0000000003000416000000000003004b0000065b0000c13d0000000403100370000000000303043b000006c20030009c0000065b0000213d0000002403100370000000000303043b000006c20030009c0000065b0000213d0000008401100370000000000101043b000006e40010009c0000065b0000213d00000004011000391af417800000040f000006e501000041000006680000013d000006d80030009c000006520000613d000006d90030009c000006260000613d000006da0030009c0000065b0000c13d000000440020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000402100370000000000302043b000006c20030009c0000065b0000213d0000002401100370000000000201043b00000000010300191af417f80000040f000000400300043d000000200430003900000000002404350000000000130435000006bf0030009c000006bf03008041000000400130021000000730011001c700001af50001042e000006e20030009c000004b70000613d000006e30030009c0000065b0000c13d0000000001000416000000000001004b0000065b0000c13d1af41a370000040f000006680000013d0000000001000416000000000001004b0000065b0000c13d0000073b01000041000000800010043f000007140100004100001af50001042e000000440020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000402100370000000000202043b001000000002001d000006c20020009c0000065b0000213d0000002401100370000000000101043b000f00000001001d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000400200043d000006f90020009c0000064c0000213d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400520003900000000003504350000000203100039000000000303041a000000600820003900000000003804350000000303100039000000000303041a000000800420003900000000003404350000000403100039000000000303041a000000a00620003900000000003604350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a000006c203300197000000e00720003900000000003704350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a0000012004200039000000000034043500000140022000390000000901100039000000000101041a000006c2011001970000000000120435000006c40000613d000000400100043d00000044021000390000074103000041000000000032043500000024021000390000001903000039000007160000013d000000a40020008c0000065b0000413d0000000003000416000000000003004b0000065b0000c13d0000000403100370000000000403043b000006e40040009c0000065b0000213d0000002303400039000000000023004b0000065b0000813d0000000405400039000000000351034f000000000303043b000006e40030009c0000064c0000213d0000001f0630003900000743066001970000003f066000390000074306600197000006fe0060009c0000064c0000213d0000008006600039000000400060043f000000800030043f00000000043400190000002404400039000000000024004b0000065b0000213d0000002004500039000000000541034f00000743063001980000001f0730018f000000a0046000390000024a0000613d000000a008000039000000000905034f000000009a09043c0000000008a80436000000000048004b000002460000c13d000000000007004b000002570000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000000a00330003900000000000304350000002403100370000000000403043b000006e40040009c0000065b0000213d0000002303400039000000000023004b0000065b0000813d0000000405400039000000000351034f000000000303043b000006e40030009c0000064c0000213d0000001f0630003900000743066001970000003f066000390000074306600197000000400700043d0000000006670019001000000007001d000000000076004b00000000070000390000000107004039000006e40060009c0000064c0000213d00000001007001900000064c0000c13d000000400060043f00000010060000290000000006360436000f00000006001d00000000043400190000002404400039000000000024004b0000065b0000213d0000002004500039000000000541034f00000743063001980000001f0730018f0000000f04600029000002870000613d000000000805034f0000000f09000029000000008a08043c0000000009a90436000000000049004b000002830000c13d000000000007004b000002940000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000f0330002900000000000304350000006403100370000000000403043b000006e40040009c0000065b0000213d0000002303400039000000000023004b0000065b0000813d0000000405400039000000000351034f000000000303043b000006e40030009c0000064c0000213d0000001f0630003900000743066001970000003f066000390000074306600197000000400700043d0000000006670019000e00000007001d000000000076004b00000000070000390000000107004039000006e40060009c0000064c0000213d00000001007001900000064c0000c13d000000400060043f0000000e060000290000000006360436000d00000006001d00000000043400190000002404400039000000000024004b0000065b0000213d0000002004500039000000000541034f00000743063001980000001f0730018f0000000d04600029000002c40000613d000000000805034f0000000d09000029000000008a08043c0000000009a90436000000000049004b000002c00000c13d000000000007004b000002d10000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000d0330002900000000000304350000008403100370000000000303043b000006e40030009c0000065b0000213d0000002304300039000000000024004b0000065b0000813d0000000404300039000000000441034f000000000404043b000006e40040009c0000064c0000213d00000005054002100000003f065000390000071706600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000006e40060009c0000064c0000213d00000001007001900000064c0000c13d000000400060043f0000000c06000029000000000046043500000024033000390000000005350019000000000025004b0000065b0000213d000000000004004b000002fd0000613d0000000c02000029000000000431034f000000000404043b000000200220003900000000004204350000002003300039000000000053004b000002f60000413d000000400200043d0000004401100370000000000101043b000007270010009c00000be00000213d00000064012000390000072e03000041000000000031043500000044012000390000072f0300004100000000003104350000002401200039000000250300003900000bea0000013d0000000001000416000000000001004b0000065b0000c13d000000000100041a0000062b0000013d000000a40020008c0000065b0000413d0000000003000416000000000003004b0000065b0000c13d0000000403100370000000000403043b000006e40040009c0000065b0000213d0000002303400039000000000023004b0000065b0000813d0000000405400039000000000351034f000000000303043b000006e40030009c0000064c0000213d0000001f0630003900000743066001970000003f066000390000074306600197000006fe0060009c0000064c0000213d0000008006600039000000400060043f000000800030043f00000000043400190000002404400039000000000024004b0000065b0000213d0000002004500039000000000541034f00000743063001980000001f0730018f000000a0046000390000033a0000613d000000a008000039000000000905034f000000009a09043c0000000008a80436000000000048004b000003360000c13d000000000007004b000003470000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000000a00330003900000000000304350000002403100370000000000403043b000006e40040009c0000065b0000213d0000002303400039000000000023004b0000065b0000813d0000000405400039000000000351034f000000000303043b000006e40030009c0000064c0000213d0000001f0630003900000743066001970000003f066000390000074306600197000000400700043d0000000006670019001000000007001d000000000076004b00000000070000390000000107004039000006e40060009c0000064c0000213d00000001007001900000064c0000c13d000000400060043f00000010060000290000000006360436000f00000006001d00000000043400190000002404400039000000000024004b0000065b0000213d0000002004500039000000000541034f00000743063001980000001f0730018f0000000f04600029000003770000613d000000000805034f0000000f09000029000000008a08043c0000000009a90436000000000049004b000003730000c13d000000000007004b000003840000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000f0330002900000000000304350000004403100370000000000403043b000006e40040009c0000065b0000213d0000002303400039000000000023004b0000065b0000813d0000000405400039000000000351034f000000000303043b000006e40030009c0000064c0000213d0000001f0630003900000743066001970000003f066000390000074306600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000006e40060009c0000064c0000213d00000001007001900000064c0000c13d000000400060043f0000000c060000290000000006360436000d00000006001d00000000043400190000002404400039000000000024004b0000065b0000213d0000002004500039000000000541034f00000743063001980000001f0730018f0000000d04600029000003b40000613d000000000805034f0000000d09000029000000008a08043c0000000009a90436000000000049004b000003b00000c13d000000000007004b000003c10000613d000000000565034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000d0330002900000000000304350000006403100370000000000303043b000006c20030009c0000065b0000213d0000008404100370000000000404043b000006e40040009c0000065b0000213d0000002305400039000000000025004b0000065b0000813d0000000405400039000000000551034f000000000505043b000006e40050009c0000064c0000213d00000005065002100000003f076000390000071707700197000000400800043d0000000007780019000e00000008001d000000000087004b00000000080000390000000108004039000006e40070009c0000064c0000213d00000001008001900000064c0000c13d000000400070043f0000000e07000029000000000057043500000024044000390000000006460019000000000026004b0000065b0000213d000000000005004b000003f10000613d0000000e02000029000000000541034f000000000505043b000000200220003900000000005204350000002004400039000000000064004b000003ea0000413d000006c201300197000000000010043f0000000601000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000400200043d000b00000002001d000007080020009c0000064c0000213d000000000101043b0000000b05000029000000a002500039000000400020043f000000000201041a000006c20220019700000000022504360000000103100039000000000303041a000006c204300197000000000042043500000709003001980000000002000039000000010200c0390000004003500039000900000003001d000000000023043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001042002700000007f0440618f000a00000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000007000000c13d000000400400043d000800000004001d0000000a050000290000000004540436000700000004001d000000000003004b00000e340000613d000000000010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ef011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d0000000a05000029000000000005004b0000000002000019000000070600002900000e3a0000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b0000043b0000413d00000e3a0000013d000000440020008c0000065b0000413d0000000003000416000000000003004b0000065b0000c13d0000000403100370000000000303043b001000000003001d000006c20030009c0000065b0000213d0000002403100370000000000403043b000006e40040009c0000065b0000213d0000000003420049000006e70030009c0000065b0000213d000000a40030008c0000065b0000413d0000012003000039000000400030043f0000000405400039000000000651034f000000000606043b000006c20060009c0000065b0000213d000000800060043f0000002005500039000000000651034f000000000606043b000006c20060009c0000065b0000213d000000a00060043f0000002005500039000000000651034f000000000606043b000000000006004b0000000007000039000000010700c039000000000076004b0000065b0000c13d000000c00060043f0000002006500039000000000661034f000000000606043b000000e00060043f0000004005500039000000000551034f000000000505043b000006e40050009c0000065b0000213d00000000054500190000002304500039000000000024004b0000065b0000813d0000000406500039000000000461034f000000000404043b000006e40040009c0000064c0000213d0000001f0740003900000743077001970000003f077000390000074307700197000006e80070009c0000064c0000213d0000012007700039000000400070043f000001200040043f00000000054500190000002405500039000000000025004b0000065b0000213d0000002002600039000000000221034f00000743054001980000001f0640018f0000014001500039000004980000613d0000014007000039000000000802034f000000008908043c0000000007970436000000000017004b000004940000c13d000000000006004b000004a50000613d000000000252034f0000000305600210000000000601043300000000065601cf000000000656022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000262019f000000000021043500000140014000390000000000010435000001000030043f0000000101000039000000000101041a000006c2011001970000000002000411000000000012004b00000b070000c13d000000100000006b00000b0e0000c13d000000400100043d0000004402100039000006f503000041000000000032043500000024021000390000001803000039000007160000013d0000000001000416000000000001004b0000065b0000c13d0000000001000412001200000001001d001100000000003d000080050100003900000044030000390000000004000415000000120440008a000000050440021000000742020000411af41acc0000040f0000062b0000013d0000000001000416000000000001004b0000065b0000c13d00000001010000390000062a0000013d000000a40020008c0000065b0000413d0000000003000416000000000003004b0000065b0000c13d0000000403100370000000000303043b000006c20030009c0000065b0000213d0000002403100370000000000303043b000006c20030009c0000065b0000213d0000004403100370000000000303043b000006e40030009c0000065b0000213d0000002304300039000000000024004b0000065b0000813d0000000404300039000000000441034f000000000404043b000006e40040009c0000065b0000213d000000050440021000000000034300190000002403300039000000000023004b0000065b0000213d0000006403100370000000000303043b000006e40030009c0000065b0000213d0000002304300039000000000024004b0000065b0000813d0000000404300039000000000441034f000000000404043b000006e40040009c0000065b0000213d000000050440021000000000034300190000002403300039000000000023004b0000065b0000213d0000008401100370000000000101043b000006e40010009c0000065b0000213d00000004011000391af417800000040f0000071501000041000006680000013d0000000001000416000000000001004b0000065b0000c13d0000000301000039000000000101041a000000800010043f000007140100004100001af50001042e000000240020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000401100370000000000101043b001000000001001d000006c20010009c0000065b0000213d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b000000000101041a000000ff00100190000006730000613d0000ff0000100190000006730000c13d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000400200043d000006f90020009c0000064c0000213d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000303041a000000600420003900000000003404350000000303100039000000000303041a000000800420003900000000003404350000000403100039000000000303041a000000a004200039000d00000004001d00000000003404350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a000006c203300197000000e004200039000e00000004001d00000000003404350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a0000012004200039000000000034043500000140022000390000000901100039000000000101041a000006c201100197000f00000002001d00000000001204350000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b000000000201041a000007440220019700000100022001bf000000000021041b0000000f010000290000000001010433000006fa020000410000000000200443000006c201100197000c00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d000006fc010000410000000001130436000a00000001001d000000040130003900000001020000390000000000210435000006bf0030009c000b00000003001d000006bf01000041000000000103401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f000006fd011001c70000000c020000291af41aea0000040f000000010020019000000ace0000613d0000000b01000029000006e40010009c0000064c0000213d0000000b01000029000000400010043f000006fe0010009c0000064c0000213d0000000b020000290000008001200039000000400010043f000000600120003900000060030000390000000000310435000000400120003900000000003104350000000a0100002900000000003104350000000000020435000000400100043d000a00000001001d000006ff0010009c0000064c0000213d0000000a020000290000004001200039000000400010043f0000000101000039000000000112043600000000020000310000000102200367000000000202043b0000000000210435000000400400043d000800000004001d000006ff0040009c0000064c0000213d00000008050000290000004004500039000000400040043f00000001040000390000000004450436000c00000004001d0000000000240435000000400200043d000b00000002001d000006ff0020009c0000064c0000213d0000000b040000290000004002400039000000400020043f00000001020000390000000002240436000000400400043d000006fe0040009c0000064c0000213d0000008005400039000000400050043f00000060054000390000000000350435000000400340003900000000000304350000002003400039000000000003043500000000000404350000000000420435000000400300043d000006fe0030009c0000064c0000213d0000008004300039000000400040043f00000020043000390000000105000039000000000054043500000010040000290000000000430435000000400430003900000000000404350000000407000039000000000607041a000000400400043d0000000005640436000000000070043f000000000006004b000006020000613d00000700070000410000000008000019000000000907041a000000000595043600000001077000390000000108800039000000000068004b000005fc0000413d00000000054500490000001f0550003900000743065001970000000005460019000000000065004b00000000060000390000000106004039000006e40050009c0000064c0000213d00000001006001900000064c0000c13d000000400050043f000000600530003900000000004504350000000b040000290000000004040433000000000004004b000006190000613d00000000003204350000000a020000290000000002020433000000000002004b00000d090000c13d0000070601000041000000000010043f0000003201000039000000040010043f000006fd0100004100001af6000104300000000001000416000000000001004b0000065b0000c13d0000071b01000041000000800010043f000007140100004100001af50001042e0000000001000416000000000001004b0000065b0000c13d0000000201000039000000000101041a000006c201100197000000800010043f000007140100004100001af50001042e000000440020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000402100370000000000202043b001000000002001d000006c20020009c0000065b0000213d0000002401100370000000000101043b000f00000001001d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000400200043d000006f90020009c0000068c0000a13d0000070601000041000000000010043f0000004101000039000000040010043f000006fd0100004100001af600010430000000240020008c0000065b0000413d0000000002000416000000000002004b0000065b0000c13d0000000401100370000000000101043b000006c20010009c000006670000a13d000000000100001900001af600010430000006ea01000041000000800010043f0000002001000039000000840010043f0000000901000039000000a40010043f000006e901000041000000c40010043f000007260100004100001af6000104301af4187b0000040f000000400200043d0000000000120435000006bf0020009c000006bf020080410000004001200210000006e6011001c700001af50001042e0000000302000039000000000012041b000000000100001900001af50001042e000000400100043d0000006402100039000006f60300004100000000003204350000004402100039000006f703000041000000000032043500000024021000390000002a030000390000000000320435000006ea020000410000000000210435000000040210003900000020030000390000000000320435000006bf0010009c000006bf010080410000004001100210000006f8011001c700001af600010430000006c303300197000000000113019f000000000012041b000000000100001900001af50001042e000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000303041a000000600420003900000000003404350000000303100039000000000303041a000000800420003900000000003404350000000403100039000000000303041a000000a00520003900000000003504350000000503100039000000000303041a000000c00420003900000000003404350000000603100039000000000303041a000006c203300197000000e00620003900000000003604350000000703100039000000000303041a000001000420003900000000003404350000000803100039000000000303041a0000012004200039000000000034043500000140022000390000000901100039000000000101041a000006c2011001970000000000120435000007060000613d000000400100043d00000044021000390000073803000041000007130000013d000b00000008001d000a00000002001d00000010010000290000000f02000029000c00000005001d000e00000006001d000d00000007001d1af417f80000040f0000000d060000290000000c050000290000000e030000290000000003030433000000000013001a0000072c0000413d000000000401001900000000071300190000000001050433000000000017004b000008050000a13d000000000431004b0000072c0000413d0000000b010000290000000001010433000000000001004b000008040000c13d0000070601000041000000000010043f0000001201000039000000040010043f000006fd0100004100001af6000104300000001001000029000000000010043f0000000601000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b000000000001041b0000000102100039000000000002041b0000000202100039000000000002041b0000000303100039000000000103041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000010000390000000101002039000000000012004b000007320000613d0000070601000041000000000010043f0000002201000039000000040010043f000006fd0100004100001af600010430000d00000006001d000c00000002001d00000010010000290000000f02000029000e00000005001d1af417f80000040f0000000e030000290000000003030433000000000031004b000007210000a13d000000400100043d000000440210003900000737030000410000000000320435000000240210003900000011030000390000000000320435000006ea020000410000000000210435000000040210003900000020030000390000000000320435000006bf0010009c000006bf010080410000004001100210000006eb011001c700001af60001043000000000040200190000000d020000290000000002020433000000000300041a000000000323013f000006c200300198000b00000001001d000007620000c13d000a00000004001d000000000141004b000009b80000813d0000070601000041000000000010043f0000001101000039000000040010043f000006fd0100004100001af600010430000f00000003001d000000000004004b000007540000613d000e00000004001d0000001f0040008c000007520000a13d0000000f01000029000000000010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ef011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b0000000e020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b0000074f0000813d000000000003041b0000000103300039000000000023004b0000074b0000413d0000000f02000029000000000002041b000f00000001001d0000000f01000029000000000001041b0000000001000414000006bf0010009c000006bf01008041000000c001100210000006f0011001c70000800d020000390000000203000039000007390400004100000010050000291af41aea0000040f00000001002001900000065b0000613d000000000100001900001af50001042e0000000c010000290000000001010433000006fa020000410000000000200443000006c201100197000c00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f020000290000000000210435000007320100004100000000001304350000000001000410000006c2021001970000002401300039000900000002001d00000000002104350000000001000411000800000001001d000006c2021001970000000401300039000700000002001d0000000000210435000000a401300039000000000001043500000044013000390000000000010435000006bf0030009c000a00000003001d000006bf01000041000000000103401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000733011001c70000000c020000291af41aea0000040f000000010020019000000adb0000613d0000000a01000029000006e40010009c0000064c0000213d0000000a01000029000000400010043f0000000e010000290000000001010433000e000b001000740000072c0000413d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b00000004011000390000000e02000029000000000021041b0000000d010000290000000001010433000006fa020000410000000000200443000006c201100197000e00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000b02000029000000000021043500000024013000390000000702000029000000000021043500000732010000410000000000130435000000040130003900000009020000290000000000210435000000a401300039000000000001043500000044013000390000000000010435000006bf0030009c000d00000003001d000006bf010000410000000001034019000c0040001002180000000001000414000006bf0010009c000006bf01008041000000c0011002100000000c011001af00000733011001c70000000e020000291af41aea0000040f000000010020019000000b480000613d0000000d01000029000006e40010009c0000064c0000213d0000000d02000029000000400020043f0000000f01000029000000000012043500000020012000390000000b0200002900000000002104350000000001000414000006bf0010009c000006bf01008041000000c0011002100000000c011001af000006ec011001c70000800d0200003900000003030000390000073504000041000000100500002900000008060000291af41aea0000040f00000001002001900000065b0000613d000007600000013d000f0000001400e10000000001060433000006c203100197000000000100041a000006c201100197000000000013004b000b00000004001d000009020000c13d000000000024001a0000072c0000413d000800000002001d0000000001240019000000400400043d000900000004001d000000440240003900000000001204350000073c010000410000000000140435000000240140003900000000020004100000000000210435000000040140003900000000020004110000000000210435000006bf0040009c000006bf01000041000000000104401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f000006eb011001c700000000020300191af41aea0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b0000290000000905700029000008380000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000008340000c13d000000000006004b000008450000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000009ac0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000700000002001d000006e40020009c0000064c0000213d00000001001001900000064c0000c13d0000000701000029000000400010043f000000200030008c0000065b0000413d00000000020b0433000000000002004b0000000001000039000000010100c039000900000002001d000000000012004b0000065b0000c13d0000000d0100002900000000020104330000000201000039000000000101041a000000070500002900000024035000390000000804000029000000000043043500000734030000410000000000350435000006c20110019700000004035000390000000000130435000006bf0050009c000006bf01000041000000000105401900000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f00000702011001c7000006c2022001971af41aea0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000705700029000008850000613d000000000801034f0000000709000029000000008a08043c0000000009a90436000000000059004b000008810000c13d000000000006004b000008920000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000afb0000613d0000001f01400039000000600110018f0000000701100029000006e40010009c0000064c0000213d000000400010043f000000200030008c0000065b0000413d00000007020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b0000065b0000c13d000000090000006b00000b420000613d000000000002004b00000b420000613d0000000e010000290000000002010433000d00000002001d0000000b0020002a0000072c0000413d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d0000000d030000290000000b02300029000000000101043b0000000401100039000000000021041b0000000a010000290000000001010433000006fa020000410000000000200443000006c201100197000d00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f0200002900000000002104350000000001000411000006c20110019700000024023000390000000000120435000007320100004100000000001304350000000001000410000006c20110019700000004023000390000000000120435000000a401300039000000000001043500000044013000390000000000010435000006bf0030009c000a00000003001d000006bf01000041000000000103401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000733011001c70000000d020000291af41aea0000040f0000000100200190000009890000c13d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000008fd0000c13d00000ae70000013d000006fa010000410000000000100443000d00000003001d00000004003004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000b020000290000000000210435000007320100004100000000001304350000000001000410000006c2021001970000002401300039000800000002001d00000000002104350000000001000411000006c2021001970000000401300039000700000002001d0000000000210435000000a401300039000000000001043500000044013000390000000000010435000006bf0030009c000900000003001d000006bf01000041000000000103401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000733011001c70000000d020000291af41aea0000040f000000010020019000000ac10000613d0000000901000029000006e40010009c0000064c0000213d0000000901000029000000400010043f0000000e010000290000000002010433000d00000002001d0000000b0020002a0000072c0000413d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d0000000d030000290000000b02300029000000000101043b0000000401100039000000000021041b0000000a010000290000000001010433000006fa020000410000000000200443000006c201100197000d00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f02000029000000000021043500000024013000390000000702000029000000000021043500000732010000410000000000130435000000040130003900000008020000290000000000210435000000a401300039000000000001043500000044013000390000000000010435000006bf0030009c000a00000003001d000006bf01000041000000000103401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000733011001c70000000d020000291af41aea0000040f000000010020019000000b2b0000613d0000000a01000029000006e40010009c0000064c0000213d0000000a01000029000000400010043f0000000e0100002900000000010104330000000b02000029000000000021001a0000000c030000290000072c0000413d00000000012100190000000002030433000000000021004b00000bbf0000813d0000000a0300002900000020013000390000000b0200002900000000002104350000000f010000290000000000130435000006bf0030009c000006bf0300804100000040013002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f000006ec011001c70000800d02000039000000030300003900000000060004110000073f040000410000075c0000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000009b30000c13d00000ab20000013d000000400400043d000900000004001d00000024034000390000000000130435000007340100004100000000001404350000000001000411000800000001001d000006c2031001970000000401400039000700000003001d0000000000310435000006bf0040009c000006bf01000041000000000104401900000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f00000702011001c7000006c2022001971af41aea0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b0000290000000905700029000009e00000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000009dc0000c13d000000000006004b000009ed0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000aa70000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000600000002001d000006e40020009c0000064c0000213d00000001001001900000064c0000c13d0000000601000029000000400010043f000000200030008c0000065b0000413d00000000020b0433000000000002004b0000000001000039000000010100c039000900000002001d000000000012004b0000065b0000c13d0000000d0100002900000000020104330000000201000039000000000101041a000000060500002900000024035000390000000a04000029000000000043043500000734030000410000000000350435000006c20110019700000004035000390000000000130435000006bf0050009c000006bf01000041000000000105401900000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f00000702011001c7000006c2022001971af41aea0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000060570002900000a2d0000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b00000a290000c13d000000000006004b00000a3a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000b180000613d0000001f01400039000000600110018f0000000601100029000006e40010009c0000064c0000213d000000400010043f000000200030008c0000065b0000413d00000006020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b0000065b0000c13d000000090000006b00000bda0000613d000000000002004b00000bda0000613d0000000e010000290000000001010433000e000b001000740000072c0000413d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b00000004011000390000000e02000029000000000021041b0000000c010000290000000001010433000006fa020000410000000000200443000006c201100197000e00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d0000008401300039000000a002000039000000000021043500000064013000390000000f0200002900000000002104350000000001000410000006c2011001970000002402300039000000000012043500000732010000410000000000130435000000040130003900000007020000290000000000210435000000a401300039000000000001043500000044013000390000000000010435000006bf0030009c000d00000003001d000006bf010000410000000001034019000c0040001002180000000001000414000006bf0010009c000006bf01008041000000c0011002100000000c011001af00000733011001c70000000e020000291af41aea0000040f0000000100200190000007eb0000c13d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000aa20000c13d00000ae70000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000aae0000c13d000000000005004b00000abf0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000af60000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ac90000c13d00000ae70000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ad60000c13d00000ae70000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ae30000c13d000006bf06600197000000000004004b00000af50000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001600210000006bf0020009c000006bf020080410000004002200210000000000112019f00001af6000104300000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b020000c13d00000ab20000013d000000400100043d0000004402100039000006e903000041000000000032043500000024021000390000000903000039000007160000013d000000800100043d000006c20010019800000b240000c13d000000400100043d0000004402100039000006f403000041000000000032043500000024021000390000001203000039000007160000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b1f0000c13d00000ab20000013d000000a00100043d000006c20010019800000b380000c13d000000400100043d0000004402100039000006f30300004100000b3e0000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b330000c13d00000ae70000013d000000c00100043d000000000001004b00000b550000c13d000000400100043d0000004402100039000006f203000041000000000032043500000024021000390000001503000039000007160000013d00000044021000390000074003000041000000000032043500000024021000390000000a03000039000007160000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000b500000c13d00000ae70000013d0000001001000029000000000010043f0000000601000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000800200043d000006c202200197000000000101043b000000000301041a000006c303300197000000000223019f000000000021041b000000a00200043d000006c2022001970000000103100039000000000403041a000006ed04400197000000000224019f000000c00400043d000000000004004b000006ee040000410000000004006019000000000242019f000000000023041b0000000202100039000000e00300043d000000000032041b000001000200043d000e00000002001d0000000032020434000d00000003001d000f00000002001d000006e40020009c0000064c0000213d0000000301100039000c00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000b00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000007000000c13d0000000b01000029000000200010008c00000bab0000413d0000000c01000029000000000010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ef011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d0000000f030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000b010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000bab0000813d000000000002041b0000000102200039000000000012004b00000ba70000413d0000000f010000290000001f0010008c00000e060000a13d0000000c01000029000000000010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ef011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000200200008a0000000f02200180000000000101043b00000e600000c13d000000200300003900000e6d0000013d0000001001000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000201043b000000000402041a000000ff00400190000002190000c13d000000400100043d0000000103200039000000000503041a0000000403200039000000000303041a000000000053004b00000cca0000813d00000044021000390000073e03000041000001400000013d00000044021000390000073603000041000000000032043500000024021000390000000b03000039000007160000013d000007280010009c00000bf50000413d00000064012000390000072c03000041000000000031043500000044012000390000072d030000410000000000310435000000240120003900000026030000390000000000310435000006ea010000410000000000120435000000040120003900000020030000390000000000310435000006bf0020009c000006bf020080410000004001200210000006f8011001c700001af600010430000007180020009c0000064c0000213d0000002401200039000006be0300004100000000003104350000004401200039000000000300041400000060040000390000000000410435000007190100004100000000001204350000006401200039000000000001043500000004012000390000000000010435000006bf0020009c000006bf020080410000004001200210000006bf0030009c000006bf03008041000000c002300210000000000121019f0000071a011001c700008006020000391af41aea0000040f000000010020019000000e130000613d00000000020000310000000103200367000000000101043b000000000001004b000000000200001900000e160000613d0000000202000039000000000202041a000b00000002001d000006fa020000410000000000200443000006c201100197000a00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d0000000b01000029000006c201100197000000400400043d0000071c0200004100000000002404350000002402400039000900000002001d000000000012043500000004024000390000000001000411000800000002001d000000000012043500000044010000390000000101100367000000000101043b0000006402400039000000e00300003900000000003204350000004402400039000700000002001d0000000000120435000000e401400039000000800200043d0000000000210435000b00000004001d0000010401400039000000000002004b00000c4e0000613d00000000030000190000000004130019000000a005300039000000000505043300000000005404350000002003300039000000000023004b00000c470000413d000000000312001900000000000304350000001f0220003900000743022001970000000b030000290000008403300039000001000420003900000000004304350000000001120019000000100200002900000000020204330000000001210436000000000002004b0000000f0600002900000c650000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b00000c5e0000413d000000000312001900000000000304350000001f02200039000007430220019700000000011200190000000b030000290000000002310049000000040220008a000000a40330003900000000002304350000000e0200002900000000020204330000000001210436000000000002004b0000000d0600002900000c7d0000613d000000000300001900000000041300190000000005630019000000000505043300000000005404350000002003300039000000000023004b00000c760000413d000000000312001900000000000304350000001f02200039000007430220019700000000011200190000000b030000290000000002310049000000040220008a000000c40330003900000000002304350000000c0200002900000000020204330000000001210436000000000002004b00000c940000613d00000000030000190000000c050000290000002005500039000000000405043300000000014104360000000103300039000000000023004b00000c8e0000413d0000000b030000290000000001310049000006bf0010009c000006bf0100804100000060011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000121019f000006bf0030009c000006bf020000410000000002034019000c0040002002180000000c011001af0000000a020000291af41aea0000040f000000010020019000000f7c0000613d0000000b01000029000006e40010009c0000064c0000213d0000000b01000029000000400010043f00000044010000390000000101100367000000000101043b000003e82010011a000000000002004b00000fd00000c13d000c005a001000cd000000000001004b00000cb80000613d0000000c011000f90000005a0010008c0000072c0000c13d0000000301000039000000000101041a000b071d001000d5000000000001004b00000cc00000613d0000000b011000f90000071d0010009c0000072c0000c13d1af41a370000040f000000000001004b00000fdf0000c13d000000400100043d00000044021000390000072b03000041000000000032043500000024021000390000000d03000039000007160000013d000007450640019700000001066001bf000000000062041b000000400610003900000000005604350000ff00004001900000000004000039000000010400c03900000020051000390000000000450435000000010400003900000000004104350000000204200039000000000404041a000000600510003900000000004504350000000304200039000000000404041a000000a0051000390000000000350435000000800310003900000000004304350000000503200039000000000303041a000000c00410003900000000003404350000000603200039000000000303041a000006c203300197000000e00410003900000000003404350000000703200039000000000303041a000001000410003900000000003404350000000803200039000000000303041a000001200410003900000000003404350000000902200039000000000202041a000006c20220019700000140031000390000000000230435000006bf0010009c000006bf0100804100000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000710011001c70000800d0200003900000002030000390000073d0400004100000010050000291af41aea0000040f00000001002001900000065b0000613d000000400100043d000a00000001001d000009980000013d00000010020000290000000000210435000000000020043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000101043b0000000901100039000000000201041a000000400400043d000900000004001d0000070101000041000000000014043500000004014000390000000003000410000000000031043500000024014000390000000000010435000006bf0040009c000006bf01000041000000000104401900000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f00000702011001c7000006c2022001971af41aef0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090b000029000000090570002900000d3f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000d3b0000c13d000000000006004b00000d4c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000e540000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000006e40010009c0000064c0000213d00000001002001900000064c0000c13d000000400010043f000000200030008c0000065b0000413d00000008010000290000000001010433000000000001004b000006190000613d00000000010b04330000000c0200002900000000001204350000000701000039000000000101041a000000400400043d000007030200004100000000002404350000000402400039000000200300003900000000003204350000000b02000029000000000302043300000024024000390000000000320435000c00000004001d00000044044000390000000502300210000000000b420019000000000003004b00000f980000c13d000006c2021001970000000c0300002900000000013b0049000006bf0010009c000006bf010080410000006001100210000006bf0030009c000006bf030080410000004003300210000000000131019f0000000003000414000006bf0030009c000006bf03008041000000c003300210000000000131019f000700000002001d1af41aef0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000c0570002900000d940000613d000000000801034f0000000c09000029000000008a08043c0000000009a90436000000000059004b00000d900000c13d000000000006004b00000da10000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000fc40000613d0000001f01400039000000600110018f0000000c02100029000000000012004b00000000010000390000000101004039000900000002001d000006e40020009c0000064c0000213d00000001001001900000064c0000c13d0000000901000029000000400010043f000000200030008c0000065b0000413d0000000c010000290000000002010433000000000002004b0000000001000039000000010100c039000000000012004b0000065b0000c13d0000000903000029000000440130003900000024053000390000000403300039000000000002004b000010010000c13d000007050200004100000009040000290000000000240435000000200200003900000000002304350000000b020000290000000003020433000000000035043500000005023002100000000002120019000000000003004b000013150000c13d00000009030000290000000001320049000006bf0010009c000006bf010080410000006001100210000006bf0030009c000006bf0200004100000000020340190000004002200210000000000121019f0000000002000414000006bf0020009c000006bf02008041000000c002200210000000000121019f00000007020000291af41aea0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000090570002900000deb0000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b00000de70000c13d000000000006004b00000df80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000103e0000c13d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e010000c13d00000ab20000013d0000000f0000006b000000000100001900000e0b0000613d0000000d0100002900000000010104330000000f040000290000000302400210000007460220027f0000074602200167000000000121016f0000000102400210000000000121019f00000e7b0000013d0000006002100270000006bf02200197000000000301034f0000001f0520018f000006c106200198000000400100043d000000000461001900000e210000613d000000000703034f0000000008010019000000007907043c0000000008980436000000000048004b00000e1d0000c13d000000000005004b00000e2e0000613d000000000363034f0000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f00000000003404350000006002200210000006bf0010009c000006bf010080410000004001100210000000000121019f00001af6000104300000074501200197000000070200002900000000001204350000000a0000006b000000200200003900000000020060390000003f0120003900000743021001970000000801200029000000000021004b00000000020000390000000102004039000006e40010009c0000064c0000213d00000001002001900000064c0000c13d000000400010043f0000000b01000029000000800110003900000008020000290000000000210435000000400100043d00000009020000290000000002020433000000000002004b00000ebd0000c13d00000044021000390000072403000041000000000032043500000024021000390000000c03000039000007160000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e5b0000c13d00000ab20000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000000e0600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b00000e660000c13d0000000f0020006c00000e780000813d0000000f020000290000000302200210000000f80220018f000007460220027f00000746022001670000000e033000290000000003030433000000000223016f000000000021041b0000000f01000029000000010110021000000001011001bf0000000c02000029000000000012041b0000002002000039000000400100043d0000000002210436000000800300043d000006c2033001970000000000320435000000a00200043d000006c20220019700000040031000390000000000230435000000c00200043d000000000002004b0000000002000039000000010200c039000000600310003900000000002304350000008002100039000000e00300043d0000000000320435000000a002100039000000a003000039000001000400043d0000000000320435000000c00210003900000000430404340000000000320435000000e002100039000000000003004b00000ea20000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000e9b0000413d0000001f0430003900000743044001970000000003320019000000000003043500000000031400490000000002230019000006bf0020009c000006bf020080410000006002200210000006bf0010009c000006bf010080410000004001100210000000000112019f0000000002000414000006bf0020009c000006bf02008041000000c002200210000000000121019f000006f0011001c70000800d020000390000000203000039000006f10400004100000010050000291af41aea0000040f0000000100200190000007600000c13d0000065b0000013d000007180010009c0000064c0000213d0000002402100039000006be0300004100000000003204350000004402100039000000000300041400000060040000390000000000420435000007190200004100000000002104350000006402100039000000000002043500000004021000390000000000020435000006bf0010009c000006bf010080410000004001100210000006bf0030009c000006bf03008041000000c002300210000000000121019f0000071a011001c700008006020000391af41aea0000040f000000010020019000000f890000613d00000000020000310000000103200367000000000101043b000000000001004b000000000200001900000f8c0000613d0000000202000039000000000202041a000b00000002001d000006fa020000410000000000200443000006c201100197000a00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d0000000b01000029000006c201100197000000400400043d0000006402400039000000e003000039000000000032043500000044024000390000071b030000410000000000320435000000240240003900000000001204350000071c010000410000000000140435000000040140003900000000020004110000000000210435000000e401400039000000800200043d0000000000210435000b00000004001d0000010401400039000000000002004b00000f110000613d00000000030000190000000004130019000000a005300039000000000505043300000000005404350000002003300039000000000023004b00000f0a0000413d000000000312001900000000000304350000001f0220003900000743022001970000000b030000290000008403300039000001000420003900000000004304350000000001120019000000100200002900000000020204330000000001210436000000000002004b00000f270000613d000000000300001900000000041300190000000f05300029000000000505043300000000005404350000002003300039000000000023004b00000f200000413d000000000312001900000000000304350000001f02200039000007430220019700000000011200190000000b030000290000000002310049000000040220008a000000a40330003900000000002304350000000c0200002900000000020204330000000001210436000000000002004b00000f3e0000613d000000000300001900000000041300190000000d05300029000000000505043300000000005404350000002003300039000000000023004b00000f370000413d000000000312001900000000000304350000001f02200039000007430220019700000000011200190000000b030000290000000002310049000000040220008a000000c40330003900000000002304350000000e0200002900000000020204330000000001210436000000000002004b00000f560000613d00000000030000190000000e040000290000002004400039000e00000004001d000000000404043300000000014104360000000103300039000000000023004b00000f4e0000413d0000000b020000290000000001210049000006bf0010009c000006bf010080410000006001100210000006bf0020009c000006bf020080410000004002200210000000000121019f0000000002000414000006bf0020009c000006bf02008041000000c002200210000000000121019f0000000a020000291af41aea0000040f000000010020019000000ff40000613d0000000b01000029000006e40010009c0000064c0000213d0000000b01000029000000400010043f0000000301000039000000000201041a000e071d002000d500000064010000390000000101100367000000000101043b000006c200100198000012c50000c13d000000000002004b00000f7a0000613d0000000e012000f90000071d0010009c0000072c0000c13d1af41a370000040f000012cb0000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000f840000c13d00000ae70000013d0000006002100270000006bf02200197000000000301034f0000001f0520018f000006c106200198000000400100043d000000000461001900000e210000613d000000000703034f0000000008010019000000007907043c0000000008980436000000000048004b00000f930000c13d00000e210000013d0000000b05000029000000000600001900000f9e0000013d0000000106600039000000000036004b00000d740000813d0000000c07b0006a000000440770008a0000000004740436000000200550003900000000070504330000000098070434000006c20880019700000000088b04360000000009090433000000020090008c0000136f0000813d000000000098043500000040087000390000000008080433000000000008004b0000000008000039000000010800c0390000004009b000390000000000890435000000600770003900000000070704330000006008b00039000000800900003900000000009804350000008009b0003900000000080704330000000000890435000000a00bb00039000000000008004b00000f9b0000613d00000000090000190000002007700039000000000a070433000000000bab04360000000109900039000000000089004b00000fbd0000413d00000f9b0000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000fcb0000c13d00000ab20000013d000006ea010000410000000b0200002900000000001204350000002001000039000000080200002900000000001204350000001901000039000000090200002900000000001204350000072901000041000000070200002900000000001204350000000c01000029000006eb011001c700001af6000104300000000b0400002900000001024002700000071e032000d1000000000004004b00000fe70000613d00000000022300d90000071e0020009c0000072c0000c13d00000000041300d90000000102400210000000000013004b00000fee0000413d00000000014200d9000000020010008c0000072c0000c13d000000000002004b000011b90000c13d000000400100043d00000044021000390000072a0300004100000bdc0000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ffc0000c13d00000ae70000013d0000000702000039000000000202041a000007040400004100000009060000290000000000460435000000200400003900000000004304350000000b030000290000000004030433000000000045043500000005034002100000000003130019000000000004004b000013420000c13d000006c20220019700000009040000290000000001430049000006bf0010009c000006bf010080410000006001100210000006bf0040009c000006bf0300004100000000030440190000004003300210000000000131019f0000000003000414000006bf0030009c000006bf03008041000000c003300210000000000131019f1af41aef0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000009057000290000102f0000613d000000000801034f0000000909000029000000008a08043c0000000009a90436000000000059004b0000102b0000c13d000000000006004b0000103c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000013750000613d0000001f01400039000000600110018f0000000902100029000000000012004b00000000010000390000000101004039000c00000002001d000006e40020009c0000064c0000213d00000001001001900000064c0000c13d0000000c01000029000000400010043f000000200030008c0000065b0000413d00000009010000290000000001010433000900000001001d000006c20010009c0000065b0000213d0000000c01000029000006fe0010009c0000064c0000213d0000000c020000290000008001200039000000400010043f000000090100002900000000021204360000000a01000029000700000002001d00000000001204350000000404000039000000000304041a000000400100043d0000000002310436000000000040043f000000000003004b0000106c0000613d00000700040000410000000005000019000000000604041a000000000262043600000001044000390000000105500039000000000035004b000010660000413d00000000021200490000001f0220003900000743032001970000000002130019000000000032004b00000000030000390000000103004039000006e40020009c0000064c0000213d00000001003001900000064c0000c13d000000400020043f0000000c0400002900000060034000390000000802000029000600000003001d00000000002304350000004002400039000800000002001d00000000001204350000000801000039000000000101041a000a00000001001d0000000f010000290000000001010433000006fa020000410000000000200443000006c201100197000b00000001001d00000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d0000000a01000029000006c201100197000000400300043d0000070702000041000000000023043500000024043000390000000102000039000500000004001d00000000002404350000000402300039000300000002001d0000000000120435000006bf0030009c000a00000003001d000006bf01000041000000000103401900040040001002180000000001000414000006bf0010009c000006bf01008041000000c00110021000000004011001af00000702011001c70000000b020000291af41aea0000040f00000001002001900000144d0000613d0000000a01000029000006e40010009c0000064c0000213d0000000a01000029000000400010043f0000000801000039000000000101041a000206c20010019b0000000e010000290000000001010433000b06c20010019b000000000100041a000006c2011001970000000b0010006b0000145a0000c13d0000000d0100002900000000010104330000070e020000410000000a030000290000000000230435000000020200002900000003030000290000000000230435000000050200002900000000001204350000000001000414000006bf0010009c000006bf01008041000000c00110021000000004011001af00000702011001c70000000b020000291af41aea0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a05700029000010e10000613d000000000801034f0000000a09000029000000008a08043c0000000009a90436000000000059004b000010dd0000c13d000000000006004b000010ee0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014d90000613d0000001f01400039000000600110018f0000000a01100029000b00000001001d000006e40010009c0000064c0000213d0000000b01000029000000400010043f000000200030008c00000080060000390000065b0000413d0000000a010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b0000065b0000c13d0000000d0100002900000000010104330000000802000039000000000202041a000d00000002001d0000000e0200002900000000020204330000070f030000410000000b0700002900000000003704350000000403700039000000c00400003900000000004304350000000c030000290000000003030433000006c204300197000000c403700039000000000043043500000007040000290000000005040433000000e40470003900000000006404350000014404700039000000000605043300000000006404350000016404700039000000000006004b000011260000613d000000000700001900000020055000390000000008050433000006c20880019700000000048404360000000107700039000000000067004b0000111f0000413d0000000006340049000000080500002900000000050504330000000b070000290000010407700039000000000067043500000000060504330000000004640436000000000006004b000011370000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b000011310000413d000006c2022001970000000005340049000000060300002900000000030304330000000b060000290000012406600039000000000056043500000000050304330000000004540436000f00000004001d000000000005004b0000114c0000613d0000000004000019000000200330003900000000060304330000000f070000290000000007670436000f00000007001d0000000104400039000000000054004b000011440000413d0000000b04000029000000640340003900000000001304350000004403400039000000000013043500000024014000390000000000210435000000840140003900000000000104350000070b0100004100000000001004430000000001000414000006bf0010009c000006bf01008041000000c0011002100000070c011001c70000800b020000391af41aef0000040f0000000100200190000017080000613d0000000d02000029000006c202200197000000000101043b0000000b04000029000000a40340003900000000001304350000000f01400069000006bf0010009c000006bf010080410000006001100210000006bf0040009c000006bf0300004100000000030440190000004003300210000000000131019f0000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f1af41aea0000040f0000006003100270000006bf03300197000000600030008c000000600400003900000000040340190000001f0640018f00000060074001900000000b05700029000011840000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b000011800000c13d000000000006004b000011910000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000014e50000613d0000001f01400039000000e00110018f0000000b02100029000000000012004b00000000010000390000000101004039000f00000002001d000006e40020009c0000064c0000213d00000001001001900000064c0000c13d0000000f01000029000000400010043f000000600030008c0000065b0000413d0000000f02000029000000240120003900000004022000390000000b0300002900000040033000390000000003030433000000000003004b000014f10000c13d000006ea030000410000000f0400002900000000003404350000002003000039000000000032043500000016020000390000000000210435000000440140003900000713020000410000000000210435000006bf0040009c000006bf040080410000004001400210000006eb011001c700001af6000104300000000c01000029000000c80010008c000006dd0000413d000000400100043d000b00000001001d000006f90010009c0000064c0000213d0000000c01000029000000640110011a000000010110027000000000431200d900000000024200490000000b050000290000016004500039000000400040043f0000012004500039000c00000004001d00000000001404350000010004500039000900000004001d0000000000140435000000a001500039000700000001001d00000000000104350000002001500039000300000001001d0000000000010435000000000005043500000044010000390000000101100367000000000101043b0000006004500039000400000004001d0000000000340435000000c003500039000600000003001d00000000001304350000004001500039000100000001001d000000000021043500000140015000390000000a02000029000800000001001d00000000002104350000008001500039000200000001001d0000000000010435000000e003500039000000000100041a000006c201100197000500000003001d0000000000130435000000000020043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d0000000b020000290000000002020433000000000002004b000000000101043b000000000201041a0000072202200197000000010220c1bf00000003030000290000000003030433000000000003004b000001000220c1bf000000000021041b000000010200002900000000020204330000000103100039000000000023041b000000040200002900000000020204330000000203100039000000000023041b000000020200002900000000020204330000000303100039000000000023041b000000070200002900000000020204330000000403100039000000000023041b000000060200002900000000020204330000000503100039000000000023041b00000005020000290000000002020433000006c2022001970000000603100039000000000403041a000006c304400197000000000224019f000000000023041b000000090200002900000000020204330000000703100039000000000023041b0000000c0200002900000000020204330000000803100039000000000023041b000000090110003900000008020000290000000002020433000006c202200197000000000301041a000006c303300197000000000223019f000000000021041b000001e002000039000000400100043d0000000002210436000001e004100039000000800300043d00000000003404350000020004100039000000000003004b000012420000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b0000123b0000413d000000000543001900000000000504350000001f033000390000074303300197000000000443001900000000031400490000000000320435000000100200002900000000030204330000000002340436000000000003004b000012560000613d000000000400001900000000052400190000000f06400029000000000606043300000000006504350000002004400039000000000034004b0000124f0000413d000000000423001900000000000404350000001f03300039000007430330019700000000022300190000000003120049000000400410003900000000003404350000000e0300002900000000030304330000000002320436000000000003004b0000126b0000613d000000000400001900000000052400190000000d06400029000000000606043300000000006504350000002004400039000000000034004b000012640000413d0000000004230019000000000004043500000044040000390000000104400367000000000404043b000000600510003900000000004504350000000b040000290000000004040433000000000004004b0000000004000039000000010400c0390000008005100039000000000045043500000003040000290000000004040433000000000004004b0000000004000039000000010400c039000000a005100039000000000045043500000001040000290000000004040433000000c005100039000000000045043500000004040000290000000004040433000000e005100039000000000045043500000002040000290000000004040433000001000510003900000000004504350000000704000029000000000404043300000120051000390000000000450435000000060400002900000000040404330000014005100039000000000045043500000005040000290000000004040433000006c2044001970000016005100039000000000045043500000009040000290000000004040433000001800510003900000000004504350000000c040000290000000004040433000001a005100039000000000045043500000008040000290000000004040433000006c204400197000001c00510003900000000004504350000001f03300039000007430330019700000000021200490000000002320019000006bf0020009c000006bf020080410000006002200210000006bf0010009c000006bf010080410000004001100210000000000112019f0000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f000006f0011001c70000800d02000039000000010300003900000723040000411af41aea0000040f00000001002001900000065b0000613d000000400100043d0000000a020000290000000000210435000006bf0010009c000006bf010080410000004001100210000006e6011001c700001af50001042e000000000002004b000012ca0000613d0000000e022000f90000071d0020009c0000072c0000c13d1af4187b0000040f000000000001004b00000cc30000613d0000000e0400002900000001024002700000071e032000d1000000000004004b000012d50000613d00000000022300d90000071e0020009c0000072c0000c13d00000000041300d90000000102400210000000000013004b000012dc0000413d00000000014200d9000000020010008c0000072c0000c13d000000000002004b00000ff00000613d000000400100043d000e00000001001d000006f90010009c0000064c0000213d0000000e040000290000016001400039000000400010043f00000120034000390000071f01000041000700000003001d00000000001304350000010003400039000500000003001d000000000013043500000140034000390000000a01000029000600000003001d0000000000130435000000c0034000390000071b01000041000400000003001d0000000000130435000000a001400039000300000001001d00000000000104350000008001400039000800000001001d00000000000104350000006001400039000900000001001d00000000000104350000004001400039000b00000001001d00000000000104350000000001040436000100000001001d0000000000010435000000e00340003900000064010000390000000101100367000000000101043b000006c201100197000200000003001d00000000001304350000071e0120012a000007200020009c000013810000813d0000071e0020009c000006dd0000413d000006bf021001970000071f02200129000000080300002900000000002304350000071f20100129000013850000013d00000000040000190000131a0000013d0000000104400039000000000034004b00000dcb0000813d000000090520006a000000440550008a00000000015104360000000b050000290000002005500039000b00000005001d00000000050504330000000076050434000006c20660019700000000066204360000000007070433000000010070008c0000136f0000213d000000000076043500000040065000390000000006060433000000000006004b0000000006000039000000010600c0390000004007200039000000000067043500000060055000390000000005050433000000600620003900000080070000390000000000760435000000800720003900000000060504330000000000670435000000a002200039000000000006004b000013170000613d00000000070000190000002005500039000000000805043300000000028204360000000107700039000000000067004b0000133b0000413d000013170000013d0000000005000019000013470000013d0000000105500039000000000045004b0000100f0000813d000000090630006a000000440660008a00000000016104360000000b060000290000002006600039000b00000006001d00000000060604330000000087060434000006c20770019700000000077304360000000008080433000000010080008c0000136f0000213d000000000087043500000040076000390000000007070433000000000007004b0000000007000039000000010700c0390000004008300039000000000078043500000060066000390000000006060433000000600730003900000080080000390000000000870435000000800830003900000000070604330000000000780435000000a003300039000000000007004b000013440000613d00000000080000190000002006600039000000000906043300000000039304360000000108800039000000000078004b000013680000413d000013440000013d0000070601000041000000000010043f0000002101000039000000040010043f000006fd0100004100001af6000104300000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000137c0000c13d00000ab20000013d000007210220012a000000090300002900000000002304350000071f2010012a00000000012100490000000b0200002900000000001204350000000a01000029000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d0000000e020000290000000002020433000000000002004b000000000101043b000000000201041a0000072202200197000000010220c1bf00000001030000290000000003030433000000000003004b000001000220c1bf000000000021041b0000000b0200002900000000020204330000000103100039000000000023041b000000090200002900000000020204330000000203100039000000000023041b000000080200002900000000020204330000000303100039000000000023041b000000030200002900000000020204330000000403100039000000000023041b000000040200002900000000020204330000000503100039000000000023041b00000002020000290000000002020433000006c2022001970000000603100039000000000403041a000006c304400197000000000224019f000000000023041b000000050200002900000000020204330000000703100039000000000023041b000000070200002900000000020204330000000803100039000000000023041b000000090110003900000006020000290000000002020433000006c202200197000000000301041a000006c303300197000000000223019f000000000021041b000001e002000039000000400100043d0000000002210436000001e004100039000000800300043d00000000003404350000020004100039000000000003004b000013de0000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b000013d70000413d000000000543001900000000000504350000001f033000390000074303300197000000000443001900000000031400490000000000320435000000100200002900000000030204330000000002340436000000000003004b000013f20000613d000000000400001900000000052400190000000f06400029000000000606043300000000006504350000002004400039000000000034004b000013eb0000413d000000000423001900000000000404350000001f03300039000007430330019700000000022300190000000003120049000000400410003900000000003404350000000c0300002900000000030304330000000002320436000000000003004b000014070000613d000000000400001900000000052400190000000d06400029000000000606043300000000006504350000002004400039000000000034004b000014000000413d0000000004230019000000000004043500000060041000390000071b0500004100000000005404350000000e040000290000000004040433000000000004004b0000000004000039000000010400c0390000008005100039000000000045043500000001040000290000000004040433000000000004004b0000000004000039000000010400c039000000a00510003900000000004504350000000b040000290000000004040433000000c005100039000000000045043500000009040000290000000004040433000000e005100039000000000045043500000008040000290000000004040433000001000510003900000000004504350000000304000029000000000404043300000120051000390000000000450435000000040400002900000000040404330000014005100039000000000045043500000002040000290000000004040433000006c20440019700000160051000390000000000450435000000050400002900000000040404330000018005100039000000000045043500000007040000290000000004040433000001a005100039000000000045043500000006040000290000000004040433000006c204400197000001c00510003900000000004504350000001f03300039000007430330019700000000021200490000000002320019000006bf0020009c000006bf020080410000006002200210000006bf0010009c000006bf010080410000004001100210000000000112019f0000000002000414000012b20000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000014550000c13d00000ae70000013d000006fa0100004100000000001004430000000b0100002900000004001004430000000001000414000006bf0010009c000006bf01008041000000c001100210000006fb011001c700008002020000391af41aef0000040f0000000100200190000017080000613d000000000101043b000000000001004b0000065b0000613d000000400300043d00000024013000390000000102000039000000000021043500000707010000410000000000130435000000040130003900000002020000290000000000210435000006bf0030009c000a00000003001d000006bf01000041000000000103401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000702011001c70000000b020000291af41aea0000040f0000000100200190000015320000613d0000000a01000029000006e40010009c0000064c0000213d0000000a01000029000000400010043f0000000e010000290000000001010433000006c201100197000000000010043f0000000601000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000400200043d000500000002001d000007080020009c0000064c0000213d000000000101043b0000000505000029000000a002500039000000400020043f000000000201041a000006c20220019700000000062504360000000102100039000000000202041a00000709002001980000000003000039000000010300c03900000040045000390000000000340435000006c202200197000300000006001d000000000026043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001042002700000007f0440618f000b00000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000007000000c13d000000400400043d000400000004001d0000000b050000290000000004540436000a00000004001d000000000003004b0000153f0000613d000000000010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ef011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d0000000b0000006b0000000002000019000015450000613d000000000101043b00000000020000190000000a03200029000000000401041a0000000000430435000000010110003900000020022000390000000b0020006c000014d10000413d000015450000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014e00000c13d00000ab20000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014ec0000c13d00000ab20000013d0000000903000039000000000303041a0000000e0400002900000000040404330000070d050000410000000f060000290000000000560435000006c204400197000000000042043500000009020000290000000000210435000006bf0060009c000006bf01000041000000000106401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f000006c20230019700000702011001c71af41aef0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f05700029000015170000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b000015130000c13d000000000006004b000015240000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000016f60000c13d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000152d0000c13d00000ab20000013d00000060061002700000001f0460018f000006c105600198000000400200043d000000000352001900000ae70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000153a0000c13d00000ae70000013d00000745012001970000000a0200002900000000001204350000000b0000006b000000200200003900000000020060390000003f0120003900000743021001970000000401200029000000000021004b00000000020000390000000102004039000006e40010009c0000064c0000213d00000001002001900000064c0000c13d000000400010043f0000000501000029000000800110003900000004020000290000000000210435000000400200043d000006ff0020009c0000064c0000213d000000030100002900000000030104330000004001200039000000400010043f0000000101000039000000000412043600000000010000310000000101100367000000000601043b0000000000640435000000400100043d000006ff0010009c0000064c0000213d0000004005100039000000400050043f0000000105000039000000000551043600000000006504350000000006020433000000000006004b000006190000613d0000000e060000290000000006060433000006c20660019700000000006404350000000004010433000000000004004b000006190000613d0000000d0400002900000000040404330000000000450435000000400400043d000b00000004001d000006fe0040009c0000064c0000213d000006c2043001970000000b050000290000008003500039000000400030043f000a00000004001d0000000003450436000300000003001d00000000002304350000000405000039000000000405041a000000400200043d0000000003420436000000000050043f000000000004004b000015910000613d00000700050000410000000006000019000000000705041a000000000373043600000001055000390000000106600039000000000046004b0000158b0000413d00000000032300490000001f0330003900000743043001970000000003240019000000000043004b00000000040000390000000104004039000006e40030009c0000064c0000213d00000001004001900000064c0000c13d000000400030043f0000000b040000290000006003400039000400000003001d00000000001304350000004001400039000200000001001d00000000002104350000000801000039000000000101041a000500000001001d0000000f010000290000000002010433000000400400043d000f00000004001d0000070101000041000000000014043500000004014000390000000003000410000000000031043500000024014000390000000000010435000006bf0040009c000006bf01000041000000000104401900000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f00000702011001c7000006c2022001971af41aef0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0b0000290000000f05700029000015ce0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000015ca0000c13d000000000006004b000015db0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017090000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000e00000002001d000006e40020009c0000064c0000213d00000001001001900000064c0000c13d0000000e01000029000000400010043f000000200030008c00000080060000390000065b0000413d0000000d01000029000000000201043300000000010b04330000070a030000410000000e0700002900000000003704350000000403700039000000c00400003900000000004304350000000c030000290000000003030433000006c204300197000000c403700039000000000043043500000007040000290000000005040433000000e40470003900000000006404350000014404700039000000000605043300000000006404350000016404700039000000000006004b0000160d0000613d000000000700001900000020055000390000000008050433000006c20880019700000000048404360000000107700039000000000067004b000016060000413d0000000006340049000000080500002900000000050504330000000e070000290000010407700039000000000067043500000000060504330000000004640436000000000006004b0000161e0000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b000016180000413d0000000003340049000000060500002900000000050504330000000e060000290000012406600039000000000036043500000000060504330000000003640436000000000006004b0000162f0000613d00000000040000190000002005500039000000000705043300000000037304360000000104400039000000000064004b000016290000413d0000000e050000290000000004530049000000040440008a000000240550003900000000004504350000000b040000290000000004040433000006c20440019700000000044304360000000305000029000000000505043300000080060000390000000000640435000000800430003900000000060504330000000000640435000000a004300039000000000006004b0000164a0000613d000000000700001900000020055000390000000008050433000006c20880019700000000048404360000000107700039000000000067004b000016430000413d0000000205000029000000000505043300000000063400490000004007300039000000000067043500000000060504330000000004640436000000000006004b0000165a0000613d00000000070000190000002005500039000000000805043300000000048404360000000107700039000000000067004b000016540000413d0000000405000029000000000505043300000000063400490000006003300039000000000063043500000000030504330000000004340436000f00000004001d000000000003004b0000166d0000613d0000000004000019000000200550003900000000060504330000000f070000290000000007670436000f00000007001d0000000104400039000000000034004b000016650000413d0000000e040000290000006403400039000000000023043500000044024000390000000000120435000000840140003900000000000104350000070b0100004100000000001004430000000001000414000006bf0010009c000006bf01008041000000c0011002100000070c011001c70000800b020000391af41aef0000040f0000000100200190000017080000613d0000000502000029000006c202200197000000000101043b0000000e04000029000000a40340003900000000001304350000000f01400069000006bf0010009c000006bf010080410000006001100210000006bf0040009c000006bf0300004100000000030440190000004003300210000000000131019f0000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f1af41aea0000040f0000006003100270000006bf03300197000000600030008c000000600400003900000000040340190000001f0640018f00000060074001900000000e05700029000016a30000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b0000169f0000c13d000000000006004b000016b00000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017150000613d0000001f01400039000000e00110018f0000000e02100029000000000012004b00000000010000390000000101004039000f00000002001d000006e40020009c0000064c0000213d00000001001001900000064c0000c13d0000000f01000029000000400010043f000000600030008c0000065b0000413d0000000901000039000000000201041a0000000f040000290000002401400039000000090300002900000000003104350000070d01000041000000000014043500000004014000390000000a030000290000000000310435000006bf0040009c000006bf01000041000000000104401900000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f00000702011001c7000006c2022001971af41aef0000040f0000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f05700029000016e70000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b000016e30000c13d000000000006004b000016f40000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017210000613d0000001f01400039000000600110018f0000000f01100029000006e40010009c0000064c0000213d000000400010043f000000200030008c0000065b0000413d0000000f020000290000000002020433000f00000002001d000006c20020009c0000065b0000213d0000000f0000006b0000172d0000c13d0000004402100039000007120300004100000b0a0000013d000000000001042f0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017100000c13d00000ab20000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000171c0000c13d00000ab20000013d0000001f0530018f000006c106300198000000400200043d000000000462001900000ab20000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017280000c13d00000ab20000013d0000001001000029000006c201100197000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000065b0000613d000000000201043b000000000302041a0000ff00003001900000000004000039000000010400c039000000400100043d00000020051000390000000000450435000000ff003001900000000003000039000000010300c03900000000003104350000000103200039000000000303041a000000400410003900000000003404350000000203200039000000000303041a000000600410003900000000003404350000000303200039000000000303041a000000800410003900000000003404350000000403200039000000000303041a000000a00410003900000000003404350000000503200039000000000303041a000000c00410003900000000003404350000000603200039000000000303041a000006c203300197000000e00410003900000000003404350000000703200039000000000303041a000001000410003900000000003404350000000803200039000000000303041a000001200410003900000000003404350000000902200039000000000202041a000006c20220019700000140031000390000000000230435000006bf0010009c000006bf0100804100000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000710011001c70000800d02000039000000020300003900000711040000410000000f050000291af41aea0000040f00000001002001900000065b0000613d000000400100043d0000000f02000029000012bf0000013d0000001f03100039000000000023004b0000000004000019000007470400404100000747052001970000074703300197000000000653013f000000000053004b00000000030000190000074703002041000007470060009c000000000304c019000000000003004b000017970000613d0000000103100367000000000303043b000006e40030009c000017970000213d00000000013100190000002001100039000000000021004b000017970000213d000000000001042d000000000100001900001af6000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000017d80000c13d000000400500043d0000000004650436000000000003004b000017c30000613d000100000004001d000300000006001d000200000005001d000000000010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ef011001c700008010020000391af41aef0000040f0000000100200190000017e40000613d0000000306000029000000000006004b000017c90000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000017bb0000413d000017cb0000013d00000745012001970000000000140435000000000006004b00000020010000390000000001006039000017cb0000013d000000000100001900000002050000290000003f0110003900000743021001970000000001520019000000000021004b00000000020000390000000102004039000006e40010009c000017de0000213d0000000100200190000017de0000c13d000000400010043f0000000001050019000000000001042d0000070601000041000000000010043f0000002201000039000000040010043f000006fd0100004100001af6000104300000070601000041000000000010043f0000004101000039000000040010043f000006fd0100004100001af600010430000000000100001900001af60001043000000000430104340000000001320436000000000003004b000017f20000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000017eb0000413d000000000231001900000000000204350000001f0230003900000743022001970000000001210019000000000001042d0001000000000002000100000002001d000006c201100197000000000010043f0000000501000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f00000001002001900000184f0000613d000000400200043d000007480020009c000018510000813d000000000101043b0000016003200039000000400030043f000000000301041a0000ff00003001900000000004000039000000010400c03900000020052000390000000000450435000000ff003001900000000003000039000000010300c03900000000003204350000000103100039000000000303041a000000400420003900000000003404350000000203100039000000000403041a000000600320003900000000004304350000000303100039000000000303041a000000800520003900000000003504350000000405100039000000000505041a000000a00620003900000000005604350000000505100039000000000505041a000000c00620003900000000005604350000000605100039000000000505041a000006c205500197000000e00620003900000000005604350000000705100039000000000505041a000001000620003900000000005604350000000805100039000000000505041a0000012006200039000000000056043500000140022000390000000901100039000000000101041a000006c2011001970000000000120435000000000004004b000018450000613d00000001014000b900000000024100d9000000010020006c000018570000c13d000000c80210011a000000000001042d000000000003004b0000185d0000613d000000010400002900000000213400d9000000000002004b000018630000c13d000000000043004b00000000020000190000186a0000213d000000000001042d000000000100001900001af6000104300000070601000041000000000010043f0000004101000039000000040010043f000006fd0100004100001af6000104300000070601000041000000000010043f0000001101000039000000040010043f000006fd0100004100001af6000104300000070601000041000000000010043f0000001201000039000000040010043f000006fd0100004100001af600010430000000400100043d00000044021000390000074903000041000000000032043500000024021000390000000e03000039000018700000013d000000400100043d00000044021000390000074a030000410000000000320435000000240210003900000005030000390000000000320435000006ea020000410000000000210435000000040210003900000020030000390000000000320435000006bf0010009c000006bf010080410000004001100210000006eb011001c700001af6000104300006000000000002000006c201100197000000000010043f0000000601000039000000200010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ec011001c700008010020000391af41aef0000040f0000000100200190000019cd0000613d000000400500043d0000074b0050009c000019cf0000813d000000000101043b000000a002500039000000400020043f000000000201041a000006c20220019700000000042504360000000102100039000000000202041a000006c203200197000500000004001d000000000034043500000709002001980000000002000039000000010200c0390000004007500039000000000027043500000060025000390000000203100039000000000303041a00000000003204350000000301100039000000000201041a000000010320019000000001082002700000007f0880618f0000001f0080008c00000000040000390000000104002039000000000043004b000019db0000c13d000000400600043d0000000004860436000000000003004b000600000005001d000018ce0000613d000100000004001d000200000008001d000300000006001d000400000007001d000000000010043f0000000001000414000006bf0010009c000006bf01008041000000c001100210000006ef011001c700008010020000391af41aef0000040f00000006050000290000000100200190000019cd0000613d0000000208000029000000000008004b000018d40000613d000000000201043b00000000010000190000000407000029000000030600002900000001090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b000018c60000413d000018d70000013d00000745012001970000000000140435000000000008004b00000020010000390000000001006039000018d70000013d0000000001000019000000040700002900000003060000290000003f0110003900000743021001970000000001620019000000000021004b00000000020000390000000102004039000006e40010009c000019cf0000213d0000000100200190000019cf0000c13d000000400010043f00000080015000390000000000610435000000400600043d00000004016000390000000002070433000000000002004b000019e10000613d0000000002050433000000000300041a0000074c040000410000000000460435000006c2022001970000000000210435000006bf0060009c000006bf01000041000000000106401900000040011002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f000006c202300197000006fd011001c7000400000006001d1af41aef0000040f000000040b0000290000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000190c0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000019080000c13d000000000006004b000019190000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000019f00000613d0000001f01400039000000600110018f0000000005b10019000000000015004b00000000010000390000000101004039000006e40050009c0000000604000029000019cf0000213d0000000100100190000019cf0000c13d000000400050043f000000200030008c000019cd0000413d00000000010b0433000400000001001d0000000501000029000000000201043300000000010404330000074c030000410000000000350435000006c20110019700000004035000390000000000130435000006bf0050009c000006bf01000041000000000105401900000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f000006fd011001c7000006c202200197000500000005001d1af41aef0000040f000000050b0000290000006003100270000006bf03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000019500000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000194c0000c13d000000000006004b0000195d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000019fc0000613d0000001f01400039000000600110018f0000000004b10019000006e40040009c000019cf0000213d000000400040043f000000200030008c000019cd0000413d00000000010b0433000000000001004b00001a080000613d000500000001001d00000004010000290000071e021000d1000000000001004b000019720000613d00000000011200d90000071e0010009c000019d50000c13d000400000002001d0000074d010000410000000001140436000300000001001d000007420100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000006bf0010009c000006bf01008041000000c0011002100000074e011001c70000800502000039000600000004001d1af41aef0000040f000000010020019000001a180000613d000000000201043b0000000601000029000006bf0010009c000006bf0100804100000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f0000074f011001c7000006c2022001971af41aef0000040f0000006003100270000006bf03300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e007400190000000060b00002900000000057b0019000019a20000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000199e0000c13d000000000006004b000019af0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a190000613d0000001f01400039000001e00110018f0000000001b10019000006e40010009c000019cf0000213d000000400010043f000000a00030008c000019cd0000413d00000000010b0433000007500010009c000019cd0000213d0000008001b000390000000001010433000007500010009c000019cd0000213d000000040500002900000005025000fa00000003010000290000000001010433000000640310011a00000000012300a9000000050050006b000019cb0000213d00000000022100d9000000000032004b000019d50000c13d0000071e0110012a000000000001042d000000000100001900001af6000104300000070601000041000000000010043f0000004101000039000000040010043f000006fd0100004100001af6000104300000070601000041000000000010043f0000001101000039000000040010043f000006fd0100004100001af6000104300000070601000041000000000010043f0000002201000039000000040010043f000006fd0100004100001af600010430000006ea02000041000000000026043500000020020000390000000000210435000000440160003900000752020000410000000000210435000000240160003900000011020000390000000000210435000006bf0060009c000006bf060080410000004001600210000006eb011001c700001af6000104300000001f0530018f000006c106300198000000400200043d000000000462001900001a240000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019f70000c13d00001a240000013d0000001f0530018f000006c106300198000000400200043d000000000462001900001a240000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a030000c13d00001a240000013d00000044014000390000075102000041000000000021043500000024014000390000000c020000390000000000210435000006ea010000410000000000140435000000040140003900000020020000390000000000210435000006bf0040009c000006bf040080410000004001400210000006eb011001c700001af600010430000000000001042f0000001f0530018f000006c106300198000000400200043d000000000462001900001a240000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a200000c13d000000000005004b00001a310000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000006bf0020009c000006bf020080410000004002200210000000000112019f00001af6000104300002000000000002000000400200043d0000074d01000041000200000002001d0000000001120436000100000001001d000007420100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000006bf0010009c000006bf01008041000000c0011002100000074e011001c700008005020000391af41aef0000040f000000010020019000001a910000613d000000000201043b0000000201000029000006bf0010009c000006bf0100804100000040011002100000000003000414000006bf0030009c000006bf03008041000000c003300210000000000113019f0000074f011001c7000006c2022001971af41aef0000040f0000006003100270000006bf03300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e007400190000000020b00002900000000057b001900001a680000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001a640000c13d000000000006004b00001a750000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000001a920000613d0000001f01400039000001e00210018f0000000001b20019000000000021004b00000000020000390000000102004039000006e40010009c00001ab00000213d000000010020019000001ab00000c13d000000400010043f0000009f0030008c00001a8f0000a13d00000000010b0433000007500010009c00001a8f0000213d0000008001b000390000000001010433000007500010009c00001a8f0000213d00000001010000290000000001010433000000640110011a000000000001042d000000000100001900001af600010430000000000001042f0000001f0530018f000006c106300198000000400200043d000000000462001900001a9d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a990000c13d000000000005004b00001aaa0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000006bf0020009c000006bf020080410000004002200210000000000112019f00001af6000104300000070601000041000000000010043f0000004101000039000000040010043f000006fd0100004100001af600010430000000000001042f000006bf0010009c000006bf010080410000004001100210000006bf0020009c000006bf020080410000006002200210000000000112019f0000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f000006f0011001c700008010020000391af41aef0000040f000000010020019000001aca0000613d000000000101043b000000000001042d000000000100001900001af60001043000000000050100190000000000200443000000050030008c00001ada0000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b00001ad20000413d000006bf0030009c000006bf0300804100000060013002100000000002000414000006bf0020009c000006bf02008041000000c002200210000000000112019f00000753011001c700000000020500191af41aef0000040f000000010020019000001ae90000613d000000000101043b000000000001042d000000000001042f00001aed002104210000000102000039000000000001042d0000000002000019000000000001042d00001af2002104230000000102000039000000000001042d0000000002000019000000000001042d00001af40000043200001af50001042e00001af60001043000000000000000000100035dccc0412a204cb7005d6df2e226d1ab77da1426527e0b093bafe5135700000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000000080000001000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000bc197c8000000000000000000000000000000000000000000000000000000000df2bafcc00000000000000000000000000000000000000000000000000000000df2bafcd00000000000000000000000000000000000000000000000000000000e408247000000000000000000000000000000000000000000000000000000000f23a6e6100000000000000000000000000000000000000000000000000000000bc197c8100000000000000000000000000000000000000000000000000000000c55dae6300000000000000000000000000000000000000000000000000000000da2de2b400000000000000000000000000000000000000000000000000000000aa6a997300000000000000000000000000000000000000000000000000000000aa6a997400000000000000000000000000000000000000000000000000000000b2cc030000000000000000000000000000000000000000000000000000000000b4423e26000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000a3050a9a00000000000000000000000000000000000000000000000000000000a6f9dae10000000000000000000000000000000000000000000000000000000049da42ac0000000000000000000000000000000000000000000000000000000056fe8b3e0000000000000000000000000000000000000000000000000000000056fe8b3f0000000000000000000000000000000000000000000000000000000064b87a700000000000000000000000000000000000000000000000000000000082c0ab210000000000000000000000000000000000000000000000000000000049da42ad000000000000000000000000000000000000000000000000000000005122c40900000000000000000000000000000000000000000000000000000000532ab8a1000000000000000000000000000000000000000000000000000000002649cdfc000000000000000000000000000000000000000000000000000000002649cdfd0000000000000000000000000000000000000000000000000000000033039d3d00000000000000000000000000000000000000000000000000000000367fc743000000000000000000000000000000000000000000000000000000000dbbe9fc000000000000000000000000000000000000000000000000000000000dd203ef000000000000000000000000000000000000000000000000fffffffffffffffff23a6e610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffedf6e6f74206f776e6572000000000000000000000000000000000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002c22db012d065378eeffaebe1908e1afcbdc3be6e6adc686b5239d4e1144e74f50616972206d75737420626520617070726f7665640000000000000000000000496e76616c6964207661756c7420616464726573730000000000000000000000496e76616c6964204c50206164647265737300000000000000000000000000005a65726f2061646472657373206e6f7420616c6c6f776564000000000000000020677261647561746564000000000000000000000000000000000000000000006e6f7420726561647920746f206772616475617465206f7220616c72656164790000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe9f1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000021c03a97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffffbf8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b00fdd58e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000f68790c700000000000000000000000000000000000000000000000000000000f39645510000000000000000000000000000000000000000000000000000000054af84a1000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f0000000000000000000000ff000000000000000000000000000000000000000050838b3400000000000000000000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000e6a4390500000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000b3175330000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000160000000000000000000000000ef0331b07d4c03673c89e5c43b02687583aca8fddab934113e3f052d3738bda46c70206661696c65640000000000000000000000000000000000000000000000736f6d657468696e67206261642068617070656e6564000000000000000000000000000000000000000000000000000000000020000000800000000000000000bc197c810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000008000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7b9c4d535bdea7cd8a978f128b93471df48c7dbab89d703809115bdc118c235bfd0200000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000000000003b9aca00a565dbad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000001ad274800000000000000000000000000000000000000000033b2e3cadb136f08f640000000000000000000000000000000000000000000001743b34e18439b502000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009eebf593e2999b320300f54bf9a3684f78f4c621194ff1d94bbf97de231a3b606e6f7420617070726f76656400000000000000000000000000000000000000006e6577206f776e657220697320746865207a65726f20616464726573730000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000000000003b9ac9ff000000000000000000000000000000000000000000000000000000e8d4a510014d75737420626520646976697369626c6520627920313030300000000000000062616420616d6f756e7473000000000000000000000000000000000000000000496e76616c696420707269636500000000000000000000000000000000000000696c6c696f6e0000000000000000000000000000000000000000000000000000546f74616c20737570706c7920746f6f2068696768202d206d617820312074726c6c696f6e000000000000000000000000000000000000000000000000000000546f74616c20737570706c7920746f6f206c6f77202d206d696e203130206d6900000000000000000000000000000000000000400000000000000000000000006d636170206d7573742062652067726561746572207468616e20300000000000f242432a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000a082022e93cfcd9f1da5f9236718053910f7e840da080c789c7845698dc032ff73656c6c206661696c6564000000000000000000000000000000000000000000706c756e67652070726f74656374696f6e000000000000000000000000000000616c7265616479206772616475617465640000000000000000000000000000001b579ea76e206cbd9ddc721b0fa25e81998b224ad6fba1366e08f6f960f3fe1750616972206e6f7420666f756e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8d4a5100023b872dd00000000000000000000000000000000000000000000000000000000e9699692476d33666a890b3e41ba09c4c0c1abf5266f070b65764b82033754c0746172676574206e6f74206d657400000000000000000000000000000000000089f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e627579206661696c656400000000000000000000000000000000000000000000616c726561647920726561647920746f20677261647561746500000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffea077726f6e67206d756c7469706c650000000000000000000000000000000000007878787878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6070a0823100000000000000000000000000000000000000000000000000000000feaf968c000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffff4e6f206c6971756964697479000000000000000000000000000000000000000050616972206e6f7420617070726f7665640000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000e67815f9065babff0eec8fabde8e38172005beef6d0775a4a89cc70e05f8b7fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f9530000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a00000000000000000000000059e50421be2c049cc822c75c2d08c7ebd5153e760000000000000000000000000a88341f5a312258dd2fcd366b1098196ab0fba4
-----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): 0x59e50421be2c049cc822c75C2D08C7EBD5153E76
Arg [6] : _baseUsdAggregator (address): 0x0a88341f5A312258dD2fCD366b1098196Ab0FbA4
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000e642f7d1f07af75ed8198f0b4d68f14244baaab5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 000000000000000000000000259a75b880d1ac494fc84d8b77bcb4754eec3435
Arg [3] : 000000000000000000000000a314ca85f158776847ad0a9dbb6c41fd3da5f953
Arg [4] : 0000000000000000000000008cc9c8f3890b16264a70cd7b35fa52fe6e11984a
Arg [5] : 00000000000000000000000059e50421be2c049cc822c75c2d08c7ebd5153e76
Arg [6] : 0000000000000000000000000a88341f5a312258dd2fcd366b1098196ab0fba4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.