zstdlib 0.9.0-x64-mingw32 → 0.11.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +13 -0
- data/ext/zstdlib_c/extconf.rb +3 -3
- data/ext/zstdlib_c/ruby/zlib-3.2/zstdlib.c +5090 -0
- data/ext/zstdlib_c/zlib-1.2.12/crc32.c +1116 -0
- data/ext/zstdlib_c/zlib-1.2.12/crc32.h +9446 -0
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/deflate.c +78 -30
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/deflate.h +12 -15
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/gzguts.h +3 -2
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/gzlib.c +5 -3
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/gzread.c +5 -7
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/gzwrite.c +25 -13
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/infback.c +2 -1
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/inffast.c +14 -14
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/inflate.c +39 -8
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/inflate.h +3 -2
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/inftrees.c +3 -3
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/trees.c +27 -48
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/zlib.h +123 -100
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/zutil.c +2 -2
- data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/zutil.h +12 -9
- data/ext/zstdlib_c/zstd-1.5.5/lib/common/allocations.h +55 -0
- data/ext/zstdlib_c/zstd-1.5.5/lib/common/bits.h +200 -0
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/bitstream.h +19 -60
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/compiler.h +26 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/cpu.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/debug.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/debug.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/entropy_common.c +12 -40
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/error_private.c +9 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/error_private.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/fse.h +5 -83
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/fse_decompress.c +7 -99
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/huf.h +65 -156
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/mem.h +39 -46
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/pool.c +26 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/pool.h +7 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/portability_macros.h +22 -3
- data/ext/zstdlib_c/zstd-1.5.5/lib/common/threading.c +176 -0
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/threading.h +5 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/xxhash.c +2 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/xxhash.h +8 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_common.c +1 -36
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_deps.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_internal.h +17 -118
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_trace.h +3 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/clevels.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/fse_compress.c +7 -124
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/hist.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/hist.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/huf_compress.c +234 -169
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress.c +1243 -538
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_internal.h +225 -151
- data/ext/zstdlib_c/zstd-1.5.5/lib/compress/zstd_compress_literals.c +235 -0
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_literals.h +16 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_sequences.c +3 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_sequences.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_superblock.c +25 -21
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_superblock.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_cwksp.h +128 -62
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_double_fast.c +95 -33
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_double_fast.h +3 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_fast.c +433 -148
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_fast.h +3 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_lazy.c +398 -345
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_lazy.h +4 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_ldm.c +5 -5
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_ldm.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_ldm_geartab.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_opt.c +106 -80
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_opt.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstdmt_compress.c +17 -9
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstdmt_compress.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/huf_decompress.c +434 -441
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/huf_decompress_amd64.S +30 -39
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_ddict.c +4 -4
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_ddict.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress.c +205 -80
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress_block.c +201 -81
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress_block.h +6 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress_internal.h +4 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/zdict.h +53 -31
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/zstd.h +580 -135
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/zstd_errors.h +27 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzclose.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzcompatibility.h +8 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzguts.h +10 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzlib.c +3 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzread.c +10 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzwrite.c +5 -5
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/zstd_zlibwrapper.c +46 -44
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/zstd_zlibwrapper.h +4 -1
- data/lib/2.4/zstdlib_c.so +0 -0
- data/lib/2.5/zstdlib_c.so +0 -0
- data/lib/2.6/zstdlib_c.so +0 -0
- data/lib/2.7/zstdlib_c.so +0 -0
- data/lib/3.0/zstdlib_c.so +0 -0
- metadata +106 -103
- data/ext/zstdlib_c/zlib-1.2.11/crc32.c +0 -442
- data/ext/zstdlib_c/zlib-1.2.11/crc32.h +0 -441
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/threading.c +0 -122
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_compress_literals.c +0 -159
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/adler32.c +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/compress.c +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/gzclose.c +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/inffast.h +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/inffixed.h +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/inftrees.h +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/trees.h +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/uncompr.c +0 -0
- /data/ext/zstdlib_c/{zlib-1.2.11 → zlib-1.2.12}/zconf.h +0 -0
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 | 
            -
             * Copyright (c)  | 
| 2 | 
            +
             * Copyright (c) Meta Platforms, Inc. and affiliates.
         | 
