Abstract Testnet

Contract

0xE1aE62885A0AbeB6893d1A082AF7E47905a11e1C

Overview

ETH Balance

0 ETH

Token Holdings

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Start Presale57855972025-02-05 2:48:195 hrs ago1738723699IN0 ETH0.000017240.025
Buy Presale57713862025-02-04 21:05:4111 hrs ago1738703141IN
0xE1aE6288...905a11e1C
0 ETH0.000004490.025
Buy Presale57707772025-02-04 20:48:5811 hrs ago1738702138IN
0xE1aE6288...905a11e1C
0 ETH0.000002590.025
Start Presale57706762025-02-04 20:46:2411 hrs ago1738701984IN0 ETH0.00001690.025
Sell Presale57703582025-02-04 20:38:2712 hrs ago1738701507IN
0xE1aE6288...905a11e1C
0 ETH0.000002520.025
Buy Presale57702722025-02-04 20:36:1712 hrs ago1738701377IN
0xE1aE6288...905a11e1C
0 ETH0.000005080.025
Buy Presale57662992025-02-04 19:02:0113 hrs ago1738695721IN
0xE1aE6288...905a11e1C
0 ETH0.000004690.025
Buy Presale56543052025-02-02 21:15:432 days ago1738530943IN
0xE1aE6288...905a11e1C
0 ETH0.00000450.025
Sell Presale56347622025-02-02 13:49:072 days ago1738504147IN
0xE1aE6288...905a11e1C
0 ETH0.000002520.025
Buy Presale56347462025-02-02 13:48:352 days ago1738504115IN
0xE1aE6288...905a11e1C
0 ETH0.00000690.025
Start Presale56345312025-02-02 13:42:212 days ago1738503741IN0 ETH0.000051510.025

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
 Contract Creation0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57855972025-02-05 2:48:195 hrs ago1738723699
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57713862025-02-04 21:05:4111 hrs ago1738703141
0xE1aE6288...905a11e1C
0 ETH
57707772025-02-04 20:48:5811 hrs ago1738702138
0xE1aE6288...905a11e1C
0 ETH
57707772025-02-04 20:48:5811 hrs ago1738702138
0xE1aE6288...905a11e1C
0 ETH
57707772025-02-04 20:48:5811 hrs ago1738702138
0xE1aE6288...905a11e1C
0 ETH
57707772025-02-04 20:48:5811 hrs ago1738702138
0xE1aE6288...905a11e1C
0 ETH
57707772025-02-04 20:48:5811 hrs ago1738702138
0xE1aE6288...905a11e1C
0 ETH
57707772025-02-04 20:48:5811 hrs ago1738702138
0xE1aE6288...905a11e1C
0 ETH
57707772025-02-04 20:48:5811 hrs ago1738702138
0xE1aE6288...905a11e1C
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

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)

File 1 of 18 : presale.sol
//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;
    }
}

File 2 of 18 : ThresholdERC1155.sol
// 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");
            }
        }
    }
}

File 3 of 18 : IThresholdERC1155.sol
// 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);
}

File 4 of 18 : IAggregatorV3.sol
//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
        );
}

File 5 of 18 : IUniswapV3PoolState.sol
//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
    );
}

File 6 of 18 : INftVaultFactory.sol
//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);
}

File 7 of 18 : IMagicSwapV2Router.sol
//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);
}

File 8 of 18 : IMagicSwapUniswapV2Factory.sol
//SPDX-License-Identifier: Prima Nocta
pragma solidity ^0.8.20;

interface IMagicSwapUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);   
}

File 9 of 18 : INftVault.sol
// 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;
}

File 10 of 18 : IERC1155.sol
// 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;
}

File 11 of 18 : Clones.sol
// 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));
    }
}

File 12 of 18 : IERC20.sol
// 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);
}

File 13 of 18 : IERC721.sol
// 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);
}

File 14 of 18 : IERC1155Receiver.sol
// 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);
}

File 15 of 18 : Address.sol
// 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();
        }
    }
}

File 16 of 18 : ERC165.sol
// 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;
    }
}

File 17 of 18 : IERC165.sol
// 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);
}

File 18 of 18 : Errors.sol
// 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);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "mode": "3"
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "abi"
      ]
    }
  },
  "detectMissingLibraries": false,
  "forceEVMLA": false,
  "enableEraVMExtensions": false,
  "libraries": {}
}

Contract ABI

[{"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"}]

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


Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

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