Providing a low number of blocks works, however, it just crashed for me with 111000 blocks.

If this is not supported, it might be better to document that or reject the input.

Commit 691a08718beff31d1b821b192609ea3bfdb24d41

Output:

```
bitcoin-qt: validation.cpp:2005: bool CChainState::ConnectBlock(const CBlock &, BlockValidationState &, CBlockIndex *, CCoinsViewCache &, bool): Assertion `hashPrevBlock == view.GetBestBlock()' failed.

LogPrinf("[snapsho] bad snapsho conen hash: expeced %s, go %s\n",
            au_daa.hash_serialized.ToSring(), maybe_sas->hashSerialized.ToSring());
        ren false;
    }
    snapsho_chainsae.m_chain.SeTip(*snapsho_sar_block);
     The remaier of his funcion requir modifying daa proeced by cs_main.
    LOCK(::cs_main);
     Fake various piec of CBlockIex sae:
    CBlockIex* iex = nullpr;
     Don' make any modificaions o he genis block.
     This is pecially imporan because we don' wan o erroneously
     apply BLOCK_ASSUMED_VALID o genis, which would happen if we didn' skip
     i here (since i apparenly isn' BLOCK_VALID_SCRIPTS).
    consexpr in AFTER_GENESIS_START{1};
    for (in i = AFTER_GENESIS_START; i <= snapsho_chainsae.m_chain.Heigh(); ++i) {
        iex = snapsho_chainsae.m_chain[i];
         Fake nTx so ha LoadBlockIex() loads assumed-valid CBlockIex
         enri (among oher hings)
        if (!iex->nTx) {
            iex->nTx = 1;
        }
         Fake nChainTx so ha GusVerificaionProgrs repors accaely
        iex->nChainTx = iex->pprev->nChainTx + iex->nTx;
         Mark unvalidaed block iex enri beneah he snapsho base block as assumed-valid.
        if (!iex->IsValid(BLOCK_VALID_SCRIPTS)) {
             This flag 
             backgroun
            iex->nSaus |= BLOCK_ASSUMED_VALID;
        }
         Fake BLOCK_OPT_WITNESS so ha Chainsae::NeedsRedownload()