| 3 3 | 
             
             * All rights reserved.
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             * This source code is licensed under both the BSD-style license (found in the
         | 
| @@ -28,7 +28,6 @@ | |
| 28 28 | 
             
            #include "../zstd.h"
         | 
| 29 29 | 
             
            #define FSE_STATIC_LINKING_ONLY
         | 
| 30 30 | 
             
            #include "fse.h"
         | 
| 31 | 
            -
            #define HUF_STATIC_LINKING_ONLY
         | 
| 32 31 | 
             
            #include "huf.h"
         | 
| 33 32 | 
             
            #ifndef XXH_STATIC_LINKING_ONLY
         | 
| 34 33 | 
             
            #  define XXH_STATIC_LINKING_ONLY  /* XXH64_state_t */
         | 
| @@ -93,9 +92,9 @@ typedef enum { bt_raw, bt_rle, bt_compressed, bt_reserved } blockType_e; | |
| 93 92 | 
             
            #define ZSTD_FRAMECHECKSUMSIZE 4
         | 
| 94 93 |  | 
| 95 94 | 
             
            #define MIN_SEQUENCES_SIZE 1 /* nbSeq==0 */
         | 
| 96 | 
            -
            #define MIN_CBLOCK_SIZE (1 /*litCSize*/ + 1 /* RLE or RAW */ | 
| 95 | 
            +
            #define MIN_CBLOCK_SIZE (1 /*litCSize*/ + 1 /* RLE or RAW */)   /* for a non-null block */
         | 
| 96 | 
            +
            #define MIN_LITERALS_FOR_4_STREAMS 6
         | 
| 97 97 |  | 
| 98 | 
            -
            #define HufLog 12
         | 
| 99 98 | 
             
            typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingType_e;
         | 
| 100 99 |  | 
| 101 100 | 
             
            #define LONGNBSEQ 0x7F00
         | 
| @@ -103,6 +102,7 @@ typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingTy | |
| 103 102 | 
             
            #define MINMATCH 3
         | 
| 104 103 |  | 
| 105 104 | 
             
            #define Litbits  8
         | 
| 105 | 
            +
            #define LitHufLog 11
         | 
| 106 106 | 
             
            #define MaxLit ((1<<Litbits) - 1)
         | 
| 107 107 | 
             
            #define MaxML   52
         | 
| 108 108 | 
             
            #define MaxLL   35
         | 
| @@ -113,6 +113,8 @@ typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingTy | |
| 113 113 | 
             
            #define LLFSELog    9
         | 
| 114 114 | 
             
            #define OffFSELog   8
         | 
| 115 115 | 
             
            #define MaxFSELog  MAX(MAX(MLFSELog, LLFSELog), OffFSELog)
         | 
| 116 | 
            +
            #define MaxMLBits 16
         | 
| 117 | 
            +
            #define MaxLLBits 16
         | 
| 116 118 |  | 
| 117 119 | 
             
            #define ZSTD_MAX_HUF_HEADER_SIZE 128 /* header + <= 127 byte tree description */
         | 
| 118 120 | 
             
            /* Each table cannot take more than #symbols * FSELog bits */
         | 
| @@ -235,12 +237,6 @@ void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length, ZSTD_overlap_e | |
| 235 237 | 
             
                     * one COPY16() in the first call. Then, do two calls per loop since
         | 
| 236 238 | 
             
                     * at that point it is more likely to have a high trip count.
         | 
| 237 239 | 
             
                     */
         | 
| 238 | 
            -
            #ifdef __aarch64__
         | 
| 239 | 
            -
                    do {
         | 
| 240 | 
            -
                        COPY16(op, ip);
         | 
| 241 | 
            -
                    }
         | 
| 242 | 
            -
                    while (op < oend);
         | 
| 243 | 
            -
            #else
         | 
| 244 240 | 
             
                    ZSTD_copy16(op, ip);
         | 
| 245 241 | 
             
                    if (16 >= length) return;
         | 
| 246 242 | 
             
                    op += 16;
         | 
| @@ -250,7 +246,6 @@ void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length, ZSTD_overlap_e | |
| 250 246 | 
             
                        COPY16(op, ip);
         | 
| 251 247 | 
             
                    }
         | 
| 252 248 | 
             
                    while (op < oend);
         | 
| 253 | 
            -
            #endif
         | 
| 254 249 | 
             
                }
         | 
| 255 250 | 
             
            }
         | 
| 256 251 |  | 
| @@ -299,11 +294,11 @@ typedef enum { | |
| 299 294 | 
             
            typedef struct {
         | 
| 300 295 | 
             
                seqDef* sequencesStart;
         | 
| 301 296 | 
             
                seqDef* sequences;      /* ptr to end of sequences */
         | 
| 302 | 
            -
                BYTE* | 
| 303 | 
            -
                BYTE* | 
| 304 | 
            -
                BYTE* | 
| 305 | 
            -
                BYTE* | 
| 306 | 
            -
                BYTE* | 
| 297 | 
            +
                BYTE*  litStart;
         | 
| 298 | 
            +
                BYTE*  lit;             /* ptr to end of literals */
         | 
| 299 | 
            +
                BYTE*  llCode;
         | 
| 300 | 
            +
                BYTE*  mlCode;
         | 
| 301 | 
            +
                BYTE*  ofCode;
         | 
| 307 302 | 
             
                size_t maxNbSeq;
         | 
| 308 303 | 
             
                size_t maxNbLit;
         | 
| 309 304 |  | 
| @@ -311,8 +306,8 @@ typedef struct { | |
| 311 306 | 
             
                 * in the seqStore that has a value larger than U16 (if it exists). To do so, we increment
         | 
| 312 307 | 
             
                 * the existing value of the litLength or matchLength by 0x10000.
         | 
| 313 308 | 
             
                 */
         | 
| 314 | 
            -
                ZSTD_longLengthType_e | 
| 315 | 
            -
                U32 | 
| 309 | 
            +
                ZSTD_longLengthType_e longLengthType;
         | 
| 310 | 
            +
                U32                   longLengthPos;  /* Index of the sequence to apply long length modification to */
         | 
| 316 311 | 
             
            } seqStore_t;
         | 
| 317 312 |  | 
| 318 313 | 
             
            typedef struct {
         | 
| @@ -331,10 +326,10 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore | |
| 331 326 | 
             
                seqLen.matchLength = seq->mlBase + MINMATCH;
         | 
| 332 327 | 
             
                if (seqStore->longLengthPos == (U32)(seq - seqStore->sequencesStart)) {
         | 
| 333 328 | 
             
                    if (seqStore->longLengthType == ZSTD_llt_literalLength) {
         | 
| 334 | 
            -
                        seqLen.litLength +=  | 
| 329 | 
            +
                        seqLen.litLength += 0x10000;
         | 
| 335 330 | 
             
                    }
         | 
| 336 331 | 
             
                    if (seqStore->longLengthType == ZSTD_llt_matchLength) {
         | 
| 337 | 
            -
                        seqLen.matchLength +=  | 
| 332 | 
            +
                        seqLen.matchLength += 0x10000;
         | 
| 338 333 | 
             
                    }
         | 
| 339 334 | 
             
                }
         | 
| 340 335 | 
             
                return seqLen;
         | 
| @@ -347,109 +342,13 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore | |
| 347 342 | 
             
             *          `decompressedBound != ZSTD_CONTENTSIZE_ERROR`
         | 
| 348 343 | 
             
             */
         | 
| 349 344 | 
             
            typedef struct {
         | 
| 345 | 
            +
                size_t nbBlocks;
         | 
| 350 346 | 
             
                size_t compressedSize;
         | 
| 351 347 | 
             
                unsigned long long decompressedBound;
         | 
| 352 348 | 
             
            } ZSTD_frameSizeInfo;   /* decompress & legacy */
         | 
| 353 349 |  | 
| 354 350 | 
             
            const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx);   /* compress & dictBuilder */
         | 
| 355 | 
            -
             | 
| 356 | 
            -
             | 
| 357 | 
            -
            /* custom memory allocation functions */
         | 
| 358 | 
            -
            void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem);
         | 
| 359 | 
            -
            void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem);
         | 
| 360 | 
            -
            void ZSTD_customFree(void* ptr, ZSTD_customMem customMem);
         | 
| 361 | 
            -
             | 
| 362 | 
            -
             | 
| 363 | 
            -
            MEM_STATIC U32 ZSTD_highbit32(U32 val)   /* compress, dictBuilder, decodeCorpus */
         | 
| 364 | 
            -
            {
         | 
| 365 | 
            -
                assert(val != 0);
         | 
| 366 | 
            -
                {
         | 
| 367 | 
            -
            #   if defined(_MSC_VER)   /* Visual */
         | 
| 368 | 
            -
            #       if STATIC_BMI2 == 1
         | 
| 369 | 
            -
                        return _lzcnt_u32(val)^31;
         | 
| 370 | 
            -
            #       else
         | 
| 371 | 
            -
                        if (val != 0) {
         | 
| 372 | 
            -
                            unsigned long r;
         | 
| 373 | 
            -
                            _BitScanReverse(&r, val);
         | 
| 374 | 
            -
                            return (unsigned)r;
         | 
| 375 | 
            -
                        } else {
         | 
| 376 | 
            -
                            /* Should not reach this code path */
         | 
| 377 | 
            -
                            __assume(0);
         | 
| 378 | 
            -
                        }
         | 
| 379 | 
            -
            #       endif
         | 
| 380 | 
            -
            #   elif defined(__GNUC__) && (__GNUC__ >= 3)   /* GCC Intrinsic */
         | 
| 381 | 
            -
                    return __builtin_clz (val) ^ 31;
         | 
| 382 | 
            -
            #   elif defined(__ICCARM__)    /* IAR Intrinsic */
         | 
| 383 | 
            -
                    return 31 - __CLZ(val);
         | 
| 384 | 
            -
            #   else   /* Software version */
         | 
| 385 | 
            -
                    static const U32 DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
         | 
| 386 | 
            -
                    U32 v = val;
         | 
| 387 | 
            -
                    v |= v >> 1;
         | 
| 388 | 
            -
                    v |= v >> 2;
         | 
| 389 | 
            -
                    v |= v >> 4;
         | 
| 390 | 
            -
                    v |= v >> 8;
         | 
| 391 | 
            -
                    v |= v >> 16;
         | 
| 392 | 
            -
                    return DeBruijnClz[(v * 0x07C4ACDDU) >> 27];
         | 
| 393 | 
            -
            #   endif
         | 
| 394 | 
            -
                }
         | 
| 395 | 
            -
            }
         | 
| 396 | 
            -
             | 
| 397 | 
            -
            /**
         | 
| 398 | 
            -
             * Counts the number of trailing zeros of a `size_t`.
         | 
| 399 | 
            -
             * Most compilers should support CTZ as a builtin. A backup
         | 
| 400 | 
            -
             * implementation is provided if the builtin isn't supported, but
         | 
| 401 | 
            -
             * it may not be terribly efficient.
         | 
| 402 | 
            -
             */
         | 
| 403 | 
            -
            MEM_STATIC unsigned ZSTD_countTrailingZeros(size_t val)
         | 
| 404 | 
            -
            {
         | 
| 405 | 
            -
                if (MEM_64bits()) {
         | 
| 406 | 
            -
            #       if defined(_MSC_VER) && defined(_WIN64)
         | 
| 407 | 
            -
            #           if STATIC_BMI2
         | 
| 408 | 
            -
                            return _tzcnt_u64(val);
         | 
| 409 | 
            -
            #           else
         | 
| 410 | 
            -
                            if (val != 0) {
         | 
| 411 | 
            -
                                unsigned long r;
         | 
| 412 | 
            -
                                _BitScanForward64(&r, (U64)val);
         | 
| 413 | 
            -
                                return (unsigned)r;
         | 
| 414 | 
            -
                            } else {
         | 
| 415 | 
            -
                                /* Should not reach this code path */
         | 
| 416 | 
            -
                                __assume(0);
         | 
| 417 | 
            -
                            }
         | 
| 418 | 
            -
            #           endif
         | 
| 419 | 
            -
            #       elif defined(__GNUC__) && (__GNUC__ >= 4)
         | 
| 420 | 
            -
                        return __builtin_ctzll((U64)val);
         | 
| 421 | 
            -
            #       else
         | 
| 422 | 
            -
                        static const int DeBruijnBytePos[64] = {  0,  1,  2,  7,  3, 13,  8, 19,
         | 
| 423 | 
            -
                                                                  4, 25, 14, 28,  9, 34, 20, 56,
         | 
| 424 | 
            -
                                                                  5, 17, 26, 54, 15, 41, 29, 43,
         | 
| 425 | 
            -
                                                                  10, 31, 38, 35, 21, 45, 49, 57,
         | 
| 426 | 
            -
                                                                  63,  6, 12, 18, 24, 27, 33, 55,
         | 
| 427 | 
            -
                                                                  16, 53, 40, 42, 30, 37, 44, 48,
         | 
| 428 | 
            -
                                                                  62, 11, 23, 32, 52, 39, 36, 47,
         | 
| 429 | 
            -
                                                                  61, 22, 51, 46, 60, 50, 59, 58 };
         | 
| 430 | 
            -
                        return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58];
         | 
| 431 | 
            -
            #       endif
         | 
| 432 | 
            -
                } else { /* 32 bits */
         | 
| 433 | 
            -
            #       if defined(_MSC_VER)
         | 
| 434 | 
            -
                        if (val != 0) {
         | 
| 435 | 
            -
                            unsigned long r;
         | 
| 436 | 
            -
                            _BitScanForward(&r, (U32)val);
         | 
| 437 | 
            -
                            return (unsigned)r;
         | 
| 438 | 
            -
                        } else {
         | 
| 439 | 
            -
                            /* Should not reach this code path */
         | 
| 440 | 
            -
                            __assume(0);
         | 
| 441 | 
            -
                        }
         | 
| 442 | 
            -
            #       elif defined(__GNUC__) && (__GNUC__ >= 3)
         | 
| 443 | 
            -
                        return __builtin_ctz((U32)val);
         | 
| 444 | 
            -
            #       else
         | 
| 445 | 
            -
                        static const int DeBruijnBytePos[32] = {  0,  1, 28,  2, 29, 14, 24,  3,
         | 
| 446 | 
            -
                                                                 30, 22, 20, 15, 25, 17,  4,  8,
         | 
| 447 | 
            -
                                                                 31, 27, 13, 23, 21, 19, 16,  7,
         | 
| 448 | 
            -
                                                                 26, 12, 18,  6, 11,  5, 10,  9 };
         | 
| 449 | 
            -
                        return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
         | 
| 450 | 
            -
            #       endif
         | 
| 451 | 
            -
                }
         | 
| 452 | 
            -
            }
         | 
| 351 | 
            +
            int ZSTD_seqToCodes(const seqStore_t* seqStorePtr);   /* compress, dictBuilder, decodeCorpus (shouldn't get its definition from here) */
         | 
| 453 352 |  | 
| 454 353 |  | 
| 455 354 | 
             
            /* ZSTD_invalidateRepCodes() :
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 | 
            -
             * Copyright (c)  | 
| 2 | 
            +
             * Copyright (c) Meta Platforms, Inc. and affiliates.
         | 
| 3 3 | 
             
             * All rights reserved.
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             * This source code is licensed under both the BSD-style license (found in the
         | 
| @@ -21,13 +21,13 @@ extern "C" { | |
| 21 21 | 
             
             * For now, enable conservatively:
         | 
| 22 22 | 
             
             * - Only GNUC
         | 
| 23 23 | 
             
             * - Only ELF
         | 
| 24 | 
            -
             * - Only x86-64 and  | 
| 24 | 
            +
             * - Only x86-64, i386 and aarch64
         | 
| 25 25 | 
             
             * Also, explicitly disable on platforms known not to work so they aren't
         | 
| 26 26 | 
             
             * forgotten in the future.
         | 
| 27 27 | 
             
             */
         | 
| 28 28 | 
             
            #if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && \
         | 
| 29 29 | 
             
                defined(__GNUC__) && defined(__ELF__) && \
         | 
| 30 | 
            -
                (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)) && \
         | 
| 30 | 
            +
                (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) || defined(__aarch64__)) && \
         | 
| 31 31 | 
             
                !defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \
         | 
| 32 32 | 
             
                !defined(__CYGWIN__) && !defined(_AIX)
         | 
| 33 33 | 
             
            #  define ZSTD_HAVE_WEAK_SYMBOLS 1
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            /* ******************************************************************
         | 
| 2 2 | 
             
             * FSE : Finite State Entropy encoder
         | 
| 3 | 
            -
             * Copyright (c)  | 
| 3 | 
            +
             * Copyright (c) Meta Platforms, Inc. and affiliates.
         | 
| 4 4 | 
             
             *
         | 
| 5 5 | 
             
             *  You can contact the author at :
         | 
| 6 6 | 
             
             *  - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
         | 
| @@ -26,6 +26,7 @@ | |
| 26 26 | 
             
            #define ZSTD_DEPS_NEED_MALLOC
         | 
| 27 27 | 
             
            #define ZSTD_DEPS_NEED_MATH64
         | 
| 28 28 | 
             
            #include "../common/zstd_deps.h"  /* ZSTD_malloc, ZSTD_free, ZSTD_memcpy, ZSTD_memset */
         | 
| 29 | 
            +
            #include "../common/bits.h" /* ZSTD_highbit32 */
         | 
| 29 30 |  | 
| 30 31 |  | 
| 31 32 | 
             
            /* **************************************************************
         | 
| @@ -90,7 +91,7 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct, | |
| 90 91 | 
             
                assert(tableLog < 16);   /* required for threshold strategy to work */
         | 
| 91 92 |  | 
| 92 93 | 
             
                /* For explanations on how to distribute symbol values over the table :
         | 
| 93 | 
            -
                 *  | 
| 94 | 
            +
                 * https://fastcompression.blogspot.fr/2014/02/fse-distributing-symbol-values.html */
         | 
| 94 95 |  | 
| 95 96 | 
             
                 #ifdef __clang_analyzer__
         | 
| 96 97 | 
             
                 ZSTD_memset(tableSymbol, 0, sizeof(*tableSymbol) * tableSize);   /* useless initialization, just to keep scan-build happy */
         | 
| @@ -191,7 +192,7 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct, | |
| 191 192 | 
             
                            break;
         | 
| 192 193 | 
             
                        default :
         | 
| 193 194 | 
             
                            assert(normalizedCounter[s] > 1);
         | 
| 194 | 
            -
                            {   U32 const maxBitsOut = tableLog -  | 
| 195 | 
            +
                            {   U32 const maxBitsOut = tableLog - ZSTD_highbit32 ((U32)normalizedCounter[s]-1);
         | 
| 195 196 | 
             
                                U32 const minStatePlus = (U32)normalizedCounter[s] << maxBitsOut;
         | 
| 196 197 | 
             
                                symbolTT[s].deltaNbBits = (maxBitsOut << 16) - minStatePlus;
         | 
| 197 198 | 
             
                                symbolTT[s].deltaFindState = (int)(total - (unsigned)normalizedCounter[s]);
         | 
| @@ -342,21 +343,11 @@ size_t FSE_writeNCount (void* buffer, size_t bufferSize, | |
| 342 343 | 
             
            *  FSE Compression Code
         | 
| 343 344 | 
             
            ****************************************************************/
         | 
| 344 345 |  | 
| 345 | 
            -
            FSE_CTable* FSE_createCTable (unsigned maxSymbolValue, unsigned tableLog)
         | 
| 346 | 
            -
            {
         | 
| 347 | 
            -
                size_t size;
         | 
| 348 | 
            -
                if (tableLog > FSE_TABLELOG_ABSOLUTE_MAX) tableLog = FSE_TABLELOG_ABSOLUTE_MAX;
         | 
| 349 | 
            -
                size = FSE_CTABLE_SIZE_U32 (tableLog, maxSymbolValue) * sizeof(U32);
         | 
| 350 | 
            -
                return (FSE_CTable*)ZSTD_malloc(size);
         | 
| 351 | 
            -
            }
         | 
| 352 | 
            -
             | 
| 353 | 
            -
            void FSE_freeCTable (FSE_CTable* ct) { ZSTD_free(ct); }
         | 
| 354 | 
            -
             | 
| 355 346 | 
             
            /* provides the minimum logSize to safely represent a distribution */
         | 
| 356 347 | 
             
            static unsigned FSE_minTableLog(size_t srcSize, unsigned maxSymbolValue)
         | 
| 357 348 | 
             
            {
         | 
| 358 | 
            -
                U32 minBitsSrc =  | 
| 359 | 
            -
                U32 minBitsSymbols =  | 
| 349 | 
            +
                U32 minBitsSrc = ZSTD_highbit32((U32)(srcSize)) + 1;
         | 
| 350 | 
            +
                U32 minBitsSymbols = ZSTD_highbit32(maxSymbolValue) + 2;
         | 
| 360 351 | 
             
                U32 minBits = minBitsSrc < minBitsSymbols ? minBitsSrc : minBitsSymbols;
         | 
| 361 352 | 
             
                assert(srcSize > 1); /* Not supported, RLE should be used instead */
         | 
| 362 353 | 
             
                return minBits;
         | 
| @@ -364,7 +355,7 @@ static unsigned FSE_minTableLog(size_t srcSize, unsigned maxSymbolValue) | |
| 364 355 |  | 
| 365 356 | 
             
            unsigned FSE_optimalTableLog_internal(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, unsigned minus)
         | 
| 366 357 | 
             
            {
         | 
| 367 | 
            -
                U32 maxBitsSrc =  | 
| 358 | 
            +
                U32 maxBitsSrc = ZSTD_highbit32((U32)(srcSize - 1)) - minus;
         | 
| 368 359 | 
             
                U32 tableLog = maxTableLog;
         | 
| 369 360 | 
             
                U32 minBits = FSE_minTableLog(srcSize, maxSymbolValue);
         | 
| 370 361 | 
             
                assert(srcSize > 1); /* Not supported, RLE should be used instead */
         | 
| @@ -532,40 +523,6 @@ size_t FSE_normalizeCount (short* normalizedCounter, unsigned tableLog, | |
| 532 523 | 
             
                return tableLog;
         | 
| 533 524 | 
             
            }
         | 
| 534 525 |  | 
| 535 | 
            -
             | 
| 536 | 
            -
            /* fake FSE_CTable, for raw (uncompressed) input */
         | 
| 537 | 
            -
            size_t FSE_buildCTable_raw (FSE_CTable* ct, unsigned nbBits)
         | 
| 538 | 
            -
            {
         | 
| 539 | 
            -
                const unsigned tableSize = 1 << nbBits;
         | 
| 540 | 
            -
                const unsigned tableMask = tableSize - 1;
         | 
| 541 | 
            -
                const unsigned maxSymbolValue = tableMask;
         | 
| 542 | 
            -
                void* const ptr = ct;
         | 
| 543 | 
            -
                U16* const tableU16 = ( (U16*) ptr) + 2;
         | 
| 544 | 
            -
                void* const FSCT = ((U32*)ptr) + 1 /* header */ + (tableSize>>1);   /* assumption : tableLog >= 1 */
         | 
| 545 | 
            -
                FSE_symbolCompressionTransform* const symbolTT = (FSE_symbolCompressionTransform*) (FSCT);
         | 
| 546 | 
            -
                unsigned s;
         | 
| 547 | 
            -
             | 
| 548 | 
            -
                /* Sanity checks */
         | 
| 549 | 
            -
                if (nbBits < 1) return ERROR(GENERIC);             /* min size */
         | 
| 550 | 
            -
             | 
| 551 | 
            -
                /* header */
         | 
| 552 | 
            -
                tableU16[-2] = (U16) nbBits;
         | 
| 553 | 
            -
                tableU16[-1] = (U16) maxSymbolValue;
         | 
| 554 | 
            -
             | 
| 555 | 
            -
                /* Build table */
         | 
| 556 | 
            -
                for (s=0; s<tableSize; s++)
         | 
| 557 | 
            -
                    tableU16[s] = (U16)(tableSize + s);
         | 
| 558 | 
            -
             | 
| 559 | 
            -
                /* Build Symbol Transformation Table */
         | 
| 560 | 
            -
                {   const U32 deltaNbBits = (nbBits << 16) - (1 << nbBits);
         | 
| 561 | 
            -
                    for (s=0; s<=maxSymbolValue; s++) {
         | 
| 562 | 
            -
                        symbolTT[s].deltaNbBits = deltaNbBits;
         | 
| 563 | 
            -
                        symbolTT[s].deltaFindState = s-1;
         | 
| 564 | 
            -
                }   }
         | 
| 565 | 
            -
             | 
| 566 | 
            -
                return 0;
         | 
| 567 | 
            -
            }
         | 
| 568 | 
            -
             | 
| 569 526 | 
             
            /* fake FSE_CTable, for rle input (always same symbol) */
         | 
| 570 527 | 
             
            size_t FSE_buildCTable_rle (FSE_CTable* ct, BYTE symbolValue)
         | 
| 571 528 | 
             
            {
         | 
| @@ -664,78 +621,4 @@ size_t FSE_compress_usingCTable (void* dst, size_t dstSize, | |
| 664 621 |  | 
| 665 622 | 
             
            size_t FSE_compressBound(size_t size) { return FSE_COMPRESSBOUND(size); }
         | 
| 666 623 |  | 
| 667 | 
            -
            #ifndef ZSTD_NO_UNUSED_FUNCTIONS
         | 
| 668 | 
            -
            /* FSE_compress_wksp() :
         | 
| 669 | 
            -
             * Same as FSE_compress2(), but using an externally allocated scratch buffer (`workSpace`).
         | 
| 670 | 
            -
             * `wkspSize` size must be `(1<<tableLog)`.
         | 
| 671 | 
            -
             */
         | 
| 672 | 
            -
            size_t FSE_compress_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize)
         | 
| 673 | 
            -
            {
         | 
| 674 | 
            -
                BYTE* const ostart = (BYTE*) dst;
         | 
| 675 | 
            -
                BYTE* op = ostart;
         | 
| 676 | 
            -
                BYTE* const oend = ostart + dstSize;
         | 
| 677 | 
            -
             | 
| 678 | 
            -
                unsigned count[FSE_MAX_SYMBOL_VALUE+1];
         | 
| 679 | 
            -
                S16   norm[FSE_MAX_SYMBOL_VALUE+1];
         | 
| 680 | 
            -
                FSE_CTable* CTable = (FSE_CTable*)workSpace;
         | 
| 681 | 
            -
                size_t const CTableSize = FSE_CTABLE_SIZE_U32(tableLog, maxSymbolValue);
         | 
| 682 | 
            -
                void* scratchBuffer = (void*)(CTable + CTableSize);
         | 
| 683 | 
            -
                size_t const scratchBufferSize = wkspSize - (CTableSize * sizeof(FSE_CTable));
         | 
| 684 | 
            -
             | 
| 685 | 
            -
                /* init conditions */
         | 
| 686 | 
            -
                if (wkspSize < FSE_COMPRESS_WKSP_SIZE_U32(tableLog, maxSymbolValue)) return ERROR(tableLog_tooLarge);
         | 
| 687 | 
            -
                if (srcSize <= 1) return 0;  /* Not compressible */
         | 
| 688 | 
            -
                if (!maxSymbolValue) maxSymbolValue = FSE_MAX_SYMBOL_VALUE;
         | 
| 689 | 
            -
                if (!tableLog) tableLog = FSE_DEFAULT_TABLELOG;
         | 
| 690 | 
            -
             | 
| 691 | 
            -
                /* Scan input and build symbol stats */
         | 
| 692 | 
            -
                {   CHECK_V_F(maxCount, HIST_count_wksp(count, &maxSymbolValue, src, srcSize, scratchBuffer, scratchBufferSize) );
         | 
| 693 | 
            -
                    if (maxCount == srcSize) return 1;   /* only a single symbol in src : rle */
         | 
| 694 | 
            -
                    if (maxCount == 1) return 0;         /* each symbol present maximum once => not compressible */
         | 
| 695 | 
            -
                    if (maxCount < (srcSize >> 7)) return 0;   /* Heuristic : not compressible enough */
         | 
| 696 | 
            -
                }
         | 
| 697 | 
            -
             | 
| 698 | 
            -
                tableLog = FSE_optimalTableLog(tableLog, srcSize, maxSymbolValue);
         | 
| 699 | 
            -
                CHECK_F( FSE_normalizeCount(norm, tableLog, count, srcSize, maxSymbolValue, /* useLowProbCount */ srcSize >= 2048) );
         | 
| 700 | 
            -
             | 
| 701 | 
            -
                /* Write table description header */
         | 
| 702 | 
            -
                {   CHECK_V_F(nc_err, FSE_writeNCount(op, oend-op, norm, maxSymbolValue, tableLog) );
         | 
| 703 | 
            -
                    op += nc_err;
         | 
| 704 | 
            -
                }
         | 
| 705 | 
            -
             | 
| 706 | 
            -
                /* Compress */
         | 
| 707 | 
            -
                CHECK_F( FSE_buildCTable_wksp(CTable, norm, maxSymbolValue, tableLog, scratchBuffer, scratchBufferSize) );
         | 
| 708 | 
            -
                {   CHECK_V_F(cSize, FSE_compress_usingCTable(op, oend - op, src, srcSize, CTable) );
         | 
| 709 | 
            -
                    if (cSize == 0) return 0;   /* not enough space for compressed data */
         | 
| 710 | 
            -
                    op += cSize;
         | 
| 711 | 
            -
                }
         | 
| 712 | 
            -
             | 
| 713 | 
            -
                /* check compressibility */
         | 
| 714 | 
            -
                if ( (size_t)(op-ostart) >= srcSize-1 ) return 0;
         | 
| 715 | 
            -
             | 
| 716 | 
            -
                return op-ostart;
         | 
| 717 | 
            -
            }
         | 
| 718 | 
            -
             | 
| 719 | 
            -
            typedef struct {
         | 
| 720 | 
            -
                FSE_CTable CTable_max[FSE_CTABLE_SIZE_U32(FSE_MAX_TABLELOG, FSE_MAX_SYMBOL_VALUE)];
         | 
| 721 | 
            -
                union {
         | 
| 722 | 
            -
                  U32 hist_wksp[HIST_WKSP_SIZE_U32];
         | 
| 723 | 
            -
                  BYTE scratchBuffer[1 << FSE_MAX_TABLELOG];
         | 
| 724 | 
            -
                } workspace;
         | 
| 725 | 
            -
            } fseWkspMax_t;
         | 
| 726 | 
            -
             | 
| 727 | 
            -
            size_t FSE_compress2 (void* dst, size_t dstCapacity, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog)
         | 
| 728 | 
            -
            {
         | 
| 729 | 
            -
                fseWkspMax_t scratchBuffer;
         | 
| 730 | 
            -
                DEBUG_STATIC_ASSERT(sizeof(scratchBuffer) >= FSE_COMPRESS_WKSP_SIZE_U32(FSE_MAX_TABLELOG, FSE_MAX_SYMBOL_VALUE));   /* compilation failures here means scratchBuffer is not large enough */
         | 
| 731 | 
            -
                if (tableLog > FSE_MAX_TABLELOG) return ERROR(tableLog_tooLarge);
         | 
| 732 | 
            -
                return FSE_compress_wksp(dst, dstCapacity, src, srcSize, maxSymbolValue, tableLog, &scratchBuffer, sizeof(scratchBuffer));
         | 
| 733 | 
            -
            }
         | 
| 734 | 
            -
             | 
| 735 | 
            -
            size_t FSE_compress (void* dst, size_t dstCapacity, const void* src, size_t srcSize)
         | 
| 736 | 
            -
            {
         | 
| 737 | 
            -
                return FSE_compress2(dst, dstCapacity, src, srcSize, FSE_MAX_SYMBOL_VALUE, FSE_DEFAULT_TABLELOG);
         | 
| 738 | 
            -
            }
         | 
| 739 | 
            -
            #endif
         | 
| 740 | 
            -
             | 
| 741 624 | 
             
            #endif   /* FSE_COMMONDEFS_ONLY */
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            /* ******************************************************************
         | 
| 2 2 | 
             
             * hist : Histogram functions
         | 
| 3 3 | 
             
             * part of Finite State Entropy project
         | 
| 4 | 
            -
             * Copyright (c)  | 
| 4 | 
            +
             * Copyright (c) Meta Platforms, Inc. and affiliates.
         | 
| 5 5 | 
             
             *
         | 
| 6 6 | 
             
             *  You can contact the author at :
         | 
| 7 7 | 
             
             *  - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            /* ******************************************************************
         | 
| 2 2 | 
             
             * hist : Histogram functions
         | 
| 3 3 | 
             
             * part of Finite State Entropy project
         | 
| 4 | 
            -
             * Copyright (c)  | 
| 4 | 
            +
             * Copyright (c) Meta Platforms, Inc. and affiliates.
         | 
| 5 5 | 
             
             *
         | 
| 6 6 | 
             
             *  You can contact the author at :
         | 
| 7 7 | 
             
             *  - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
         |