{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,35 +1,35 @@\n-Zip file size: 624863 bytes, number of entries: 65\n+Zip file size: 619098 bytes, number of entries: 65\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat       25 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.fusesource.jansi/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.fusesource.jansi/jansi/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.fusesource.jansi/jansi/pom.properties\n--rw----     2.0 fat    14435 bX stor 70-Jan-01 00:00 META-INF/maven/org.fusesource.jansi/jansi/pom.xml\n+-rw----     2.0 fat    14082 bX stor 70-Jan-01 00:00 META-INF/maven/org.fusesource.jansi/jansi/pom.xml\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/native-image/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/native-image/jansi/\n--rw----     2.0 fat      146 bX stor 70-Jan-01 00:00 META-INF/native-image/jansi/resource-config.json\n+-rw----     2.0 fat      141 bX stor 70-Jan-01 00:00 META-INF/native-image/jansi/resource-config.json\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/\n--rw----     2.0 fat    24135 bX stor 70-Jan-01 00:00 org/fusesource/jansi/Ansi.java\n--rw----     2.0 fat     1029 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiColors.java\n--rw----     2.0 fat    21903 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiConsole.java\n--rw----     2.0 fat    12057 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiMain.java\n--rw----     2.0 fat     1112 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiMode.java\n--rw----     2.0 fat     2809 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiPrintStream.java\n--rw----     2.0 fat     7606 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiRenderer.java\n--rw----     2.0 fat     1240 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiType.java\n--rw----     2.0 fat     1532 bX stor 70-Jan-01 00:00 org/fusesource/jansi/WindowsSupport.java\n+-rw----     2.0 fat    23187 bX stor 70-Jan-01 00:00 org/fusesource/jansi/Ansi.java\n+-rw----     2.0 fat      991 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiColors.java\n+-rw----     2.0 fat    21343 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiConsole.java\n+-rw----     2.0 fat    11768 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiMain.java\n+-rw----     2.0 fat     1074 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiMode.java\n+-rw----     2.0 fat     2714 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiPrintStream.java\n+-rw----     2.0 fat     7351 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiRenderer.java\n+-rw----     2.0 fat     1200 bX stor 70-Jan-01 00:00 org/fusesource/jansi/AnsiType.java\n+-rw----     2.0 fat     1490 bX stor 70-Jan-01 00:00 org/fusesource/jansi/WindowsSupport.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/\n--rw----     2.0 fat     5056 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/CLibrary.java\n--rw----     2.0 fat    14528 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/JansiLoader.java\n--rw----     2.0 fat    17284 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/Kernel32.java\n--rw----     2.0 fat     7247 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/OSInfo.java\n+-rw----     2.0 fat     4885 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/CLibrary.java\n+-rw----     2.0 fat    14135 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/JansiLoader.java\n+-rw----     2.0 fat    16706 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/Kernel32.java\n+-rw----     2.0 fat     7033 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/OSInfo.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/FreeBSD/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/FreeBSD/x86/\n -rw----     2.0 fat    12876 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/FreeBSD/x86/libjansi.so\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/FreeBSD/x86_64/\n -rw----     2.0 fat    16292 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/FreeBSD/x86_64/libjansi.so\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/Linux/\n@@ -52,16 +52,16 @@\n -rw----     2.0 fat    15964 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/Mac/x86_64/libjansi.jnilib\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/Windows/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/Windows/x86/\n -rw----     2.0 fat   115019 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/Windows/x86/jansi.dll\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/Windows/x86_64/\n -rw----     2.0 fat   129109 bX stor 70-Jan-01 00:00 org/fusesource/jansi/internal/native/Windows/x86_64/jansi.dll\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/fusesource/jansi/io/\n--rw----     2.0 fat    12129 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/AnsiOutputStream.java\n--rw----     2.0 fat    23924 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/AnsiProcessor.java\n--rw----     2.0 fat     6754 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/Colors.java\n--rw----     2.0 fat     5966 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/ColorsAnsiProcessor.java\n--rw----     2.0 fat     1914 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/FastBufferedOutputStream.java\n--rw----     2.0 fat    17865 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/WindowsAnsiProcessor.java\n--rw----     2.0 fat       28 bX stor 70-Jan-01 00:00 org/fusesource/jansi/jansi.properties\n+-rw----     2.0 fat    11779 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/AnsiOutputStream.java\n+-rw----     2.0 fat    23326 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/AnsiProcessor.java\n+-rw----     2.0 fat     6594 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/Colors.java\n+-rw----     2.0 fat     5824 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/ColorsAnsiProcessor.java\n+-rw----     2.0 fat     1845 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/FastBufferedOutputStream.java\n+-rw----     2.0 fat    17439 bX stor 70-Jan-01 00:00 org/fusesource/jansi/io/WindowsAnsiProcessor.java\n+-rw----     2.0 fat       27 bX stor 70-Jan-01 00:00 org/fusesource/jansi/jansi.properties\n -rw----     2.0 fat      935 bX stor 70-Jan-01 00:00 org/fusesource/jansi/jansi.txt\n-65 files, 612591 bytes uncompressed, 612591 bytes compressed:  0.0%\n+65 files, 606826 bytes uncompressed, 606826 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -157,3403 +157,3403 @@\n #\n 00224 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 00226   Length              0005 (5)\n 00228   Flags               01 (1) 'Modification'\n 00229   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 0022D PAYLOAD\n \n-03A90 DATA DESCRIPTOR       08074B50 (134695760)\n-03A94 CRC                   F12C1C87 (4046199943)\n-03A98 Compressed Size       00003863 (14435)\n-03A9C Uncompressed Size     00003863 (14435)\n-\n-03AA0 LOCAL HEADER #8       04034B50 (67324752)\n-03AA4 Extract Zip Spec      14 (20) '2.0'\n-03AA5 Extract OS            00 (0) 'MS-DOS'\n-03AA6 General Purpose Flag  0000 (0)\n-03AA8 Compression Method    0000 (0) 'Stored'\n-03AAA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AAE CRC                   00000000 (0)\n-03AB2 Compressed Size       00000000 (0)\n-03AB6 Uncompressed Size     00000000 (0)\n-03ABA Filename Length       0016 (22)\n-03ABC Extra Length          0009 (9)\n-03ABE Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3ABE: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03AD4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03AD6   Length              0005 (5)\n-03AD8   Flags               01 (1) 'Modification'\n-03AD9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03ADD LOCAL HEADER #9       04034B50 (67324752)\n-03AE1 Extract Zip Spec      14 (20) '2.0'\n-03AE2 Extract OS            00 (0) 'MS-DOS'\n-03AE3 General Purpose Flag  0000 (0)\n-03AE5 Compression Method    0000 (0) 'Stored'\n-03AE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03AEB CRC                   00000000 (0)\n-03AEF Compressed Size       00000000 (0)\n-03AF3 Uncompressed Size     00000000 (0)\n-03AF7 Filename Length       001C (28)\n-03AF9 Extra Length          0009 (9)\n-03AFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3AFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B19   Length              0005 (5)\n-03B1B   Flags               01 (1) 'Modification'\n-03B1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03B20 LOCAL HEADER #10      04034B50 (67324752)\n-03B24 Extract Zip Spec      14 (20) '2.0'\n-03B25 Extract OS            00 (0) 'MS-DOS'\n-03B26 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-03B28 Compression Method    0000 (0) 'Stored'\n-03B2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03B2E CRC                   00000000 (0)\n-03B32 Compressed Size       00000000 (0)\n-03B36 Uncompressed Size     00000000 (0)\n-03B3A Filename Length       0030 (48)\n-03B3C Extra Length          0009 (9)\n-03B3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3B3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03B6E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03B70   Length              0005 (5)\n-03B72   Flags               01 (1) 'Modification'\n-03B73   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03B77 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                            XXXXXXXXXXXXX\n-\n-03C09 DATA DESCRIPTOR       08074B50 (134695760)\n-03C0D CRC                   730D69A1 (1930258849)\n-03C11 Compressed Size       00000092 (146)\n-03C15 Uncompressed Size     00000092 (146)\n-\n-03C19 LOCAL HEADER #11      04034B50 (67324752)\n-03C1D Extract Zip Spec      14 (20) '2.0'\n-03C1E Extract OS            00 (0) 'MS-DOS'\n-03C1F General Purpose Flag  0000 (0)\n-03C21 Compression Method    0000 (0) 'Stored'\n-03C23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C27 CRC                   00000000 (0)\n-03C2B Compressed Size       00000000 (0)\n-03C2F Uncompressed Size     00000000 (0)\n-03C33 Filename Length       0004 (4)\n-03C35 Extra Length          0009 (9)\n-03C37 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x3C37: Filename 'XXXX'\n-#          Zero length filename\n-#\n-03C3B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C3D   Length              0005 (5)\n-03C3F   Flags               01 (1) 'Modification'\n-03C40   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C44 LOCAL HEADER #12      04034B50 (67324752)\n-03C48 Extract Zip Spec      14 (20) '2.0'\n-03C49 Extract OS            00 (0) 'MS-DOS'\n-03C4A General Purpose Flag  0000 (0)\n-03C4C Compression Method    0000 (0) 'Stored'\n-03C4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C52 CRC                   00000000 (0)\n-03C56 Compressed Size       00000000 (0)\n-03C5A Uncompressed Size     00000000 (0)\n-03C5E Filename Length       000F (15)\n-03C60 Extra Length          0009 (9)\n-03C62 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C62: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C73   Length              0005 (5)\n-03C75   Flags               01 (1) 'Modification'\n-03C76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C7A LOCAL HEADER #13      04034B50 (67324752)\n-03C7E Extract Zip Spec      14 (20) '2.0'\n-03C7F Extract OS            00 (0) 'MS-DOS'\n-03C80 General Purpose Flag  0000 (0)\n-03C82 Compression Method    0000 (0) 'Stored'\n-03C84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C88 CRC                   00000000 (0)\n-03C8C Compressed Size       00000000 (0)\n-03C90 Uncompressed Size     00000000 (0)\n-03C94 Filename Length       0015 (21)\n-03C96 Extra Length          0009 (9)\n-03C98 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C98: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CAD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CAF   Length              0005 (5)\n-03CB1   Flags               01 (1) 'Modification'\n-03CB2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03CB6 LOCAL HEADER #14      04034B50 (67324752)\n-03CBA Extract Zip Spec      14 (20) '2.0'\n-03CBB Extract OS            00 (0) 'MS-DOS'\n-03CBC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-03CBE Compression Method    0000 (0) 'Stored'\n-03CC0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CC4 CRC                   00000000 (0)\n-03CC8 Compressed Size       00000000 (0)\n-03CCC Uncompressed Size     00000000 (0)\n-03CD0 Filename Length       001E (30)\n-03CD2 Extra Length          0009 (9)\n-03CD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CF4   Length              0005 (5)\n-03CF6   Flags               01 (1) 'Modification'\n-03CF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03CFB PAYLOAD\n-\n-09B42 DATA DESCRIPTOR       08074B50 (134695760)\n-09B46 CRC                   2BA4533F (732189503)\n-09B4A Compressed Size       00005E47 (24135)\n-09B4E Uncompressed Size     00005E47 (24135)\n-\n-09B52 LOCAL HEADER #15      04034B50 (67324752)\n-09B56 Extract Zip Spec      14 (20) '2.0'\n-09B57 Extract OS            00 (0) 'MS-DOS'\n-09B58 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-09B5A Compression Method    0000 (0) 'Stored'\n-09B5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09B60 CRC                   00000000 (0)\n-09B64 Compressed Size       00000000 (0)\n-09B68 Uncompressed Size     00000000 (0)\n-09B6C Filename Length       0024 (36)\n-09B6E Extra Length          0009 (9)\n-09B70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9B70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09B94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09B96   Length              0005 (5)\n-09B98   Flags               01 (1) 'Modification'\n-09B99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09B9D PAYLOAD\n-\n-09FA2 DATA DESCRIPTOR       08074B50 (134695760)\n-09FA6 CRC                   1626ADEB (371633643)\n-09FAA Compressed Size       00000405 (1029)\n-09FAE Uncompressed Size     00000405 (1029)\n-\n-09FB2 LOCAL HEADER #16      04034B50 (67324752)\n-09FB6 Extract Zip Spec      14 (20) '2.0'\n-09FB7 Extract OS            00 (0) 'MS-DOS'\n-09FB8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-09FBA Compression Method    0000 (0) 'Stored'\n-09FBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09FC0 CRC                   00000000 (0)\n-09FC4 Compressed Size       00000000 (0)\n-09FC8 Uncompressed Size     00000000 (0)\n-09FCC Filename Length       0025 (37)\n-09FCE Extra Length          0009 (9)\n-09FD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9FD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09FF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09FF7   Length              0005 (5)\n-09FF9   Flags               01 (1) 'Modification'\n-09FFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09FFE PAYLOAD\n-\n-0F58D DATA DESCRIPTOR       08074B50 (134695760)\n-0F591 CRC                   10F3A5DC (284403164)\n-0F595 Compressed Size       0000558F (21903)\n-0F599 Uncompressed Size     0000558F (21903)\n-\n-0F59D LOCAL HEADER #17      04034B50 (67324752)\n-0F5A1 Extract Zip Spec      14 (20) '2.0'\n-0F5A2 Extract OS            00 (0) 'MS-DOS'\n-0F5A3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0F5A5 Compression Method    0000 (0) 'Stored'\n-0F5A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F5AB CRC                   00000000 (0)\n-0F5AF Compressed Size       00000000 (0)\n-0F5B3 Uncompressed Size     00000000 (0)\n-0F5B7 Filename Length       0022 (34)\n-0F5B9 Extra Length          0009 (9)\n-0F5BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF5BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F5DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F5DF   Length              0005 (5)\n-0F5E1   Flags               01 (1) 'Modification'\n-0F5E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F5E6 PAYLOAD\n-\n-124FF DATA DESCRIPTOR       08074B50 (134695760)\n-12503 CRC                   82DC48D4 (2195474644)\n-12507 Compressed Size       00002F19 (12057)\n-1250B Uncompressed Size     00002F19 (12057)\n-\n-1250F LOCAL HEADER #18      04034B50 (67324752)\n-12513 Extract Zip Spec      14 (20) '2.0'\n-12514 Extract OS            00 (0) 'MS-DOS'\n-12515 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-12517 Compression Method    0000 (0) 'Stored'\n-12519 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1251D CRC                   00000000 (0)\n-12521 Compressed Size       00000000 (0)\n-12525 Uncompressed Size     00000000 (0)\n-12529 Filename Length       0022 (34)\n-1252B Extra Length          0009 (9)\n-1252D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1252D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1254F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12551   Length              0005 (5)\n-12553   Flags               01 (1) 'Modification'\n-12554   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12558 PAYLOAD\n-\n-129B0 DATA DESCRIPTOR       08074B50 (134695760)\n-129B4 CRC                   B1F7FE75 (2985819765)\n-129B8 Compressed Size       00000458 (1112)\n-129BC Uncompressed Size     00000458 (1112)\n-\n-129C0 LOCAL HEADER #19      04034B50 (67324752)\n-129C4 Extract Zip Spec      14 (20) '2.0'\n-129C5 Extract OS            00 (0) 'MS-DOS'\n-129C6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-129C8 Compression Method    0000 (0) 'Stored'\n-129CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-129CE CRC                   00000000 (0)\n-129D2 Compressed Size       00000000 (0)\n-129D6 Uncompressed Size     00000000 (0)\n-129DA Filename Length       0029 (41)\n-129DC Extra Length          0009 (9)\n-129DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x129DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12A07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12A09   Length              0005 (5)\n-12A0B   Flags               01 (1) 'Modification'\n-12A0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12A10 PAYLOAD\n-\n-13509 DATA DESCRIPTOR       08074B50 (134695760)\n-1350D CRC                   9070D9B4 (2423314868)\n-13511 Compressed Size       00000AF9 (2809)\n-13515 Uncompressed Size     00000AF9 (2809)\n-\n-13519 LOCAL HEADER #20      04034B50 (67324752)\n-1351D Extract Zip Spec      14 (20) '2.0'\n-1351E Extract OS            00 (0) 'MS-DOS'\n-1351F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13521 Compression Method    0000 (0) 'Stored'\n-13523 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13527 CRC                   00000000 (0)\n-1352B Compressed Size       00000000 (0)\n-1352F Uncompressed Size     00000000 (0)\n-13533 Filename Length       0026 (38)\n-13535 Extra Length          0009 (9)\n-13537 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13537: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1355D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1355F   Length              0005 (5)\n-13561   Flags               01 (1) 'Modification'\n-13562   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13566 PAYLOAD\n-\n-1531C DATA DESCRIPTOR       08074B50 (134695760)\n-15320 CRC                   145FE0AA (341827754)\n-15324 Compressed Size       00001DB6 (7606)\n-15328 Uncompressed Size     00001DB6 (7606)\n-\n-1532C LOCAL HEADER #21      04034B50 (67324752)\n-15330 Extract Zip Spec      14 (20) '2.0'\n-15331 Extract OS            00 (0) 'MS-DOS'\n-15332 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15334 Compression Method    0000 (0) 'Stored'\n-15336 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1533A CRC                   00000000 (0)\n-1533E Compressed Size       00000000 (0)\n-15342 Uncompressed Size     00000000 (0)\n-15346 Filename Length       0022 (34)\n-15348 Extra Length          0009 (9)\n-1534A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1534A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1536C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1536E   Length              0005 (5)\n-15370   Flags               01 (1) 'Modification'\n-15371   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-15375 PAYLOAD\n-\n-1584D DATA DESCRIPTOR       08074B50 (134695760)\n-15851 CRC                   EBDD55D1 (3957151185)\n-15855 Compressed Size       000004D8 (1240)\n-15859 Uncompressed Size     000004D8 (1240)\n-\n-1585D LOCAL HEADER #22      04034B50 (67324752)\n-15861 Extract Zip Spec      14 (20) '2.0'\n-15862 Extract OS            00 (0) 'MS-DOS'\n-15863 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15865 Compression Method    0000 (0) 'Stored'\n-15867 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1586B CRC                   00000000 (0)\n-1586F Compressed Size       00000000 (0)\n-15873 Uncompressed Size     00000000 (0)\n-15877 Filename Length       0028 (40)\n-15879 Extra Length          0009 (9)\n-1587B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1587B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-158A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-158A5   Length              0005 (5)\n-158A7   Flags               01 (1) 'Modification'\n-158A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-158AC PAYLOAD\n-\n-15EA8 DATA DESCRIPTOR       08074B50 (134695760)\n-15EAC CRC                   F4A210E5 (4104261861)\n-15EB0 Compressed Size       000005FC (1532)\n-15EB4 Uncompressed Size     000005FC (1532)\n-\n-15EB8 LOCAL HEADER #23      04034B50 (67324752)\n-15EBC Extract Zip Spec      14 (20) '2.0'\n-15EBD Extract OS            00 (0) 'MS-DOS'\n-15EBE General Purpose Flag  0000 (0)\n-15EC0 Compression Method    0000 (0) 'Stored'\n-15EC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15EC6 CRC                   00000000 (0)\n-15ECA Compressed Size       00000000 (0)\n-15ECE Uncompressed Size     00000000 (0)\n-15ED2 Filename Length       001E (30)\n-15ED4 Extra Length          0009 (9)\n-15ED6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15ED6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15EF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15EF6   Length              0005 (5)\n-15EF8   Flags               01 (1) 'Modification'\n-15EF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-15EFD LOCAL HEADER #24      04034B50 (67324752)\n-15F01 Extract Zip Spec      14 (20) '2.0'\n-15F02 Extract OS            00 (0) 'MS-DOS'\n-15F03 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15F05 Compression Method    0000 (0) 'Stored'\n-15F07 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15F0B CRC                   00000000 (0)\n-15F0F Compressed Size       00000000 (0)\n-15F13 Uncompressed Size     00000000 (0)\n-15F17 Filename Length       002B (43)\n-15F19 Extra Length          0009 (9)\n-15F1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15F1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15F46 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15F48   Length              0005 (5)\n-15F4A   Flags               01 (1) 'Modification'\n-15F4B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-15F4F PAYLOAD\n-\n-1730F DATA DESCRIPTOR       08074B50 (134695760)\n-17313 CRC                   A1D45456 (2715046998)\n-17317 Compressed Size       000013C0 (5056)\n-1731B Uncompressed Size     000013C0 (5056)\n-\n-1731F LOCAL HEADER #25      04034B50 (67324752)\n-17323 Extract Zip Spec      14 (20) '2.0'\n-17324 Extract OS            00 (0) 'MS-DOS'\n-17325 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-17327 Compression Method    0000 (0) 'Stored'\n-17329 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1732D CRC                   00000000 (0)\n-17331 Compressed Size       00000000 (0)\n-17335 Uncompressed Size     00000000 (0)\n-17339 Filename Length       002E (46)\n-1733B Extra Length          0009 (9)\n-1733D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1733D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1736B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1736D   Length              0005 (5)\n-1736F   Flags               01 (1) 'Modification'\n-17370   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17374 PAYLOAD\n-\n-1AC34 DATA DESCRIPTOR       08074B50 (134695760)\n-1AC38 CRC                   8FD5E3A8 (2413159336)\n-1AC3C Compressed Size       000038C0 (14528)\n-1AC40 Uncompressed Size     000038C0 (14528)\n-\n-1AC44 LOCAL HEADER #26      04034B50 (67324752)\n-1AC48 Extract Zip Spec      14 (20) '2.0'\n-1AC49 Extract OS            00 (0) 'MS-DOS'\n-1AC4A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1AC4C Compression Method    0000 (0) 'Stored'\n-1AC4E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1AC52 CRC                   00000000 (0)\n-1AC56 Compressed Size       00000000 (0)\n-1AC5A Uncompressed Size     00000000 (0)\n-1AC5E Filename Length       002B (43)\n-1AC60 Extra Length          0009 (9)\n-1AC62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1AC62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1AC8D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1AC8F   Length              0005 (5)\n-1AC91   Flags               01 (1) 'Modification'\n-1AC92   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1AC96 PAYLOAD\n-\n-1F01A DATA DESCRIPTOR       08074B50 (134695760)\n-1F01E CRC                   E731CECA (3878801098)\n-1F022 Compressed Size       00004384 (17284)\n-1F026 Uncompressed Size     00004384 (17284)\n-\n-1F02A LOCAL HEADER #27      04034B50 (67324752)\n-1F02E Extract Zip Spec      14 (20) '2.0'\n-1F02F Extract OS            00 (0) 'MS-DOS'\n-1F030 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1F032 Compression Method    0000 (0) 'Stored'\n-1F034 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1F038 CRC                   00000000 (0)\n-1F03C Compressed Size       00000000 (0)\n-1F040 Uncompressed Size     00000000 (0)\n-1F044 Filename Length       0029 (41)\n-1F046 Extra Length          0009 (9)\n-1F048 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F048: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1F071 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1F073   Length              0005 (5)\n-1F075   Flags               01 (1) 'Modification'\n-1F076   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1F07A PAYLOAD\n-\n-20CC9 DATA DESCRIPTOR       08074B50 (134695760)\n-20CCD CRC                   2CCD3D7E (751648126)\n-20CD1 Compressed Size       00001C4F (7247)\n-20CD5 Uncompressed Size     00001C4F (7247)\n-\n-20CD9 LOCAL HEADER #28      04034B50 (67324752)\n-20CDD Extract Zip Spec      14 (20) '2.0'\n-20CDE Extract OS            00 (0) 'MS-DOS'\n-20CDF General Purpose Flag  0000 (0)\n-20CE1 Compression Method    0000 (0) 'Stored'\n-20CE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-20CE7 CRC                   00000000 (0)\n-20CEB Compressed Size       00000000 (0)\n-20CEF Uncompressed Size     00000000 (0)\n-20CF3 Filename Length       0025 (37)\n-20CF5 Extra Length          0009 (9)\n-20CF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20CF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-20D1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-20D1E   Length              0005 (5)\n-20D20   Flags               01 (1) 'Modification'\n-20D21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-20D25 LOCAL HEADER #29      04034B50 (67324752)\n-20D29 Extract Zip Spec      14 (20) '2.0'\n-20D2A Extract OS            00 (0) 'MS-DOS'\n-20D2B General Purpose Flag  0000 (0)\n-20D2D Compression Method    0000 (0) 'Stored'\n-20D2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-20D33 CRC                   00000000 (0)\n-20D37 Compressed Size       00000000 (0)\n-20D3B Uncompressed Size     00000000 (0)\n-20D3F Filename Length       002D (45)\n-20D41 Extra Length          0009 (9)\n-20D43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20D43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-20D70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-20D72   Length              0005 (5)\n-20D74   Flags               01 (1) 'Modification'\n-20D75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-20D79 LOCAL HEADER #30      04034B50 (67324752)\n-20D7D Extract Zip Spec      14 (20) '2.0'\n-20D7E Extract OS            00 (0) 'MS-DOS'\n-20D7F General Purpose Flag  0000 (0)\n-20D81 Compression Method    0000 (0) 'Stored'\n-20D83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-20D87 CRC                   00000000 (0)\n-20D8B Compressed Size       00000000 (0)\n-20D8F Uncompressed Size     00000000 (0)\n-20D93 Filename Length       0031 (49)\n-20D95 Extra Length          0009 (9)\n-20D97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20D97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-20DC8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-20DCA   Length              0005 (5)\n-20DCC   Flags               01 (1) 'Modification'\n-20DCD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-20DD1 LOCAL HEADER #31      04034B50 (67324752)\n-20DD5 Extract Zip Spec      14 (20) '2.0'\n-20DD6 Extract OS            00 (0) 'MS-DOS'\n-20DD7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-20DD9 Compression Method    0000 (0) 'Stored'\n-20DDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-20DDF CRC                   00000000 (0)\n-20DE3 Compressed Size       00000000 (0)\n-20DE7 Uncompressed Size     00000000 (0)\n-20DEB Filename Length       003C (60)\n-20DED Extra Length          0009 (9)\n-20DEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x20DEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-20E2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-20E2D   Length              0005 (5)\n-20E2F   Flags               01 (1) 'Modification'\n-20E30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-20E34 PAYLOAD\n-\n-24080 DATA DESCRIPTOR       08074B50 (134695760)\n-24084 CRC                   E497D7EA (3835156458)\n-24088 Compressed Size       0000324C (12876)\n-2408C Uncompressed Size     0000324C (12876)\n-\n-24090 LOCAL HEADER #32      04034B50 (67324752)\n-24094 Extract Zip Spec      14 (20) '2.0'\n-24095 Extract OS            00 (0) 'MS-DOS'\n-24096 General Purpose Flag  0000 (0)\n-24098 Compression Method    0000 (0) 'Stored'\n-2409A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2409E CRC                   00000000 (0)\n-240A2 Compressed Size       00000000 (0)\n-240A6 Uncompressed Size     00000000 (0)\n-240AA Filename Length       0034 (52)\n-240AC Extra Length          0009 (9)\n-240AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x240AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-240E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-240E4   Length              0005 (5)\n-240E6   Flags               01 (1) 'Modification'\n-240E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-240EB LOCAL HEADER #33      04034B50 (67324752)\n-240EF Extract Zip Spec      14 (20) '2.0'\n-240F0 Extract OS            00 (0) 'MS-DOS'\n-240F1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-240F3 Compression Method    0000 (0) 'Stored'\n-240F5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-240F9 CRC                   00000000 (0)\n-240FD Compressed Size       00000000 (0)\n-24101 Uncompressed Size     00000000 (0)\n-24105 Filename Length       003F (63)\n-24107 Extra Length          0009 (9)\n-24109 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x24109: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-24148 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2414A   Length              0005 (5)\n-2414C   Flags               01 (1) 'Modification'\n-2414D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-24151 PAYLOAD\n-\n-280F5 DATA DESCRIPTOR       08074B50 (134695760)\n-280F9 CRC                   F1F630C0 (4059443392)\n-280FD Compressed Size       00003FA4 (16292)\n-28101 Uncompressed Size     00003FA4 (16292)\n-\n-28105 LOCAL HEADER #34      04034B50 (67324752)\n-28109 Extract Zip Spec      14 (20) '2.0'\n-2810A Extract OS            00 (0) 'MS-DOS'\n-2810B General Purpose Flag  0000 (0)\n-2810D Compression Method    0000 (0) 'Stored'\n-2810F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-28113 CRC                   00000000 (0)\n-28117 Compressed Size       00000000 (0)\n-2811B Uncompressed Size     00000000 (0)\n-2811F Filename Length       002B (43)\n-28121 Extra Length          0009 (9)\n-28123 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28123: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2814E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-28150   Length              0005 (5)\n-28152   Flags               01 (1) 'Modification'\n-28153   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-28157 LOCAL HEADER #35      04034B50 (67324752)\n-2815B Extract Zip Spec      14 (20) '2.0'\n-2815C Extract OS            00 (0) 'MS-DOS'\n-2815D General Purpose Flag  0000 (0)\n-2815F Compression Method    0000 (0) 'Stored'\n-28161 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-28165 CRC                   00000000 (0)\n-28169 Compressed Size       00000000 (0)\n-2816D Uncompressed Size     00000000 (0)\n-28171 Filename Length       002F (47)\n-28173 Extra Length          0009 (9)\n-28175 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28175: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-281A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-281A6   Length              0005 (5)\n-281A8   Flags               01 (1) 'Modification'\n-281A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-281AD LOCAL HEADER #36      04034B50 (67324752)\n-281B1 Extract Zip Spec      14 (20) '2.0'\n-281B2 Extract OS            00 (0) 'MS-DOS'\n-281B3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-281B5 Compression Method    0000 (0) 'Stored'\n-281B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-281BB CRC                   00000000 (0)\n-281BF Compressed Size       00000000 (0)\n-281C3 Uncompressed Size     00000000 (0)\n-281C7 Filename Length       003A (58)\n-281C9 Extra Length          0009 (9)\n-281CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x281CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-28205 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-28207   Length              0005 (5)\n-28209   Flags               01 (1) 'Modification'\n-2820A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2820E PAYLOAD\n-\n-2DAE6 DATA DESCRIPTOR       08074B50 (134695760)\n-2DAEA CRC                   950F3569 (2500801897)\n-2DAEE Compressed Size       000058D8 (22744)\n-2DAF2 Uncompressed Size     000058D8 (22744)\n-\n-2DAF6 LOCAL HEADER #37      04034B50 (67324752)\n-2DAFA Extract Zip Spec      14 (20) '2.0'\n-2DAFB Extract OS            00 (0) 'MS-DOS'\n-2DAFC General Purpose Flag  0000 (0)\n-2DAFE Compression Method    0000 (0) 'Stored'\n-2DB00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DB04 CRC                   00000000 (0)\n-2DB08 Compressed Size       00000000 (0)\n-2DB0C Uncompressed Size     00000000 (0)\n-2DB10 Filename Length       0031 (49)\n-2DB12 Extra Length          0009 (9)\n-2DB14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DB14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DB45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DB47   Length              0005 (5)\n-2DB49   Flags               01 (1) 'Modification'\n-2DB4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DB4E LOCAL HEADER #38      04034B50 (67324752)\n-2DB52 Extract Zip Spec      14 (20) '2.0'\n-2DB53 Extract OS            00 (0) 'MS-DOS'\n-2DB54 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DB56 Compression Method    0000 (0) 'Stored'\n-2DB58 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DB5C CRC                   00000000 (0)\n-2DB60 Compressed Size       00000000 (0)\n-2DB64 Uncompressed Size     00000000 (0)\n-2DB68 Filename Length       003C (60)\n-2DB6A Extra Length          0009 (9)\n-2DB6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DB6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DBA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DBAA   Length              0005 (5)\n-2DBAC   Flags               01 (1) 'Modification'\n-2DBAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2DBB1 PAYLOAD\n-\n-31D89 DATA DESCRIPTOR       08074B50 (134695760)\n-31D8D CRC                   78DAFB34 (2027617076)\n-31D91 Compressed Size       000041D8 (16856)\n-31D95 Uncompressed Size     000041D8 (16856)\n-\n-31D99 LOCAL HEADER #39      04034B50 (67324752)\n-31D9D Extract Zip Spec      14 (20) '2.0'\n-31D9E Extract OS            00 (0) 'MS-DOS'\n-31D9F General Purpose Flag  0000 (0)\n-31DA1 Compression Method    0000 (0) 'Stored'\n-31DA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-31DA7 CRC                   00000000 (0)\n-31DAB Compressed Size       00000000 (0)\n-31DAF Uncompressed Size     00000000 (0)\n-31DB3 Filename Length       0031 (49)\n-31DB5 Extra Length          0009 (9)\n-31DB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31DB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-31DE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-31DEA   Length              0005 (5)\n-31DEC   Flags               01 (1) 'Modification'\n-31DED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-31DF1 LOCAL HEADER #40      04034B50 (67324752)\n-31DF5 Extract Zip Spec      14 (20) '2.0'\n-31DF6 Extract OS            00 (0) 'MS-DOS'\n-31DF7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-31DF9 Compression Method    0000 (0) 'Stored'\n-31DFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-31DFF CRC                   00000000 (0)\n-31E03 Compressed Size       00000000 (0)\n-31E07 Uncompressed Size     00000000 (0)\n-31E0B Filename Length       003C (60)\n-31E0D Extra Length          0009 (9)\n-31E0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x31E0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-31E4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-31E4D   Length              0005 (5)\n-31E4F   Flags               01 (1) 'Modification'\n-31E50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-31E54 PAYLOAD\n-\n-350D0 DATA DESCRIPTOR       08074B50 (134695760)\n-350D4 CRC                   BAB7DC59 (3132611673)\n-350D8 Compressed Size       0000327C (12924)\n-350DC Uncompressed Size     0000327C (12924)\n-\n-350E0 LOCAL HEADER #41      04034B50 (67324752)\n-350E4 Extract Zip Spec      14 (20) '2.0'\n-350E5 Extract OS            00 (0) 'MS-DOS'\n-350E6 General Purpose Flag  0000 (0)\n-350E8 Compression Method    0000 (0) 'Stored'\n-350EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-350EE CRC                   00000000 (0)\n-350F2 Compressed Size       00000000 (0)\n-350F6 Uncompressed Size     00000000 (0)\n-350FA Filename Length       0031 (49)\n-350FC Extra Length          0009 (9)\n-350FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x350FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3512F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-35131   Length              0005 (5)\n-35133   Flags               01 (1) 'Modification'\n-35134   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-35138 LOCAL HEADER #42      04034B50 (67324752)\n-3513C Extract Zip Spec      14 (20) '2.0'\n-3513D Extract OS            00 (0) 'MS-DOS'\n-3513E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-35140 Compression Method    0000 (0) 'Stored'\n-35142 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-35146 CRC                   00000000 (0)\n-3514A Compressed Size       00000000 (0)\n-3514E Uncompressed Size     00000000 (0)\n-35152 Filename Length       003C (60)\n-35154 Extra Length          0009 (9)\n-35156 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35156: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-35192 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-35194   Length              0005 (5)\n-35196   Flags               01 (1) 'Modification'\n-35197   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3519B PAYLOAD\n-\n-39D33 DATA DESCRIPTOR       08074B50 (134695760)\n-39D37 CRC                   24DF140F (618599439)\n-39D3B Compressed Size       00004B98 (19352)\n-39D3F Uncompressed Size     00004B98 (19352)\n-\n-39D43 LOCAL HEADER #43      04034B50 (67324752)\n-39D47 Extract Zip Spec      14 (20) '2.0'\n-39D48 Extract OS            00 (0) 'MS-DOS'\n-39D49 General Purpose Flag  0000 (0)\n-39D4B Compression Method    0000 (0) 'Stored'\n-39D4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-39D51 CRC                   00000000 (0)\n-39D55 Compressed Size       00000000 (0)\n-39D59 Uncompressed Size     00000000 (0)\n-39D5D Filename Length       002F (47)\n-39D5F Extra Length          0009 (9)\n-39D61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39D61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-39D90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-39D92   Length              0005 (5)\n-39D94   Flags               01 (1) 'Modification'\n-39D95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-39D99 LOCAL HEADER #44      04034B50 (67324752)\n-39D9D Extract Zip Spec      14 (20) '2.0'\n-39D9E Extract OS            00 (0) 'MS-DOS'\n-39D9F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-39DA1 Compression Method    0000 (0) 'Stored'\n-39DA3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-39DA7 CRC                   00000000 (0)\n-39DAB Compressed Size       00000000 (0)\n-39DAF Uncompressed Size     00000000 (0)\n-39DB3 Filename Length       003A (58)\n-39DB5 Extra Length          0009 (9)\n-39DB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x39DB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-39DF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-39DF3   Length              0005 (5)\n-39DF5   Flags               01 (1) 'Modification'\n-39DF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-39DFA PAYLOAD\n-\n-3E3B2 DATA DESCRIPTOR       08074B50 (134695760)\n-3E3B6 CRC                   321C2FD2 (840708050)\n-3E3BA Compressed Size       000045B8 (17848)\n-3E3BE Uncompressed Size     000045B8 (17848)\n-\n-3E3C2 LOCAL HEADER #45      04034B50 (67324752)\n-3E3C6 Extract Zip Spec      14 (20) '2.0'\n-3E3C7 Extract OS            00 (0) 'MS-DOS'\n-3E3C8 General Purpose Flag  0000 (0)\n-3E3CA Compression Method    0000 (0) 'Stored'\n-3E3CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E3D0 CRC                   00000000 (0)\n-3E3D4 Compressed Size       00000000 (0)\n-3E3D8 Uncompressed Size     00000000 (0)\n-3E3DC Filename Length       0032 (50)\n-3E3DE Extra Length          0009 (9)\n-3E3E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E3E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E412 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E414   Length              0005 (5)\n-3E416   Flags               01 (1) 'Modification'\n-3E417   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3E41B LOCAL HEADER #46      04034B50 (67324752)\n-3E41F Extract Zip Spec      14 (20) '2.0'\n-3E420 Extract OS            00 (0) 'MS-DOS'\n-3E421 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3E423 Compression Method    0000 (0) 'Stored'\n-3E425 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3E429 CRC                   00000000 (0)\n-3E42D Compressed Size       00000000 (0)\n-3E431 Uncompressed Size     00000000 (0)\n-3E435 Filename Length       003D (61)\n-3E437 Extra Length          0009 (9)\n-3E439 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3E439: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E476 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E478   Length              0005 (5)\n-3E47A   Flags               01 (1) 'Modification'\n-3E47B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3E47F PAYLOAD\n-\n-4265F DATA DESCRIPTOR       08074B50 (134695760)\n-42663 CRC                   3ECC3177 (1053569399)\n-42667 Compressed Size       000041E0 (16864)\n-4266B Uncompressed Size     000041E0 (16864)\n-\n-4266F LOCAL HEADER #47      04034B50 (67324752)\n-42673 Extract Zip Spec      14 (20) '2.0'\n-42674 Extract OS            00 (0) 'MS-DOS'\n-42675 General Purpose Flag  0000 (0)\n-42677 Compression Method    0000 (0) 'Stored'\n-42679 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4267D CRC                   00000000 (0)\n-42681 Compressed Size       00000000 (0)\n-42685 Uncompressed Size     00000000 (0)\n-42689 Filename Length       0029 (41)\n-4268B Extra Length          0009 (9)\n-4268D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4268D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-426B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-426B8   Length              0005 (5)\n-426BA   Flags               01 (1) 'Modification'\n-426BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-426BF LOCAL HEADER #48      04034B50 (67324752)\n-426C3 Extract Zip Spec      14 (20) '2.0'\n-426C4 Extract OS            00 (0) 'MS-DOS'\n-426C5 General Purpose Flag  0000 (0)\n-426C7 Compression Method    0000 (0) 'Stored'\n-426C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-426CD CRC                   00000000 (0)\n-426D1 Compressed Size       00000000 (0)\n-426D5 Uncompressed Size     00000000 (0)\n-426D9 Filename Length       002D (45)\n-426DB Extra Length          0009 (9)\n-426DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x426DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4270A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4270C   Length              0005 (5)\n-4270E   Flags               01 (1) 'Modification'\n-4270F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-42713 LOCAL HEADER #49      04034B50 (67324752)\n-42717 Extract Zip Spec      14 (20) '2.0'\n-42718 Extract OS            00 (0) 'MS-DOS'\n-42719 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4271B Compression Method    0000 (0) 'Stored'\n-4271D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-42721 CRC                   00000000 (0)\n-42725 Compressed Size       00000000 (0)\n-42729 Uncompressed Size     00000000 (0)\n-4272D Filename Length       003C (60)\n-4272F Extra Length          0009 (9)\n-42731 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x42731: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4276D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4276F   Length              0005 (5)\n-42771   Flags               01 (1) 'Modification'\n-42772   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-42776 PAYLOAD\n-\n-46262 DATA DESCRIPTOR       08074B50 (134695760)\n-46266 CRC                   54FC5C00 (1425824768)\n-4626A Compressed Size       00003AEC (15084)\n-4626E Uncompressed Size     00003AEC (15084)\n-\n-46272 LOCAL HEADER #50      04034B50 (67324752)\n-46276 Extract Zip Spec      14 (20) '2.0'\n-46277 Extract OS            00 (0) 'MS-DOS'\n-46278 General Purpose Flag  0000 (0)\n-4627A Compression Method    0000 (0) 'Stored'\n-4627C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-46280 CRC                   00000000 (0)\n-46284 Compressed Size       00000000 (0)\n-46288 Uncompressed Size     00000000 (0)\n-4628C Filename Length       0030 (48)\n-4628E Extra Length          0009 (9)\n-46290 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46290: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-462C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-462C2   Length              0005 (5)\n-462C4   Flags               01 (1) 'Modification'\n-462C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-462C9 LOCAL HEADER #51      04034B50 (67324752)\n-462CD Extract Zip Spec      14 (20) '2.0'\n-462CE Extract OS            00 (0) 'MS-DOS'\n-462CF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-462D1 Compression Method    0000 (0) 'Stored'\n-462D3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-462D7 CRC                   00000000 (0)\n-462DB Compressed Size       00000000 (0)\n-462DF Uncompressed Size     00000000 (0)\n-462E3 Filename Length       003F (63)\n-462E5 Extra Length          0009 (9)\n-462E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x462E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-46326 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-46328   Length              0005 (5)\n-4632A   Flags               01 (1) 'Modification'\n-4632B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4632F PAYLOAD\n-\n-4A18B DATA DESCRIPTOR       08074B50 (134695760)\n-4A18F CRC                   F14BF548 (4048287048)\n-4A193 Compressed Size       00003E5C (15964)\n-4A197 Uncompressed Size     00003E5C (15964)\n-\n-4A19B LOCAL HEADER #52      04034B50 (67324752)\n-4A19F Extract Zip Spec      14 (20) '2.0'\n-4A1A0 Extract OS            00 (0) 'MS-DOS'\n-4A1A1 General Purpose Flag  0000 (0)\n-4A1A3 Compression Method    0000 (0) 'Stored'\n-4A1A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4A1A9 CRC                   00000000 (0)\n-4A1AD Compressed Size       00000000 (0)\n-4A1B1 Uncompressed Size     00000000 (0)\n-4A1B5 Filename Length       002D (45)\n-4A1B7 Extra Length          0009 (9)\n-4A1B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A1B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4A1E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4A1E8   Length              0005 (5)\n-4A1EA   Flags               01 (1) 'Modification'\n-4A1EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-4A1EF LOCAL HEADER #53      04034B50 (67324752)\n-4A1F3 Extract Zip Spec      14 (20) '2.0'\n-4A1F4 Extract OS            00 (0) 'MS-DOS'\n-4A1F5 General Purpose Flag  0000 (0)\n-4A1F7 Compression Method    0000 (0) 'Stored'\n-4A1F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4A1FD CRC                   00000000 (0)\n-4A201 Compressed Size       00000000 (0)\n-4A205 Uncompressed Size     00000000 (0)\n-4A209 Filename Length       0031 (49)\n-4A20B Extra Length          0009 (9)\n-4A20D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A20D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4A23E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4A240   Length              0005 (5)\n-4A242   Flags               01 (1) 'Modification'\n-4A243   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-4A247 LOCAL HEADER #54      04034B50 (67324752)\n-4A24B Extract Zip Spec      14 (20) '2.0'\n-4A24C Extract OS            00 (0) 'MS-DOS'\n-4A24D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4A24F Compression Method    0000 (0) 'Stored'\n-4A251 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4A255 CRC                   00000000 (0)\n-4A259 Compressed Size       00000000 (0)\n-4A25D Uncompressed Size     00000000 (0)\n-4A261 Filename Length       003A (58)\n-4A263 Extra Length          0009 (9)\n-4A265 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4A265: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4A29F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4A2A1   Length              0005 (5)\n-4A2A3   Flags               01 (1) 'Modification'\n-4A2A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4A2A8 PAYLOAD\n-\n-663F3 DATA DESCRIPTOR       08074B50 (134695760)\n-663F7 CRC                   A2950D97 (2727677335)\n-663FB Compressed Size       0001C14B (115019)\n-663FF Uncompressed Size     0001C14B (115019)\n-\n-66403 LOCAL HEADER #55      04034B50 (67324752)\n-66407 Extract Zip Spec      14 (20) '2.0'\n-66408 Extract OS            00 (0) 'MS-DOS'\n-66409 General Purpose Flag  0000 (0)\n-6640B Compression Method    0000 (0) 'Stored'\n-6640D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-66411 CRC                   00000000 (0)\n-66415 Compressed Size       00000000 (0)\n-66419 Uncompressed Size     00000000 (0)\n-6641D Filename Length       0034 (52)\n-6641F Extra Length          0009 (9)\n-66421 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x66421: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-66455 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-66457   Length              0005 (5)\n-66459   Flags               01 (1) 'Modification'\n-6645A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6645E LOCAL HEADER #56      04034B50 (67324752)\n-66462 Extract Zip Spec      14 (20) '2.0'\n-66463 Extract OS            00 (0) 'MS-DOS'\n-66464 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-66466 Compression Method    0000 (0) 'Stored'\n-66468 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6646C CRC                   00000000 (0)\n-66470 Compressed Size       00000000 (0)\n-66474 Uncompressed Size     00000000 (0)\n-66478 Filename Length       003D (61)\n-6647A Extra Length          0009 (9)\n-6647C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6647C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-664B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-664BB   Length              0005 (5)\n-664BD   Flags               01 (1) 'Modification'\n-664BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-664C2 PAYLOAD\n-\n-85D17 DATA DESCRIPTOR       08074B50 (134695760)\n-85D1B CRC                   A327DAE4 (2737298148)\n-85D1F Compressed Size       0001F855 (129109)\n-85D23 Uncompressed Size     0001F855 (129109)\n-\n-85D27 LOCAL HEADER #57      04034B50 (67324752)\n-85D2B Extract Zip Spec      14 (20) '2.0'\n-85D2C Extract OS            00 (0) 'MS-DOS'\n-85D2D General Purpose Flag  0000 (0)\n-85D2F Compression Method    0000 (0) 'Stored'\n-85D31 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-85D35 CRC                   00000000 (0)\n-85D39 Compressed Size       00000000 (0)\n-85D3D Uncompressed Size     00000000 (0)\n-85D41 Filename Length       0018 (24)\n-85D43 Extra Length          0009 (9)\n-85D45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x85D45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-85D5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-85D5F   Length              0005 (5)\n-85D61   Flags               01 (1) 'Modification'\n-85D62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-85D66 LOCAL HEADER #58      04034B50 (67324752)\n-85D6A Extract Zip Spec      14 (20) '2.0'\n-85D6B Extract OS            00 (0) 'MS-DOS'\n-85D6C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-85D6E Compression Method    0000 (0) 'Stored'\n-85D70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-85D74 CRC                   00000000 (0)\n-85D78 Compressed Size       00000000 (0)\n-85D7C Uncompressed Size     00000000 (0)\n-85D80 Filename Length       002D (45)\n-85D82 Extra Length          0009 (9)\n-85D84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x85D84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-85DB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-85DB3   Length              0005 (5)\n-85DB5   Flags               01 (1) 'Modification'\n-85DB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-85DBA PAYLOAD\n-\n-88D1B DATA DESCRIPTOR       08074B50 (134695760)\n-88D1F CRC                   A957C743 (2841102147)\n-88D23 Compressed Size       00002F61 (12129)\n-88D27 Uncompressed Size     00002F61 (12129)\n-\n-88D2B LOCAL HEADER #59      04034B50 (67324752)\n-88D2F Extract Zip Spec      14 (20) '2.0'\n-88D30 Extract OS            00 (0) 'MS-DOS'\n-88D31 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-88D33 Compression Method    0000 (0) 'Stored'\n-88D35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-88D39 CRC                   00000000 (0)\n-88D3D Compressed Size       00000000 (0)\n-88D41 Uncompressed Size     00000000 (0)\n-88D45 Filename Length       002A (42)\n-88D47 Extra Length          0009 (9)\n-88D49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x88D49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-88D73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-88D75   Length              0005 (5)\n-88D77   Flags               01 (1) 'Modification'\n-88D78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-88D7C PAYLOAD\n-\n-8EAF0 DATA DESCRIPTOR       08074B50 (134695760)\n-8EAF4 CRC                   5CE38909 (1558415625)\n-8EAF8 Compressed Size       00005D74 (23924)\n-8EAFC Uncompressed Size     00005D74 (23924)\n-\n-8EB00 LOCAL HEADER #60      04034B50 (67324752)\n-8EB04 Extract Zip Spec      14 (20) '2.0'\n-8EB05 Extract OS            00 (0) 'MS-DOS'\n-8EB06 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-8EB08 Compression Method    0000 (0) 'Stored'\n-8EB0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-8EB0E CRC                   00000000 (0)\n-8EB12 Compressed Size       00000000 (0)\n-8EB16 Uncompressed Size     00000000 (0)\n-8EB1A Filename Length       0023 (35)\n-8EB1C Extra Length          0009 (9)\n-8EB1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8EB1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-8EB41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-8EB43   Length              0005 (5)\n-8EB45   Flags               01 (1) 'Modification'\n-8EB46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-8EB4A PAYLOAD\n-\n-905AC DATA DESCRIPTOR       08074B50 (134695760)\n-905B0 CRC                   5D7A4DC7 (1568296391)\n-905B4 Compressed Size       00001A62 (6754)\n-905B8 Uncompressed Size     00001A62 (6754)\n-\n-905BC LOCAL HEADER #61      04034B50 (67324752)\n-905C0 Extract Zip Spec      14 (20) '2.0'\n-905C1 Extract OS            00 (0) 'MS-DOS'\n-905C2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-905C4 Compression Method    0000 (0) 'Stored'\n-905C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-905CA CRC                   00000000 (0)\n-905CE Compressed Size       00000000 (0)\n-905D2 Uncompressed Size     00000000 (0)\n-905D6 Filename Length       0030 (48)\n-905D8 Extra Length          0009 (9)\n-905DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x905DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9060A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9060C   Length              0005 (5)\n-9060E   Flags               01 (1) 'Modification'\n-9060F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-90613 PAYLOAD\n-\n-91D61 DATA DESCRIPTOR       08074B50 (134695760)\n-91D65 CRC                   F704B52A (4144280874)\n-91D69 Compressed Size       0000174E (5966)\n-91D6D Uncompressed Size     0000174E (5966)\n-\n-91D71 LOCAL HEADER #62      04034B50 (67324752)\n-91D75 Extract Zip Spec      14 (20) '2.0'\n-91D76 Extract OS            00 (0) 'MS-DOS'\n-91D77 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-91D79 Compression Method    0000 (0) 'Stored'\n-91D7B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-91D7F CRC                   00000000 (0)\n-91D83 Compressed Size       00000000 (0)\n-91D87 Uncompressed Size     00000000 (0)\n-91D8B Filename Length       0035 (53)\n-91D8D Extra Length          0009 (9)\n-91D8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x91D8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-91DC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-91DC6   Length              0005 (5)\n-91DC8   Flags               01 (1) 'Modification'\n-91DC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-91DCD PAYLOAD\n-\n-92547 DATA DESCRIPTOR       08074B50 (134695760)\n-9254B CRC                   650A50CF (1695174863)\n-9254F Compressed Size       0000077A (1914)\n-92553 Uncompressed Size     0000077A (1914)\n-\n-92557 LOCAL HEADER #63      04034B50 (67324752)\n-9255B Extract Zip Spec      14 (20) '2.0'\n-9255C Extract OS            00 (0) 'MS-DOS'\n-9255D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9255F Compression Method    0000 (0) 'Stored'\n-92561 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-92565 CRC                   00000000 (0)\n-92569 Compressed Size       00000000 (0)\n-9256D Uncompressed Size     00000000 (0)\n-92571 Filename Length       0031 (49)\n-92573 Extra Length          0009 (9)\n-92575 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x92575: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-925A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-925A8   Length              0005 (5)\n-925AA   Flags               01 (1) 'Modification'\n-925AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-925AF PAYLOAD\n-\n-96B78 DATA DESCRIPTOR       08074B50 (134695760)\n-96B7C CRC                   FD56735F (4250301279)\n-96B80 Compressed Size       000045C9 (17865)\n-96B84 Uncompressed Size     000045C9 (17865)\n-\n-96B88 LOCAL HEADER #64      04034B50 (67324752)\n-96B8C Extract Zip Spec      14 (20) '2.0'\n-96B8D Extract OS            00 (0) 'MS-DOS'\n-96B8E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-96B90 Compression Method    0000 (0) 'Stored'\n-96B92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-96B96 CRC                   00000000 (0)\n-96B9A Compressed Size       00000000 (0)\n-96B9E Uncompressed Size     00000000 (0)\n-96BA2 Filename Length       0025 (37)\n-96BA4 Extra Length          0009 (9)\n-96BA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x96BA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-96BCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-96BCD   Length              0005 (5)\n-96BCF   Flags               01 (1) 'Modification'\n-96BD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-96BD4 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-96BF0 DATA DESCRIPTOR       08074B50 (134695760)\n-96BF4 CRC                   5C7E4A57 (1551780439)\n-96BF8 Compressed Size       0000001C (28)\n-96BFC Uncompressed Size     0000001C (28)\n-\n-96C00 LOCAL HEADER #65      04034B50 (67324752)\n-96C04 Extract Zip Spec      14 (20) '2.0'\n-96C05 Extract OS            00 (0) 'MS-DOS'\n-96C06 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-96C08 Compression Method    0000 (0) 'Stored'\n-96C0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-96C0E CRC                   00000000 (0)\n-96C12 Compressed Size       00000000 (0)\n-96C16 Uncompressed Size     00000000 (0)\n-96C1A Filename Length       001E (30)\n-96C1C Extra Length          0009 (9)\n-96C1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x96C1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-96C3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-96C3E   Length              0005 (5)\n-96C40   Flags               01 (1) 'Modification'\n-96C41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-96C45 PAYLOAD\n-\n-96FEC DATA DESCRIPTOR       08074B50 (134695760)\n-96FF0 CRC                   E6B54850 (3870640208)\n-96FF4 Compressed Size       000003A7 (935)\n-96FF8 Uncompressed Size     000003A7 (935)\n-\n-96FFC CENTRAL HEADER #1     02014B50 (33639248)\n-97000 Created Zip Spec      14 (20) '2.0'\n-97001 Created OS            00 (0) 'MS-DOS'\n-97002 Extract Zip Spec      14 (20) '2.0'\n-97003 Extract OS            00 (0) 'MS-DOS'\n-97004 General Purpose Flag  0000 (0)\n-97006 Compression Method    0000 (0) 'Stored'\n-97008 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-9700C CRC                   00000000 (0)\n-97010 Compressed Size       00000000 (0)\n-97014 Uncompressed Size     00000000 (0)\n-97018 Filename Length       0009 (9)\n-9701A Extra Length          0009 (9)\n-9701C Comment Length        0000 (0)\n-9701E Disk Start            0000 (0)\n-97020 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97022 Ext File Attributes   00000000 (0)\n-97026 Local Header Offset   00000000 (0)\n-9702A Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x9702A: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-97033 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97035   Length              0005 (5)\n-97037   Flags               01 (1) 'Modification'\n-97038   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-9703C CENTRAL HEADER #2     02014B50 (33639248)\n-97040 Created Zip Spec      14 (20) '2.0'\n-97041 Created OS            00 (0) 'MS-DOS'\n-97042 Extract Zip Spec      14 (20) '2.0'\n-97043 Extract OS            00 (0) 'MS-DOS'\n-97044 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97046 Compression Method    0000 (0) 'Stored'\n-97048 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-9704C CRC                   EE027FB2 (3993141170)\n-97050 Compressed Size       00000019 (25)\n-97054 Uncompressed Size     00000019 (25)\n-97058 Filename Length       0014 (20)\n-9705A Extra Length          0009 (9)\n-9705C Comment Length        0000 (0)\n-9705E Disk Start            0000 (0)\n-97060 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97062 Ext File Attributes   00000000 (0)\n-97066 Local Header Offset   00000030 (48)\n-9706A Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9706A: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9707E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97080   Length              0005 (5)\n-97082   Flags               01 (1) 'Modification'\n-97083   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97087 CENTRAL HEADER #3     02014B50 (33639248)\n-9708B Created Zip Spec      14 (20) '2.0'\n-9708C Created OS            00 (0) 'MS-DOS'\n-9708D Extract Zip Spec      14 (20) '2.0'\n-9708E Extract OS            00 (0) 'MS-DOS'\n-9708F General Purpose Flag  0000 (0)\n-97091 Compression Method    0000 (0) 'Stored'\n-97093 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97097 CRC                   00000000 (0)\n-9709B Compressed Size       00000000 (0)\n-9709F Uncompressed Size     00000000 (0)\n-970A3 Filename Length       000F (15)\n-970A5 Extra Length          0009 (9)\n-970A7 Comment Length        0000 (0)\n-970A9 Disk Start            0000 (0)\n-970AB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-970AD Ext File Attributes   00000000 (0)\n-970B1 Local Header Offset   00000094 (148)\n-970B5 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x970B5: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-970C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-970C6   Length              0005 (5)\n-970C8   Flags               01 (1) 'Modification'\n-970C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-970CD CENTRAL HEADER #4     02014B50 (33639248)\n-970D1 Created Zip Spec      14 (20) '2.0'\n-970D2 Created OS            00 (0) 'MS-DOS'\n-970D3 Extract Zip Spec      14 (20) '2.0'\n-970D4 Extract OS            00 (0) 'MS-DOS'\n-970D5 General Purpose Flag  0000 (0)\n-970D7 Compression Method    0000 (0) 'Stored'\n-970D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-970DD CRC                   00000000 (0)\n-970E1 Compressed Size       00000000 (0)\n-970E5 Uncompressed Size     00000000 (0)\n-970E9 Filename Length       0024 (36)\n-970EB Extra Length          0009 (9)\n-970ED Comment Length        0000 (0)\n-970EF Disk Start            0000 (0)\n-970F1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-970F3 Ext File Attributes   00000000 (0)\n-970F7 Local Header Offset   000000CA (202)\n-970FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x970FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9711F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97121   Length              0005 (5)\n-97123   Flags               01 (1) 'Modification'\n-97124   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97128 CENTRAL HEADER #5     02014B50 (33639248)\n-9712C Created Zip Spec      14 (20) '2.0'\n-9712D Created OS            00 (0) 'MS-DOS'\n-9712E Extract Zip Spec      14 (20) '2.0'\n-9712F Extract OS            00 (0) 'MS-DOS'\n-97130 General Purpose Flag  0000 (0)\n-97132 Compression Method    0000 (0) 'Stored'\n-97134 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97138 CRC                   00000000 (0)\n-9713C Compressed Size       00000000 (0)\n-97140 Uncompressed Size     00000000 (0)\n-97144 Filename Length       002A (42)\n-97146 Extra Length          0009 (9)\n-97148 Comment Length        0000 (0)\n-9714A Disk Start            0000 (0)\n-9714C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9714E Ext File Attributes   00000000 (0)\n-97152 Local Header Offset   00000115 (277)\n-97156 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97156: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97180 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97182   Length              0005 (5)\n-97184   Flags               01 (1) 'Modification'\n-97185   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97189 CENTRAL HEADER #6     02014B50 (33639248)\n-9718D Created Zip Spec      14 (20) '2.0'\n-9718E Created OS            00 (0) 'MS-DOS'\n-9718F Extract Zip Spec      14 (20) '2.0'\n-97190 Extract OS            00 (0) 'MS-DOS'\n-97191 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97193 Compression Method    0000 (0) 'Stored'\n-97195 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97199 CRC                   00000000 (0)\n-9719D Compressed Size       00000000 (0)\n-971A1 Uncompressed Size     00000000 (0)\n-971A5 Filename Length       0038 (56)\n-971A7 Extra Length          0009 (9)\n-971A9 Comment Length        0000 (0)\n-971AB Disk Start            0000 (0)\n-971AD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-971AF Ext File Attributes   00000000 (0)\n-971B3 Local Header Offset   00000166 (358)\n-971B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x971B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-971EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-971F1   Length              0005 (5)\n-971F3   Flags               01 (1) 'Modification'\n-971F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-971F8 CENTRAL HEADER #7     02014B50 (33639248)\n-971FC Created Zip Spec      14 (20) '2.0'\n-971FD Created OS            00 (0) 'MS-DOS'\n-971FE Extract Zip Spec      14 (20) '2.0'\n-971FF Extract OS            00 (0) 'MS-DOS'\n-97200 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97202 Compression Method    0000 (0) 'Stored'\n-97204 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97208 CRC                   F12C1C87 (4046199943)\n-9720C Compressed Size       00003863 (14435)\n-97210 Uncompressed Size     00003863 (14435)\n-97214 Filename Length       0031 (49)\n-97216 Extra Length          0009 (9)\n-97218 Comment Length        0000 (0)\n-9721A Disk Start            0000 (0)\n-9721C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9721E Ext File Attributes   00000000 (0)\n-97222 Local Header Offset   000001D5 (469)\n-97226 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97226: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97257 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97259   Length              0005 (5)\n-9725B   Flags               01 (1) 'Modification'\n-9725C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97260 CENTRAL HEADER #8     02014B50 (33639248)\n-97264 Created Zip Spec      14 (20) '2.0'\n-97265 Created OS            00 (0) 'MS-DOS'\n-97266 Extract Zip Spec      14 (20) '2.0'\n-97267 Extract OS            00 (0) 'MS-DOS'\n-97268 General Purpose Flag  0000 (0)\n-9726A Compression Method    0000 (0) 'Stored'\n-9726C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97270 CRC                   00000000 (0)\n-97274 Compressed Size       00000000 (0)\n-97278 Uncompressed Size     00000000 (0)\n-9727C Filename Length       0016 (22)\n-9727E Extra Length          0009 (9)\n-97280 Comment Length        0000 (0)\n-97282 Disk Start            0000 (0)\n-97284 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97286 Ext File Attributes   00000000 (0)\n-9728A Local Header Offset   00003AA0 (15008)\n-9728E Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9728E: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-972A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-972A6   Length              0005 (5)\n-972A8   Flags               01 (1) 'Modification'\n-972A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-972AD CENTRAL HEADER #9     02014B50 (33639248)\n-972B1 Created Zip Spec      14 (20) '2.0'\n-972B2 Created OS            00 (0) 'MS-DOS'\n-972B3 Extract Zip Spec      14 (20) '2.0'\n-972B4 Extract OS            00 (0) 'MS-DOS'\n-972B5 General Purpose Flag  0000 (0)\n-972B7 Compression Method    0000 (0) 'Stored'\n-972B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-972BD CRC                   00000000 (0)\n-972C1 Compressed Size       00000000 (0)\n-972C5 Uncompressed Size     00000000 (0)\n-972C9 Filename Length       001C (28)\n-972CB Extra Length          0009 (9)\n-972CD Comment Length        0000 (0)\n-972CF Disk Start            0000 (0)\n-972D1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-972D3 Ext File Attributes   00000000 (0)\n-972D7 Local Header Offset   00003ADD (15069)\n-972DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x972DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-972F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-972F9   Length              0005 (5)\n-972FB   Flags               01 (1) 'Modification'\n-972FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97300 CENTRAL HEADER #10    02014B50 (33639248)\n-97304 Created Zip Spec      14 (20) '2.0'\n-97305 Created OS            00 (0) 'MS-DOS'\n-97306 Extract Zip Spec      14 (20) '2.0'\n-97307 Extract OS            00 (0) 'MS-DOS'\n-97308 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9730A Compression Method    0000 (0) 'Stored'\n-9730C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97310 CRC                   730D69A1 (1930258849)\n-97314 Compressed Size       00000092 (146)\n-97318 Uncompressed Size     00000092 (146)\n-9731C Filename Length       0030 (48)\n-9731E Extra Length          0009 (9)\n-97320 Comment Length        0000 (0)\n-97322 Disk Start            0000 (0)\n-97324 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97326 Ext File Attributes   00000000 (0)\n-9732A Local Header Offset   00003B20 (15136)\n-9732E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9732E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9735E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97360   Length              0005 (5)\n-97362   Flags               01 (1) 'Modification'\n-97363   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97367 CENTRAL HEADER #11    02014B50 (33639248)\n-9736B Created Zip Spec      14 (20) '2.0'\n-9736C Created OS            00 (0) 'MS-DOS'\n-9736D Extract Zip Spec      14 (20) '2.0'\n-9736E Extract OS            00 (0) 'MS-DOS'\n-9736F General Purpose Flag  0000 (0)\n-97371 Compression Method    0000 (0) 'Stored'\n-97373 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97377 CRC                   00000000 (0)\n-9737B Compressed Size       00000000 (0)\n-9737F Uncompressed Size     00000000 (0)\n-97383 Filename Length       0004 (4)\n-97385 Extra Length          0009 (9)\n-97387 Comment Length        0000 (0)\n-97389 Disk Start            0000 (0)\n-9738B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9738D Ext File Attributes   00000000 (0)\n-97391 Local Header Offset   00003C19 (15385)\n-97395 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x97395: Filename 'XXXX'\n-#          Zero length filename\n-#\n-97399 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9739B   Length              0005 (5)\n-9739D   Flags               01 (1) 'Modification'\n-9739E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-973A2 CENTRAL HEADER #12    02014B50 (33639248)\n-973A6 Created Zip Spec      14 (20) '2.0'\n-973A7 Created OS            00 (0) 'MS-DOS'\n-973A8 Extract Zip Spec      14 (20) '2.0'\n-973A9 Extract OS            00 (0) 'MS-DOS'\n-973AA General Purpose Flag  0000 (0)\n-973AC Compression Method    0000 (0) 'Stored'\n-973AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-973B2 CRC                   00000000 (0)\n-973B6 Compressed Size       00000000 (0)\n-973BA Uncompressed Size     00000000 (0)\n-973BE Filename Length       000F (15)\n-973C0 Extra Length          0009 (9)\n-973C2 Comment Length        0000 (0)\n-973C4 Disk Start            0000 (0)\n-973C6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-973C8 Ext File Attributes   00000000 (0)\n-973CC Local Header Offset   00003C44 (15428)\n-973D0 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x973D0: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-973DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-973E1   Length              0005 (5)\n-973E3   Flags               01 (1) 'Modification'\n-973E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-973E8 CENTRAL HEADER #13    02014B50 (33639248)\n-973EC Created Zip Spec      14 (20) '2.0'\n-973ED Created OS            00 (0) 'MS-DOS'\n-973EE Extract Zip Spec      14 (20) '2.0'\n-973EF Extract OS            00 (0) 'MS-DOS'\n-973F0 General Purpose Flag  0000 (0)\n-973F2 Compression Method    0000 (0) 'Stored'\n-973F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-973F8 CRC                   00000000 (0)\n-973FC Compressed Size       00000000 (0)\n-97400 Uncompressed Size     00000000 (0)\n-97404 Filename Length       0015 (21)\n-97406 Extra Length          0009 (9)\n-97408 Comment Length        0000 (0)\n-9740A Disk Start            0000 (0)\n-9740C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9740E Ext File Attributes   00000000 (0)\n-97412 Local Header Offset   00003C7A (15482)\n-97416 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97416: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9742B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9742D   Length              0005 (5)\n-9742F   Flags               01 (1) 'Modification'\n-97430   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97434 CENTRAL HEADER #14    02014B50 (33639248)\n-97438 Created Zip Spec      14 (20) '2.0'\n-97439 Created OS            00 (0) 'MS-DOS'\n-9743A Extract Zip Spec      14 (20) '2.0'\n-9743B Extract OS            00 (0) 'MS-DOS'\n-9743C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9743E Compression Method    0000 (0) 'Stored'\n-97440 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97444 CRC                   2BA4533F (732189503)\n-97448 Compressed Size       00005E47 (24135)\n-9744C Uncompressed Size     00005E47 (24135)\n-97450 Filename Length       001E (30)\n-97452 Extra Length          0009 (9)\n-97454 Comment Length        0000 (0)\n-97456 Disk Start            0000 (0)\n-97458 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9745A Ext File Attributes   00000000 (0)\n-9745E Local Header Offset   00003CB6 (15542)\n-97462 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97462: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97480 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97482   Length              0005 (5)\n-97484   Flags               01 (1) 'Modification'\n-97485   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97489 CENTRAL HEADER #15    02014B50 (33639248)\n-9748D Created Zip Spec      14 (20) '2.0'\n-9748E Created OS            00 (0) 'MS-DOS'\n-9748F Extract Zip Spec      14 (20) '2.0'\n-97490 Extract OS            00 (0) 'MS-DOS'\n-97491 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97493 Compression Method    0000 (0) 'Stored'\n-97495 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97499 CRC                   1626ADEB (371633643)\n-9749D Compressed Size       00000405 (1029)\n-974A1 Uncompressed Size     00000405 (1029)\n-974A5 Filename Length       0024 (36)\n-974A7 Extra Length          0009 (9)\n-974A9 Comment Length        0000 (0)\n-974AB Disk Start            0000 (0)\n-974AD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-974AF Ext File Attributes   00000000 (0)\n-974B3 Local Header Offset   00009B52 (39762)\n-974B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x974B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-974DB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-974DD   Length              0005 (5)\n-974DF   Flags               01 (1) 'Modification'\n-974E0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-974E4 CENTRAL HEADER #16    02014B50 (33639248)\n-974E8 Created Zip Spec      14 (20) '2.0'\n-974E9 Created OS            00 (0) 'MS-DOS'\n-974EA Extract Zip Spec      14 (20) '2.0'\n-974EB Extract OS            00 (0) 'MS-DOS'\n-974EC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-974EE Compression Method    0000 (0) 'Stored'\n-974F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-974F4 CRC                   10F3A5DC (284403164)\n-974F8 Compressed Size       0000558F (21903)\n-974FC Uncompressed Size     0000558F (21903)\n-97500 Filename Length       0025 (37)\n-97502 Extra Length          0009 (9)\n-97504 Comment Length        0000 (0)\n-97506 Disk Start            0000 (0)\n-97508 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9750A Ext File Attributes   00000000 (0)\n-9750E Local Header Offset   00009FB2 (40882)\n-97512 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97512: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97537 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97539   Length              0005 (5)\n-9753B   Flags               01 (1) 'Modification'\n-9753C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97540 CENTRAL HEADER #17    02014B50 (33639248)\n-97544 Created Zip Spec      14 (20) '2.0'\n-97545 Created OS            00 (0) 'MS-DOS'\n-97546 Extract Zip Spec      14 (20) '2.0'\n-97547 Extract OS            00 (0) 'MS-DOS'\n-97548 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9754A Compression Method    0000 (0) 'Stored'\n-9754C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97550 CRC                   82DC48D4 (2195474644)\n-97554 Compressed Size       00002F19 (12057)\n-97558 Uncompressed Size     00002F19 (12057)\n-9755C Filename Length       0022 (34)\n-9755E Extra Length          0009 (9)\n-97560 Comment Length        0000 (0)\n-97562 Disk Start            0000 (0)\n-97564 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97566 Ext File Attributes   00000000 (0)\n-9756A Local Header Offset   0000F59D (62877)\n-9756E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9756E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97590 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97592   Length              0005 (5)\n-97594   Flags               01 (1) 'Modification'\n-97595   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97599 CENTRAL HEADER #18    02014B50 (33639248)\n-9759D Created Zip Spec      14 (20) '2.0'\n-9759E Created OS            00 (0) 'MS-DOS'\n-9759F Extract Zip Spec      14 (20) '2.0'\n-975A0 Extract OS            00 (0) 'MS-DOS'\n-975A1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-975A3 Compression Method    0000 (0) 'Stored'\n-975A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-975A9 CRC                   B1F7FE75 (2985819765)\n-975AD Compressed Size       00000458 (1112)\n-975B1 Uncompressed Size     00000458 (1112)\n-975B5 Filename Length       0022 (34)\n-975B7 Extra Length          0009 (9)\n-975B9 Comment Length        0000 (0)\n-975BB Disk Start            0000 (0)\n-975BD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-975BF Ext File Attributes   00000000 (0)\n-975C3 Local Header Offset   0001250F (75023)\n-975C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x975C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-975E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-975EB   Length              0005 (5)\n-975ED   Flags               01 (1) 'Modification'\n-975EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-975F2 CENTRAL HEADER #19    02014B50 (33639248)\n-975F6 Created Zip Spec      14 (20) '2.0'\n-975F7 Created OS            00 (0) 'MS-DOS'\n-975F8 Extract Zip Spec      14 (20) '2.0'\n-975F9 Extract OS            00 (0) 'MS-DOS'\n-975FA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-975FC Compression Method    0000 (0) 'Stored'\n-975FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97602 CRC                   9070D9B4 (2423314868)\n-97606 Compressed Size       00000AF9 (2809)\n-9760A Uncompressed Size     00000AF9 (2809)\n-9760E Filename Length       0029 (41)\n-97610 Extra Length          0009 (9)\n-97612 Comment Length        0000 (0)\n-97614 Disk Start            0000 (0)\n-97616 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97618 Ext File Attributes   00000000 (0)\n-9761C Local Header Offset   000129C0 (76224)\n-97620 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97620: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97649 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9764B   Length              0005 (5)\n-9764D   Flags               01 (1) 'Modification'\n-9764E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97652 CENTRAL HEADER #20    02014B50 (33639248)\n-97656 Created Zip Spec      14 (20) '2.0'\n-97657 Created OS            00 (0) 'MS-DOS'\n-97658 Extract Zip Spec      14 (20) '2.0'\n-97659 Extract OS            00 (0) 'MS-DOS'\n-9765A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9765C Compression Method    0000 (0) 'Stored'\n-9765E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97662 CRC                   145FE0AA (341827754)\n-97666 Compressed Size       00001DB6 (7606)\n-9766A Uncompressed Size     00001DB6 (7606)\n-9766E Filename Length       0026 (38)\n-97670 Extra Length          0009 (9)\n-97672 Comment Length        0000 (0)\n-97674 Disk Start            0000 (0)\n-97676 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97678 Ext File Attributes   00000000 (0)\n-9767C Local Header Offset   00013519 (79129)\n-97680 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97680: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-976A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-976A8   Length              0005 (5)\n-976AA   Flags               01 (1) 'Modification'\n-976AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-976AF CENTRAL HEADER #21    02014B50 (33639248)\n-976B3 Created Zip Spec      14 (20) '2.0'\n-976B4 Created OS            00 (0) 'MS-DOS'\n-976B5 Extract Zip Spec      14 (20) '2.0'\n-976B6 Extract OS            00 (0) 'MS-DOS'\n-976B7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-976B9 Compression Method    0000 (0) 'Stored'\n-976BB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-976BF CRC                   EBDD55D1 (3957151185)\n-976C3 Compressed Size       000004D8 (1240)\n-976C7 Uncompressed Size     000004D8 (1240)\n-976CB Filename Length       0022 (34)\n-976CD Extra Length          0009 (9)\n-976CF Comment Length        0000 (0)\n-976D1 Disk Start            0000 (0)\n-976D3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-976D5 Ext File Attributes   00000000 (0)\n-976D9 Local Header Offset   0001532C (86828)\n-976DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x976DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-976FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97701   Length              0005 (5)\n-97703   Flags               01 (1) 'Modification'\n-97704   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97708 CENTRAL HEADER #22    02014B50 (33639248)\n-9770C Created Zip Spec      14 (20) '2.0'\n-9770D Created OS            00 (0) 'MS-DOS'\n-9770E Extract Zip Spec      14 (20) '2.0'\n-9770F Extract OS            00 (0) 'MS-DOS'\n-97710 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97712 Compression Method    0000 (0) 'Stored'\n-97714 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97718 CRC                   F4A210E5 (4104261861)\n-9771C Compressed Size       000005FC (1532)\n-97720 Uncompressed Size     000005FC (1532)\n-97724 Filename Length       0028 (40)\n-97726 Extra Length          0009 (9)\n-97728 Comment Length        0000 (0)\n-9772A Disk Start            0000 (0)\n-9772C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9772E Ext File Attributes   00000000 (0)\n-97732 Local Header Offset   0001585D (88157)\n-97736 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97736: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9775E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97760   Length              0005 (5)\n-97762   Flags               01 (1) 'Modification'\n-97763   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97767 CENTRAL HEADER #23    02014B50 (33639248)\n-9776B Created Zip Spec      14 (20) '2.0'\n-9776C Created OS            00 (0) 'MS-DOS'\n-9776D Extract Zip Spec      14 (20) '2.0'\n-9776E Extract OS            00 (0) 'MS-DOS'\n-9776F General Purpose Flag  0000 (0)\n-97771 Compression Method    0000 (0) 'Stored'\n-97773 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97777 CRC                   00000000 (0)\n-9777B Compressed Size       00000000 (0)\n-9777F Uncompressed Size     00000000 (0)\n-97783 Filename Length       001E (30)\n-97785 Extra Length          0009 (9)\n-97787 Comment Length        0000 (0)\n-97789 Disk Start            0000 (0)\n-9778B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9778D Ext File Attributes   00000000 (0)\n-97791 Local Header Offset   00015EB8 (89784)\n-97795 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97795: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-977B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-977B5   Length              0005 (5)\n-977B7   Flags               01 (1) 'Modification'\n-977B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-977BC CENTRAL HEADER #24    02014B50 (33639248)\n-977C0 Created Zip Spec      14 (20) '2.0'\n-977C1 Created OS            00 (0) 'MS-DOS'\n-977C2 Extract Zip Spec      14 (20) '2.0'\n-977C3 Extract OS            00 (0) 'MS-DOS'\n-977C4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-977C6 Compression Method    0000 (0) 'Stored'\n-977C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-977CC CRC                   A1D45456 (2715046998)\n-977D0 Compressed Size       000013C0 (5056)\n-977D4 Uncompressed Size     000013C0 (5056)\n-977D8 Filename Length       002B (43)\n-977DA Extra Length          0009 (9)\n-977DC Comment Length        0000 (0)\n-977DE Disk Start            0000 (0)\n-977E0 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-977E2 Ext File Attributes   00000000 (0)\n-977E6 Local Header Offset   00015EFD (89853)\n-977EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x977EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97815 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97817   Length              0005 (5)\n-97819   Flags               01 (1) 'Modification'\n-9781A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-9781E CENTRAL HEADER #25    02014B50 (33639248)\n-97822 Created Zip Spec      14 (20) '2.0'\n-97823 Created OS            00 (0) 'MS-DOS'\n-97824 Extract Zip Spec      14 (20) '2.0'\n-97825 Extract OS            00 (0) 'MS-DOS'\n-97826 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97828 Compression Method    0000 (0) 'Stored'\n-9782A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-9782E CRC                   8FD5E3A8 (2413159336)\n-97832 Compressed Size       000038C0 (14528)\n-97836 Uncompressed Size     000038C0 (14528)\n-9783A Filename Length       002E (46)\n-9783C Extra Length          0009 (9)\n-9783E Comment Length        0000 (0)\n-97840 Disk Start            0000 (0)\n-97842 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97844 Ext File Attributes   00000000 (0)\n-97848 Local Header Offset   0001731F (95007)\n-9784C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9784C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9787A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9787C   Length              0005 (5)\n-9787E   Flags               01 (1) 'Modification'\n-9787F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97883 CENTRAL HEADER #26    02014B50 (33639248)\n-97887 Created Zip Spec      14 (20) '2.0'\n-97888 Created OS            00 (0) 'MS-DOS'\n-97889 Extract Zip Spec      14 (20) '2.0'\n-9788A Extract OS            00 (0) 'MS-DOS'\n-9788B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9788D Compression Method    0000 (0) 'Stored'\n-9788F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97893 CRC                   E731CECA (3878801098)\n-97897 Compressed Size       00004384 (17284)\n-9789B Uncompressed Size     00004384 (17284)\n-9789F Filename Length       002B (43)\n-978A1 Extra Length          0009 (9)\n-978A3 Comment Length        0000 (0)\n-978A5 Disk Start            0000 (0)\n-978A7 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-978A9 Ext File Attributes   00000000 (0)\n-978AD Local Header Offset   0001AC44 (109636)\n-978B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x978B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-978DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-978DE   Length              0005 (5)\n-978E0   Flags               01 (1) 'Modification'\n-978E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-978E5 CENTRAL HEADER #27    02014B50 (33639248)\n-978E9 Created Zip Spec      14 (20) '2.0'\n-978EA Created OS            00 (0) 'MS-DOS'\n-978EB Extract Zip Spec      14 (20) '2.0'\n-978EC Extract OS            00 (0) 'MS-DOS'\n-978ED General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-978EF Compression Method    0000 (0) 'Stored'\n-978F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-978F5 CRC                   2CCD3D7E (751648126)\n-978F9 Compressed Size       00001C4F (7247)\n-978FD Uncompressed Size     00001C4F (7247)\n-97901 Filename Length       0029 (41)\n-97903 Extra Length          0009 (9)\n-97905 Comment Length        0000 (0)\n-97907 Disk Start            0000 (0)\n-97909 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9790B Ext File Attributes   00000000 (0)\n-9790F Local Header Offset   0001F02A (127018)\n-97913 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97913: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9793C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9793E   Length              0005 (5)\n-97940   Flags               01 (1) 'Modification'\n-97941   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97945 CENTRAL HEADER #28    02014B50 (33639248)\n-97949 Created Zip Spec      14 (20) '2.0'\n-9794A Created OS            00 (0) 'MS-DOS'\n-9794B Extract Zip Spec      14 (20) '2.0'\n-9794C Extract OS            00 (0) 'MS-DOS'\n-9794D General Purpose Flag  0000 (0)\n-9794F Compression Method    0000 (0) 'Stored'\n-97951 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97955 CRC                   00000000 (0)\n-97959 Compressed Size       00000000 (0)\n-9795D Uncompressed Size     00000000 (0)\n-97961 Filename Length       0025 (37)\n-97963 Extra Length          0009 (9)\n-97965 Comment Length        0000 (0)\n-97967 Disk Start            0000 (0)\n-97969 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9796B Ext File Attributes   00000000 (0)\n-9796F Local Header Offset   00020CD9 (134361)\n-97973 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97973: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97998 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9799A   Length              0005 (5)\n-9799C   Flags               01 (1) 'Modification'\n-9799D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-979A1 CENTRAL HEADER #29    02014B50 (33639248)\n-979A5 Created Zip Spec      14 (20) '2.0'\n-979A6 Created OS            00 (0) 'MS-DOS'\n-979A7 Extract Zip Spec      14 (20) '2.0'\n-979A8 Extract OS            00 (0) 'MS-DOS'\n-979A9 General Purpose Flag  0000 (0)\n-979AB Compression Method    0000 (0) 'Stored'\n-979AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-979B1 CRC                   00000000 (0)\n-979B5 Compressed Size       00000000 (0)\n-979B9 Uncompressed Size     00000000 (0)\n-979BD Filename Length       002D (45)\n-979BF Extra Length          0009 (9)\n-979C1 Comment Length        0000 (0)\n-979C3 Disk Start            0000 (0)\n-979C5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-979C7 Ext File Attributes   00000000 (0)\n-979CB Local Header Offset   00020D25 (134437)\n-979CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x979CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-979FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-979FE   Length              0005 (5)\n-97A00   Flags               01 (1) 'Modification'\n-97A01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97A05 CENTRAL HEADER #30    02014B50 (33639248)\n-97A09 Created Zip Spec      14 (20) '2.0'\n-97A0A Created OS            00 (0) 'MS-DOS'\n-97A0B Extract Zip Spec      14 (20) '2.0'\n-97A0C Extract OS            00 (0) 'MS-DOS'\n-97A0D General Purpose Flag  0000 (0)\n-97A0F Compression Method    0000 (0) 'Stored'\n-97A11 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97A15 CRC                   00000000 (0)\n-97A19 Compressed Size       00000000 (0)\n-97A1D Uncompressed Size     00000000 (0)\n-97A21 Filename Length       0031 (49)\n-97A23 Extra Length          0009 (9)\n-97A25 Comment Length        0000 (0)\n-97A27 Disk Start            0000 (0)\n-97A29 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97A2B Ext File Attributes   00000000 (0)\n-97A2F Local Header Offset   00020D79 (134521)\n-97A33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97A33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97A64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97A66   Length              0005 (5)\n-97A68   Flags               01 (1) 'Modification'\n-97A69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97A6D CENTRAL HEADER #31    02014B50 (33639248)\n-97A71 Created Zip Spec      14 (20) '2.0'\n-97A72 Created OS            00 (0) 'MS-DOS'\n-97A73 Extract Zip Spec      14 (20) '2.0'\n-97A74 Extract OS            00 (0) 'MS-DOS'\n-97A75 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97A77 Compression Method    0000 (0) 'Stored'\n-97A79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97A7D CRC                   E497D7EA (3835156458)\n-97A81 Compressed Size       0000324C (12876)\n-97A85 Uncompressed Size     0000324C (12876)\n-97A89 Filename Length       003C (60)\n-97A8B Extra Length          0009 (9)\n-97A8D Comment Length        0000 (0)\n-97A8F Disk Start            0000 (0)\n-97A91 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97A93 Ext File Attributes   00000000 (0)\n-97A97 Local Header Offset   00020DD1 (134609)\n-97A9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97A9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97AD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97AD9   Length              0005 (5)\n-97ADB   Flags               01 (1) 'Modification'\n-97ADC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97AE0 CENTRAL HEADER #32    02014B50 (33639248)\n-97AE4 Created Zip Spec      14 (20) '2.0'\n-97AE5 Created OS            00 (0) 'MS-DOS'\n-97AE6 Extract Zip Spec      14 (20) '2.0'\n-97AE7 Extract OS            00 (0) 'MS-DOS'\n-97AE8 General Purpose Flag  0000 (0)\n-97AEA Compression Method    0000 (0) 'Stored'\n-97AEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97AF0 CRC                   00000000 (0)\n-97AF4 Compressed Size       00000000 (0)\n-97AF8 Uncompressed Size     00000000 (0)\n-97AFC Filename Length       0034 (52)\n-97AFE Extra Length          0009 (9)\n-97B00 Comment Length        0000 (0)\n-97B02 Disk Start            0000 (0)\n-97B04 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97B06 Ext File Attributes   00000000 (0)\n-97B0A Local Header Offset   00024090 (147600)\n-97B0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97B0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97B42 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97B44   Length              0005 (5)\n-97B46   Flags               01 (1) 'Modification'\n-97B47   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97B4B CENTRAL HEADER #33    02014B50 (33639248)\n-97B4F Created Zip Spec      14 (20) '2.0'\n-97B50 Created OS            00 (0) 'MS-DOS'\n-97B51 Extract Zip Spec      14 (20) '2.0'\n-97B52 Extract OS            00 (0) 'MS-DOS'\n-97B53 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97B55 Compression Method    0000 (0) 'Stored'\n-97B57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97B5B CRC                   F1F630C0 (4059443392)\n-97B5F Compressed Size       00003FA4 (16292)\n-97B63 Uncompressed Size     00003FA4 (16292)\n-97B67 Filename Length       003F (63)\n-97B69 Extra Length          0009 (9)\n-97B6B Comment Length        0000 (0)\n-97B6D Disk Start            0000 (0)\n-97B6F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97B71 Ext File Attributes   00000000 (0)\n-97B75 Local Header Offset   000240EB (147691)\n-97B79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97B79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97BB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97BBA   Length              0005 (5)\n-97BBC   Flags               01 (1) 'Modification'\n-97BBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97BC1 CENTRAL HEADER #34    02014B50 (33639248)\n-97BC5 Created Zip Spec      14 (20) '2.0'\n-97BC6 Created OS            00 (0) 'MS-DOS'\n-97BC7 Extract Zip Spec      14 (20) '2.0'\n-97BC8 Extract OS            00 (0) 'MS-DOS'\n-97BC9 General Purpose Flag  0000 (0)\n-97BCB Compression Method    0000 (0) 'Stored'\n-97BCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97BD1 CRC                   00000000 (0)\n-97BD5 Compressed Size       00000000 (0)\n-97BD9 Uncompressed Size     00000000 (0)\n-97BDD Filename Length       002B (43)\n-97BDF Extra Length          0009 (9)\n-97BE1 Comment Length        0000 (0)\n-97BE3 Disk Start            0000 (0)\n-97BE5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97BE7 Ext File Attributes   00000000 (0)\n-97BEB Local Header Offset   00028105 (164101)\n-97BEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97BEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97C1A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97C1C   Length              0005 (5)\n-97C1E   Flags               01 (1) 'Modification'\n-97C1F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97C23 CENTRAL HEADER #35    02014B50 (33639248)\n-97C27 Created Zip Spec      14 (20) '2.0'\n-97C28 Created OS            00 (0) 'MS-DOS'\n-97C29 Extract Zip Spec      14 (20) '2.0'\n-97C2A Extract OS            00 (0) 'MS-DOS'\n-97C2B General Purpose Flag  0000 (0)\n-97C2D Compression Method    0000 (0) 'Stored'\n-97C2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97C33 CRC                   00000000 (0)\n-97C37 Compressed Size       00000000 (0)\n-97C3B Uncompressed Size     00000000 (0)\n-97C3F Filename Length       002F (47)\n-97C41 Extra Length          0009 (9)\n-97C43 Comment Length        0000 (0)\n-97C45 Disk Start            0000 (0)\n-97C47 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97C49 Ext File Attributes   00000000 (0)\n-97C4D Local Header Offset   00028157 (164183)\n-97C51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97C51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97C80 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97C82   Length              0005 (5)\n-97C84   Flags               01 (1) 'Modification'\n-97C85   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97C89 CENTRAL HEADER #36    02014B50 (33639248)\n-97C8D Created Zip Spec      14 (20) '2.0'\n-97C8E Created OS            00 (0) 'MS-DOS'\n-97C8F Extract Zip Spec      14 (20) '2.0'\n-97C90 Extract OS            00 (0) 'MS-DOS'\n-97C91 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97C93 Compression Method    0000 (0) 'Stored'\n-97C95 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97C99 CRC                   950F3569 (2500801897)\n-97C9D Compressed Size       000058D8 (22744)\n-97CA1 Uncompressed Size     000058D8 (22744)\n-97CA5 Filename Length       003A (58)\n-97CA7 Extra Length          0009 (9)\n-97CA9 Comment Length        0000 (0)\n-97CAB Disk Start            0000 (0)\n-97CAD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97CAF Ext File Attributes   00000000 (0)\n-97CB3 Local Header Offset   000281AD (164269)\n-97CB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97CB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97CF1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97CF3   Length              0005 (5)\n-97CF5   Flags               01 (1) 'Modification'\n-97CF6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97CFA CENTRAL HEADER #37    02014B50 (33639248)\n-97CFE Created Zip Spec      14 (20) '2.0'\n-97CFF Created OS            00 (0) 'MS-DOS'\n-97D00 Extract Zip Spec      14 (20) '2.0'\n-97D01 Extract OS            00 (0) 'MS-DOS'\n-97D02 General Purpose Flag  0000 (0)\n-97D04 Compression Method    0000 (0) 'Stored'\n-97D06 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97D0A CRC                   00000000 (0)\n-97D0E Compressed Size       00000000 (0)\n-97D12 Uncompressed Size     00000000 (0)\n-97D16 Filename Length       0031 (49)\n-97D18 Extra Length          0009 (9)\n-97D1A Comment Length        0000 (0)\n-97D1C Disk Start            0000 (0)\n-97D1E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97D20 Ext File Attributes   00000000 (0)\n-97D24 Local Header Offset   0002DAF6 (187126)\n-97D28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97D28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97D59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97D5B   Length              0005 (5)\n-97D5D   Flags               01 (1) 'Modification'\n-97D5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97D62 CENTRAL HEADER #38    02014B50 (33639248)\n-97D66 Created Zip Spec      14 (20) '2.0'\n-97D67 Created OS            00 (0) 'MS-DOS'\n-97D68 Extract Zip Spec      14 (20) '2.0'\n-97D69 Extract OS            00 (0) 'MS-DOS'\n-97D6A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97D6C Compression Method    0000 (0) 'Stored'\n-97D6E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97D72 CRC                   78DAFB34 (2027617076)\n-97D76 Compressed Size       000041D8 (16856)\n-97D7A Uncompressed Size     000041D8 (16856)\n-97D7E Filename Length       003C (60)\n-97D80 Extra Length          0009 (9)\n-97D82 Comment Length        0000 (0)\n-97D84 Disk Start            0000 (0)\n-97D86 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97D88 Ext File Attributes   00000000 (0)\n-97D8C Local Header Offset   0002DB4E (187214)\n-97D90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97D90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97DCC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97DCE   Length              0005 (5)\n-97DD0   Flags               01 (1) 'Modification'\n-97DD1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97DD5 CENTRAL HEADER #39    02014B50 (33639248)\n-97DD9 Created Zip Spec      14 (20) '2.0'\n-97DDA Created OS            00 (0) 'MS-DOS'\n-97DDB Extract Zip Spec      14 (20) '2.0'\n-97DDC Extract OS            00 (0) 'MS-DOS'\n-97DDD General Purpose Flag  0000 (0)\n-97DDF Compression Method    0000 (0) 'Stored'\n-97DE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97DE5 CRC                   00000000 (0)\n-97DE9 Compressed Size       00000000 (0)\n-97DED Uncompressed Size     00000000 (0)\n-97DF1 Filename Length       0031 (49)\n-97DF3 Extra Length          0009 (9)\n-97DF5 Comment Length        0000 (0)\n-97DF7 Disk Start            0000 (0)\n-97DF9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97DFB Ext File Attributes   00000000 (0)\n-97DFF Local Header Offset   00031D99 (204185)\n-97E03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97E03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97E34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97E36   Length              0005 (5)\n-97E38   Flags               01 (1) 'Modification'\n-97E39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97E3D CENTRAL HEADER #40    02014B50 (33639248)\n-97E41 Created Zip Spec      14 (20) '2.0'\n-97E42 Created OS            00 (0) 'MS-DOS'\n-97E43 Extract Zip Spec      14 (20) '2.0'\n-97E44 Extract OS            00 (0) 'MS-DOS'\n-97E45 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97E47 Compression Method    0000 (0) 'Stored'\n-97E49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97E4D CRC                   BAB7DC59 (3132611673)\n-97E51 Compressed Size       0000327C (12924)\n-97E55 Uncompressed Size     0000327C (12924)\n-97E59 Filename Length       003C (60)\n-97E5B Extra Length          0009 (9)\n-97E5D Comment Length        0000 (0)\n-97E5F Disk Start            0000 (0)\n-97E61 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97E63 Ext File Attributes   00000000 (0)\n-97E67 Local Header Offset   00031DF1 (204273)\n-97E6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97E6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97EA7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97EA9   Length              0005 (5)\n-97EAB   Flags               01 (1) 'Modification'\n-97EAC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97EB0 CENTRAL HEADER #41    02014B50 (33639248)\n-97EB4 Created Zip Spec      14 (20) '2.0'\n-97EB5 Created OS            00 (0) 'MS-DOS'\n-97EB6 Extract Zip Spec      14 (20) '2.0'\n-97EB7 Extract OS            00 (0) 'MS-DOS'\n-97EB8 General Purpose Flag  0000 (0)\n-97EBA Compression Method    0000 (0) 'Stored'\n-97EBC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97EC0 CRC                   00000000 (0)\n-97EC4 Compressed Size       00000000 (0)\n-97EC8 Uncompressed Size     00000000 (0)\n-97ECC Filename Length       0031 (49)\n-97ECE Extra Length          0009 (9)\n-97ED0 Comment Length        0000 (0)\n-97ED2 Disk Start            0000 (0)\n-97ED4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97ED6 Ext File Attributes   00000000 (0)\n-97EDA Local Header Offset   000350E0 (217312)\n-97EDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97EDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97F0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97F11   Length              0005 (5)\n-97F13   Flags               01 (1) 'Modification'\n-97F14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97F18 CENTRAL HEADER #42    02014B50 (33639248)\n-97F1C Created Zip Spec      14 (20) '2.0'\n-97F1D Created OS            00 (0) 'MS-DOS'\n-97F1E Extract Zip Spec      14 (20) '2.0'\n-97F1F Extract OS            00 (0) 'MS-DOS'\n-97F20 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97F22 Compression Method    0000 (0) 'Stored'\n-97F24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97F28 CRC                   24DF140F (618599439)\n-97F2C Compressed Size       00004B98 (19352)\n-97F30 Uncompressed Size     00004B98 (19352)\n-97F34 Filename Length       003C (60)\n-97F36 Extra Length          0009 (9)\n-97F38 Comment Length        0000 (0)\n-97F3A Disk Start            0000 (0)\n-97F3C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97F3E Ext File Attributes   00000000 (0)\n-97F42 Local Header Offset   00035138 (217400)\n-97F46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97F46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97F82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97F84   Length              0005 (5)\n-97F86   Flags               01 (1) 'Modification'\n-97F87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97F8B CENTRAL HEADER #43    02014B50 (33639248)\n-97F8F Created Zip Spec      14 (20) '2.0'\n-97F90 Created OS            00 (0) 'MS-DOS'\n-97F91 Extract Zip Spec      14 (20) '2.0'\n-97F92 Extract OS            00 (0) 'MS-DOS'\n-97F93 General Purpose Flag  0000 (0)\n-97F95 Compression Method    0000 (0) 'Stored'\n-97F97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-97F9B CRC                   00000000 (0)\n-97F9F Compressed Size       00000000 (0)\n-97FA3 Uncompressed Size     00000000 (0)\n-97FA7 Filename Length       002F (47)\n-97FA9 Extra Length          0009 (9)\n-97FAB Comment Length        0000 (0)\n-97FAD Disk Start            0000 (0)\n-97FAF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-97FB1 Ext File Attributes   00000000 (0)\n-97FB5 Local Header Offset   00039D43 (236867)\n-97FB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x97FB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-97FE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-97FEA   Length              0005 (5)\n-97FEC   Flags               01 (1) 'Modification'\n-97FED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-97FF1 CENTRAL HEADER #44    02014B50 (33639248)\n-97FF5 Created Zip Spec      14 (20) '2.0'\n-97FF6 Created OS            00 (0) 'MS-DOS'\n-97FF7 Extract Zip Spec      14 (20) '2.0'\n-97FF8 Extract OS            00 (0) 'MS-DOS'\n-97FF9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-97FFB Compression Method    0000 (0) 'Stored'\n-97FFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98001 CRC                   321C2FD2 (840708050)\n-98005 Compressed Size       000045B8 (17848)\n-98009 Uncompressed Size     000045B8 (17848)\n-9800D Filename Length       003A (58)\n-9800F Extra Length          0009 (9)\n-98011 Comment Length        0000 (0)\n-98013 Disk Start            0000 (0)\n-98015 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98017 Ext File Attributes   00000000 (0)\n-9801B Local Header Offset   00039D99 (236953)\n-9801F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9801F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-98059 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9805B   Length              0005 (5)\n-9805D   Flags               01 (1) 'Modification'\n-9805E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98062 CENTRAL HEADER #45    02014B50 (33639248)\n-98066 Created Zip Spec      14 (20) '2.0'\n-98067 Created OS            00 (0) 'MS-DOS'\n-98068 Extract Zip Spec      14 (20) '2.0'\n-98069 Extract OS            00 (0) 'MS-DOS'\n-9806A General Purpose Flag  0000 (0)\n-9806C Compression Method    0000 (0) 'Stored'\n-9806E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98072 CRC                   00000000 (0)\n-98076 Compressed Size       00000000 (0)\n-9807A Uncompressed Size     00000000 (0)\n-9807E Filename Length       0032 (50)\n-98080 Extra Length          0009 (9)\n-98082 Comment Length        0000 (0)\n-98084 Disk Start            0000 (0)\n-98086 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98088 Ext File Attributes   00000000 (0)\n-9808C Local Header Offset   0003E3C2 (254914)\n-98090 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98090: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-980C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-980C4   Length              0005 (5)\n-980C6   Flags               01 (1) 'Modification'\n-980C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-980CB CENTRAL HEADER #46    02014B50 (33639248)\n-980CF Created Zip Spec      14 (20) '2.0'\n-980D0 Created OS            00 (0) 'MS-DOS'\n-980D1 Extract Zip Spec      14 (20) '2.0'\n-980D2 Extract OS            00 (0) 'MS-DOS'\n-980D3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-980D5 Compression Method    0000 (0) 'Stored'\n-980D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-980DB CRC                   3ECC3177 (1053569399)\n-980DF Compressed Size       000041E0 (16864)\n-980E3 Uncompressed Size     000041E0 (16864)\n-980E7 Filename Length       003D (61)\n-980E9 Extra Length          0009 (9)\n-980EB Comment Length        0000 (0)\n-980ED Disk Start            0000 (0)\n-980EF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-980F1 Ext File Attributes   00000000 (0)\n-980F5 Local Header Offset   0003E41B (255003)\n-980F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x980F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-98136 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-98138   Length              0005 (5)\n-9813A   Flags               01 (1) 'Modification'\n-9813B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-9813F CENTRAL HEADER #47    02014B50 (33639248)\n-98143 Created Zip Spec      14 (20) '2.0'\n-98144 Created OS            00 (0) 'MS-DOS'\n-98145 Extract Zip Spec      14 (20) '2.0'\n-98146 Extract OS            00 (0) 'MS-DOS'\n-98147 General Purpose Flag  0000 (0)\n-98149 Compression Method    0000 (0) 'Stored'\n-9814B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-9814F CRC                   00000000 (0)\n-98153 Compressed Size       00000000 (0)\n-98157 Uncompressed Size     00000000 (0)\n-9815B Filename Length       0029 (41)\n-9815D Extra Length          0009 (9)\n-9815F Comment Length        0000 (0)\n-98161 Disk Start            0000 (0)\n-98163 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98165 Ext File Attributes   00000000 (0)\n-98169 Local Header Offset   0004266F (271983)\n-9816D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9816D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-98196 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-98198   Length              0005 (5)\n-9819A   Flags               01 (1) 'Modification'\n-9819B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-9819F CENTRAL HEADER #48    02014B50 (33639248)\n-981A3 Created Zip Spec      14 (20) '2.0'\n-981A4 Created OS            00 (0) 'MS-DOS'\n-981A5 Extract Zip Spec      14 (20) '2.0'\n-981A6 Extract OS            00 (0) 'MS-DOS'\n-981A7 General Purpose Flag  0000 (0)\n-981A9 Compression Method    0000 (0) 'Stored'\n-981AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-981AF CRC                   00000000 (0)\n-981B3 Compressed Size       00000000 (0)\n-981B7 Uncompressed Size     00000000 (0)\n-981BB Filename Length       002D (45)\n-981BD Extra Length          0009 (9)\n-981BF Comment Length        0000 (0)\n-981C1 Disk Start            0000 (0)\n-981C3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-981C5 Ext File Attributes   00000000 (0)\n-981C9 Local Header Offset   000426BF (272063)\n-981CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x981CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-981FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-981FC   Length              0005 (5)\n-981FE   Flags               01 (1) 'Modification'\n-981FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98203 CENTRAL HEADER #49    02014B50 (33639248)\n-98207 Created Zip Spec      14 (20) '2.0'\n-98208 Created OS            00 (0) 'MS-DOS'\n-98209 Extract Zip Spec      14 (20) '2.0'\n-9820A Extract OS            00 (0) 'MS-DOS'\n-9820B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9820D Compression Method    0000 (0) 'Stored'\n-9820F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98213 CRC                   54FC5C00 (1425824768)\n-98217 Compressed Size       00003AEC (15084)\n-9821B Uncompressed Size     00003AEC (15084)\n-9821F Filename Length       003C (60)\n-98221 Extra Length          0009 (9)\n-98223 Comment Length        0000 (0)\n-98225 Disk Start            0000 (0)\n-98227 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98229 Ext File Attributes   00000000 (0)\n-9822D Local Header Offset   00042713 (272147)\n-98231 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98231: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9826D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9826F   Length              0005 (5)\n-98271   Flags               01 (1) 'Modification'\n-98272   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98276 CENTRAL HEADER #50    02014B50 (33639248)\n-9827A Created Zip Spec      14 (20) '2.0'\n-9827B Created OS            00 (0) 'MS-DOS'\n-9827C Extract Zip Spec      14 (20) '2.0'\n-9827D Extract OS            00 (0) 'MS-DOS'\n-9827E General Purpose Flag  0000 (0)\n-98280 Compression Method    0000 (0) 'Stored'\n-98282 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98286 CRC                   00000000 (0)\n-9828A Compressed Size       00000000 (0)\n-9828E Uncompressed Size     00000000 (0)\n-98292 Filename Length       0030 (48)\n-98294 Extra Length          0009 (9)\n-98296 Comment Length        0000 (0)\n-98298 Disk Start            0000 (0)\n-9829A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9829C Ext File Attributes   00000000 (0)\n-982A0 Local Header Offset   00046272 (287346)\n-982A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x982A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-982D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-982D6   Length              0005 (5)\n-982D8   Flags               01 (1) 'Modification'\n-982D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-982DD CENTRAL HEADER #51    02014B50 (33639248)\n-982E1 Created Zip Spec      14 (20) '2.0'\n-982E2 Created OS            00 (0) 'MS-DOS'\n-982E3 Extract Zip Spec      14 (20) '2.0'\n-982E4 Extract OS            00 (0) 'MS-DOS'\n-982E5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-982E7 Compression Method    0000 (0) 'Stored'\n-982E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-982ED CRC                   F14BF548 (4048287048)\n-982F1 Compressed Size       00003E5C (15964)\n-982F5 Uncompressed Size     00003E5C (15964)\n-982F9 Filename Length       003F (63)\n-982FB Extra Length          0009 (9)\n-982FD Comment Length        0000 (0)\n-982FF Disk Start            0000 (0)\n-98301 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98303 Ext File Attributes   00000000 (0)\n-98307 Local Header Offset   000462C9 (287433)\n-9830B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9830B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9834A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9834C   Length              0005 (5)\n-9834E   Flags               01 (1) 'Modification'\n-9834F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98353 CENTRAL HEADER #52    02014B50 (33639248)\n-98357 Created Zip Spec      14 (20) '2.0'\n-98358 Created OS            00 (0) 'MS-DOS'\n-98359 Extract Zip Spec      14 (20) '2.0'\n-9835A Extract OS            00 (0) 'MS-DOS'\n-9835B General Purpose Flag  0000 (0)\n-9835D Compression Method    0000 (0) 'Stored'\n-9835F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98363 CRC                   00000000 (0)\n-98367 Compressed Size       00000000 (0)\n-9836B Uncompressed Size     00000000 (0)\n-9836F Filename Length       002D (45)\n-98371 Extra Length          0009 (9)\n-98373 Comment Length        0000 (0)\n-98375 Disk Start            0000 (0)\n-98377 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98379 Ext File Attributes   00000000 (0)\n-9837D Local Header Offset   0004A19B (303515)\n-98381 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98381: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-983AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-983B0   Length              0005 (5)\n-983B2   Flags               01 (1) 'Modification'\n-983B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-983B7 CENTRAL HEADER #53    02014B50 (33639248)\n-983BB Created Zip Spec      14 (20) '2.0'\n-983BC Created OS            00 (0) 'MS-DOS'\n-983BD Extract Zip Spec      14 (20) '2.0'\n-983BE Extract OS            00 (0) 'MS-DOS'\n-983BF General Purpose Flag  0000 (0)\n-983C1 Compression Method    0000 (0) 'Stored'\n-983C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-983C7 CRC                   00000000 (0)\n-983CB Compressed Size       00000000 (0)\n-983CF Uncompressed Size     00000000 (0)\n-983D3 Filename Length       0031 (49)\n-983D5 Extra Length          0009 (9)\n-983D7 Comment Length        0000 (0)\n-983D9 Disk Start            0000 (0)\n-983DB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-983DD Ext File Attributes   00000000 (0)\n-983E1 Local Header Offset   0004A1EF (303599)\n-983E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x983E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-98416 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-98418   Length              0005 (5)\n-9841A   Flags               01 (1) 'Modification'\n-9841B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-9841F CENTRAL HEADER #54    02014B50 (33639248)\n-98423 Created Zip Spec      14 (20) '2.0'\n-98424 Created OS            00 (0) 'MS-DOS'\n-98425 Extract Zip Spec      14 (20) '2.0'\n-98426 Extract OS            00 (0) 'MS-DOS'\n-98427 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-98429 Compression Method    0000 (0) 'Stored'\n-9842B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-9842F CRC                   A2950D97 (2727677335)\n-98433 Compressed Size       0001C14B (115019)\n-98437 Uncompressed Size     0001C14B (115019)\n-9843B Filename Length       003A (58)\n-9843D Extra Length          0009 (9)\n-9843F Comment Length        0000 (0)\n-98441 Disk Start            0000 (0)\n-98443 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98445 Ext File Attributes   00000000 (0)\n-98449 Local Header Offset   0004A247 (303687)\n-9844D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9844D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-98487 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-98489   Length              0005 (5)\n-9848B   Flags               01 (1) 'Modification'\n-9848C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98490 CENTRAL HEADER #55    02014B50 (33639248)\n-98494 Created Zip Spec      14 (20) '2.0'\n-98495 Created OS            00 (0) 'MS-DOS'\n-98496 Extract Zip Spec      14 (20) '2.0'\n-98497 Extract OS            00 (0) 'MS-DOS'\n-98498 General Purpose Flag  0000 (0)\n-9849A Compression Method    0000 (0) 'Stored'\n-9849C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-984A0 CRC                   00000000 (0)\n-984A4 Compressed Size       00000000 (0)\n-984A8 Uncompressed Size     00000000 (0)\n-984AC Filename Length       0034 (52)\n-984AE Extra Length          0009 (9)\n-984B0 Comment Length        0000 (0)\n-984B2 Disk Start            0000 (0)\n-984B4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-984B6 Ext File Attributes   00000000 (0)\n-984BA Local Header Offset   00066403 (418819)\n-984BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x984BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-984F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-984F4   Length              0005 (5)\n-984F6   Flags               01 (1) 'Modification'\n-984F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-984FB CENTRAL HEADER #56    02014B50 (33639248)\n-984FF Created Zip Spec      14 (20) '2.0'\n-98500 Created OS            00 (0) 'MS-DOS'\n-98501 Extract Zip Spec      14 (20) '2.0'\n-98502 Extract OS            00 (0) 'MS-DOS'\n-98503 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-98505 Compression Method    0000 (0) 'Stored'\n-98507 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-9850B CRC                   A327DAE4 (2737298148)\n-9850F Compressed Size       0001F855 (129109)\n-98513 Uncompressed Size     0001F855 (129109)\n-98517 Filename Length       003D (61)\n-98519 Extra Length          0009 (9)\n-9851B Comment Length        0000 (0)\n-9851D Disk Start            0000 (0)\n-9851F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98521 Ext File Attributes   00000000 (0)\n-98525 Local Header Offset   0006645E (418910)\n-98529 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98529: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-98566 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-98568   Length              0005 (5)\n-9856A   Flags               01 (1) 'Modification'\n-9856B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-9856F CENTRAL HEADER #57    02014B50 (33639248)\n-98573 Created Zip Spec      14 (20) '2.0'\n-98574 Created OS            00 (0) 'MS-DOS'\n-98575 Extract Zip Spec      14 (20) '2.0'\n-98576 Extract OS            00 (0) 'MS-DOS'\n-98577 General Purpose Flag  0000 (0)\n-98579 Compression Method    0000 (0) 'Stored'\n-9857B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-9857F CRC                   00000000 (0)\n-98583 Compressed Size       00000000 (0)\n-98587 Uncompressed Size     00000000 (0)\n-9858B Filename Length       0018 (24)\n-9858D Extra Length          0009 (9)\n-9858F Comment Length        0000 (0)\n-98591 Disk Start            0000 (0)\n-98593 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98595 Ext File Attributes   00000000 (0)\n-98599 Local Header Offset   00085D27 (548135)\n-9859D Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9859D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-985B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-985B7   Length              0005 (5)\n-985B9   Flags               01 (1) 'Modification'\n-985BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-985BE CENTRAL HEADER #58    02014B50 (33639248)\n-985C2 Created Zip Spec      14 (20) '2.0'\n-985C3 Created OS            00 (0) 'MS-DOS'\n-985C4 Extract Zip Spec      14 (20) '2.0'\n-985C5 Extract OS            00 (0) 'MS-DOS'\n-985C6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-985C8 Compression Method    0000 (0) 'Stored'\n-985CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-985CE CRC                   A957C743 (2841102147)\n-985D2 Compressed Size       00002F61 (12129)\n-985D6 Uncompressed Size     00002F61 (12129)\n-985DA Filename Length       002D (45)\n-985DC Extra Length          0009 (9)\n-985DE Comment Length        0000 (0)\n-985E0 Disk Start            0000 (0)\n-985E2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-985E4 Ext File Attributes   00000000 (0)\n-985E8 Local Header Offset   00085D66 (548198)\n-985EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x985EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-98619 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9861B   Length              0005 (5)\n-9861D   Flags               01 (1) 'Modification'\n-9861E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98622 CENTRAL HEADER #59    02014B50 (33639248)\n-98626 Created Zip Spec      14 (20) '2.0'\n-98627 Created OS            00 (0) 'MS-DOS'\n-98628 Extract Zip Spec      14 (20) '2.0'\n-98629 Extract OS            00 (0) 'MS-DOS'\n-9862A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9862C Compression Method    0000 (0) 'Stored'\n-9862E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98632 CRC                   5CE38909 (1558415625)\n-98636 Compressed Size       00005D74 (23924)\n-9863A Uncompressed Size     00005D74 (23924)\n-9863E Filename Length       002A (42)\n-98640 Extra Length          0009 (9)\n-98642 Comment Length        0000 (0)\n-98644 Disk Start            0000 (0)\n-98646 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98648 Ext File Attributes   00000000 (0)\n-9864C Local Header Offset   00088D2B (560427)\n-98650 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98650: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9867A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9867C   Length              0005 (5)\n-9867E   Flags               01 (1) 'Modification'\n-9867F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98683 CENTRAL HEADER #60    02014B50 (33639248)\n-98687 Created Zip Spec      14 (20) '2.0'\n-98688 Created OS            00 (0) 'MS-DOS'\n-98689 Extract Zip Spec      14 (20) '2.0'\n-9868A Extract OS            00 (0) 'MS-DOS'\n-9868B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9868D Compression Method    0000 (0) 'Stored'\n-9868F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98693 CRC                   5D7A4DC7 (1568296391)\n-98697 Compressed Size       00001A62 (6754)\n-9869B Uncompressed Size     00001A62 (6754)\n-9869F Filename Length       0023 (35)\n-986A1 Extra Length          0009 (9)\n-986A3 Comment Length        0000 (0)\n-986A5 Disk Start            0000 (0)\n-986A7 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-986A9 Ext File Attributes   00000000 (0)\n-986AD Local Header Offset   0008EB00 (584448)\n-986B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x986B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-986D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-986D6   Length              0005 (5)\n-986D8   Flags               01 (1) 'Modification'\n-986D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-986DD CENTRAL HEADER #61    02014B50 (33639248)\n-986E1 Created Zip Spec      14 (20) '2.0'\n-986E2 Created OS            00 (0) 'MS-DOS'\n-986E3 Extract Zip Spec      14 (20) '2.0'\n-986E4 Extract OS            00 (0) 'MS-DOS'\n-986E5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-986E7 Compression Method    0000 (0) 'Stored'\n-986E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-986ED CRC                   F704B52A (4144280874)\n-986F1 Compressed Size       0000174E (5966)\n-986F5 Uncompressed Size     0000174E (5966)\n-986F9 Filename Length       0030 (48)\n-986FB Extra Length          0009 (9)\n-986FD Comment Length        0000 (0)\n-986FF Disk Start            0000 (0)\n-98701 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-98703 Ext File Attributes   00000000 (0)\n-98707 Local Header Offset   000905BC (591292)\n-9870B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9870B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9873B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9873D   Length              0005 (5)\n-9873F   Flags               01 (1) 'Modification'\n-98740   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98744 CENTRAL HEADER #62    02014B50 (33639248)\n-98748 Created Zip Spec      14 (20) '2.0'\n-98749 Created OS            00 (0) 'MS-DOS'\n-9874A Extract Zip Spec      14 (20) '2.0'\n-9874B Extract OS            00 (0) 'MS-DOS'\n-9874C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9874E Compression Method    0000 (0) 'Stored'\n-98750 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98754 CRC                   650A50CF (1695174863)\n-98758 Compressed Size       0000077A (1914)\n-9875C Uncompressed Size     0000077A (1914)\n-98760 Filename Length       0035 (53)\n-98762 Extra Length          0009 (9)\n-98764 Comment Length        0000 (0)\n-98766 Disk Start            0000 (0)\n-98768 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9876A Ext File Attributes   00000000 (0)\n-9876E Local Header Offset   00091D71 (597361)\n-98772 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98772: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-987A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-987A9   Length              0005 (5)\n-987AB   Flags               01 (1) 'Modification'\n-987AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-987B0 CENTRAL HEADER #63    02014B50 (33639248)\n-987B4 Created Zip Spec      14 (20) '2.0'\n-987B5 Created OS            00 (0) 'MS-DOS'\n-987B6 Extract Zip Spec      14 (20) '2.0'\n-987B7 Extract OS            00 (0) 'MS-DOS'\n-987B8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-987BA Compression Method    0000 (0) 'Stored'\n-987BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-987C0 CRC                   FD56735F (4250301279)\n-987C4 Compressed Size       000045C9 (17865)\n-987C8 Uncompressed Size     000045C9 (17865)\n-987CC Filename Length       0031 (49)\n-987CE Extra Length          0009 (9)\n-987D0 Comment Length        0000 (0)\n-987D2 Disk Start            0000 (0)\n-987D4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-987D6 Ext File Attributes   00000000 (0)\n-987DA Local Header Offset   00092557 (599383)\n-987DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x987DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9880F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-98811   Length              0005 (5)\n-98813   Flags               01 (1) 'Modification'\n-98814   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98818 CENTRAL HEADER #64    02014B50 (33639248)\n-9881C Created Zip Spec      14 (20) '2.0'\n-9881D Created OS            00 (0) 'MS-DOS'\n-9881E Extract Zip Spec      14 (20) '2.0'\n-9881F Extract OS            00 (0) 'MS-DOS'\n-98820 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-98822 Compression Method    0000 (0) 'Stored'\n-98824 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98828 CRC                   5C7E4A57 (1551780439)\n-9882C Compressed Size       0000001C (28)\n-98830 Uncompressed Size     0000001C (28)\n-98834 Filename Length       0025 (37)\n-98836 Extra Length          0009 (9)\n-98838 Comment Length        0000 (0)\n-9883A Disk Start            0000 (0)\n-9883C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9883E Ext File Attributes   00000000 (0)\n-98842 Local Header Offset   00096B88 (617352)\n-98846 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x98846: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-9886B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-9886D   Length              0005 (5)\n-9886F   Flags               01 (1) 'Modification'\n-98870   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-98874 CENTRAL HEADER #65    02014B50 (33639248)\n-98878 Created Zip Spec      14 (20) '2.0'\n-98879 Created OS            00 (0) 'MS-DOS'\n-9887A Extract Zip Spec      14 (20) '2.0'\n-9887B Extract OS            00 (0) 'MS-DOS'\n-9887C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-9887E Compression Method    0000 (0) 'Stored'\n-98880 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-98884 CRC                   E6B54850 (3870640208)\n-98888 Compressed Size       000003A7 (935)\n-9888C Uncompressed Size     000003A7 (935)\n-98890 Filename Length       001E (30)\n-98892 Extra Length          0009 (9)\n-98894 Comment Length        0000 (0)\n-98896 Disk Start            0000 (0)\n-98898 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-9889A Ext File Attributes   00000000 (0)\n-9889E Local Header Offset   00096C00 (617472)\n-988A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x988A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-988C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-988C2   Length              0005 (5)\n-988C4   Flags               01 (1) 'Modification'\n-988C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-988C9 END CENTRAL HEADER    06054B50 (101010256)\n-988CD Number of this disk   0000 (0)\n-988CF Central Dir Disk no   0000 (0)\n-988D1 Entries in this disk  0041 (65)\n-988D3 Total Entries         0041 (65)\n-988D5 Size of Central Dir   000018CD (6349)\n-988D9 Offset to Central Dir 00096FFC (618492)\n-988DD Comment Length        0000 (0)\n+0392F DATA DESCRIPTOR       08074B50 (134695760)\n+03933 CRC                   93833A61 (2474850913)\n+03937 Compressed Size       00003702 (14082)\n+0393B Uncompressed Size     00003702 (14082)\n+\n+0393F LOCAL HEADER #8       04034B50 (67324752)\n+03943 Extract Zip Spec      14 (20) '2.0'\n+03944 Extract OS            00 (0) 'MS-DOS'\n+03945 General Purpose Flag  0000 (0)\n+03947 Compression Method    0000 (0) 'Stored'\n+03949 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0394D CRC                   00000000 (0)\n+03951 Compressed Size       00000000 (0)\n+03955 Uncompressed Size     00000000 (0)\n+03959 Filename Length       0016 (22)\n+0395B Extra Length          0009 (9)\n+0395D Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x395D: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03973 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03975   Length              0005 (5)\n+03977   Flags               01 (1) 'Modification'\n+03978   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0397C LOCAL HEADER #9       04034B50 (67324752)\n+03980 Extract Zip Spec      14 (20) '2.0'\n+03981 Extract OS            00 (0) 'MS-DOS'\n+03982 General Purpose Flag  0000 (0)\n+03984 Compression Method    0000 (0) 'Stored'\n+03986 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0398A CRC                   00000000 (0)\n+0398E Compressed Size       00000000 (0)\n+03992 Uncompressed Size     00000000 (0)\n+03996 Filename Length       001C (28)\n+03998 Extra Length          0009 (9)\n+0399A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x399A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+039B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+039B8   Length              0005 (5)\n+039BA   Flags               01 (1) 'Modification'\n+039BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+039BF LOCAL HEADER #10      04034B50 (67324752)\n+039C3 Extract Zip Spec      14 (20) '2.0'\n+039C4 Extract OS            00 (0) 'MS-DOS'\n+039C5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+039C7 Compression Method    0000 (0) 'Stored'\n+039C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+039CD CRC                   00000000 (0)\n+039D1 Compressed Size       00000000 (0)\n+039D5 Uncompressed Size     00000000 (0)\n+039D9 Filename Length       0030 (48)\n+039DB Extra Length          0009 (9)\n+039DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03A0D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03A0F   Length              0005 (5)\n+03A11   Flags               01 (1) 'Modification'\n+03A12   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03A16 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                            XXXXXXXX\n+\n+03AA3 DATA DESCRIPTOR       08074B50 (134695760)\n+03AA7 CRC                   DD6F8F44 (3715075908)\n+03AAB Compressed Size       0000008D (141)\n+03AAF Uncompressed Size     0000008D (141)\n+\n+03AB3 LOCAL HEADER #11      04034B50 (67324752)\n+03AB7 Extract Zip Spec      14 (20) '2.0'\n+03AB8 Extract OS            00 (0) 'MS-DOS'\n+03AB9 General Purpose Flag  0000 (0)\n+03ABB Compression Method    0000 (0) 'Stored'\n+03ABD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AC1 CRC                   00000000 (0)\n+03AC5 Compressed Size       00000000 (0)\n+03AC9 Uncompressed Size     00000000 (0)\n+03ACD Filename Length       0004 (4)\n+03ACF Extra Length          0009 (9)\n+03AD1 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x3AD1: Filename 'XXXX'\n+#          Zero length filename\n+#\n+03AD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03AD7   Length              0005 (5)\n+03AD9   Flags               01 (1) 'Modification'\n+03ADA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03ADE LOCAL HEADER #12      04034B50 (67324752)\n+03AE2 Extract Zip Spec      14 (20) '2.0'\n+03AE3 Extract OS            00 (0) 'MS-DOS'\n+03AE4 General Purpose Flag  0000 (0)\n+03AE6 Compression Method    0000 (0) 'Stored'\n+03AE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03AEC CRC                   00000000 (0)\n+03AF0 Compressed Size       00000000 (0)\n+03AF4 Uncompressed Size     00000000 (0)\n+03AF8 Filename Length       000F (15)\n+03AFA Extra Length          0009 (9)\n+03AFC Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3AFC: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03B0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B0D   Length              0005 (5)\n+03B0F   Flags               01 (1) 'Modification'\n+03B10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03B14 LOCAL HEADER #13      04034B50 (67324752)\n+03B18 Extract Zip Spec      14 (20) '2.0'\n+03B19 Extract OS            00 (0) 'MS-DOS'\n+03B1A General Purpose Flag  0000 (0)\n+03B1C Compression Method    0000 (0) 'Stored'\n+03B1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03B22 CRC                   00000000 (0)\n+03B26 Compressed Size       00000000 (0)\n+03B2A Uncompressed Size     00000000 (0)\n+03B2E Filename Length       0015 (21)\n+03B30 Extra Length          0009 (9)\n+03B32 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B32: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03B47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B49   Length              0005 (5)\n+03B4B   Flags               01 (1) 'Modification'\n+03B4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03B50 LOCAL HEADER #14      04034B50 (67324752)\n+03B54 Extract Zip Spec      14 (20) '2.0'\n+03B55 Extract OS            00 (0) 'MS-DOS'\n+03B56 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+03B58 Compression Method    0000 (0) 'Stored'\n+03B5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03B5E CRC                   00000000 (0)\n+03B62 Compressed Size       00000000 (0)\n+03B66 Uncompressed Size     00000000 (0)\n+03B6A Filename Length       001E (30)\n+03B6C Extra Length          0009 (9)\n+03B6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03B8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03B8E   Length              0005 (5)\n+03B90   Flags               01 (1) 'Modification'\n+03B91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03B95 PAYLOAD\n+\n+09628 DATA DESCRIPTOR       08074B50 (134695760)\n+0962C CRC                   EA03ABD5 (3926109141)\n+09630 Compressed Size       00005A93 (23187)\n+09634 Uncompressed Size     00005A93 (23187)\n+\n+09638 LOCAL HEADER #15      04034B50 (67324752)\n+0963C Extract Zip Spec      14 (20) '2.0'\n+0963D Extract OS            00 (0) 'MS-DOS'\n+0963E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+09640 Compression Method    0000 (0) 'Stored'\n+09642 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09646 CRC                   00000000 (0)\n+0964A Compressed Size       00000000 (0)\n+0964E Uncompressed Size     00000000 (0)\n+09652 Filename Length       0024 (36)\n+09654 Extra Length          0009 (9)\n+09656 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9656: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0967A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0967C   Length              0005 (5)\n+0967E   Flags               01 (1) 'Modification'\n+0967F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09683 PAYLOAD\n+\n+09A62 DATA DESCRIPTOR       08074B50 (134695760)\n+09A66 CRC                   36E9AF18 (921284376)\n+09A6A Compressed Size       000003DF (991)\n+09A6E Uncompressed Size     000003DF (991)\n+\n+09A72 LOCAL HEADER #16      04034B50 (67324752)\n+09A76 Extract Zip Spec      14 (20) '2.0'\n+09A77 Extract OS            00 (0) 'MS-DOS'\n+09A78 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+09A7A Compression Method    0000 (0) 'Stored'\n+09A7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09A80 CRC                   00000000 (0)\n+09A84 Compressed Size       00000000 (0)\n+09A88 Uncompressed Size     00000000 (0)\n+09A8C Filename Length       0025 (37)\n+09A8E Extra Length          0009 (9)\n+09A90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9A90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09AB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09AB7   Length              0005 (5)\n+09AB9   Flags               01 (1) 'Modification'\n+09ABA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09ABE PAYLOAD\n+\n+0EE1D DATA DESCRIPTOR       08074B50 (134695760)\n+0EE21 CRC                   E0926690 (3767690896)\n+0EE25 Compressed Size       0000535F (21343)\n+0EE29 Uncompressed Size     0000535F (21343)\n+\n+0EE2D LOCAL HEADER #17      04034B50 (67324752)\n+0EE31 Extract Zip Spec      14 (20) '2.0'\n+0EE32 Extract OS            00 (0) 'MS-DOS'\n+0EE33 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0EE35 Compression Method    0000 (0) 'Stored'\n+0EE37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EE3B CRC                   00000000 (0)\n+0EE3F Compressed Size       00000000 (0)\n+0EE43 Uncompressed Size     00000000 (0)\n+0EE47 Filename Length       0022 (34)\n+0EE49 Extra Length          0009 (9)\n+0EE4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEE4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EE6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EE6F   Length              0005 (5)\n+0EE71   Flags               01 (1) 'Modification'\n+0EE72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EE76 PAYLOAD\n+\n+11C6E DATA DESCRIPTOR       08074B50 (134695760)\n+11C72 CRC                   61ADB259 (1638773337)\n+11C76 Compressed Size       00002DF8 (11768)\n+11C7A Uncompressed Size     00002DF8 (11768)\n+\n+11C7E LOCAL HEADER #18      04034B50 (67324752)\n+11C82 Extract Zip Spec      14 (20) '2.0'\n+11C83 Extract OS            00 (0) 'MS-DOS'\n+11C84 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+11C86 Compression Method    0000 (0) 'Stored'\n+11C88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11C8C CRC                   00000000 (0)\n+11C90 Compressed Size       00000000 (0)\n+11C94 Uncompressed Size     00000000 (0)\n+11C98 Filename Length       0022 (34)\n+11C9A Extra Length          0009 (9)\n+11C9C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11C9C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11CBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11CC0   Length              0005 (5)\n+11CC2   Flags               01 (1) 'Modification'\n+11CC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11CC7 PAYLOAD\n+\n+120F9 DATA DESCRIPTOR       08074B50 (134695760)\n+120FD CRC                   EE42052D (3997304109)\n+12101 Compressed Size       00000432 (1074)\n+12105 Uncompressed Size     00000432 (1074)\n+\n+12109 LOCAL HEADER #19      04034B50 (67324752)\n+1210D Extract Zip Spec      14 (20) '2.0'\n+1210E Extract OS            00 (0) 'MS-DOS'\n+1210F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+12111 Compression Method    0000 (0) 'Stored'\n+12113 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12117 CRC                   00000000 (0)\n+1211B Compressed Size       00000000 (0)\n+1211F Uncompressed Size     00000000 (0)\n+12123 Filename Length       0029 (41)\n+12125 Extra Length          0009 (9)\n+12127 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12127: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12150 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12152   Length              0005 (5)\n+12154   Flags               01 (1) 'Modification'\n+12155   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12159 PAYLOAD\n+\n+12BF3 DATA DESCRIPTOR       08074B50 (134695760)\n+12BF7 CRC                   A111204E (2702254158)\n+12BFB Compressed Size       00000A9A (2714)\n+12BFF Uncompressed Size     00000A9A (2714)\n+\n+12C03 LOCAL HEADER #20      04034B50 (67324752)\n+12C07 Extract Zip Spec      14 (20) '2.0'\n+12C08 Extract OS            00 (0) 'MS-DOS'\n+12C09 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+12C0B Compression Method    0000 (0) 'Stored'\n+12C0D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12C11 CRC                   00000000 (0)\n+12C15 Compressed Size       00000000 (0)\n+12C19 Uncompressed Size     00000000 (0)\n+12C1D Filename Length       0026 (38)\n+12C1F Extra Length          0009 (9)\n+12C21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12C21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12C47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12C49   Length              0005 (5)\n+12C4B   Flags               01 (1) 'Modification'\n+12C4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12C50 PAYLOAD\n+\n+14907 DATA DESCRIPTOR       08074B50 (134695760)\n+1490B CRC                   946FB6E7 (2490349287)\n+1490F Compressed Size       00001CB7 (7351)\n+14913 Uncompressed Size     00001CB7 (7351)\n+\n+14917 LOCAL HEADER #21      04034B50 (67324752)\n+1491B Extract Zip Spec      14 (20) '2.0'\n+1491C Extract OS            00 (0) 'MS-DOS'\n+1491D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1491F Compression Method    0000 (0) 'Stored'\n+14921 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14925 CRC                   00000000 (0)\n+14929 Compressed Size       00000000 (0)\n+1492D Uncompressed Size     00000000 (0)\n+14931 Filename Length       0022 (34)\n+14933 Extra Length          0009 (9)\n+14935 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14935: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14959   Length              0005 (5)\n+1495B   Flags               01 (1) 'Modification'\n+1495C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+14960 PAYLOAD\n+\n+14E10 DATA DESCRIPTOR       08074B50 (134695760)\n+14E14 CRC                   4346D71A (1128716058)\n+14E18 Compressed Size       000004B0 (1200)\n+14E1C Uncompressed Size     000004B0 (1200)\n+\n+14E20 LOCAL HEADER #22      04034B50 (67324752)\n+14E24 Extract Zip Spec      14 (20) '2.0'\n+14E25 Extract OS            00 (0) 'MS-DOS'\n+14E26 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+14E28 Compression Method    0000 (0) 'Stored'\n+14E2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14E2E CRC                   00000000 (0)\n+14E32 Compressed Size       00000000 (0)\n+14E36 Uncompressed Size     00000000 (0)\n+14E3A Filename Length       0028 (40)\n+14E3C Extra Length          0009 (9)\n+14E3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14E3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14E66 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14E68   Length              0005 (5)\n+14E6A   Flags               01 (1) 'Modification'\n+14E6B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+14E6F PAYLOAD\n+\n+15441 DATA DESCRIPTOR       08074B50 (134695760)\n+15445 CRC                   2E65ACD1 (778415313)\n+15449 Compressed Size       000005D2 (1490)\n+1544D Uncompressed Size     000005D2 (1490)\n+\n+15451 LOCAL HEADER #23      04034B50 (67324752)\n+15455 Extract Zip Spec      14 (20) '2.0'\n+15456 Extract OS            00 (0) 'MS-DOS'\n+15457 General Purpose Flag  0000 (0)\n+15459 Compression Method    0000 (0) 'Stored'\n+1545B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1545F CRC                   00000000 (0)\n+15463 Compressed Size       00000000 (0)\n+15467 Uncompressed Size     00000000 (0)\n+1546B Filename Length       001E (30)\n+1546D Extra Length          0009 (9)\n+1546F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1546F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1548D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1548F   Length              0005 (5)\n+15491   Flags               01 (1) 'Modification'\n+15492   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+15496 LOCAL HEADER #24      04034B50 (67324752)\n+1549A Extract Zip Spec      14 (20) '2.0'\n+1549B Extract OS            00 (0) 'MS-DOS'\n+1549C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1549E Compression Method    0000 (0) 'Stored'\n+154A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+154A4 CRC                   00000000 (0)\n+154A8 Compressed Size       00000000 (0)\n+154AC Uncompressed Size     00000000 (0)\n+154B0 Filename Length       002B (43)\n+154B2 Extra Length          0009 (9)\n+154B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x154B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+154DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+154E1   Length              0005 (5)\n+154E3   Flags               01 (1) 'Modification'\n+154E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+154E8 PAYLOAD\n+\n+167FD DATA DESCRIPTOR       08074B50 (134695760)\n+16801 CRC                   462B0BE3 (1177226211)\n+16805 Compressed Size       00001315 (4885)\n+16809 Uncompressed Size     00001315 (4885)\n+\n+1680D LOCAL HEADER #25      04034B50 (67324752)\n+16811 Extract Zip Spec      14 (20) '2.0'\n+16812 Extract OS            00 (0) 'MS-DOS'\n+16813 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16815 Compression Method    0000 (0) 'Stored'\n+16817 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1681B CRC                   00000000 (0)\n+1681F Compressed Size       00000000 (0)\n+16823 Uncompressed Size     00000000 (0)\n+16827 Filename Length       002E (46)\n+16829 Extra Length          0009 (9)\n+1682B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1682B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16859 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1685B   Length              0005 (5)\n+1685D   Flags               01 (1) 'Modification'\n+1685E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+16862 PAYLOAD\n+\n+19F99 DATA DESCRIPTOR       08074B50 (134695760)\n+19F9D CRC                   FAEDFD42 (4209900866)\n+19FA1 Compressed Size       00003737 (14135)\n+19FA5 Uncompressed Size     00003737 (14135)\n+\n+19FA9 LOCAL HEADER #26      04034B50 (67324752)\n+19FAD Extract Zip Spec      14 (20) '2.0'\n+19FAE Extract OS            00 (0) 'MS-DOS'\n+19FAF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+19FB1 Compression Method    0000 (0) 'Stored'\n+19FB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19FB7 CRC                   00000000 (0)\n+19FBB Compressed Size       00000000 (0)\n+19FBF Uncompressed Size     00000000 (0)\n+19FC3 Filename Length       002B (43)\n+19FC5 Extra Length          0009 (9)\n+19FC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19FC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19FF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19FF4   Length              0005 (5)\n+19FF6   Flags               01 (1) 'Modification'\n+19FF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+19FFB PAYLOAD\n+\n+1E13D DATA DESCRIPTOR       08074B50 (134695760)\n+1E141 CRC                   E2574654 (3797370452)\n+1E145 Compressed Size       00004142 (16706)\n+1E149 Uncompressed Size     00004142 (16706)\n+\n+1E14D LOCAL HEADER #27      04034B50 (67324752)\n+1E151 Extract Zip Spec      14 (20) '2.0'\n+1E152 Extract OS            00 (0) 'MS-DOS'\n+1E153 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1E155 Compression Method    0000 (0) 'Stored'\n+1E157 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1E15B CRC                   00000000 (0)\n+1E15F Compressed Size       00000000 (0)\n+1E163 Uncompressed Size     00000000 (0)\n+1E167 Filename Length       0029 (41)\n+1E169 Extra Length          0009 (9)\n+1E16B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1E16B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1E194 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1E196   Length              0005 (5)\n+1E198   Flags               01 (1) 'Modification'\n+1E199   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1E19D PAYLOAD\n+\n+1FD16 DATA DESCRIPTOR       08074B50 (134695760)\n+1FD1A CRC                   9F2DA6B8 (2670569144)\n+1FD1E Compressed Size       00001B79 (7033)\n+1FD22 Uncompressed Size     00001B79 (7033)\n+\n+1FD26 LOCAL HEADER #28      04034B50 (67324752)\n+1FD2A Extract Zip Spec      14 (20) '2.0'\n+1FD2B Extract OS            00 (0) 'MS-DOS'\n+1FD2C General Purpose Flag  0000 (0)\n+1FD2E Compression Method    0000 (0) 'Stored'\n+1FD30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1FD34 CRC                   00000000 (0)\n+1FD38 Compressed Size       00000000 (0)\n+1FD3C Uncompressed Size     00000000 (0)\n+1FD40 Filename Length       0025 (37)\n+1FD42 Extra Length          0009 (9)\n+1FD44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1FD44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1FD69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1FD6B   Length              0005 (5)\n+1FD6D   Flags               01 (1) 'Modification'\n+1FD6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1FD72 LOCAL HEADER #29      04034B50 (67324752)\n+1FD76 Extract Zip Spec      14 (20) '2.0'\n+1FD77 Extract OS            00 (0) 'MS-DOS'\n+1FD78 General Purpose Flag  0000 (0)\n+1FD7A Compression Method    0000 (0) 'Stored'\n+1FD7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1FD80 CRC                   00000000 (0)\n+1FD84 Compressed Size       00000000 (0)\n+1FD88 Uncompressed Size     00000000 (0)\n+1FD8C Filename Length       002D (45)\n+1FD8E Extra Length          0009 (9)\n+1FD90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1FD90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1FDBD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1FDBF   Length              0005 (5)\n+1FDC1   Flags               01 (1) 'Modification'\n+1FDC2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1FDC6 LOCAL HEADER #30      04034B50 (67324752)\n+1FDCA Extract Zip Spec      14 (20) '2.0'\n+1FDCB Extract OS            00 (0) 'MS-DOS'\n+1FDCC General Purpose Flag  0000 (0)\n+1FDCE Compression Method    0000 (0) 'Stored'\n+1FDD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1FDD4 CRC                   00000000 (0)\n+1FDD8 Compressed Size       00000000 (0)\n+1FDDC Uncompressed Size     00000000 (0)\n+1FDE0 Filename Length       0031 (49)\n+1FDE2 Extra Length          0009 (9)\n+1FDE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1FDE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1FE15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1FE17   Length              0005 (5)\n+1FE19   Flags               01 (1) 'Modification'\n+1FE1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1FE1E LOCAL HEADER #31      04034B50 (67324752)\n+1FE22 Extract Zip Spec      14 (20) '2.0'\n+1FE23 Extract OS            00 (0) 'MS-DOS'\n+1FE24 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1FE26 Compression Method    0000 (0) 'Stored'\n+1FE28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1FE2C CRC                   00000000 (0)\n+1FE30 Compressed Size       00000000 (0)\n+1FE34 Uncompressed Size     00000000 (0)\n+1FE38 Filename Length       003C (60)\n+1FE3A Extra Length          0009 (9)\n+1FE3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1FE3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1FE78 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1FE7A   Length              0005 (5)\n+1FE7C   Flags               01 (1) 'Modification'\n+1FE7D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1FE81 PAYLOAD\n+\n+230CD DATA DESCRIPTOR       08074B50 (134695760)\n+230D1 CRC                   E497D7EA (3835156458)\n+230D5 Compressed Size       0000324C (12876)\n+230D9 Uncompressed Size     0000324C (12876)\n+\n+230DD LOCAL HEADER #32      04034B50 (67324752)\n+230E1 Extract Zip Spec      14 (20) '2.0'\n+230E2 Extract OS            00 (0) 'MS-DOS'\n+230E3 General Purpose Flag  0000 (0)\n+230E5 Compression Method    0000 (0) 'Stored'\n+230E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+230EB CRC                   00000000 (0)\n+230EF Compressed Size       00000000 (0)\n+230F3 Uncompressed Size     00000000 (0)\n+230F7 Filename Length       0034 (52)\n+230F9 Extra Length          0009 (9)\n+230FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x230FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2312F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+23131   Length              0005 (5)\n+23133   Flags               01 (1) 'Modification'\n+23134   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+23138 LOCAL HEADER #33      04034B50 (67324752)\n+2313C Extract Zip Spec      14 (20) '2.0'\n+2313D Extract OS            00 (0) 'MS-DOS'\n+2313E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+23140 Compression Method    0000 (0) 'Stored'\n+23142 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+23146 CRC                   00000000 (0)\n+2314A Compressed Size       00000000 (0)\n+2314E Uncompressed Size     00000000 (0)\n+23152 Filename Length       003F (63)\n+23154 Extra Length          0009 (9)\n+23156 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23156: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+23195 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+23197   Length              0005 (5)\n+23199   Flags               01 (1) 'Modification'\n+2319A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2319E PAYLOAD\n+\n+27142 DATA DESCRIPTOR       08074B50 (134695760)\n+27146 CRC                   F1F630C0 (4059443392)\n+2714A Compressed Size       00003FA4 (16292)\n+2714E Uncompressed Size     00003FA4 (16292)\n+\n+27152 LOCAL HEADER #34      04034B50 (67324752)\n+27156 Extract Zip Spec      14 (20) '2.0'\n+27157 Extract OS            00 (0) 'MS-DOS'\n+27158 General Purpose Flag  0000 (0)\n+2715A Compression Method    0000 (0) 'Stored'\n+2715C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+27160 CRC                   00000000 (0)\n+27164 Compressed Size       00000000 (0)\n+27168 Uncompressed Size     00000000 (0)\n+2716C Filename Length       002B (43)\n+2716E Extra Length          0009 (9)\n+27170 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27170: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2719B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2719D   Length              0005 (5)\n+2719F   Flags               01 (1) 'Modification'\n+271A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+271A4 LOCAL HEADER #35      04034B50 (67324752)\n+271A8 Extract Zip Spec      14 (20) '2.0'\n+271A9 Extract OS            00 (0) 'MS-DOS'\n+271AA General Purpose Flag  0000 (0)\n+271AC Compression Method    0000 (0) 'Stored'\n+271AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+271B2 CRC                   00000000 (0)\n+271B6 Compressed Size       00000000 (0)\n+271BA Uncompressed Size     00000000 (0)\n+271BE Filename Length       002F (47)\n+271C0 Extra Length          0009 (9)\n+271C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x271C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+271F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+271F3   Length              0005 (5)\n+271F5   Flags               01 (1) 'Modification'\n+271F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+271FA LOCAL HEADER #36      04034B50 (67324752)\n+271FE Extract Zip Spec      14 (20) '2.0'\n+271FF Extract OS            00 (0) 'MS-DOS'\n+27200 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+27202 Compression Method    0000 (0) 'Stored'\n+27204 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+27208 CRC                   00000000 (0)\n+2720C Compressed Size       00000000 (0)\n+27210 Uncompressed Size     00000000 (0)\n+27214 Filename Length       003A (58)\n+27216 Extra Length          0009 (9)\n+27218 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x27218: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+27252 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+27254   Length              0005 (5)\n+27256   Flags               01 (1) 'Modification'\n+27257   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2725B PAYLOAD\n+\n+2CB33 DATA DESCRIPTOR       08074B50 (134695760)\n+2CB37 CRC                   950F3569 (2500801897)\n+2CB3B Compressed Size       000058D8 (22744)\n+2CB3F Uncompressed Size     000058D8 (22744)\n+\n+2CB43 LOCAL HEADER #37      04034B50 (67324752)\n+2CB47 Extract Zip Spec      14 (20) '2.0'\n+2CB48 Extract OS            00 (0) 'MS-DOS'\n+2CB49 General Purpose Flag  0000 (0)\n+2CB4B Compression Method    0000 (0) 'Stored'\n+2CB4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2CB51 CRC                   00000000 (0)\n+2CB55 Compressed Size       00000000 (0)\n+2CB59 Uncompressed Size     00000000 (0)\n+2CB5D Filename Length       0031 (49)\n+2CB5F Extra Length          0009 (9)\n+2CB61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CB61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2CB92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2CB94   Length              0005 (5)\n+2CB96   Flags               01 (1) 'Modification'\n+2CB97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2CB9B LOCAL HEADER #38      04034B50 (67324752)\n+2CB9F Extract Zip Spec      14 (20) '2.0'\n+2CBA0 Extract OS            00 (0) 'MS-DOS'\n+2CBA1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2CBA3 Compression Method    0000 (0) 'Stored'\n+2CBA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2CBA9 CRC                   00000000 (0)\n+2CBAD Compressed Size       00000000 (0)\n+2CBB1 Uncompressed Size     00000000 (0)\n+2CBB5 Filename Length       003C (60)\n+2CBB7 Extra Length          0009 (9)\n+2CBB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2CBB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2CBF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2CBF7   Length              0005 (5)\n+2CBF9   Flags               01 (1) 'Modification'\n+2CBFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2CBFE PAYLOAD\n+\n+30DD6 DATA DESCRIPTOR       08074B50 (134695760)\n+30DDA CRC                   78DAFB34 (2027617076)\n+30DDE Compressed Size       000041D8 (16856)\n+30DE2 Uncompressed Size     000041D8 (16856)\n+\n+30DE6 LOCAL HEADER #39      04034B50 (67324752)\n+30DEA Extract Zip Spec      14 (20) '2.0'\n+30DEB Extract OS            00 (0) 'MS-DOS'\n+30DEC General Purpose Flag  0000 (0)\n+30DEE Compression Method    0000 (0) 'Stored'\n+30DF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+30DF4 CRC                   00000000 (0)\n+30DF8 Compressed Size       00000000 (0)\n+30DFC Uncompressed Size     00000000 (0)\n+30E00 Filename Length       0031 (49)\n+30E02 Extra Length          0009 (9)\n+30E04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30E04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+30E35 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+30E37   Length              0005 (5)\n+30E39   Flags               01 (1) 'Modification'\n+30E3A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+30E3E LOCAL HEADER #40      04034B50 (67324752)\n+30E42 Extract Zip Spec      14 (20) '2.0'\n+30E43 Extract OS            00 (0) 'MS-DOS'\n+30E44 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+30E46 Compression Method    0000 (0) 'Stored'\n+30E48 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+30E4C CRC                   00000000 (0)\n+30E50 Compressed Size       00000000 (0)\n+30E54 Uncompressed Size     00000000 (0)\n+30E58 Filename Length       003C (60)\n+30E5A Extra Length          0009 (9)\n+30E5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x30E5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+30E98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+30E9A   Length              0005 (5)\n+30E9C   Flags               01 (1) 'Modification'\n+30E9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+30EA1 PAYLOAD\n+\n+3411D DATA DESCRIPTOR       08074B50 (134695760)\n+34121 CRC                   BAB7DC59 (3132611673)\n+34125 Compressed Size       0000327C (12924)\n+34129 Uncompressed Size     0000327C (12924)\n+\n+3412D LOCAL HEADER #41      04034B50 (67324752)\n+34131 Extract Zip Spec      14 (20) '2.0'\n+34132 Extract OS            00 (0) 'MS-DOS'\n+34133 General Purpose Flag  0000 (0)\n+34135 Compression Method    0000 (0) 'Stored'\n+34137 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3413B CRC                   00000000 (0)\n+3413F Compressed Size       00000000 (0)\n+34143 Uncompressed Size     00000000 (0)\n+34147 Filename Length       0031 (49)\n+34149 Extra Length          0009 (9)\n+3414B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3414B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3417C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3417E   Length              0005 (5)\n+34180   Flags               01 (1) 'Modification'\n+34181   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+34185 LOCAL HEADER #42      04034B50 (67324752)\n+34189 Extract Zip Spec      14 (20) '2.0'\n+3418A Extract OS            00 (0) 'MS-DOS'\n+3418B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3418D Compression Method    0000 (0) 'Stored'\n+3418F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+34193 CRC                   00000000 (0)\n+34197 Compressed Size       00000000 (0)\n+3419B Uncompressed Size     00000000 (0)\n+3419F Filename Length       003C (60)\n+341A1 Extra Length          0009 (9)\n+341A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x341A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+341DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+341E1   Length              0005 (5)\n+341E3   Flags               01 (1) 'Modification'\n+341E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+341E8 PAYLOAD\n+\n+38D80 DATA DESCRIPTOR       08074B50 (134695760)\n+38D84 CRC                   24DF140F (618599439)\n+38D88 Compressed Size       00004B98 (19352)\n+38D8C Uncompressed Size     00004B98 (19352)\n+\n+38D90 LOCAL HEADER #43      04034B50 (67324752)\n+38D94 Extract Zip Spec      14 (20) '2.0'\n+38D95 Extract OS            00 (0) 'MS-DOS'\n+38D96 General Purpose Flag  0000 (0)\n+38D98 Compression Method    0000 (0) 'Stored'\n+38D9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+38D9E CRC                   00000000 (0)\n+38DA2 Compressed Size       00000000 (0)\n+38DA6 Uncompressed Size     00000000 (0)\n+38DAA Filename Length       002F (47)\n+38DAC Extra Length          0009 (9)\n+38DAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38DAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+38DDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+38DDF   Length              0005 (5)\n+38DE1   Flags               01 (1) 'Modification'\n+38DE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+38DE6 LOCAL HEADER #44      04034B50 (67324752)\n+38DEA Extract Zip Spec      14 (20) '2.0'\n+38DEB Extract OS            00 (0) 'MS-DOS'\n+38DEC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+38DEE Compression Method    0000 (0) 'Stored'\n+38DF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+38DF4 CRC                   00000000 (0)\n+38DF8 Compressed Size       00000000 (0)\n+38DFC Uncompressed Size     00000000 (0)\n+38E00 Filename Length       003A (58)\n+38E02 Extra Length          0009 (9)\n+38E04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38E04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+38E3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+38E40   Length              0005 (5)\n+38E42   Flags               01 (1) 'Modification'\n+38E43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+38E47 PAYLOAD\n+\n+3D3FF DATA DESCRIPTOR       08074B50 (134695760)\n+3D403 CRC                   321C2FD2 (840708050)\n+3D407 Compressed Size       000045B8 (17848)\n+3D40B Uncompressed Size     000045B8 (17848)\n+\n+3D40F LOCAL HEADER #45      04034B50 (67324752)\n+3D413 Extract Zip Spec      14 (20) '2.0'\n+3D414 Extract OS            00 (0) 'MS-DOS'\n+3D415 General Purpose Flag  0000 (0)\n+3D417 Compression Method    0000 (0) 'Stored'\n+3D419 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3D41D CRC                   00000000 (0)\n+3D421 Compressed Size       00000000 (0)\n+3D425 Uncompressed Size     00000000 (0)\n+3D429 Filename Length       0032 (50)\n+3D42B Extra Length          0009 (9)\n+3D42D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D42D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3D45F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3D461   Length              0005 (5)\n+3D463   Flags               01 (1) 'Modification'\n+3D464   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3D468 LOCAL HEADER #46      04034B50 (67324752)\n+3D46C Extract Zip Spec      14 (20) '2.0'\n+3D46D Extract OS            00 (0) 'MS-DOS'\n+3D46E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3D470 Compression Method    0000 (0) 'Stored'\n+3D472 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3D476 CRC                   00000000 (0)\n+3D47A Compressed Size       00000000 (0)\n+3D47E Uncompressed Size     00000000 (0)\n+3D482 Filename Length       003D (61)\n+3D484 Extra Length          0009 (9)\n+3D486 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D486: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3D4C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3D4C5   Length              0005 (5)\n+3D4C7   Flags               01 (1) 'Modification'\n+3D4C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3D4CC PAYLOAD\n+\n+416AC DATA DESCRIPTOR       08074B50 (134695760)\n+416B0 CRC                   3ECC3177 (1053569399)\n+416B4 Compressed Size       000041E0 (16864)\n+416B8 Uncompressed Size     000041E0 (16864)\n+\n+416BC LOCAL HEADER #47      04034B50 (67324752)\n+416C0 Extract Zip Spec      14 (20) '2.0'\n+416C1 Extract OS            00 (0) 'MS-DOS'\n+416C2 General Purpose Flag  0000 (0)\n+416C4 Compression Method    0000 (0) 'Stored'\n+416C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+416CA CRC                   00000000 (0)\n+416CE Compressed Size       00000000 (0)\n+416D2 Uncompressed Size     00000000 (0)\n+416D6 Filename Length       0029 (41)\n+416D8 Extra Length          0009 (9)\n+416DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x416DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41703 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41705   Length              0005 (5)\n+41707   Flags               01 (1) 'Modification'\n+41708   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4170C LOCAL HEADER #48      04034B50 (67324752)\n+41710 Extract Zip Spec      14 (20) '2.0'\n+41711 Extract OS            00 (0) 'MS-DOS'\n+41712 General Purpose Flag  0000 (0)\n+41714 Compression Method    0000 (0) 'Stored'\n+41716 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4171A CRC                   00000000 (0)\n+4171E Compressed Size       00000000 (0)\n+41722 Uncompressed Size     00000000 (0)\n+41726 Filename Length       002D (45)\n+41728 Extra Length          0009 (9)\n+4172A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4172A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+41757 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+41759   Length              0005 (5)\n+4175B   Flags               01 (1) 'Modification'\n+4175C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+41760 LOCAL HEADER #49      04034B50 (67324752)\n+41764 Extract Zip Spec      14 (20) '2.0'\n+41765 Extract OS            00 (0) 'MS-DOS'\n+41766 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41768 Compression Method    0000 (0) 'Stored'\n+4176A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4176E CRC                   00000000 (0)\n+41772 Compressed Size       00000000 (0)\n+41776 Uncompressed Size     00000000 (0)\n+4177A Filename Length       003C (60)\n+4177C Extra Length          0009 (9)\n+4177E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4177E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+417BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+417BC   Length              0005 (5)\n+417BE   Flags               01 (1) 'Modification'\n+417BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+417C3 PAYLOAD\n+\n+452AF DATA DESCRIPTOR       08074B50 (134695760)\n+452B3 CRC                   54FC5C00 (1425824768)\n+452B7 Compressed Size       00003AEC (15084)\n+452BB Uncompressed Size     00003AEC (15084)\n+\n+452BF LOCAL HEADER #50      04034B50 (67324752)\n+452C3 Extract Zip Spec      14 (20) '2.0'\n+452C4 Extract OS            00 (0) 'MS-DOS'\n+452C5 General Purpose Flag  0000 (0)\n+452C7 Compression Method    0000 (0) 'Stored'\n+452C9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+452CD CRC                   00000000 (0)\n+452D1 Compressed Size       00000000 (0)\n+452D5 Uncompressed Size     00000000 (0)\n+452D9 Filename Length       0030 (48)\n+452DB Extra Length          0009 (9)\n+452DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x452DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4530D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4530F   Length              0005 (5)\n+45311   Flags               01 (1) 'Modification'\n+45312   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+45316 LOCAL HEADER #51      04034B50 (67324752)\n+4531A Extract Zip Spec      14 (20) '2.0'\n+4531B Extract OS            00 (0) 'MS-DOS'\n+4531C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4531E Compression Method    0000 (0) 'Stored'\n+45320 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+45324 CRC                   00000000 (0)\n+45328 Compressed Size       00000000 (0)\n+4532C Uncompressed Size     00000000 (0)\n+45330 Filename Length       003F (63)\n+45332 Extra Length          0009 (9)\n+45334 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x45334: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+45373 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+45375   Length              0005 (5)\n+45377   Flags               01 (1) 'Modification'\n+45378   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+4537C PAYLOAD\n+\n+491D8 DATA DESCRIPTOR       08074B50 (134695760)\n+491DC CRC                   F14BF548 (4048287048)\n+491E0 Compressed Size       00003E5C (15964)\n+491E4 Uncompressed Size     00003E5C (15964)\n+\n+491E8 LOCAL HEADER #52      04034B50 (67324752)\n+491EC Extract Zip Spec      14 (20) '2.0'\n+491ED Extract OS            00 (0) 'MS-DOS'\n+491EE General Purpose Flag  0000 (0)\n+491F0 Compression Method    0000 (0) 'Stored'\n+491F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+491F6 CRC                   00000000 (0)\n+491FA Compressed Size       00000000 (0)\n+491FE Uncompressed Size     00000000 (0)\n+49202 Filename Length       002D (45)\n+49204 Extra Length          0009 (9)\n+49206 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49206: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+49233 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+49235   Length              0005 (5)\n+49237   Flags               01 (1) 'Modification'\n+49238   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4923C LOCAL HEADER #53      04034B50 (67324752)\n+49240 Extract Zip Spec      14 (20) '2.0'\n+49241 Extract OS            00 (0) 'MS-DOS'\n+49242 General Purpose Flag  0000 (0)\n+49244 Compression Method    0000 (0) 'Stored'\n+49246 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4924A CRC                   00000000 (0)\n+4924E Compressed Size       00000000 (0)\n+49252 Uncompressed Size     00000000 (0)\n+49256 Filename Length       0031 (49)\n+49258 Extra Length          0009 (9)\n+4925A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4925A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4928B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4928D   Length              0005 (5)\n+4928F   Flags               01 (1) 'Modification'\n+49290   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+49294 LOCAL HEADER #54      04034B50 (67324752)\n+49298 Extract Zip Spec      14 (20) '2.0'\n+49299 Extract OS            00 (0) 'MS-DOS'\n+4929A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4929C Compression Method    0000 (0) 'Stored'\n+4929E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+492A2 CRC                   00000000 (0)\n+492A6 Compressed Size       00000000 (0)\n+492AA Uncompressed Size     00000000 (0)\n+492AE Filename Length       003A (58)\n+492B0 Extra Length          0009 (9)\n+492B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x492B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+492EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+492EE   Length              0005 (5)\n+492F0   Flags               01 (1) 'Modification'\n+492F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+492F5 PAYLOAD\n+\n+65440 DATA DESCRIPTOR       08074B50 (134695760)\n+65444 CRC                   A2950D97 (2727677335)\n+65448 Compressed Size       0001C14B (115019)\n+6544C Uncompressed Size     0001C14B (115019)\n+\n+65450 LOCAL HEADER #55      04034B50 (67324752)\n+65454 Extract Zip Spec      14 (20) '2.0'\n+65455 Extract OS            00 (0) 'MS-DOS'\n+65456 General Purpose Flag  0000 (0)\n+65458 Compression Method    0000 (0) 'Stored'\n+6545A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6545E CRC                   00000000 (0)\n+65462 Compressed Size       00000000 (0)\n+65466 Uncompressed Size     00000000 (0)\n+6546A Filename Length       0034 (52)\n+6546C Extra Length          0009 (9)\n+6546E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6546E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+654A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+654A4   Length              0005 (5)\n+654A6   Flags               01 (1) 'Modification'\n+654A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+654AB LOCAL HEADER #56      04034B50 (67324752)\n+654AF Extract Zip Spec      14 (20) '2.0'\n+654B0 Extract OS            00 (0) 'MS-DOS'\n+654B1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+654B3 Compression Method    0000 (0) 'Stored'\n+654B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+654B9 CRC                   00000000 (0)\n+654BD Compressed Size       00000000 (0)\n+654C1 Uncompressed Size     00000000 (0)\n+654C5 Filename Length       003D (61)\n+654C7 Extra Length          0009 (9)\n+654C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x654C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+65506 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+65508   Length              0005 (5)\n+6550A   Flags               01 (1) 'Modification'\n+6550B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+6550F PAYLOAD\n+\n+84D64 DATA DESCRIPTOR       08074B50 (134695760)\n+84D68 CRC                   A327DAE4 (2737298148)\n+84D6C Compressed Size       0001F855 (129109)\n+84D70 Uncompressed Size     0001F855 (129109)\n+\n+84D74 LOCAL HEADER #57      04034B50 (67324752)\n+84D78 Extract Zip Spec      14 (20) '2.0'\n+84D79 Extract OS            00 (0) 'MS-DOS'\n+84D7A General Purpose Flag  0000 (0)\n+84D7C Compression Method    0000 (0) 'Stored'\n+84D7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+84D82 CRC                   00000000 (0)\n+84D86 Compressed Size       00000000 (0)\n+84D8A Uncompressed Size     00000000 (0)\n+84D8E Filename Length       0018 (24)\n+84D90 Extra Length          0009 (9)\n+84D92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x84D92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+84DAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+84DAC   Length              0005 (5)\n+84DAE   Flags               01 (1) 'Modification'\n+84DAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+84DB3 LOCAL HEADER #58      04034B50 (67324752)\n+84DB7 Extract Zip Spec      14 (20) '2.0'\n+84DB8 Extract OS            00 (0) 'MS-DOS'\n+84DB9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+84DBB Compression Method    0000 (0) 'Stored'\n+84DBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+84DC1 CRC                   00000000 (0)\n+84DC5 Compressed Size       00000000 (0)\n+84DC9 Uncompressed Size     00000000 (0)\n+84DCD Filename Length       002D (45)\n+84DCF Extra Length          0009 (9)\n+84DD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x84DD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+84DFE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+84E00   Length              0005 (5)\n+84E02   Flags               01 (1) 'Modification'\n+84E03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+84E07 PAYLOAD\n+\n+87C0A DATA DESCRIPTOR       08074B50 (134695760)\n+87C0E CRC                   0C268234 (203850292)\n+87C12 Compressed Size       00002E03 (11779)\n+87C16 Uncompressed Size     00002E03 (11779)\n+\n+87C1A LOCAL HEADER #59      04034B50 (67324752)\n+87C1E Extract Zip Spec      14 (20) '2.0'\n+87C1F Extract OS            00 (0) 'MS-DOS'\n+87C20 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+87C22 Compression Method    0000 (0) 'Stored'\n+87C24 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+87C28 CRC                   00000000 (0)\n+87C2C Compressed Size       00000000 (0)\n+87C30 Uncompressed Size     00000000 (0)\n+87C34 Filename Length       002A (42)\n+87C36 Extra Length          0009 (9)\n+87C38 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x87C38: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+87C62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+87C64   Length              0005 (5)\n+87C66   Flags               01 (1) 'Modification'\n+87C67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+87C6B PAYLOAD\n+\n+8D789 DATA DESCRIPTOR       08074B50 (134695760)\n+8D78D CRC                   AA4194FB (2856424699)\n+8D791 Compressed Size       00005B1E (23326)\n+8D795 Uncompressed Size     00005B1E (23326)\n+\n+8D799 LOCAL HEADER #60      04034B50 (67324752)\n+8D79D Extract Zip Spec      14 (20) '2.0'\n+8D79E Extract OS            00 (0) 'MS-DOS'\n+8D79F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+8D7A1 Compression Method    0000 (0) 'Stored'\n+8D7A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+8D7A7 CRC                   00000000 (0)\n+8D7AB Compressed Size       00000000 (0)\n+8D7AF Uncompressed Size     00000000 (0)\n+8D7B3 Filename Length       0023 (35)\n+8D7B5 Extra Length          0009 (9)\n+8D7B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8D7B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+8D7DA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+8D7DC   Length              0005 (5)\n+8D7DE   Flags               01 (1) 'Modification'\n+8D7DF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+8D7E3 PAYLOAD\n+\n+8F1A5 DATA DESCRIPTOR       08074B50 (134695760)\n+8F1A9 CRC                   FC5F7A58 (4234115672)\n+8F1AD Compressed Size       000019C2 (6594)\n+8F1B1 Uncompressed Size     000019C2 (6594)\n+\n+8F1B5 LOCAL HEADER #61      04034B50 (67324752)\n+8F1B9 Extract Zip Spec      14 (20) '2.0'\n+8F1BA Extract OS            00 (0) 'MS-DOS'\n+8F1BB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+8F1BD Compression Method    0000 (0) 'Stored'\n+8F1BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+8F1C3 CRC                   00000000 (0)\n+8F1C7 Compressed Size       00000000 (0)\n+8F1CB Uncompressed Size     00000000 (0)\n+8F1CF Filename Length       0030 (48)\n+8F1D1 Extra Length          0009 (9)\n+8F1D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8F1D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+8F203 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+8F205   Length              0005 (5)\n+8F207   Flags               01 (1) 'Modification'\n+8F208   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+8F20C PAYLOAD\n+\n+908CC DATA DESCRIPTOR       08074B50 (134695760)\n+908D0 CRC                   4AA9E778 (1252648824)\n+908D4 Compressed Size       000016C0 (5824)\n+908D8 Uncompressed Size     000016C0 (5824)\n+\n+908DC LOCAL HEADER #62      04034B50 (67324752)\n+908E0 Extract Zip Spec      14 (20) '2.0'\n+908E1 Extract OS            00 (0) 'MS-DOS'\n+908E2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+908E4 Compression Method    0000 (0) 'Stored'\n+908E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+908EA CRC                   00000000 (0)\n+908EE Compressed Size       00000000 (0)\n+908F2 Uncompressed Size     00000000 (0)\n+908F6 Filename Length       0035 (53)\n+908F8 Extra Length          0009 (9)\n+908FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x908FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9092F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+90931   Length              0005 (5)\n+90933   Flags               01 (1) 'Modification'\n+90934   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+90938 PAYLOAD\n+\n+9106D DATA DESCRIPTOR       08074B50 (134695760)\n+91071 CRC                   3AE1B870 (987871344)\n+91075 Compressed Size       00000735 (1845)\n+91079 Uncompressed Size     00000735 (1845)\n+\n+9107D LOCAL HEADER #63      04034B50 (67324752)\n+91081 Extract Zip Spec      14 (20) '2.0'\n+91082 Extract OS            00 (0) 'MS-DOS'\n+91083 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+91085 Compression Method    0000 (0) 'Stored'\n+91087 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9108B CRC                   00000000 (0)\n+9108F Compressed Size       00000000 (0)\n+91093 Uncompressed Size     00000000 (0)\n+91097 Filename Length       0031 (49)\n+91099 Extra Length          0009 (9)\n+9109B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9109B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+910CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+910CE   Length              0005 (5)\n+910D0   Flags               01 (1) 'Modification'\n+910D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+910D5 PAYLOAD\n+\n+954F4 DATA DESCRIPTOR       08074B50 (134695760)\n+954F8 CRC                   942036A4 (2485139108)\n+954FC Compressed Size       0000441F (17439)\n+95500 Uncompressed Size     0000441F (17439)\n+\n+95504 LOCAL HEADER #64      04034B50 (67324752)\n+95508 Extract Zip Spec      14 (20) '2.0'\n+95509 Extract OS            00 (0) 'MS-DOS'\n+9550A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+9550C Compression Method    0000 (0) 'Stored'\n+9550E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95512 CRC                   00000000 (0)\n+95516 Compressed Size       00000000 (0)\n+9551A Uncompressed Size     00000000 (0)\n+9551E Filename Length       0025 (37)\n+95520 Extra Length          0009 (9)\n+95522 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95522: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95547 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95549   Length              0005 (5)\n+9554B   Flags               01 (1) 'Modification'\n+9554C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+95550 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+9556B DATA DESCRIPTOR       08074B50 (134695760)\n+9556F CRC                   5C2EB634 (1546565172)\n+95573 Compressed Size       0000001B (27)\n+95577 Uncompressed Size     0000001B (27)\n+\n+9557B LOCAL HEADER #65      04034B50 (67324752)\n+9557F Extract Zip Spec      14 (20) '2.0'\n+95580 Extract OS            00 (0) 'MS-DOS'\n+95581 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95583 Compression Method    0000 (0) 'Stored'\n+95585 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95589 CRC                   00000000 (0)\n+9558D Compressed Size       00000000 (0)\n+95591 Uncompressed Size     00000000 (0)\n+95595 Filename Length       001E (30)\n+95597 Extra Length          0009 (9)\n+95599 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95599: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+955B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+955B9   Length              0005 (5)\n+955BB   Flags               01 (1) 'Modification'\n+955BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+955C0 PAYLOAD\n+\n+95967 DATA DESCRIPTOR       08074B50 (134695760)\n+9596B CRC                   E6B54850 (3870640208)\n+9596F Compressed Size       000003A7 (935)\n+95973 Uncompressed Size     000003A7 (935)\n+\n+95977 CENTRAL HEADER #1     02014B50 (33639248)\n+9597B Created Zip Spec      14 (20) '2.0'\n+9597C Created OS            00 (0) 'MS-DOS'\n+9597D Extract Zip Spec      14 (20) '2.0'\n+9597E Extract OS            00 (0) 'MS-DOS'\n+9597F General Purpose Flag  0000 (0)\n+95981 Compression Method    0000 (0) 'Stored'\n+95983 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95987 CRC                   00000000 (0)\n+9598B Compressed Size       00000000 (0)\n+9598F Uncompressed Size     00000000 (0)\n+95993 Filename Length       0009 (9)\n+95995 Extra Length          0009 (9)\n+95997 Comment Length        0000 (0)\n+95999 Disk Start            0000 (0)\n+9599B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+9599D Ext File Attributes   00000000 (0)\n+959A1 Local Header Offset   00000000 (0)\n+959A5 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x959A5: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+959AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+959B0   Length              0005 (5)\n+959B2   Flags               01 (1) 'Modification'\n+959B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+959B7 CENTRAL HEADER #2     02014B50 (33639248)\n+959BB Created Zip Spec      14 (20) '2.0'\n+959BC Created OS            00 (0) 'MS-DOS'\n+959BD Extract Zip Spec      14 (20) '2.0'\n+959BE Extract OS            00 (0) 'MS-DOS'\n+959BF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+959C1 Compression Method    0000 (0) 'Stored'\n+959C3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+959C7 CRC                   EE027FB2 (3993141170)\n+959CB Compressed Size       00000019 (25)\n+959CF Uncompressed Size     00000019 (25)\n+959D3 Filename Length       0014 (20)\n+959D5 Extra Length          0009 (9)\n+959D7 Comment Length        0000 (0)\n+959D9 Disk Start            0000 (0)\n+959DB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+959DD Ext File Attributes   00000000 (0)\n+959E1 Local Header Offset   00000030 (48)\n+959E5 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x959E5: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+959F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+959FB   Length              0005 (5)\n+959FD   Flags               01 (1) 'Modification'\n+959FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95A02 CENTRAL HEADER #3     02014B50 (33639248)\n+95A06 Created Zip Spec      14 (20) '2.0'\n+95A07 Created OS            00 (0) 'MS-DOS'\n+95A08 Extract Zip Spec      14 (20) '2.0'\n+95A09 Extract OS            00 (0) 'MS-DOS'\n+95A0A General Purpose Flag  0000 (0)\n+95A0C Compression Method    0000 (0) 'Stored'\n+95A0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95A12 CRC                   00000000 (0)\n+95A16 Compressed Size       00000000 (0)\n+95A1A Uncompressed Size     00000000 (0)\n+95A1E Filename Length       000F (15)\n+95A20 Extra Length          0009 (9)\n+95A22 Comment Length        0000 (0)\n+95A24 Disk Start            0000 (0)\n+95A26 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95A28 Ext File Attributes   00000000 (0)\n+95A2C Local Header Offset   00000094 (148)\n+95A30 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95A30: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95A3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95A41   Length              0005 (5)\n+95A43   Flags               01 (1) 'Modification'\n+95A44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95A48 CENTRAL HEADER #4     02014B50 (33639248)\n+95A4C Created Zip Spec      14 (20) '2.0'\n+95A4D Created OS            00 (0) 'MS-DOS'\n+95A4E Extract Zip Spec      14 (20) '2.0'\n+95A4F Extract OS            00 (0) 'MS-DOS'\n+95A50 General Purpose Flag  0000 (0)\n+95A52 Compression Method    0000 (0) 'Stored'\n+95A54 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95A58 CRC                   00000000 (0)\n+95A5C Compressed Size       00000000 (0)\n+95A60 Uncompressed Size     00000000 (0)\n+95A64 Filename Length       0024 (36)\n+95A66 Extra Length          0009 (9)\n+95A68 Comment Length        0000 (0)\n+95A6A Disk Start            0000 (0)\n+95A6C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95A6E Ext File Attributes   00000000 (0)\n+95A72 Local Header Offset   000000CA (202)\n+95A76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95A76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95A9A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95A9C   Length              0005 (5)\n+95A9E   Flags               01 (1) 'Modification'\n+95A9F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95AA3 CENTRAL HEADER #5     02014B50 (33639248)\n+95AA7 Created Zip Spec      14 (20) '2.0'\n+95AA8 Created OS            00 (0) 'MS-DOS'\n+95AA9 Extract Zip Spec      14 (20) '2.0'\n+95AAA Extract OS            00 (0) 'MS-DOS'\n+95AAB General Purpose Flag  0000 (0)\n+95AAD Compression Method    0000 (0) 'Stored'\n+95AAF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95AB3 CRC                   00000000 (0)\n+95AB7 Compressed Size       00000000 (0)\n+95ABB Uncompressed Size     00000000 (0)\n+95ABF Filename Length       002A (42)\n+95AC1 Extra Length          0009 (9)\n+95AC3 Comment Length        0000 (0)\n+95AC5 Disk Start            0000 (0)\n+95AC7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95AC9 Ext File Attributes   00000000 (0)\n+95ACD Local Header Offset   00000115 (277)\n+95AD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95AD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95AFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95AFD   Length              0005 (5)\n+95AFF   Flags               01 (1) 'Modification'\n+95B00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95B04 CENTRAL HEADER #6     02014B50 (33639248)\n+95B08 Created Zip Spec      14 (20) '2.0'\n+95B09 Created OS            00 (0) 'MS-DOS'\n+95B0A Extract Zip Spec      14 (20) '2.0'\n+95B0B Extract OS            00 (0) 'MS-DOS'\n+95B0C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95B0E Compression Method    0000 (0) 'Stored'\n+95B10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95B14 CRC                   00000000 (0)\n+95B18 Compressed Size       00000000 (0)\n+95B1C Uncompressed Size     00000000 (0)\n+95B20 Filename Length       0038 (56)\n+95B22 Extra Length          0009 (9)\n+95B24 Comment Length        0000 (0)\n+95B26 Disk Start            0000 (0)\n+95B28 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95B2A Ext File Attributes   00000000 (0)\n+95B2E Local Header Offset   00000166 (358)\n+95B32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95B32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95B6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95B6C   Length              0005 (5)\n+95B6E   Flags               01 (1) 'Modification'\n+95B6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95B73 CENTRAL HEADER #7     02014B50 (33639248)\n+95B77 Created Zip Spec      14 (20) '2.0'\n+95B78 Created OS            00 (0) 'MS-DOS'\n+95B79 Extract Zip Spec      14 (20) '2.0'\n+95B7A Extract OS            00 (0) 'MS-DOS'\n+95B7B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95B7D Compression Method    0000 (0) 'Stored'\n+95B7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95B83 CRC                   93833A61 (2474850913)\n+95B87 Compressed Size       00003702 (14082)\n+95B8B Uncompressed Size     00003702 (14082)\n+95B8F Filename Length       0031 (49)\n+95B91 Extra Length          0009 (9)\n+95B93 Comment Length        0000 (0)\n+95B95 Disk Start            0000 (0)\n+95B97 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95B99 Ext File Attributes   00000000 (0)\n+95B9D Local Header Offset   000001D5 (469)\n+95BA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95BA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95BD2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95BD4   Length              0005 (5)\n+95BD6   Flags               01 (1) 'Modification'\n+95BD7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95BDB CENTRAL HEADER #8     02014B50 (33639248)\n+95BDF Created Zip Spec      14 (20) '2.0'\n+95BE0 Created OS            00 (0) 'MS-DOS'\n+95BE1 Extract Zip Spec      14 (20) '2.0'\n+95BE2 Extract OS            00 (0) 'MS-DOS'\n+95BE3 General Purpose Flag  0000 (0)\n+95BE5 Compression Method    0000 (0) 'Stored'\n+95BE7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95BEB CRC                   00000000 (0)\n+95BEF Compressed Size       00000000 (0)\n+95BF3 Uncompressed Size     00000000 (0)\n+95BF7 Filename Length       0016 (22)\n+95BF9 Extra Length          0009 (9)\n+95BFB Comment Length        0000 (0)\n+95BFD Disk Start            0000 (0)\n+95BFF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95C01 Ext File Attributes   00000000 (0)\n+95C05 Local Header Offset   0000393F (14655)\n+95C09 Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95C09: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95C1F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95C21   Length              0005 (5)\n+95C23   Flags               01 (1) 'Modification'\n+95C24   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95C28 CENTRAL HEADER #9     02014B50 (33639248)\n+95C2C Created Zip Spec      14 (20) '2.0'\n+95C2D Created OS            00 (0) 'MS-DOS'\n+95C2E Extract Zip Spec      14 (20) '2.0'\n+95C2F Extract OS            00 (0) 'MS-DOS'\n+95C30 General Purpose Flag  0000 (0)\n+95C32 Compression Method    0000 (0) 'Stored'\n+95C34 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95C38 CRC                   00000000 (0)\n+95C3C Compressed Size       00000000 (0)\n+95C40 Uncompressed Size     00000000 (0)\n+95C44 Filename Length       001C (28)\n+95C46 Extra Length          0009 (9)\n+95C48 Comment Length        0000 (0)\n+95C4A Disk Start            0000 (0)\n+95C4C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95C4E Ext File Attributes   00000000 (0)\n+95C52 Local Header Offset   0000397C (14716)\n+95C56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95C56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95C72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95C74   Length              0005 (5)\n+95C76   Flags               01 (1) 'Modification'\n+95C77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95C7B CENTRAL HEADER #10    02014B50 (33639248)\n+95C7F Created Zip Spec      14 (20) '2.0'\n+95C80 Created OS            00 (0) 'MS-DOS'\n+95C81 Extract Zip Spec      14 (20) '2.0'\n+95C82 Extract OS            00 (0) 'MS-DOS'\n+95C83 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95C85 Compression Method    0000 (0) 'Stored'\n+95C87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95C8B CRC                   DD6F8F44 (3715075908)\n+95C8F Compressed Size       0000008D (141)\n+95C93 Uncompressed Size     0000008D (141)\n+95C97 Filename Length       0030 (48)\n+95C99 Extra Length          0009 (9)\n+95C9B Comment Length        0000 (0)\n+95C9D Disk Start            0000 (0)\n+95C9F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95CA1 Ext File Attributes   00000000 (0)\n+95CA5 Local Header Offset   000039BF (14783)\n+95CA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95CA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95CD9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95CDB   Length              0005 (5)\n+95CDD   Flags               01 (1) 'Modification'\n+95CDE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95CE2 CENTRAL HEADER #11    02014B50 (33639248)\n+95CE6 Created Zip Spec      14 (20) '2.0'\n+95CE7 Created OS            00 (0) 'MS-DOS'\n+95CE8 Extract Zip Spec      14 (20) '2.0'\n+95CE9 Extract OS            00 (0) 'MS-DOS'\n+95CEA General Purpose Flag  0000 (0)\n+95CEC Compression Method    0000 (0) 'Stored'\n+95CEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95CF2 CRC                   00000000 (0)\n+95CF6 Compressed Size       00000000 (0)\n+95CFA Uncompressed Size     00000000 (0)\n+95CFE Filename Length       0004 (4)\n+95D00 Extra Length          0009 (9)\n+95D02 Comment Length        0000 (0)\n+95D04 Disk Start            0000 (0)\n+95D06 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95D08 Ext File Attributes   00000000 (0)\n+95D0C Local Header Offset   00003AB3 (15027)\n+95D10 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x95D10: Filename 'XXXX'\n+#          Zero length filename\n+#\n+95D14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95D16   Length              0005 (5)\n+95D18   Flags               01 (1) 'Modification'\n+95D19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95D1D CENTRAL HEADER #12    02014B50 (33639248)\n+95D21 Created Zip Spec      14 (20) '2.0'\n+95D22 Created OS            00 (0) 'MS-DOS'\n+95D23 Extract Zip Spec      14 (20) '2.0'\n+95D24 Extract OS            00 (0) 'MS-DOS'\n+95D25 General Purpose Flag  0000 (0)\n+95D27 Compression Method    0000 (0) 'Stored'\n+95D29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95D2D CRC                   00000000 (0)\n+95D31 Compressed Size       00000000 (0)\n+95D35 Uncompressed Size     00000000 (0)\n+95D39 Filename Length       000F (15)\n+95D3B Extra Length          0009 (9)\n+95D3D Comment Length        0000 (0)\n+95D3F Disk Start            0000 (0)\n+95D41 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95D43 Ext File Attributes   00000000 (0)\n+95D47 Local Header Offset   00003ADE (15070)\n+95D4B Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95D4B: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95D5A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95D5C   Length              0005 (5)\n+95D5E   Flags               01 (1) 'Modification'\n+95D5F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95D63 CENTRAL HEADER #13    02014B50 (33639248)\n+95D67 Created Zip Spec      14 (20) '2.0'\n+95D68 Created OS            00 (0) 'MS-DOS'\n+95D69 Extract Zip Spec      14 (20) '2.0'\n+95D6A Extract OS            00 (0) 'MS-DOS'\n+95D6B General Purpose Flag  0000 (0)\n+95D6D Compression Method    0000 (0) 'Stored'\n+95D6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95D73 CRC                   00000000 (0)\n+95D77 Compressed Size       00000000 (0)\n+95D7B Uncompressed Size     00000000 (0)\n+95D7F Filename Length       0015 (21)\n+95D81 Extra Length          0009 (9)\n+95D83 Comment Length        0000 (0)\n+95D85 Disk Start            0000 (0)\n+95D87 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95D89 Ext File Attributes   00000000 (0)\n+95D8D Local Header Offset   00003B14 (15124)\n+95D91 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95D91: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95DA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95DA8   Length              0005 (5)\n+95DAA   Flags               01 (1) 'Modification'\n+95DAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95DAF CENTRAL HEADER #14    02014B50 (33639248)\n+95DB3 Created Zip Spec      14 (20) '2.0'\n+95DB4 Created OS            00 (0) 'MS-DOS'\n+95DB5 Extract Zip Spec      14 (20) '2.0'\n+95DB6 Extract OS            00 (0) 'MS-DOS'\n+95DB7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95DB9 Compression Method    0000 (0) 'Stored'\n+95DBB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95DBF CRC                   EA03ABD5 (3926109141)\n+95DC3 Compressed Size       00005A93 (23187)\n+95DC7 Uncompressed Size     00005A93 (23187)\n+95DCB Filename Length       001E (30)\n+95DCD Extra Length          0009 (9)\n+95DCF Comment Length        0000 (0)\n+95DD1 Disk Start            0000 (0)\n+95DD3 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95DD5 Ext File Attributes   00000000 (0)\n+95DD9 Local Header Offset   00003B50 (15184)\n+95DDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95DDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95DFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95DFD   Length              0005 (5)\n+95DFF   Flags               01 (1) 'Modification'\n+95E00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95E04 CENTRAL HEADER #15    02014B50 (33639248)\n+95E08 Created Zip Spec      14 (20) '2.0'\n+95E09 Created OS            00 (0) 'MS-DOS'\n+95E0A Extract Zip Spec      14 (20) '2.0'\n+95E0B Extract OS            00 (0) 'MS-DOS'\n+95E0C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95E0E Compression Method    0000 (0) 'Stored'\n+95E10 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95E14 CRC                   36E9AF18 (921284376)\n+95E18 Compressed Size       000003DF (991)\n+95E1C Uncompressed Size     000003DF (991)\n+95E20 Filename Length       0024 (36)\n+95E22 Extra Length          0009 (9)\n+95E24 Comment Length        0000 (0)\n+95E26 Disk Start            0000 (0)\n+95E28 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95E2A Ext File Attributes   00000000 (0)\n+95E2E Local Header Offset   00009638 (38456)\n+95E32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95E32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95E56 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95E58   Length              0005 (5)\n+95E5A   Flags               01 (1) 'Modification'\n+95E5B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95E5F CENTRAL HEADER #16    02014B50 (33639248)\n+95E63 Created Zip Spec      14 (20) '2.0'\n+95E64 Created OS            00 (0) 'MS-DOS'\n+95E65 Extract Zip Spec      14 (20) '2.0'\n+95E66 Extract OS            00 (0) 'MS-DOS'\n+95E67 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95E69 Compression Method    0000 (0) 'Stored'\n+95E6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95E6F CRC                   E0926690 (3767690896)\n+95E73 Compressed Size       0000535F (21343)\n+95E77 Uncompressed Size     0000535F (21343)\n+95E7B Filename Length       0025 (37)\n+95E7D Extra Length          0009 (9)\n+95E7F Comment Length        0000 (0)\n+95E81 Disk Start            0000 (0)\n+95E83 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95E85 Ext File Attributes   00000000 (0)\n+95E89 Local Header Offset   00009A72 (39538)\n+95E8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95E8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95EB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95EB4   Length              0005 (5)\n+95EB6   Flags               01 (1) 'Modification'\n+95EB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95EBB CENTRAL HEADER #17    02014B50 (33639248)\n+95EBF Created Zip Spec      14 (20) '2.0'\n+95EC0 Created OS            00 (0) 'MS-DOS'\n+95EC1 Extract Zip Spec      14 (20) '2.0'\n+95EC2 Extract OS            00 (0) 'MS-DOS'\n+95EC3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95EC5 Compression Method    0000 (0) 'Stored'\n+95EC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95ECB CRC                   61ADB259 (1638773337)\n+95ECF Compressed Size       00002DF8 (11768)\n+95ED3 Uncompressed Size     00002DF8 (11768)\n+95ED7 Filename Length       0022 (34)\n+95ED9 Extra Length          0009 (9)\n+95EDB Comment Length        0000 (0)\n+95EDD Disk Start            0000 (0)\n+95EDF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95EE1 Ext File Attributes   00000000 (0)\n+95EE5 Local Header Offset   0000EE2D (60973)\n+95EE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95EE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95F0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95F0D   Length              0005 (5)\n+95F0F   Flags               01 (1) 'Modification'\n+95F10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95F14 CENTRAL HEADER #18    02014B50 (33639248)\n+95F18 Created Zip Spec      14 (20) '2.0'\n+95F19 Created OS            00 (0) 'MS-DOS'\n+95F1A Extract Zip Spec      14 (20) '2.0'\n+95F1B Extract OS            00 (0) 'MS-DOS'\n+95F1C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95F1E Compression Method    0000 (0) 'Stored'\n+95F20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95F24 CRC                   EE42052D (3997304109)\n+95F28 Compressed Size       00000432 (1074)\n+95F2C Uncompressed Size     00000432 (1074)\n+95F30 Filename Length       0022 (34)\n+95F32 Extra Length          0009 (9)\n+95F34 Comment Length        0000 (0)\n+95F36 Disk Start            0000 (0)\n+95F38 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95F3A Ext File Attributes   00000000 (0)\n+95F3E Local Header Offset   00011C7E (72830)\n+95F42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95F42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95F64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95F66   Length              0005 (5)\n+95F68   Flags               01 (1) 'Modification'\n+95F69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95F6D CENTRAL HEADER #19    02014B50 (33639248)\n+95F71 Created Zip Spec      14 (20) '2.0'\n+95F72 Created OS            00 (0) 'MS-DOS'\n+95F73 Extract Zip Spec      14 (20) '2.0'\n+95F74 Extract OS            00 (0) 'MS-DOS'\n+95F75 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95F77 Compression Method    0000 (0) 'Stored'\n+95F79 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95F7D CRC                   A111204E (2702254158)\n+95F81 Compressed Size       00000A9A (2714)\n+95F85 Uncompressed Size     00000A9A (2714)\n+95F89 Filename Length       0029 (41)\n+95F8B Extra Length          0009 (9)\n+95F8D Comment Length        0000 (0)\n+95F8F Disk Start            0000 (0)\n+95F91 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95F93 Ext File Attributes   00000000 (0)\n+95F97 Local Header Offset   00012109 (73993)\n+95F9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95F9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+95FC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+95FC6   Length              0005 (5)\n+95FC8   Flags               01 (1) 'Modification'\n+95FC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+95FCD CENTRAL HEADER #20    02014B50 (33639248)\n+95FD1 Created Zip Spec      14 (20) '2.0'\n+95FD2 Created OS            00 (0) 'MS-DOS'\n+95FD3 Extract Zip Spec      14 (20) '2.0'\n+95FD4 Extract OS            00 (0) 'MS-DOS'\n+95FD5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+95FD7 Compression Method    0000 (0) 'Stored'\n+95FD9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+95FDD CRC                   946FB6E7 (2490349287)\n+95FE1 Compressed Size       00001CB7 (7351)\n+95FE5 Uncompressed Size     00001CB7 (7351)\n+95FE9 Filename Length       0026 (38)\n+95FEB Extra Length          0009 (9)\n+95FED Comment Length        0000 (0)\n+95FEF Disk Start            0000 (0)\n+95FF1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+95FF3 Ext File Attributes   00000000 (0)\n+95FF7 Local Header Offset   00012C03 (76803)\n+95FFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x95FFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96021 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96023   Length              0005 (5)\n+96025   Flags               01 (1) 'Modification'\n+96026   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9602A CENTRAL HEADER #21    02014B50 (33639248)\n+9602E Created Zip Spec      14 (20) '2.0'\n+9602F Created OS            00 (0) 'MS-DOS'\n+96030 Extract Zip Spec      14 (20) '2.0'\n+96031 Extract OS            00 (0) 'MS-DOS'\n+96032 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96034 Compression Method    0000 (0) 'Stored'\n+96036 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9603A CRC                   4346D71A (1128716058)\n+9603E Compressed Size       000004B0 (1200)\n+96042 Uncompressed Size     000004B0 (1200)\n+96046 Filename Length       0022 (34)\n+96048 Extra Length          0009 (9)\n+9604A Comment Length        0000 (0)\n+9604C Disk Start            0000 (0)\n+9604E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96050 Ext File Attributes   00000000 (0)\n+96054 Local Header Offset   00014917 (84247)\n+96058 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96058: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9607A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+9607C   Length              0005 (5)\n+9607E   Flags               01 (1) 'Modification'\n+9607F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96083 CENTRAL HEADER #22    02014B50 (33639248)\n+96087 Created Zip Spec      14 (20) '2.0'\n+96088 Created OS            00 (0) 'MS-DOS'\n+96089 Extract Zip Spec      14 (20) '2.0'\n+9608A Extract OS            00 (0) 'MS-DOS'\n+9608B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+9608D Compression Method    0000 (0) 'Stored'\n+9608F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96093 CRC                   2E65ACD1 (778415313)\n+96097 Compressed Size       000005D2 (1490)\n+9609B Uncompressed Size     000005D2 (1490)\n+9609F Filename Length       0028 (40)\n+960A1 Extra Length          0009 (9)\n+960A3 Comment Length        0000 (0)\n+960A5 Disk Start            0000 (0)\n+960A7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+960A9 Ext File Attributes   00000000 (0)\n+960AD Local Header Offset   00014E20 (85536)\n+960B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x960B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+960D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+960DB   Length              0005 (5)\n+960DD   Flags               01 (1) 'Modification'\n+960DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+960E2 CENTRAL HEADER #23    02014B50 (33639248)\n+960E6 Created Zip Spec      14 (20) '2.0'\n+960E7 Created OS            00 (0) 'MS-DOS'\n+960E8 Extract Zip Spec      14 (20) '2.0'\n+960E9 Extract OS            00 (0) 'MS-DOS'\n+960EA General Purpose Flag  0000 (0)\n+960EC Compression Method    0000 (0) 'Stored'\n+960EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+960F2 CRC                   00000000 (0)\n+960F6 Compressed Size       00000000 (0)\n+960FA Uncompressed Size     00000000 (0)\n+960FE Filename Length       001E (30)\n+96100 Extra Length          0009 (9)\n+96102 Comment Length        0000 (0)\n+96104 Disk Start            0000 (0)\n+96106 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96108 Ext File Attributes   00000000 (0)\n+9610C Local Header Offset   00015451 (87121)\n+96110 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96110: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9612E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96130   Length              0005 (5)\n+96132   Flags               01 (1) 'Modification'\n+96133   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96137 CENTRAL HEADER #24    02014B50 (33639248)\n+9613B Created Zip Spec      14 (20) '2.0'\n+9613C Created OS            00 (0) 'MS-DOS'\n+9613D Extract Zip Spec      14 (20) '2.0'\n+9613E Extract OS            00 (0) 'MS-DOS'\n+9613F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96141 Compression Method    0000 (0) 'Stored'\n+96143 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96147 CRC                   462B0BE3 (1177226211)\n+9614B Compressed Size       00001315 (4885)\n+9614F Uncompressed Size     00001315 (4885)\n+96153 Filename Length       002B (43)\n+96155 Extra Length          0009 (9)\n+96157 Comment Length        0000 (0)\n+96159 Disk Start            0000 (0)\n+9615B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+9615D Ext File Attributes   00000000 (0)\n+96161 Local Header Offset   00015496 (87190)\n+96165 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96165: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96190 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96192   Length              0005 (5)\n+96194   Flags               01 (1) 'Modification'\n+96195   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96199 CENTRAL HEADER #25    02014B50 (33639248)\n+9619D Created Zip Spec      14 (20) '2.0'\n+9619E Created OS            00 (0) 'MS-DOS'\n+9619F Extract Zip Spec      14 (20) '2.0'\n+961A0 Extract OS            00 (0) 'MS-DOS'\n+961A1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+961A3 Compression Method    0000 (0) 'Stored'\n+961A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+961A9 CRC                   FAEDFD42 (4209900866)\n+961AD Compressed Size       00003737 (14135)\n+961B1 Uncompressed Size     00003737 (14135)\n+961B5 Filename Length       002E (46)\n+961B7 Extra Length          0009 (9)\n+961B9 Comment Length        0000 (0)\n+961BB Disk Start            0000 (0)\n+961BD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+961BF Ext File Attributes   00000000 (0)\n+961C3 Local Header Offset   0001680D (92173)\n+961C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x961C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+961F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+961F7   Length              0005 (5)\n+961F9   Flags               01 (1) 'Modification'\n+961FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+961FE CENTRAL HEADER #26    02014B50 (33639248)\n+96202 Created Zip Spec      14 (20) '2.0'\n+96203 Created OS            00 (0) 'MS-DOS'\n+96204 Extract Zip Spec      14 (20) '2.0'\n+96205 Extract OS            00 (0) 'MS-DOS'\n+96206 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96208 Compression Method    0000 (0) 'Stored'\n+9620A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9620E CRC                   E2574654 (3797370452)\n+96212 Compressed Size       00004142 (16706)\n+96216 Uncompressed Size     00004142 (16706)\n+9621A Filename Length       002B (43)\n+9621C Extra Length          0009 (9)\n+9621E Comment Length        0000 (0)\n+96220 Disk Start            0000 (0)\n+96222 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96224 Ext File Attributes   00000000 (0)\n+96228 Local Header Offset   00019FA9 (106409)\n+9622C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9622C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96257 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96259   Length              0005 (5)\n+9625B   Flags               01 (1) 'Modification'\n+9625C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96260 CENTRAL HEADER #27    02014B50 (33639248)\n+96264 Created Zip Spec      14 (20) '2.0'\n+96265 Created OS            00 (0) 'MS-DOS'\n+96266 Extract Zip Spec      14 (20) '2.0'\n+96267 Extract OS            00 (0) 'MS-DOS'\n+96268 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+9626A Compression Method    0000 (0) 'Stored'\n+9626C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96270 CRC                   9F2DA6B8 (2670569144)\n+96274 Compressed Size       00001B79 (7033)\n+96278 Uncompressed Size     00001B79 (7033)\n+9627C Filename Length       0029 (41)\n+9627E Extra Length          0009 (9)\n+96280 Comment Length        0000 (0)\n+96282 Disk Start            0000 (0)\n+96284 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96286 Ext File Attributes   00000000 (0)\n+9628A Local Header Offset   0001E14D (123213)\n+9628E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9628E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+962B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+962B9   Length              0005 (5)\n+962BB   Flags               01 (1) 'Modification'\n+962BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+962C0 CENTRAL HEADER #28    02014B50 (33639248)\n+962C4 Created Zip Spec      14 (20) '2.0'\n+962C5 Created OS            00 (0) 'MS-DOS'\n+962C6 Extract Zip Spec      14 (20) '2.0'\n+962C7 Extract OS            00 (0) 'MS-DOS'\n+962C8 General Purpose Flag  0000 (0)\n+962CA Compression Method    0000 (0) 'Stored'\n+962CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+962D0 CRC                   00000000 (0)\n+962D4 Compressed Size       00000000 (0)\n+962D8 Uncompressed Size     00000000 (0)\n+962DC Filename Length       0025 (37)\n+962DE Extra Length          0009 (9)\n+962E0 Comment Length        0000 (0)\n+962E2 Disk Start            0000 (0)\n+962E4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+962E6 Ext File Attributes   00000000 (0)\n+962EA Local Header Offset   0001FD26 (130342)\n+962EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x962EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96313 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96315   Length              0005 (5)\n+96317   Flags               01 (1) 'Modification'\n+96318   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9631C CENTRAL HEADER #29    02014B50 (33639248)\n+96320 Created Zip Spec      14 (20) '2.0'\n+96321 Created OS            00 (0) 'MS-DOS'\n+96322 Extract Zip Spec      14 (20) '2.0'\n+96323 Extract OS            00 (0) 'MS-DOS'\n+96324 General Purpose Flag  0000 (0)\n+96326 Compression Method    0000 (0) 'Stored'\n+96328 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9632C CRC                   00000000 (0)\n+96330 Compressed Size       00000000 (0)\n+96334 Uncompressed Size     00000000 (0)\n+96338 Filename Length       002D (45)\n+9633A Extra Length          0009 (9)\n+9633C Comment Length        0000 (0)\n+9633E Disk Start            0000 (0)\n+96340 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96342 Ext File Attributes   00000000 (0)\n+96346 Local Header Offset   0001FD72 (130418)\n+9634A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9634A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96377 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96379   Length              0005 (5)\n+9637B   Flags               01 (1) 'Modification'\n+9637C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96380 CENTRAL HEADER #30    02014B50 (33639248)\n+96384 Created Zip Spec      14 (20) '2.0'\n+96385 Created OS            00 (0) 'MS-DOS'\n+96386 Extract Zip Spec      14 (20) '2.0'\n+96387 Extract OS            00 (0) 'MS-DOS'\n+96388 General Purpose Flag  0000 (0)\n+9638A Compression Method    0000 (0) 'Stored'\n+9638C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96390 CRC                   00000000 (0)\n+96394 Compressed Size       00000000 (0)\n+96398 Uncompressed Size     00000000 (0)\n+9639C Filename Length       0031 (49)\n+9639E Extra Length          0009 (9)\n+963A0 Comment Length        0000 (0)\n+963A2 Disk Start            0000 (0)\n+963A4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+963A6 Ext File Attributes   00000000 (0)\n+963AA Local Header Offset   0001FDC6 (130502)\n+963AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x963AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+963DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+963E1   Length              0005 (5)\n+963E3   Flags               01 (1) 'Modification'\n+963E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+963E8 CENTRAL HEADER #31    02014B50 (33639248)\n+963EC Created Zip Spec      14 (20) '2.0'\n+963ED Created OS            00 (0) 'MS-DOS'\n+963EE Extract Zip Spec      14 (20) '2.0'\n+963EF Extract OS            00 (0) 'MS-DOS'\n+963F0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+963F2 Compression Method    0000 (0) 'Stored'\n+963F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+963F8 CRC                   E497D7EA (3835156458)\n+963FC Compressed Size       0000324C (12876)\n+96400 Uncompressed Size     0000324C (12876)\n+96404 Filename Length       003C (60)\n+96406 Extra Length          0009 (9)\n+96408 Comment Length        0000 (0)\n+9640A Disk Start            0000 (0)\n+9640C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+9640E Ext File Attributes   00000000 (0)\n+96412 Local Header Offset   0001FE1E (130590)\n+96416 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96416: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96452 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96454   Length              0005 (5)\n+96456   Flags               01 (1) 'Modification'\n+96457   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9645B CENTRAL HEADER #32    02014B50 (33639248)\n+9645F Created Zip Spec      14 (20) '2.0'\n+96460 Created OS            00 (0) 'MS-DOS'\n+96461 Extract Zip Spec      14 (20) '2.0'\n+96462 Extract OS            00 (0) 'MS-DOS'\n+96463 General Purpose Flag  0000 (0)\n+96465 Compression Method    0000 (0) 'Stored'\n+96467 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9646B CRC                   00000000 (0)\n+9646F Compressed Size       00000000 (0)\n+96473 Uncompressed Size     00000000 (0)\n+96477 Filename Length       0034 (52)\n+96479 Extra Length          0009 (9)\n+9647B Comment Length        0000 (0)\n+9647D Disk Start            0000 (0)\n+9647F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96481 Ext File Attributes   00000000 (0)\n+96485 Local Header Offset   000230DD (143581)\n+96489 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96489: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+964BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+964BF   Length              0005 (5)\n+964C1   Flags               01 (1) 'Modification'\n+964C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+964C6 CENTRAL HEADER #33    02014B50 (33639248)\n+964CA Created Zip Spec      14 (20) '2.0'\n+964CB Created OS            00 (0) 'MS-DOS'\n+964CC Extract Zip Spec      14 (20) '2.0'\n+964CD Extract OS            00 (0) 'MS-DOS'\n+964CE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+964D0 Compression Method    0000 (0) 'Stored'\n+964D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+964D6 CRC                   F1F630C0 (4059443392)\n+964DA Compressed Size       00003FA4 (16292)\n+964DE Uncompressed Size     00003FA4 (16292)\n+964E2 Filename Length       003F (63)\n+964E4 Extra Length          0009 (9)\n+964E6 Comment Length        0000 (0)\n+964E8 Disk Start            0000 (0)\n+964EA Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+964EC Ext File Attributes   00000000 (0)\n+964F0 Local Header Offset   00023138 (143672)\n+964F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x964F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96533 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96535   Length              0005 (5)\n+96537   Flags               01 (1) 'Modification'\n+96538   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9653C CENTRAL HEADER #34    02014B50 (33639248)\n+96540 Created Zip Spec      14 (20) '2.0'\n+96541 Created OS            00 (0) 'MS-DOS'\n+96542 Extract Zip Spec      14 (20) '2.0'\n+96543 Extract OS            00 (0) 'MS-DOS'\n+96544 General Purpose Flag  0000 (0)\n+96546 Compression Method    0000 (0) 'Stored'\n+96548 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9654C CRC                   00000000 (0)\n+96550 Compressed Size       00000000 (0)\n+96554 Uncompressed Size     00000000 (0)\n+96558 Filename Length       002B (43)\n+9655A Extra Length          0009 (9)\n+9655C Comment Length        0000 (0)\n+9655E Disk Start            0000 (0)\n+96560 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96562 Ext File Attributes   00000000 (0)\n+96566 Local Header Offset   00027152 (160082)\n+9656A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9656A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96595 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96597   Length              0005 (5)\n+96599   Flags               01 (1) 'Modification'\n+9659A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9659E CENTRAL HEADER #35    02014B50 (33639248)\n+965A2 Created Zip Spec      14 (20) '2.0'\n+965A3 Created OS            00 (0) 'MS-DOS'\n+965A4 Extract Zip Spec      14 (20) '2.0'\n+965A5 Extract OS            00 (0) 'MS-DOS'\n+965A6 General Purpose Flag  0000 (0)\n+965A8 Compression Method    0000 (0) 'Stored'\n+965AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+965AE CRC                   00000000 (0)\n+965B2 Compressed Size       00000000 (0)\n+965B6 Uncompressed Size     00000000 (0)\n+965BA Filename Length       002F (47)\n+965BC Extra Length          0009 (9)\n+965BE Comment Length        0000 (0)\n+965C0 Disk Start            0000 (0)\n+965C2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+965C4 Ext File Attributes   00000000 (0)\n+965C8 Local Header Offset   000271A4 (160164)\n+965CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x965CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+965FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+965FD   Length              0005 (5)\n+965FF   Flags               01 (1) 'Modification'\n+96600   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96604 CENTRAL HEADER #36    02014B50 (33639248)\n+96608 Created Zip Spec      14 (20) '2.0'\n+96609 Created OS            00 (0) 'MS-DOS'\n+9660A Extract Zip Spec      14 (20) '2.0'\n+9660B Extract OS            00 (0) 'MS-DOS'\n+9660C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+9660E Compression Method    0000 (0) 'Stored'\n+96610 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96614 CRC                   950F3569 (2500801897)\n+96618 Compressed Size       000058D8 (22744)\n+9661C Uncompressed Size     000058D8 (22744)\n+96620 Filename Length       003A (58)\n+96622 Extra Length          0009 (9)\n+96624 Comment Length        0000 (0)\n+96626 Disk Start            0000 (0)\n+96628 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+9662A Ext File Attributes   00000000 (0)\n+9662E Local Header Offset   000271FA (160250)\n+96632 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96632: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9666C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+9666E   Length              0005 (5)\n+96670   Flags               01 (1) 'Modification'\n+96671   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96675 CENTRAL HEADER #37    02014B50 (33639248)\n+96679 Created Zip Spec      14 (20) '2.0'\n+9667A Created OS            00 (0) 'MS-DOS'\n+9667B Extract Zip Spec      14 (20) '2.0'\n+9667C Extract OS            00 (0) 'MS-DOS'\n+9667D General Purpose Flag  0000 (0)\n+9667F Compression Method    0000 (0) 'Stored'\n+96681 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96685 CRC                   00000000 (0)\n+96689 Compressed Size       00000000 (0)\n+9668D Uncompressed Size     00000000 (0)\n+96691 Filename Length       0031 (49)\n+96693 Extra Length          0009 (9)\n+96695 Comment Length        0000 (0)\n+96697 Disk Start            0000 (0)\n+96699 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+9669B Ext File Attributes   00000000 (0)\n+9669F Local Header Offset   0002CB43 (183107)\n+966A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x966A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+966D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+966D6   Length              0005 (5)\n+966D8   Flags               01 (1) 'Modification'\n+966D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+966DD CENTRAL HEADER #38    02014B50 (33639248)\n+966E1 Created Zip Spec      14 (20) '2.0'\n+966E2 Created OS            00 (0) 'MS-DOS'\n+966E3 Extract Zip Spec      14 (20) '2.0'\n+966E4 Extract OS            00 (0) 'MS-DOS'\n+966E5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+966E7 Compression Method    0000 (0) 'Stored'\n+966E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+966ED CRC                   78DAFB34 (2027617076)\n+966F1 Compressed Size       000041D8 (16856)\n+966F5 Uncompressed Size     000041D8 (16856)\n+966F9 Filename Length       003C (60)\n+966FB Extra Length          0009 (9)\n+966FD Comment Length        0000 (0)\n+966FF Disk Start            0000 (0)\n+96701 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96703 Ext File Attributes   00000000 (0)\n+96707 Local Header Offset   0002CB9B (183195)\n+9670B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9670B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96747 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96749   Length              0005 (5)\n+9674B   Flags               01 (1) 'Modification'\n+9674C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96750 CENTRAL HEADER #39    02014B50 (33639248)\n+96754 Created Zip Spec      14 (20) '2.0'\n+96755 Created OS            00 (0) 'MS-DOS'\n+96756 Extract Zip Spec      14 (20) '2.0'\n+96757 Extract OS            00 (0) 'MS-DOS'\n+96758 General Purpose Flag  0000 (0)\n+9675A Compression Method    0000 (0) 'Stored'\n+9675C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96760 CRC                   00000000 (0)\n+96764 Compressed Size       00000000 (0)\n+96768 Uncompressed Size     00000000 (0)\n+9676C Filename Length       0031 (49)\n+9676E Extra Length          0009 (9)\n+96770 Comment Length        0000 (0)\n+96772 Disk Start            0000 (0)\n+96774 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96776 Ext File Attributes   00000000 (0)\n+9677A Local Header Offset   00030DE6 (200166)\n+9677E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9677E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+967AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+967B1   Length              0005 (5)\n+967B3   Flags               01 (1) 'Modification'\n+967B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+967B8 CENTRAL HEADER #40    02014B50 (33639248)\n+967BC Created Zip Spec      14 (20) '2.0'\n+967BD Created OS            00 (0) 'MS-DOS'\n+967BE Extract Zip Spec      14 (20) '2.0'\n+967BF Extract OS            00 (0) 'MS-DOS'\n+967C0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+967C2 Compression Method    0000 (0) 'Stored'\n+967C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+967C8 CRC                   BAB7DC59 (3132611673)\n+967CC Compressed Size       0000327C (12924)\n+967D0 Uncompressed Size     0000327C (12924)\n+967D4 Filename Length       003C (60)\n+967D6 Extra Length          0009 (9)\n+967D8 Comment Length        0000 (0)\n+967DA Disk Start            0000 (0)\n+967DC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+967DE Ext File Attributes   00000000 (0)\n+967E2 Local Header Offset   00030E3E (200254)\n+967E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x967E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96822 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96824   Length              0005 (5)\n+96826   Flags               01 (1) 'Modification'\n+96827   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9682B CENTRAL HEADER #41    02014B50 (33639248)\n+9682F Created Zip Spec      14 (20) '2.0'\n+96830 Created OS            00 (0) 'MS-DOS'\n+96831 Extract Zip Spec      14 (20) '2.0'\n+96832 Extract OS            00 (0) 'MS-DOS'\n+96833 General Purpose Flag  0000 (0)\n+96835 Compression Method    0000 (0) 'Stored'\n+96837 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9683B CRC                   00000000 (0)\n+9683F Compressed Size       00000000 (0)\n+96843 Uncompressed Size     00000000 (0)\n+96847 Filename Length       0031 (49)\n+96849 Extra Length          0009 (9)\n+9684B Comment Length        0000 (0)\n+9684D Disk Start            0000 (0)\n+9684F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96851 Ext File Attributes   00000000 (0)\n+96855 Local Header Offset   0003412D (213293)\n+96859 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96859: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9688A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+9688C   Length              0005 (5)\n+9688E   Flags               01 (1) 'Modification'\n+9688F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96893 CENTRAL HEADER #42    02014B50 (33639248)\n+96897 Created Zip Spec      14 (20) '2.0'\n+96898 Created OS            00 (0) 'MS-DOS'\n+96899 Extract Zip Spec      14 (20) '2.0'\n+9689A Extract OS            00 (0) 'MS-DOS'\n+9689B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+9689D Compression Method    0000 (0) 'Stored'\n+9689F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+968A3 CRC                   24DF140F (618599439)\n+968A7 Compressed Size       00004B98 (19352)\n+968AB Uncompressed Size     00004B98 (19352)\n+968AF Filename Length       003C (60)\n+968B1 Extra Length          0009 (9)\n+968B3 Comment Length        0000 (0)\n+968B5 Disk Start            0000 (0)\n+968B7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+968B9 Ext File Attributes   00000000 (0)\n+968BD Local Header Offset   00034185 (213381)\n+968C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x968C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+968FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+968FF   Length              0005 (5)\n+96901   Flags               01 (1) 'Modification'\n+96902   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96906 CENTRAL HEADER #43    02014B50 (33639248)\n+9690A Created Zip Spec      14 (20) '2.0'\n+9690B Created OS            00 (0) 'MS-DOS'\n+9690C Extract Zip Spec      14 (20) '2.0'\n+9690D Extract OS            00 (0) 'MS-DOS'\n+9690E General Purpose Flag  0000 (0)\n+96910 Compression Method    0000 (0) 'Stored'\n+96912 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96916 CRC                   00000000 (0)\n+9691A Compressed Size       00000000 (0)\n+9691E Uncompressed Size     00000000 (0)\n+96922 Filename Length       002F (47)\n+96924 Extra Length          0009 (9)\n+96926 Comment Length        0000 (0)\n+96928 Disk Start            0000 (0)\n+9692A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+9692C Ext File Attributes   00000000 (0)\n+96930 Local Header Offset   00038D90 (232848)\n+96934 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96934: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96963 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96965   Length              0005 (5)\n+96967   Flags               01 (1) 'Modification'\n+96968   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9696C CENTRAL HEADER #44    02014B50 (33639248)\n+96970 Created Zip Spec      14 (20) '2.0'\n+96971 Created OS            00 (0) 'MS-DOS'\n+96972 Extract Zip Spec      14 (20) '2.0'\n+96973 Extract OS            00 (0) 'MS-DOS'\n+96974 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96976 Compression Method    0000 (0) 'Stored'\n+96978 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9697C CRC                   321C2FD2 (840708050)\n+96980 Compressed Size       000045B8 (17848)\n+96984 Uncompressed Size     000045B8 (17848)\n+96988 Filename Length       003A (58)\n+9698A Extra Length          0009 (9)\n+9698C Comment Length        0000 (0)\n+9698E Disk Start            0000 (0)\n+96990 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96992 Ext File Attributes   00000000 (0)\n+96996 Local Header Offset   00038DE6 (232934)\n+9699A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9699A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+969D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+969D6   Length              0005 (5)\n+969D8   Flags               01 (1) 'Modification'\n+969D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+969DD CENTRAL HEADER #45    02014B50 (33639248)\n+969E1 Created Zip Spec      14 (20) '2.0'\n+969E2 Created OS            00 (0) 'MS-DOS'\n+969E3 Extract Zip Spec      14 (20) '2.0'\n+969E4 Extract OS            00 (0) 'MS-DOS'\n+969E5 General Purpose Flag  0000 (0)\n+969E7 Compression Method    0000 (0) 'Stored'\n+969E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+969ED CRC                   00000000 (0)\n+969F1 Compressed Size       00000000 (0)\n+969F5 Uncompressed Size     00000000 (0)\n+969F9 Filename Length       0032 (50)\n+969FB Extra Length          0009 (9)\n+969FD Comment Length        0000 (0)\n+969FF Disk Start            0000 (0)\n+96A01 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96A03 Ext File Attributes   00000000 (0)\n+96A07 Local Header Offset   0003D40F (250895)\n+96A0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96A0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96A3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96A3F   Length              0005 (5)\n+96A41   Flags               01 (1) 'Modification'\n+96A42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96A46 CENTRAL HEADER #46    02014B50 (33639248)\n+96A4A Created Zip Spec      14 (20) '2.0'\n+96A4B Created OS            00 (0) 'MS-DOS'\n+96A4C Extract Zip Spec      14 (20) '2.0'\n+96A4D Extract OS            00 (0) 'MS-DOS'\n+96A4E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96A50 Compression Method    0000 (0) 'Stored'\n+96A52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96A56 CRC                   3ECC3177 (1053569399)\n+96A5A Compressed Size       000041E0 (16864)\n+96A5E Uncompressed Size     000041E0 (16864)\n+96A62 Filename Length       003D (61)\n+96A64 Extra Length          0009 (9)\n+96A66 Comment Length        0000 (0)\n+96A68 Disk Start            0000 (0)\n+96A6A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96A6C Ext File Attributes   00000000 (0)\n+96A70 Local Header Offset   0003D468 (250984)\n+96A74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96A74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96AB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96AB3   Length              0005 (5)\n+96AB5   Flags               01 (1) 'Modification'\n+96AB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96ABA CENTRAL HEADER #47    02014B50 (33639248)\n+96ABE Created Zip Spec      14 (20) '2.0'\n+96ABF Created OS            00 (0) 'MS-DOS'\n+96AC0 Extract Zip Spec      14 (20) '2.0'\n+96AC1 Extract OS            00 (0) 'MS-DOS'\n+96AC2 General Purpose Flag  0000 (0)\n+96AC4 Compression Method    0000 (0) 'Stored'\n+96AC6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96ACA CRC                   00000000 (0)\n+96ACE Compressed Size       00000000 (0)\n+96AD2 Uncompressed Size     00000000 (0)\n+96AD6 Filename Length       0029 (41)\n+96AD8 Extra Length          0009 (9)\n+96ADA Comment Length        0000 (0)\n+96ADC Disk Start            0000 (0)\n+96ADE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96AE0 Ext File Attributes   00000000 (0)\n+96AE4 Local Header Offset   000416BC (267964)\n+96AE8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96AE8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96B11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96B13   Length              0005 (5)\n+96B15   Flags               01 (1) 'Modification'\n+96B16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96B1A CENTRAL HEADER #48    02014B50 (33639248)\n+96B1E Created Zip Spec      14 (20) '2.0'\n+96B1F Created OS            00 (0) 'MS-DOS'\n+96B20 Extract Zip Spec      14 (20) '2.0'\n+96B21 Extract OS            00 (0) 'MS-DOS'\n+96B22 General Purpose Flag  0000 (0)\n+96B24 Compression Method    0000 (0) 'Stored'\n+96B26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96B2A CRC                   00000000 (0)\n+96B2E Compressed Size       00000000 (0)\n+96B32 Uncompressed Size     00000000 (0)\n+96B36 Filename Length       002D (45)\n+96B38 Extra Length          0009 (9)\n+96B3A Comment Length        0000 (0)\n+96B3C Disk Start            0000 (0)\n+96B3E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96B40 Ext File Attributes   00000000 (0)\n+96B44 Local Header Offset   0004170C (268044)\n+96B48 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96B48: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96B75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96B77   Length              0005 (5)\n+96B79   Flags               01 (1) 'Modification'\n+96B7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96B7E CENTRAL HEADER #49    02014B50 (33639248)\n+96B82 Created Zip Spec      14 (20) '2.0'\n+96B83 Created OS            00 (0) 'MS-DOS'\n+96B84 Extract Zip Spec      14 (20) '2.0'\n+96B85 Extract OS            00 (0) 'MS-DOS'\n+96B86 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96B88 Compression Method    0000 (0) 'Stored'\n+96B8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96B8E CRC                   54FC5C00 (1425824768)\n+96B92 Compressed Size       00003AEC (15084)\n+96B96 Uncompressed Size     00003AEC (15084)\n+96B9A Filename Length       003C (60)\n+96B9C Extra Length          0009 (9)\n+96B9E Comment Length        0000 (0)\n+96BA0 Disk Start            0000 (0)\n+96BA2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96BA4 Ext File Attributes   00000000 (0)\n+96BA8 Local Header Offset   00041760 (268128)\n+96BAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96BAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96BE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96BEA   Length              0005 (5)\n+96BEC   Flags               01 (1) 'Modification'\n+96BED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96BF1 CENTRAL HEADER #50    02014B50 (33639248)\n+96BF5 Created Zip Spec      14 (20) '2.0'\n+96BF6 Created OS            00 (0) 'MS-DOS'\n+96BF7 Extract Zip Spec      14 (20) '2.0'\n+96BF8 Extract OS            00 (0) 'MS-DOS'\n+96BF9 General Purpose Flag  0000 (0)\n+96BFB Compression Method    0000 (0) 'Stored'\n+96BFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96C01 CRC                   00000000 (0)\n+96C05 Compressed Size       00000000 (0)\n+96C09 Uncompressed Size     00000000 (0)\n+96C0D Filename Length       0030 (48)\n+96C0F Extra Length          0009 (9)\n+96C11 Comment Length        0000 (0)\n+96C13 Disk Start            0000 (0)\n+96C15 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96C17 Ext File Attributes   00000000 (0)\n+96C1B Local Header Offset   000452BF (283327)\n+96C1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96C1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96C4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96C51   Length              0005 (5)\n+96C53   Flags               01 (1) 'Modification'\n+96C54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96C58 CENTRAL HEADER #51    02014B50 (33639248)\n+96C5C Created Zip Spec      14 (20) '2.0'\n+96C5D Created OS            00 (0) 'MS-DOS'\n+96C5E Extract Zip Spec      14 (20) '2.0'\n+96C5F Extract OS            00 (0) 'MS-DOS'\n+96C60 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96C62 Compression Method    0000 (0) 'Stored'\n+96C64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96C68 CRC                   F14BF548 (4048287048)\n+96C6C Compressed Size       00003E5C (15964)\n+96C70 Uncompressed Size     00003E5C (15964)\n+96C74 Filename Length       003F (63)\n+96C76 Extra Length          0009 (9)\n+96C78 Comment Length        0000 (0)\n+96C7A Disk Start            0000 (0)\n+96C7C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96C7E Ext File Attributes   00000000 (0)\n+96C82 Local Header Offset   00045316 (283414)\n+96C86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96C86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96CC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96CC7   Length              0005 (5)\n+96CC9   Flags               01 (1) 'Modification'\n+96CCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96CCE CENTRAL HEADER #52    02014B50 (33639248)\n+96CD2 Created Zip Spec      14 (20) '2.0'\n+96CD3 Created OS            00 (0) 'MS-DOS'\n+96CD4 Extract Zip Spec      14 (20) '2.0'\n+96CD5 Extract OS            00 (0) 'MS-DOS'\n+96CD6 General Purpose Flag  0000 (0)\n+96CD8 Compression Method    0000 (0) 'Stored'\n+96CDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96CDE CRC                   00000000 (0)\n+96CE2 Compressed Size       00000000 (0)\n+96CE6 Uncompressed Size     00000000 (0)\n+96CEA Filename Length       002D (45)\n+96CEC Extra Length          0009 (9)\n+96CEE Comment Length        0000 (0)\n+96CF0 Disk Start            0000 (0)\n+96CF2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96CF4 Ext File Attributes   00000000 (0)\n+96CF8 Local Header Offset   000491E8 (299496)\n+96CFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96CFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96D29 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96D2B   Length              0005 (5)\n+96D2D   Flags               01 (1) 'Modification'\n+96D2E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96D32 CENTRAL HEADER #53    02014B50 (33639248)\n+96D36 Created Zip Spec      14 (20) '2.0'\n+96D37 Created OS            00 (0) 'MS-DOS'\n+96D38 Extract Zip Spec      14 (20) '2.0'\n+96D39 Extract OS            00 (0) 'MS-DOS'\n+96D3A General Purpose Flag  0000 (0)\n+96D3C Compression Method    0000 (0) 'Stored'\n+96D3E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96D42 CRC                   00000000 (0)\n+96D46 Compressed Size       00000000 (0)\n+96D4A Uncompressed Size     00000000 (0)\n+96D4E Filename Length       0031 (49)\n+96D50 Extra Length          0009 (9)\n+96D52 Comment Length        0000 (0)\n+96D54 Disk Start            0000 (0)\n+96D56 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96D58 Ext File Attributes   00000000 (0)\n+96D5C Local Header Offset   0004923C (299580)\n+96D60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96D60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96D91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96D93   Length              0005 (5)\n+96D95   Flags               01 (1) 'Modification'\n+96D96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96D9A CENTRAL HEADER #54    02014B50 (33639248)\n+96D9E Created Zip Spec      14 (20) '2.0'\n+96D9F Created OS            00 (0) 'MS-DOS'\n+96DA0 Extract Zip Spec      14 (20) '2.0'\n+96DA1 Extract OS            00 (0) 'MS-DOS'\n+96DA2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96DA4 Compression Method    0000 (0) 'Stored'\n+96DA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96DAA CRC                   A2950D97 (2727677335)\n+96DAE Compressed Size       0001C14B (115019)\n+96DB2 Uncompressed Size     0001C14B (115019)\n+96DB6 Filename Length       003A (58)\n+96DB8 Extra Length          0009 (9)\n+96DBA Comment Length        0000 (0)\n+96DBC Disk Start            0000 (0)\n+96DBE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96DC0 Ext File Attributes   00000000 (0)\n+96DC4 Local Header Offset   00049294 (299668)\n+96DC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96DC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96E02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96E04   Length              0005 (5)\n+96E06   Flags               01 (1) 'Modification'\n+96E07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96E0B CENTRAL HEADER #55    02014B50 (33639248)\n+96E0F Created Zip Spec      14 (20) '2.0'\n+96E10 Created OS            00 (0) 'MS-DOS'\n+96E11 Extract Zip Spec      14 (20) '2.0'\n+96E12 Extract OS            00 (0) 'MS-DOS'\n+96E13 General Purpose Flag  0000 (0)\n+96E15 Compression Method    0000 (0) 'Stored'\n+96E17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96E1B CRC                   00000000 (0)\n+96E1F Compressed Size       00000000 (0)\n+96E23 Uncompressed Size     00000000 (0)\n+96E27 Filename Length       0034 (52)\n+96E29 Extra Length          0009 (9)\n+96E2B Comment Length        0000 (0)\n+96E2D Disk Start            0000 (0)\n+96E2F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96E31 Ext File Attributes   00000000 (0)\n+96E35 Local Header Offset   00065450 (414800)\n+96E39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96E39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96E6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96E6F   Length              0005 (5)\n+96E71   Flags               01 (1) 'Modification'\n+96E72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96E76 CENTRAL HEADER #56    02014B50 (33639248)\n+96E7A Created Zip Spec      14 (20) '2.0'\n+96E7B Created OS            00 (0) 'MS-DOS'\n+96E7C Extract Zip Spec      14 (20) '2.0'\n+96E7D Extract OS            00 (0) 'MS-DOS'\n+96E7E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96E80 Compression Method    0000 (0) 'Stored'\n+96E82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96E86 CRC                   A327DAE4 (2737298148)\n+96E8A Compressed Size       0001F855 (129109)\n+96E8E Uncompressed Size     0001F855 (129109)\n+96E92 Filename Length       003D (61)\n+96E94 Extra Length          0009 (9)\n+96E96 Comment Length        0000 (0)\n+96E98 Disk Start            0000 (0)\n+96E9A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96E9C Ext File Attributes   00000000 (0)\n+96EA0 Local Header Offset   000654AB (414891)\n+96EA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96EA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96EE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96EE3   Length              0005 (5)\n+96EE5   Flags               01 (1) 'Modification'\n+96EE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96EEA CENTRAL HEADER #57    02014B50 (33639248)\n+96EEE Created Zip Spec      14 (20) '2.0'\n+96EEF Created OS            00 (0) 'MS-DOS'\n+96EF0 Extract Zip Spec      14 (20) '2.0'\n+96EF1 Extract OS            00 (0) 'MS-DOS'\n+96EF2 General Purpose Flag  0000 (0)\n+96EF4 Compression Method    0000 (0) 'Stored'\n+96EF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96EFA CRC                   00000000 (0)\n+96EFE Compressed Size       00000000 (0)\n+96F02 Uncompressed Size     00000000 (0)\n+96F06 Filename Length       0018 (24)\n+96F08 Extra Length          0009 (9)\n+96F0A Comment Length        0000 (0)\n+96F0C Disk Start            0000 (0)\n+96F0E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96F10 Ext File Attributes   00000000 (0)\n+96F14 Local Header Offset   00084D74 (544116)\n+96F18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96F18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96F30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96F32   Length              0005 (5)\n+96F34   Flags               01 (1) 'Modification'\n+96F35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96F39 CENTRAL HEADER #58    02014B50 (33639248)\n+96F3D Created Zip Spec      14 (20) '2.0'\n+96F3E Created OS            00 (0) 'MS-DOS'\n+96F3F Extract Zip Spec      14 (20) '2.0'\n+96F40 Extract OS            00 (0) 'MS-DOS'\n+96F41 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96F43 Compression Method    0000 (0) 'Stored'\n+96F45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96F49 CRC                   0C268234 (203850292)\n+96F4D Compressed Size       00002E03 (11779)\n+96F51 Uncompressed Size     00002E03 (11779)\n+96F55 Filename Length       002D (45)\n+96F57 Extra Length          0009 (9)\n+96F59 Comment Length        0000 (0)\n+96F5B Disk Start            0000 (0)\n+96F5D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96F5F Ext File Attributes   00000000 (0)\n+96F63 Local Header Offset   00084DB3 (544179)\n+96F67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96F67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96F94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96F96   Length              0005 (5)\n+96F98   Flags               01 (1) 'Modification'\n+96F99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96F9D CENTRAL HEADER #59    02014B50 (33639248)\n+96FA1 Created Zip Spec      14 (20) '2.0'\n+96FA2 Created OS            00 (0) 'MS-DOS'\n+96FA3 Extract Zip Spec      14 (20) '2.0'\n+96FA4 Extract OS            00 (0) 'MS-DOS'\n+96FA5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+96FA7 Compression Method    0000 (0) 'Stored'\n+96FA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+96FAD CRC                   AA4194FB (2856424699)\n+96FB1 Compressed Size       00005B1E (23326)\n+96FB5 Uncompressed Size     00005B1E (23326)\n+96FB9 Filename Length       002A (42)\n+96FBB Extra Length          0009 (9)\n+96FBD Comment Length        0000 (0)\n+96FBF Disk Start            0000 (0)\n+96FC1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+96FC3 Ext File Attributes   00000000 (0)\n+96FC7 Local Header Offset   00087C1A (556058)\n+96FCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x96FCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+96FF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+96FF7   Length              0005 (5)\n+96FF9   Flags               01 (1) 'Modification'\n+96FFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+96FFE CENTRAL HEADER #60    02014B50 (33639248)\n+97002 Created Zip Spec      14 (20) '2.0'\n+97003 Created OS            00 (0) 'MS-DOS'\n+97004 Extract Zip Spec      14 (20) '2.0'\n+97005 Extract OS            00 (0) 'MS-DOS'\n+97006 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+97008 Compression Method    0000 (0) 'Stored'\n+9700A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9700E CRC                   FC5F7A58 (4234115672)\n+97012 Compressed Size       000019C2 (6594)\n+97016 Uncompressed Size     000019C2 (6594)\n+9701A Filename Length       0023 (35)\n+9701C Extra Length          0009 (9)\n+9701E Comment Length        0000 (0)\n+97020 Disk Start            0000 (0)\n+97022 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+97024 Ext File Attributes   00000000 (0)\n+97028 Local Header Offset   0008D799 (579481)\n+9702C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9702C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9704F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+97051   Length              0005 (5)\n+97053   Flags               01 (1) 'Modification'\n+97054   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+97058 CENTRAL HEADER #61    02014B50 (33639248)\n+9705C Created Zip Spec      14 (20) '2.0'\n+9705D Created OS            00 (0) 'MS-DOS'\n+9705E Extract Zip Spec      14 (20) '2.0'\n+9705F Extract OS            00 (0) 'MS-DOS'\n+97060 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+97062 Compression Method    0000 (0) 'Stored'\n+97064 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+97068 CRC                   4AA9E778 (1252648824)\n+9706C Compressed Size       000016C0 (5824)\n+97070 Uncompressed Size     000016C0 (5824)\n+97074 Filename Length       0030 (48)\n+97076 Extra Length          0009 (9)\n+97078 Comment Length        0000 (0)\n+9707A Disk Start            0000 (0)\n+9707C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+9707E Ext File Attributes   00000000 (0)\n+97082 Local Header Offset   0008F1B5 (586165)\n+97086 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x97086: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+970B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+970B8   Length              0005 (5)\n+970BA   Flags               01 (1) 'Modification'\n+970BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+970BF CENTRAL HEADER #62    02014B50 (33639248)\n+970C3 Created Zip Spec      14 (20) '2.0'\n+970C4 Created OS            00 (0) 'MS-DOS'\n+970C5 Extract Zip Spec      14 (20) '2.0'\n+970C6 Extract OS            00 (0) 'MS-DOS'\n+970C7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+970C9 Compression Method    0000 (0) 'Stored'\n+970CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+970CF CRC                   3AE1B870 (987871344)\n+970D3 Compressed Size       00000735 (1845)\n+970D7 Uncompressed Size     00000735 (1845)\n+970DB Filename Length       0035 (53)\n+970DD Extra Length          0009 (9)\n+970DF Comment Length        0000 (0)\n+970E1 Disk Start            0000 (0)\n+970E3 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+970E5 Ext File Attributes   00000000 (0)\n+970E9 Local Header Offset   000908DC (592092)\n+970ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x970ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+97122 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+97124   Length              0005 (5)\n+97126   Flags               01 (1) 'Modification'\n+97127   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+9712B CENTRAL HEADER #63    02014B50 (33639248)\n+9712F Created Zip Spec      14 (20) '2.0'\n+97130 Created OS            00 (0) 'MS-DOS'\n+97131 Extract Zip Spec      14 (20) '2.0'\n+97132 Extract OS            00 (0) 'MS-DOS'\n+97133 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+97135 Compression Method    0000 (0) 'Stored'\n+97137 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+9713B CRC                   942036A4 (2485139108)\n+9713F Compressed Size       0000441F (17439)\n+97143 Uncompressed Size     0000441F (17439)\n+97147 Filename Length       0031 (49)\n+97149 Extra Length          0009 (9)\n+9714B Comment Length        0000 (0)\n+9714D Disk Start            0000 (0)\n+9714F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+97151 Ext File Attributes   00000000 (0)\n+97155 Local Header Offset   0009107D (594045)\n+97159 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x97159: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9718A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+9718C   Length              0005 (5)\n+9718E   Flags               01 (1) 'Modification'\n+9718F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+97193 CENTRAL HEADER #64    02014B50 (33639248)\n+97197 Created Zip Spec      14 (20) '2.0'\n+97198 Created OS            00 (0) 'MS-DOS'\n+97199 Extract Zip Spec      14 (20) '2.0'\n+9719A Extract OS            00 (0) 'MS-DOS'\n+9719B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+9719D Compression Method    0000 (0) 'Stored'\n+9719F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+971A3 CRC                   5C2EB634 (1546565172)\n+971A7 Compressed Size       0000001B (27)\n+971AB Uncompressed Size     0000001B (27)\n+971AF Filename Length       0025 (37)\n+971B1 Extra Length          0009 (9)\n+971B3 Comment Length        0000 (0)\n+971B5 Disk Start            0000 (0)\n+971B7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+971B9 Ext File Attributes   00000000 (0)\n+971BD Local Header Offset   00095504 (611588)\n+971C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x971C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+971E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+971E8   Length              0005 (5)\n+971EA   Flags               01 (1) 'Modification'\n+971EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+971EF CENTRAL HEADER #65    02014B50 (33639248)\n+971F3 Created Zip Spec      14 (20) '2.0'\n+971F4 Created OS            00 (0) 'MS-DOS'\n+971F5 Extract Zip Spec      14 (20) '2.0'\n+971F6 Extract OS            00 (0) 'MS-DOS'\n+971F7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+971F9 Compression Method    0000 (0) 'Stored'\n+971FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+971FF CRC                   E6B54850 (3870640208)\n+97203 Compressed Size       000003A7 (935)\n+97207 Uncompressed Size     000003A7 (935)\n+9720B Filename Length       001E (30)\n+9720D Extra Length          0009 (9)\n+9720F Comment Length        0000 (0)\n+97211 Disk Start            0000 (0)\n+97213 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+97215 Ext File Attributes   00000000 (0)\n+97219 Local Header Offset   0009557B (611707)\n+9721D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9721D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+9723B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+9723D   Length              0005 (5)\n+9723F   Flags               01 (1) 'Modification'\n+97240   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+97244 END CENTRAL HEADER    06054B50 (101010256)\n+97248 Number of this disk   0000 (0)\n+9724A Central Dir Disk no   0000 (0)\n+9724C Entries in this disk  0041 (65)\n+9724E Total Entries         0041 (65)\n+97250 Size of Central Dir   000018CD (6349)\n+97254 Offset to Central Dir 00095977 (612727)\n+97258 Comment Length        0000 (0)\n #\n # Warning Count: 130\n #\n # Done\n"}, {"source1": "META-INF/maven/org.fusesource.jansi/jansi/pom.xml", "source2": "META-INF/maven/org.fusesource.jansi/jansi/pom.xml", "comments": ["Format-specific differences are supported for XML files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: XML 1.0 document, ASCII text, with CRLF line terminators"], "has_internal_linenos": true, "unified_diff": "@@ -1,903 +1,881 @@\n 00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version=\"1\n 00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0\" encoding=\"UT\n-00000020: 462d 3822 3f3e 0d0a 3c21 2d2d 0d0a 2020  F-8\"?>..<!--..  \n-00000030: 436f 7079 7269 6768 7420 2843 2920 3230  Copyright (C) 20\n-00000040: 3039 2d32 3031 3720 7468 6520 6f72 6967  09-2017 the orig\n-00000050: 696e 616c 2061 7574 686f 7228 7329 2e0d  inal author(s)..\n-00000060: 0a0d 0a20 204c 6963 656e 7365 6420 756e  ...  Licensed un\n-00000070: 6465 7220 7468 6520 4170 6163 6865 204c  der the Apache L\n-00000080: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n-00000090: 322e 3020 2874 6865 2022 4c69 6365 6e73  2.0 (the \"Licens\n-000000a0: 6522 293b 0d0a 2020 796f 7520 6d61 7920  e\");..  you may \n-000000b0: 6e6f 7420 7573 6520 7468 6973 2066 696c  not use this fil\n-000000c0: 6520 6578 6365 7074 2069 6e20 636f 6d70  e except in comp\n-000000d0: 6c69 616e 6365 2077 6974 6820 7468 6520  liance with the \n-000000e0: 4c69 6365 6e73 652e 0d0a 2020 596f 7520  License...  You \n-000000f0: 6d61 7920 6f62 7461 696e 2061 2063 6f70  may obtain a cop\n-00000100: 7920 6f66 2074 6865 204c 6963 656e 7365  y of the License\n-00000110: 2061 740d 0a0d 0a20 2020 2020 2068 7474   at....      htt\n-00000120: 703a 2f2f 7777 772e 6170 6163 6865 2e6f  p://www.apache.o\n-00000130: 7267 2f6c 6963 656e 7365 732f 4c49 4345  rg/licenses/LICE\n-00000140: 4e53 452d 322e 300d 0a0d 0a20 2055 6e6c  NSE-2.0....  Unl\n-00000150: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n-00000160: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n-00000170: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n-00000180: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n-00000190: 0d0a 2020 6469 7374 7269 6275 7465 6420  ..  distributed \n-000001a0: 756e 6465 7220 7468 6520 4c69 6365 6e73  under the Licens\n-000001b0: 6520 6973 2064 6973 7472 6962 7574 6564  e is distributed\n-000001c0: 206f 6e20 616e 2022 4153 2049 5322 2042   on an \"AS IS\" B\n-000001d0: 4153 4953 2c0d 0a20 2057 4954 484f 5554  ASIS,..  WITHOUT\n-000001e0: 2057 4152 5241 4e54 4945 5320 4f52 2043   WARRANTIES OR C\n-000001f0: 4f4e 4449 5449 4f4e 5320 4f46 2041 4e59  ONDITIONS OF ANY\n-00000200: 204b 494e 442c 2065 6974 6865 7220 6578   KIND, either ex\n-00000210: 7072 6573 7320 6f72 2069 6d70 6c69 6564  press or implied\n-00000220: 2e0d 0a20 2053 6565 2074 6865 204c 6963  ...  See the Lic\n-00000230: 656e 7365 2066 6f72 2074 6865 2073 7065  ense for the spe\n-00000240: 6369 6669 6320 6c61 6e67 7561 6765 2067  cific language g\n-00000250: 6f76 6572 6e69 6e67 2070 6572 6d69 7373  overning permiss\n-00000260: 696f 6e73 2061 6e64 0d0a 2020 6c69 6d69  ions and..  limi\n-00000270: 7461 7469 6f6e 7320 756e 6465 7220 7468  tations under th\n-00000280: 6520 4c69 6365 6e73 652e 0d0a 2d2d 3e0d  e License...-->.\n-00000290: 0a3c 7072 6f6a 6563 7420 786d 6c6e 733d  .<project xmlns=\n-000002a0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n-000002b0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n-000002c0: 2e30 2220 786d 6c6e 733a 7873 693d 2268  .0\" xmlns:xsi=\"h\n-000002d0: 7474 703a 2f2f 7777 772e 7733 2e6f 7267  ttp://www.w3.org\n-000002e0: 2f32 3030 312f 584d 4c53 6368 656d 612d  /2001/XMLSchema-\n-000002f0: 696e 7374 616e 6365 2220 7873 693a 7363  instance\" xsi:sc\n-00000300: 6865 6d61 4c6f 6361 7469 6f6e 3d22 6874  hemaLocation=\"ht\n-00000310: 7470 3a2f 2f6d 6176 656e 2e61 7061 6368  tp://maven.apach\n-00000320: 652e 6f72 672f 504f 4d2f 342e 302e 3020  e.org/POM/4.0.0 \n-00000330: 6874 7470 3a2f 2f6d 6176 656e 2e61 7061  http://maven.apa\n-00000340: 6368 652e 6f72 672f 6d61 7665 6e2d 7634  che.org/maven-v4\n-00000350: 5f30 5f30 2e78 7364 223e 0d0a 0d0a 2020  _0_0.xsd\">....  \n-00000360: 2020 3c6d 6f64 656c 5665 7273 696f 6e3e    <modelVersion>\n-00000370: 342e 302e 303c 2f6d 6f64 656c 5665 7273  4.0.0</modelVers\n-00000380: 696f 6e3e 0d0a 2020 2020 3c70 6172 656e  ion>..    <paren\n-00000390: 743e 0d0a 2020 2020 2020 2020 3c67 726f  t>..        <gro\n-000003a0: 7570 4964 3e6f 7267 2e66 7573 6573 6f75  upId>org.fusesou\n-000003b0: 7263 653c 2f67 726f 7570 4964 3e0d 0a20  rce</groupId>.. \n-000003c0: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-000003d0: 4964 3e66 7573 6573 6f75 7263 652d 706f  Id>fusesource-po\n-000003e0: 6d3c 2f61 7274 6966 6163 7449 643e 0d0a  m</artifactId>..\n-000003f0: 2020 2020 2020 2020 3c76 6572 7369 6f6e          <version\n-00000400: 3e31 2e31 323c 2f76 6572 7369 6f6e 3e0d  >1.12</version>.\n-00000410: 0a20 2020 203c 2f70 6172 656e 743e 0d0a  .    </parent>..\n-00000420: 0d0a 2020 2020 3c67 726f 7570 4964 3e6f  ..    <groupId>o\n-00000430: 7267 2e66 7573 6573 6f75 7263 652e 6a61  rg.fusesource.ja\n-00000440: 6e73 693c 2f67 726f 7570 4964 3e0d 0a20  nsi</groupId>.. \n-00000450: 2020 203c 6172 7469 6661 6374 4964 3e6a     <artifactId>j\n-00000460: 616e 7369 3c2f 6172 7469 6661 6374 4964  ansi</artifactId\n-00000470: 3e0d 0a20 2020 203c 7665 7273 696f 6e3e  >..    <version>\n-00000480: 322e 332e 343c 2f76 6572 7369 6f6e 3e0d  2.3.4</version>.\n-00000490: 0a20 2020 203c 7061 636b 6167 696e 673e  .    <packaging>\n-000004a0: 6a61 723c 2f70 6163 6b61 6769 6e67 3e0d  jar</packaging>.\n-000004b0: 0a0d 0a20 2020 203c 6e61 6d65 3e24 7b70  ...    <name>${p\n-000004c0: 726f 6a65 6374 2e61 7274 6966 6163 7449  roject.artifactI\n-000004d0: 647d 3c2f 6e61 6d65 3e0d 0a20 2020 203c  d}</name>..    <\n-000004e0: 6465 7363 7269 7074 696f 6e3e 4a61 6e73  description>Jans\n-000004f0: 6920 6973 2061 206a 6176 6120 6c69 6272  i is a java libr\n-00000500: 6172 7920 666f 7220 6765 6e65 7261 7469  ary for generati\n-00000510: 6e67 2061 6e64 2069 6e74 6572 7072 6574  ng and interpret\n-00000520: 696e 6720 414e 5349 2065 7363 6170 6520  ing ANSI escape \n-00000530: 7365 7175 656e 6365 732e 3c2f 6465 7363  sequences.</desc\n-00000540: 7269 7074 696f 6e3e 0d0a 0d0a 2020 2020  ription>....    \n-00000550: 3c70 726f 7065 7274 6965 733e 0d0a 2020  <properties>..  \n-00000560: 2020 2020 2020 3c6a 6176 6164 6f63 536f        <javadocSo\n-00000570: 7572 6365 3e36 3c2f 6a61 7661 646f 6353  urce>6</javadocS\n-00000580: 6f75 7263 653e 0d0a 2020 2020 2020 2020  ource>..        \n-00000590: 3c6a 646b 5461 7267 6574 3e31 2e37 3c2f  <jdkTarget>1.7</\n-000005a0: 6a64 6b54 6172 6765 743e 0d0a 2020 2020  jdkTarget>..    \n-000005b0: 2020 2020 3c70 726f 6a65 6374 2e62 7569      <project.bui\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 436f  F-8\"?>.<!--.  Co\n+00000030: 7079 7269 6768 7420 2843 2920 3230 3039  pyright (C) 2009\n+00000040: 2d32 3031 3720 7468 6520 6f72 6967 696e  -2017 the origin\n+00000050: 616c 2061 7574 686f 7228 7329 2e0a 0a20  al author(s)... \n+00000060: 204c 6963 656e 7365 6420 756e 6465 7220   Licensed under \n+00000070: 7468 6520 4170 6163 6865 204c 6963 656e  the Apache Licen\n+00000080: 7365 2c20 5665 7273 696f 6e20 322e 3020  se, Version 2.0 \n+00000090: 2874 6865 2022 4c69 6365 6e73 6522 293b  (the \"License\");\n+000000a0: 0a20 2079 6f75 206d 6179 206e 6f74 2075  .  you may not u\n+000000b0: 7365 2074 6869 7320 6669 6c65 2065 7863  se this file exc\n+000000c0: 6570 7420 696e 2063 6f6d 706c 6961 6e63  ept in complianc\n+000000d0: 6520 7769 7468 2074 6865 204c 6963 656e  e with the Licen\n+000000e0: 7365 2e0a 2020 596f 7520 6d61 7920 6f62  se..  You may ob\n+000000f0: 7461 696e 2061 2063 6f70 7920 6f66 2074  tain a copy of t\n+00000100: 6865 204c 6963 656e 7365 2061 740a 0a20  he License at.. \n+00000110: 2020 2020 2068 7474 703a 2f2f 7777 772e       http://www.\n+00000120: 6170 6163 6865 2e6f 7267 2f6c 6963 656e  apache.org/licen\n+00000130: 7365 732f 4c49 4345 4e53 452d 322e 300a  ses/LICENSE-2.0.\n+00000140: 0a20 2055 6e6c 6573 7320 7265 7175 6972  .  Unless requir\n+00000150: 6564 2062 7920 6170 706c 6963 6162 6c65  ed by applicable\n+00000160: 206c 6177 206f 7220 6167 7265 6564 2074   law or agreed t\n+00000170: 6f20 696e 2077 7269 7469 6e67 2c20 736f  o in writing, so\n+00000180: 6674 7761 7265 0a20 2064 6973 7472 6962  ftware.  distrib\n+00000190: 7574 6564 2075 6e64 6572 2074 6865 204c  uted under the L\n+000001a0: 6963 656e 7365 2069 7320 6469 7374 7269  icense is distri\n+000001b0: 6275 7465 6420 6f6e 2061 6e20 2241 5320  buted on an \"AS \n+000001c0: 4953 2220 4241 5349 532c 0a20 2057 4954  IS\" BASIS,.  WIT\n+000001d0: 484f 5554 2057 4152 5241 4e54 4945 5320  HOUT WARRANTIES \n+000001e0: 4f52 2043 4f4e 4449 5449 4f4e 5320 4f46  OR CONDITIONS OF\n+000001f0: 2041 4e59 204b 494e 442c 2065 6974 6865   ANY KIND, eithe\n+00000200: 7220 6578 7072 6573 7320 6f72 2069 6d70  r express or imp\n+00000210: 6c69 6564 2e0a 2020 5365 6520 7468 6520  lied..  See the \n+00000220: 4c69 6365 6e73 6520 666f 7220 7468 6520  License for the \n+00000230: 7370 6563 6966 6963 206c 616e 6775 6167  specific languag\n+00000240: 6520 676f 7665 726e 696e 6720 7065 726d  e governing perm\n+00000250: 6973 7369 6f6e 7320 616e 640a 2020 6c69  issions and.  li\n+00000260: 6d69 7461 7469 6f6e 7320 756e 6465 7220  mitations under \n+00000270: 7468 6520 4c69 6365 6e73 652e 0a2d 2d3e  the License..-->\n+00000280: 0a3c 7072 6f6a 6563 7420 786d 6c6e 733d  .<project xmlns=\n+00000290: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n+000002a0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n+000002b0: 2e30 2220 786d 6c6e 733a 7873 693d 2268  .0\" xmlns:xsi=\"h\n+000002c0: 7474 703a 2f2f 7777 772e 7733 2e6f 7267  ttp://www.w3.org\n+000002d0: 2f32 3030 312f 584d 4c53 6368 656d 612d  /2001/XMLSchema-\n+000002e0: 696e 7374 616e 6365 2220 7873 693a 7363  instance\" xsi:sc\n+000002f0: 6865 6d61 4c6f 6361 7469 6f6e 3d22 6874  hemaLocation=\"ht\n+00000300: 7470 3a2f 2f6d 6176 656e 2e61 7061 6368  tp://maven.apach\n+00000310: 652e 6f72 672f 504f 4d2f 342e 302e 3020  e.org/POM/4.0.0 \n+00000320: 6874 7470 3a2f 2f6d 6176 656e 2e61 7061  http://maven.apa\n+00000330: 6368 652e 6f72 672f 6d61 7665 6e2d 7634  che.org/maven-v4\n+00000340: 5f30 5f30 2e78 7364 223e 0a0a 2020 2020  _0_0.xsd\">..    \n+00000350: 3c6d 6f64 656c 5665 7273 696f 6e3e 342e  <modelVersion>4.\n+00000360: 302e 303c 2f6d 6f64 656c 5665 7273 696f  0.0</modelVersio\n+00000370: 6e3e 0a20 2020 203c 7061 7265 6e74 3e0a  n>.    <parent>.\n+00000380: 2020 2020 2020 2020 3c67 726f 7570 4964          <groupId\n+00000390: 3e6f 7267 2e66 7573 6573 6f75 7263 653c  >org.fusesource<\n+000003a0: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+000003b0: 2020 3c61 7274 6966 6163 7449 643e 6675    <artifactId>fu\n+000003c0: 7365 736f 7572 6365 2d70 6f6d 3c2f 6172  sesource-pom</ar\n+000003d0: 7469 6661 6374 4964 3e0a 2020 2020 2020  tifactId>.      \n+000003e0: 2020 3c76 6572 7369 6f6e 3e31 2e31 323c    <version>1.12<\n+000003f0: 2f76 6572 7369 6f6e 3e0a 2020 2020 3c2f  /version>.    </\n+00000400: 7061 7265 6e74 3e0a 0a20 2020 203c 6772  parent>..    <gr\n+00000410: 6f75 7049 643e 6f72 672e 6675 7365 736f  oupId>org.fuseso\n+00000420: 7572 6365 2e6a 616e 7369 3c2f 6772 6f75  urce.jansi</grou\n+00000430: 7049 643e 0a20 2020 203c 6172 7469 6661  pId>.    <artifa\n+00000440: 6374 4964 3e6a 616e 7369 3c2f 6172 7469  ctId>jansi</arti\n+00000450: 6661 6374 4964 3e0a 2020 2020 3c76 6572  factId>.    <ver\n+00000460: 7369 6f6e 3e32 2e33 2e34 3c2f 7665 7273  sion>2.3.4</vers\n+00000470: 696f 6e3e 0a20 2020 203c 7061 636b 6167  ion>.    <packag\n+00000480: 696e 673e 6a61 723c 2f70 6163 6b61 6769  ing>jar</packagi\n+00000490: 6e67 3e0a 0a20 2020 203c 6e61 6d65 3e24  ng>..    <name>$\n+000004a0: 7b70 726f 6a65 6374 2e61 7274 6966 6163  {project.artifac\n+000004b0: 7449 647d 3c2f 6e61 6d65 3e0a 2020 2020  tId}</name>.    \n+000004c0: 3c64 6573 6372 6970 7469 6f6e 3e4a 616e  <description>Jan\n+000004d0: 7369 2069 7320 6120 6a61 7661 206c 6962  si is a java lib\n+000004e0: 7261 7279 2066 6f72 2067 656e 6572 6174  rary for generat\n+000004f0: 696e 6720 616e 6420 696e 7465 7270 7265  ing and interpre\n+00000500: 7469 6e67 2041 4e53 4920 6573 6361 7065  ting ANSI escape\n+00000510: 2073 6571 7565 6e63 6573 2e3c 2f64 6573   sequences.</des\n+00000520: 6372 6970 7469 6f6e 3e0a 0a20 2020 203c  cription>..    <\n+00000530: 7072 6f70 6572 7469 6573 3e0a 2020 2020  properties>.    \n+00000540: 2020 2020 3c6a 6176 6164 6f63 536f 7572      <javadocSour\n+00000550: 6365 3e36 3c2f 6a61 7661 646f 6353 6f75  ce>6</javadocSou\n+00000560: 7263 653e 0a20 2020 2020 2020 203c 6a64  rce>.        <jd\n+00000570: 6b54 6172 6765 743e 312e 373c 2f6a 646b  kTarget>1.7</jdk\n+00000580: 5461 7267 6574 3e0a 2020 2020 2020 2020  Target>.        \n+00000590: 3c70 726f 6a65 6374 2e62 7569 6c64 2e73  <project.build.s\n+000005a0: 6f75 7263 6545 6e63 6f64 696e 673e 5554  ourceEncoding>UT\n+000005b0: 462d 383c 2f70 726f 6a65 6374 2e62 7569  F-8</project.bui\n 000005c0: 6c64 2e73 6f75 7263 6545 6e63 6f64 696e  ld.sourceEncodin\n-000005d0: 673e 5554 462d 383c 2f70 726f 6a65 6374  g>UTF-8</project\n-000005e0: 2e62 7569 6c64 2e73 6f75 7263 6545 6e63  .build.sourceEnc\n-000005f0: 6f64 696e 673e 0d0a 2020 2020 2020 2020  oding>..        \n-00000600: 3c73 6c66 346a 2d76 6572 7369 6f6e 3e31  <slf4j-version>1\n-00000610: 2e36 2e31 3c2f 736c 6634 6a2d 7665 7273  .6.1</slf4j-vers\n-00000620: 696f 6e3e 0d0a 2020 2020 2020 2020 3c70  ion>..        <p\n-00000630: 726f 6a65 6374 2e62 7569 6c64 2e6f 7574  roject.build.out\n-00000640: 7075 7454 696d 6573 7461 6d70 3e32 3032  putTimestamp>202\n-00000650: 312d 3037 2d32 3354 3133 3a31 333a 3433  1-07-23T13:13:43\n-00000660: 5a3c 2f70 726f 6a65 6374 2e62 7569 6c64  Z</project.build\n-00000670: 2e6f 7574 7075 7454 696d 6573 7461 6d70  .outputTimestamp\n-00000680: 3e0d 0a20 2020 203c 2f70 726f 7065 7274  >..    </propert\n-00000690: 6965 733e 0d0a 0d0a 2020 2020 3c75 726c  ies>....    <url\n-000006a0: 3e68 7474 703a 2f2f 6675 7365 736f 7572  >http://fusesour\n-000006b0: 6365 2e67 6974 6875 622e 696f 2f6a 616e  ce.github.io/jan\n-000006c0: 7369 3c2f 7572 6c3e 0d0a 2020 2020 3c69  si</url>..    <i\n-000006d0: 6e63 6570 7469 6f6e 5965 6172 3e32 3030  nceptionYear>200\n-000006e0: 393c 2f69 6e63 6570 7469 6f6e 5965 6172  9</inceptionYear\n-000006f0: 3e0d 0a0d 0a20 2020 203c 6973 7375 654d  >....    <issueM\n-00000700: 616e 6167 656d 656e 743e 0d0a 2020 2020  anagement>..    \n-00000710: 2020 2020 3c73 7973 7465 6d3e 6a69 7261      <system>jira\n-00000720: 3c2f 7379 7374 656d 3e0d 0a20 2020 2020  </system>..     \n-00000730: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000740: 6769 7468 7562 2e63 6f6d 2f66 7573 6573  github.com/fuses\n-00000750: 6f75 7263 652f 6a61 6e73 692f 6973 7375  ource/jansi/issu\n-00000760: 6573 3c2f 7572 6c3e 0d0a 2020 2020 3c2f  es</url>..    </\n-00000770: 6973 7375 654d 616e 6167 656d 656e 743e  issueManagement>\n-00000780: 0d0a 0d0a 2020 2020 3c6d 6169 6c69 6e67  ....    <mailing\n-00000790: 4c69 7374 733e 0d0a 2020 2020 2020 2020  Lists>..        \n-000007a0: 3c6d 6169 6c69 6e67 4c69 7374 3e0d 0a20  <mailingList>.. \n-000007b0: 2020 2020 2020 2020 2020 203c 6e61 6d65             <name\n-000007c0: 3e44 6973 6375 7373 696f 6e20 4c69 7374  >Discussion List\n-000007d0: 3c2f 6e61 6d65 3e0d 0a20 2020 2020 2020  </name>..       \n-000007e0: 2020 2020 203c 6172 6368 6976 653e 6874       <archive>ht\n-000007f0: 7470 3a2f 2f67 726f 7570 732e 676f 6f67  tp://groups.goog\n-00000800: 6c65 2e63 6f6d 2f67 726f 7570 2f6a 616e  le.com/group/jan\n-00000810: 7369 3c2f 6172 6368 6976 653e 0d0a 2020  si</archive>..  \n-00000820: 2020 2020 2020 2020 2020 3c70 6f73 743e            <post>\n-00000830: 6a61 6e73 692d 6465 7640 676f 6f67 6c65  jansi-dev@google\n-00000840: 6772 6f75 7073 2e63 6f6d 3c2f 706f 7374  groups.com</post\n-00000850: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00000860: 7375 6273 6372 6962 653e 6a61 6e73 692d  subscribe>jansi-\n-00000870: 6465 762b 7375 6273 6372 6962 6540 676f  dev+subscribe@go\n-00000880: 6f67 6c65 6772 6f75 7073 2e63 6f6d 3c2f  oglegroups.com</\n-00000890: 7375 6273 6372 6962 653e 0d0a 2020 2020  subscribe>..    \n-000008a0: 2020 2020 2020 2020 3c75 6e73 7562 7363          <unsubsc\n-000008b0: 7269 6265 3e6a 616e 7369 2d64 6576 2b75  ribe>jansi-dev+u\n-000008c0: 6e73 7562 7363 7269 6265 4067 6f6f 676c  nsubscribe@googl\n-000008d0: 6567 726f 7570 732e 636f 6d3c 2f75 6e73  egroups.com</uns\n-000008e0: 7562 7363 7269 6265 3e0d 0a20 2020 2020  ubscribe>..     \n-000008f0: 2020 203c 2f6d 6169 6c69 6e67 4c69 7374     </mailingList\n-00000900: 3e0d 0a20 2020 2020 2020 203c 6d61 696c  >..        <mail\n-00000910: 696e 674c 6973 743e 0d0a 2020 2020 2020  ingList>..      \n-00000920: 2020 2020 2020 3c6e 616d 653e 436f 6d6d        <name>Comm\n-00000930: 6974 7320 616e 6420 4973 7375 6520 5472  its and Issue Tr\n-00000940: 6163 6b65 7220 4c69 7374 3c2f 6e61 6d65  acker List</name\n-00000950: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00000960: 6172 6368 6976 653e 6874 7470 3a2f 2f67  archive>http://g\n-00000970: 726f 7570 732e 676f 6f67 6c65 2e63 6f6d  roups.google.com\n-00000980: 2f67 726f 7570 2f6a 616e 7369 2d63 6f6d  /group/jansi-com\n-00000990: 6d69 7473 3c2f 6172 6368 6976 653e 0d0a  mits</archive>..\n-000009a0: 2020 2020 2020 2020 2020 2020 3c70 6f73              <pos\n-000009b0: 743e 6a61 6e73 692d 636f 6d6d 6974 7340  t>jansi-commits@\n-000009c0: 676f 6f67 6c65 6772 6f75 7073 2e63 6f6d  googlegroups.com\n-000009d0: 3c2f 706f 7374 3e0d 0a20 2020 2020 2020  </post>..       \n-000009e0: 2020 2020 203c 7375 6273 6372 6962 653e       <subscribe>\n-000009f0: 6a61 6e73 692d 636f 6d6d 6974 732b 7375  jansi-commits+su\n-00000a00: 6273 6372 6962 6540 676f 6f67 6c65 6772  bscribe@googlegr\n-00000a10: 6f75 7073 2e63 6f6d 3c2f 7375 6273 6372  oups.com</subscr\n-00000a20: 6962 653e 0d0a 2020 2020 2020 2020 2020  ibe>..          \n-00000a30: 2020 3c75 6e73 7562 7363 7269 6265 3e6a    <unsubscribe>j\n-00000a40: 616e 7369 2d63 6f6d 6d69 736f 7473 2b75  ansi-commisots+u\n-00000a50: 6e73 7562 7363 7269 6265 4067 6f6f 676c  nsubscribe@googl\n-00000a60: 6567 726f 7570 732e 636f 6d3c 2f75 6e73  egroups.com</uns\n-00000a70: 7562 7363 7269 6265 3e0d 0a20 2020 2020  ubscribe>..     \n-00000a80: 2020 203c 2f6d 6169 6c69 6e67 4c69 7374     </mailingList\n-00000a90: 3e0d 0a20 2020 203c 2f6d 6169 6c69 6e67  >..    </mailing\n-00000aa0: 4c69 7374 733e 0d0a 0d0a 2020 2020 3c6c  Lists>....    <l\n-00000ab0: 6963 656e 7365 733e 0d0a 2020 2020 2020  icenses>..      \n-00000ac0: 2020 3c6c 6963 656e 7365 3e0d 0a20 2020    <license>..   \n-00000ad0: 2020 2020 2020 2020 203c 6e61 6d65 3e54           <name>T\n-00000ae0: 6865 2041 7061 6368 6520 536f 6674 7761  he Apache Softwa\n-00000af0: 7265 204c 6963 656e 7365 2c20 5665 7273  re License, Vers\n-00000b00: 696f 6e20 322e 303c 2f6e 616d 653e 0d0a  ion 2.0</name>..\n-00000b10: 2020 2020 2020 2020 2020 2020 3c75 726c              <url\n-00000b20: 3e68 7474 703a 2f2f 7777 772e 6170 6163  >http://www.apac\n-00000b30: 6865 2e6f 7267 2f6c 6963 656e 7365 732f  he.org/licenses/\n-00000b40: 4c49 4345 4e53 452d 322e 302e 7478 743c  LICENSE-2.0.txt<\n-00000b50: 2f75 726c 3e0d 0a20 2020 2020 2020 2020  /url>..         \n-00000b60: 2020 203c 6469 7374 7269 6275 7469 6f6e     <distribution\n-00000b70: 3e72 6570 6f3c 2f64 6973 7472 6962 7574  >repo</distribut\n-00000b80: 696f 6e3e 0d0a 2020 2020 2020 2020 3c2f  ion>..        </\n-00000b90: 6c69 6365 6e73 653e 0d0a 2020 2020 3c2f  license>..    </\n-00000ba0: 6c69 6365 6e73 6573 3e0d 0a0d 0a20 2020  licenses>....   \n-00000bb0: 203c 7363 6d3e 0d0a 2020 2020 2020 2020   <scm>..        \n-00000bc0: 3c75 726c 3e68 7474 7073 3a2f 2f67 6974  <url>https://git\n-00000bd0: 6875 622e 636f 6d2f 6675 7365 736f 7572  hub.com/fusesour\n-00000be0: 6365 2f6a 616e 7369 3c2f 7572 6c3e 0d0a  ce/jansi</url>..\n-00000bf0: 2020 2020 2020 2020 3c63 6f6e 6e65 6374          <connect\n-00000c00: 696f 6e3e 7363 6d3a 6769 743a 6769 743a  ion>scm:git:git:\n-00000c10: 2f2f 6769 7468 7562 2e63 6f6d 2f66 7573  //github.com/fus\n-00000c20: 6573 6f75 7263 652f 6a61 6e73 692e 6769  esource/jansi.gi\n-00000c30: 743c 2f63 6f6e 6e65 6374 696f 6e3e 0d0a  t</connection>..\n-00000c40: 2020 2020 2020 2020 3c64 6576 656c 6f70          <develop\n-00000c50: 6572 436f 6e6e 6563 7469 6f6e 3e73 636d  erConnection>scm\n-00000c60: 3a67 6974 3a73 7368 3a2f 2f67 6974 4067  :git:ssh://git@g\n-00000c70: 6974 6875 622e 636f 6d2f 6675 7365 736f  ithub.com/fuseso\n-00000c80: 7572 6365 2f6a 616e 7369 2e67 6974 3c2f  urce/jansi.git</\n-00000c90: 6465 7665 6c6f 7065 7243 6f6e 6e65 6374  developerConnect\n-00000ca0: 696f 6e3e 0d0a 2020 2020 2020 3c74 6167  ion>..      <tag\n-00000cb0: 3e6a 616e 7369 2d32 2e33 2e34 3c2f 7461  >jansi-2.3.4</ta\n-00000cc0: 673e 0d0a 2020 3c2f 7363 6d3e 0d0a 0d0a  g>..  </scm>....\n-00000cd0: 2020 2020 3c64 6973 7472 6962 7574 696f      <distributio\n-00000ce0: 6e4d 616e 6167 656d 656e 743e 0d0a 2020  nManagement>..  \n-00000cf0: 2020 2020 2020 3c72 6570 6f73 6974 6f72        <repositor\n-00000d00: 793e 0d0a 2020 2020 2020 2020 2020 2020  y>..            \n-00000d10: 3c69 643e 736f 6e61 7479 7065 2d6e 6578  <id>sonatype-nex\n-00000d20: 7573 2d73 7461 6769 6e67 3c2f 6964 3e0d  us-staging</id>.\n-00000d30: 0a20 2020 2020 2020 2020 2020 203c 6e61  .            <na\n-00000d40: 6d65 3e53 6f6e 6174 7970 6520 5374 6167  me>Sonatype Stag\n-00000d50: 696e 6720 5265 706f 7369 746f 7279 3c2f  ing Repository</\n-00000d60: 6e61 6d65 3e0d 0a20 2020 2020 2020 2020  name>..         \n-00000d70: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000d80: 6f73 732e 736f 6e61 7479 7065 2e6f 7267  oss.sonatype.org\n-00000d90: 2f73 6572 7669 6365 2f6c 6f63 616c 2f73  /service/local/s\n-00000da0: 7461 6769 6e67 2f64 6570 6c6f 792f 6d61  taging/deploy/ma\n-00000db0: 7665 6e32 3c2f 7572 6c3e 0d0a 2020 2020  ven2</url>..    \n-00000dc0: 2020 2020 3c2f 7265 706f 7369 746f 7279      </repository\n-00000dd0: 3e0d 0a20 2020 2020 2020 203c 736e 6170  >..        <snap\n-00000de0: 7368 6f74 5265 706f 7369 746f 7279 3e0d  shotRepository>.\n-00000df0: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n-00000e00: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n-00000e10: 736e 6170 7368 6f74 733c 2f69 643e 0d0a  snapshots</id>..\n-00000e20: 2020 2020 2020 2020 2020 2020 3c6e 616d              <nam\n-00000e30: 653e 536f 6e61 7479 7065 2053 6e61 7073  e>Sonatype Snaps\n-00000e40: 686f 7420 5265 706f 7369 746f 7279 3c2f  hot Repository</\n-00000e50: 6e61 6d65 3e0d 0a20 2020 2020 2020 2020  name>..         \n-00000e60: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000e70: 6f73 732e 736f 6e61 7479 7065 2e6f 7267  oss.sonatype.org\n-00000e80: 2f63 6f6e 7465 6e74 2f72 6570 6f73 6974  /content/reposit\n-00000e90: 6f72 6965 732f 736e 6170 7368 6f74 733c  ories/snapshots<\n-00000ea0: 2f75 726c 3e0d 0a20 2020 2020 2020 203c  /url>..        <\n-00000eb0: 2f73 6e61 7073 686f 7452 6570 6f73 6974  /snapshotReposit\n-00000ec0: 6f72 793e 0d0a 2020 2020 3c2f 6469 7374  ory>..    </dist\n-00000ed0: 7269 6275 7469 6f6e 4d61 6e61 6765 6d65  ributionManageme\n-00000ee0: 6e74 3e0d 0a0d 0a20 2020 203c 7265 706f  nt>....    <repo\n-00000ef0: 7369 746f 7269 6573 3e0d 0a20 2020 2020  sitories>..     \n-00000f00: 2020 203c 7265 706f 7369 746f 7279 3e0d     <repository>.\n-00000f10: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n-00000f20: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n-00000f30: 736e 6170 7368 6f74 733c 2f69 643e 0d0a  snapshots</id>..\n-00000f40: 2020 2020 2020 2020 2020 2020 3c6e 616d              <nam\n-00000f50: 653e 536f 6e61 7479 7065 2053 6e61 7073  e>Sonatype Snaps\n-00000f60: 686f 7420 5265 706f 7369 746f 7279 3c2f  hot Repository</\n-00000f70: 6e61 6d65 3e0d 0a20 2020 2020 2020 2020  name>..         \n-00000f80: 2020 203c 7572 6c3e 6874 7470 733a 2f2f     <url>https://\n-00000f90: 6f73 732e 736f 6e61 7479 7065 2e6f 7267  oss.sonatype.org\n-00000fa0: 2f63 6f6e 7465 6e74 2f72 6570 6f73 6974  /content/reposit\n-00000fb0: 6f72 6965 732f 736e 6170 7368 6f74 733c  ories/snapshots<\n-00000fc0: 2f75 726c 3e0d 0a20 2020 2020 2020 2020  /url>..         \n-00000fd0: 2020 203c 736e 6170 7368 6f74 733e 0d0a     <snapshots>..\n-00000fe0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00000ff0: 3c65 6e61 626c 6564 3e74 7275 653c 2f65  <enabled>true</e\n-00001000: 6e61 626c 6564 3e0d 0a20 2020 2020 2020  nabled>..       \n-00001010: 2020 2020 203c 2f73 6e61 7073 686f 7473       </snapshots\n-00001020: 3e0d 0a20 2020 2020 2020 203c 2f72 6570  >..        </rep\n-00001030: 6f73 6974 6f72 793e 0d0a 2020 2020 3c2f  ository>..    </\n-00001040: 7265 706f 7369 746f 7269 6573 3e0d 0a0d  repositories>...\n-00001050: 0a20 2020 203c 6465 7665 6c6f 7065 7273  .    <developers\n-00001060: 3e0d 0a20 2020 2020 2020 203c 6465 7665  >..        <deve\n-00001070: 6c6f 7065 723e 0d0a 2020 2020 2020 2020  loper>..        \n-00001080: 2020 2020 3c69 643e 6368 6972 696e 6f3c      <id>chirino<\n-00001090: 2f69 643e 0d0a 2020 2020 2020 2020 2020  /id>..          \n-000010a0: 2020 3c6e 616d 653e 4869 7261 6d20 4368    <name>Hiram Ch\n-000010b0: 6972 696e 6f3c 2f6e 616d 653e 0d0a 2020  irino</name>..  \n-000010c0: 2020 2020 2020 2020 2020 3c65 6d61 696c            <email\n-000010d0: 3e68 6972 616d 4068 6972 616d 6368 6972  >hiram@hiramchir\n-000010e0: 696e 6f2e 636f 6d3c 2f65 6d61 696c 3e0d  ino.com</email>.\n-000010f0: 0a20 2020 2020 2020 2020 2020 203c 7572  .            <ur\n-00001100: 6c3e 6874 7470 3a2f 2f68 6972 616d 6368  l>http://hiramch\n-00001110: 6972 696e 6f2e 636f 6d3c 2f75 726c 3e0d  irino.com</url>.\n-00001120: 0a20 2020 2020 2020 2020 2020 203c 7469  .            <ti\n-00001130: 6d65 7a6f 6e65 3e47 4d54 2d35 3c2f 7469  mezone>GMT-5</ti\n-00001140: 6d65 7a6f 6e65 3e0d 0a20 2020 2020 2020  mezone>..       \n-00001150: 203c 2f64 6576 656c 6f70 6572 3e0d 0a20   </developer>.. \n-00001160: 2020 2020 2020 203c 6465 7665 6c6f 7065         <develope\n-00001170: 723e 0d0a 2020 2020 2020 2020 2020 2020  r>..            \n-00001180: 3c69 643e 676e 6f64 6574 3c2f 6964 3e0d  <id>gnodet</id>.\n-00001190: 0a20 2020 2020 2020 2020 2020 203c 6e61  .            <na\n-000011a0: 6d65 3e47 7569 6c6c 6175 6d65 204e 6f64  me>Guillaume Nod\n-000011b0: 6574 3c2f 6e61 6d65 3e0d 0a20 2020 2020  et</name>..     \n-000011c0: 2020 2020 2020 203c 656d 6169 6c3e 676e         <email>gn\n-000011d0: 6f64 6574 4067 6d61 696c 2e63 6f6d 3c2f  odet@gmail.com</\n-000011e0: 656d 6169 6c3e 0d0a 2020 2020 2020 2020  email>..        \n-000011f0: 2020 2020 3c74 696d 657a 6f6e 653e 474d      <timezone>GM\n-00001200: 542b 313c 2f74 696d 657a 6f6e 653e 0d0a  T+1</timezone>..\n-00001210: 2020 2020 2020 2020 3c2f 6465 7665 6c6f          </develo\n-00001220: 7065 723e 0d0a 2020 2020 3c2f 6465 7665  per>..    </deve\n-00001230: 6c6f 7065 7273 3e0d 0a0d 0a20 2020 203c  lopers>....    <\n-00001240: 6275 696c 643e 0d0a 2020 2020 2020 2020  build>..        \n-00001250: 3c65 7874 656e 7369 6f6e 733e 0d0a 2020  <extensions>..  \n-00001260: 2020 2020 2020 2020 2020 3c65 7874 656e            <exten\n-00001270: 7369 6f6e 3e0d 0a20 2020 2020 2020 2020  sion>..         \n-00001280: 2020 2020 2020 203c 6772 6f75 7049 643e         <groupId>\n-00001290: 6f72 672e 6675 7365 736f 7572 6365 2e6d  org.fusesource.m\n-000012a0: 766e 706c 7567 696e 733c 2f67 726f 7570  vnplugins</group\n-000012b0: 4964 3e0d 0a20 2020 2020 2020 2020 2020  Id>..           \n-000012c0: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n-000012d0: 3e66 7573 652d 6a78 722d 736b 696e 3c2f  >fuse-jxr-skin</\n-000012e0: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n-000012f0: 2020 2020 2020 2020 2020 2020 203c 7665               <ve\n-00001300: 7273 696f 6e3e 312e 393c 2f76 6572 7369  rsion>1.9</versi\n-00001310: 6f6e 3e0d 0a20 2020 2020 2020 2020 2020  on>..           \n-00001320: 203c 2f65 7874 656e 7369 6f6e 3e0d 0a20   </extension>.. \n-00001330: 2020 2020 2020 203c 2f65 7874 656e 7369         </extensi\n-00001340: 6f6e 733e 0d0a 0d0a 2020 2020 2020 2020  ons>....        \n-00001350: 3c72 6573 6f75 7263 6573 3e0d 0a20 2020  <resources>..   \n-00001360: 2020 2020 2020 2020 203c 7265 736f 7572           <resour\n-00001370: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00001380: 2020 2020 203c 6469 7265 6374 6f72 793e       <directory>\n-00001390: 7372 632f 6d61 696e 2f72 6573 6f75 7263  src/main/resourc\n-000013a0: 6573 3c2f 6469 7265 6374 6f72 793e 0d0a  es</directory>..\n-000013b0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000013c0: 3c66 696c 7465 7269 6e67 3e74 7275 653c  <filtering>true<\n-000013d0: 2f66 696c 7465 7269 6e67 3e0d 0a20 2020  /filtering>..   \n-000013e0: 2020 2020 2020 2020 2020 2020 203c 696e               <in\n-000013f0: 636c 7564 6573 3e0d 0a20 2020 2020 2020  cludes>..       \n-00001400: 2020 2020 2020 2020 2020 2020 203c 696e               <in\n-00001410: 636c 7564 653e 2a2a 2f2a 2e70 726f 7065  clude>**/*.prope\n-00001420: 7274 6965 733c 2f69 6e63 6c75 6465 3e0d  rties</include>.\n-00001430: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001440: 203c 2f69 6e63 6c75 6465 733e 0d0a 2020   </includes>..  \n-00001450: 2020 2020 2020 2020 2020 3c2f 7265 736f            </reso\n-00001460: 7572 6365 3e0d 0a20 2020 2020 2020 2020  urce>..         \n-00001470: 2020 203c 7265 736f 7572 6365 3e0d 0a20     <resource>.. \n-00001480: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001490: 6469 7265 6374 6f72 793e 7372 632f 6d61  directory>src/ma\n-000014a0: 696e 2f72 6573 6f75 7263 6573 3c2f 6469  in/resources</di\n-000014b0: 7265 6374 6f72 793e 0d0a 2020 2020 2020  rectory>..      \n-000014c0: 2020 2020 2020 2020 2020 3c66 696c 7465            <filte\n-000014d0: 7269 6e67 3e66 616c 7365 3c2f 6669 6c74  ring>false</filt\n-000014e0: 6572 696e 673e 0d0a 2020 2020 2020 2020  ering>..        \n-000014f0: 2020 2020 2020 2020 3c65 7863 6c75 6465          <exclude\n-00001500: 733e 0d0a 2020 2020 2020 2020 2020 2020  s>..            \n-00001510: 2020 2020 2020 2020 3c65 7863 6c75 6465          <exclude\n-00001520: 3e2a 2a2f 2a2e 7072 6f70 6572 7469 6573  >**/*.properties\n-00001530: 3c2f 6578 636c 7564 653e 0d0a 2020 2020  </exclude>..    \n-00001540: 2020 2020 2020 2020 2020 2020 3c2f 6578              </ex\n-00001550: 636c 7564 6573 3e0d 0a20 2020 2020 2020  cludes>..       \n-00001560: 2020 2020 203c 2f72 6573 6f75 7263 653e       </resource>\n-00001570: 0d0a 2020 2020 2020 2020 3c2f 7265 736f  ..        </reso\n-00001580: 7572 6365 733e 0d0a 0d0a 2020 2020 2020  urces>....      \n-00001590: 2020 3c70 6c75 6769 6e73 3e0d 0a20 2020    <plugins>..   \n-000015a0: 2020 2020 2020 2020 203c 706c 7567 696e           <plugin\n-000015b0: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-000015c0: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-000015d0: 6170 6163 6865 2e6d 6176 656e 2e70 6c75  apache.maven.plu\n-000015e0: 6769 6e73 3c2f 6772 6f75 7049 643e 0d0a  gins</groupId>..\n-000015f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001600: 3c61 7274 6966 6163 7449 643e 6d61 7665  <artifactId>mave\n-00001610: 6e2d 636f 6d70 696c 6572 2d70 6c75 6769  n-compiler-plugi\n-00001620: 6e3c 2f61 7274 6966 6163 7449 643e 0d0a  n</artifactId>..\n-00001630: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001640: 3c76 6572 7369 6f6e 3e33 2e38 2e31 3c2f  <version>3.8.1</\n-00001650: 7665 7273 696f 6e3e 0d0a 2020 2020 2020  version>..      \n-00001660: 2020 2020 2020 2020 2020 3c63 6f6e 6669            <confi\n-00001670: 6775 7261 7469 6f6e 3e0d 0a20 2020 2020  guration>..     \n-00001680: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001690: 212d 2d20 7061 7265 6e74 2070 6f6d 2031  !-- parent pom 1\n-000016a0: 2e31 3120 666f 7263 6573 2076 6572 7369  .11 forces versi\n-000016b0: 6f6e 2069 6e73 7465 6164 206f 6620 7573  on instead of us\n-000016c0: 696e 6720 7072 6f70 6572 7479 202d 2d3e  ing property -->\n-000016d0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-000016e0: 2020 2020 2020 3c73 6f75 7263 653e 247b        <source>${\n-000016f0: 6a64 6b54 6172 6765 747d 3c2f 736f 7572  jdkTarget}</sour\n-00001700: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00001710: 2020 2020 2020 2020 203c 7461 7267 6574           <target\n-00001720: 3e24 7b6a 646b 5461 7267 6574 7d3c 2f74  >${jdkTarget}</t\n-00001730: 6172 6765 743e 0d0a 2020 2020 2020 2020  arget>..        \n-00001740: 2020 2020 2020 2020 3c2f 636f 6e66 6967          </config\n-00001750: 7572 6174 696f 6e3e 0d0a 2020 2020 2020  uration>..      \n-00001760: 2020 2020 2020 3c2f 706c 7567 696e 3e0d        </plugin>.\n-00001770: 0a20 2020 2020 2020 2020 2020 203c 706c  .            <pl\n-00001780: 7567 696e 3e0d 0a20 2020 2020 2020 2020  ugin>..         \n-00001790: 2020 2020 2020 203c 6772 6f75 7049 643e         <groupId>\n-000017a0: 6f72 672e 6170 6163 6865 2e66 656c 6978  org.apache.felix\n-000017b0: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-000017c0: 2020 2020 2020 2020 2020 2020 3c61 7274              <art\n-000017d0: 6966 6163 7449 643e 6d61 7665 6e2d 6275  ifactId>maven-bu\n-000017e0: 6e64 6c65 2d70 6c75 6769 6e3c 2f61 7274  ndle-plugin</art\n-000017f0: 6966 6163 7449 643e 0d0a 2020 2020 2020  ifactId>..      \n-00001800: 2020 2020 2020 2020 2020 3c76 6572 7369            <versi\n-00001810: 6f6e 3e35 2e31 2e31 3c2f 7665 7273 696f  on>5.1.1</versio\n-00001820: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00001830: 2020 2020 3c65 7865 6375 7469 6f6e 733e      <executions>\n-00001840: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00001850: 2020 2020 2020 3c65 7865 6375 7469 6f6e        <execution\n-00001860: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00001870: 2020 2020 2020 2020 2020 203c 6964 3e62             <id>b\n-00001880: 756e 646c 652d 6d61 6e69 6665 7374 3c2f  undle-manifest</\n-00001890: 6964 3e0d 0a20 2020 2020 2020 2020 2020  id>..           \n-000018a0: 2020 2020 2020 2020 2020 2020 203c 7068               <ph\n-000018b0: 6173 653e 7072 6f63 6573 732d 636c 6173  ase>process-clas\n-000018c0: 7365 733c 2f70 6861 7365 3e0d 0a20 2020  ses</phase>..   \n-000018d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000018e0: 2020 2020 203c 676f 616c 733e 0d0a 2020       <goals>..  \n+000005d0: 673e 0a20 2020 2020 2020 203c 736c 6634  g>.        <slf4\n+000005e0: 6a2d 7665 7273 696f 6e3e 312e 362e 313c  j-version>1.6.1<\n+000005f0: 2f73 6c66 346a 2d76 6572 7369 6f6e 3e0a  /slf4j-version>.\n+00000600: 2020 2020 2020 2020 3c70 726f 6a65 6374          <project\n+00000610: 2e62 7569 6c64 2e6f 7574 7075 7454 696d  .build.outputTim\n+00000620: 6573 7461 6d70 3e32 3032 312d 3037 2d32  estamp>2021-07-2\n+00000630: 3354 3133 3a31 333a 3433 5a3c 2f70 726f  3T13:13:43Z</pro\n+00000640: 6a65 6374 2e62 7569 6c64 2e6f 7574 7075  ject.build.outpu\n+00000650: 7454 696d 6573 7461 6d70 3e0a 2020 2020  tTimestamp>.    \n+00000660: 3c2f 7072 6f70 6572 7469 6573 3e0a 0a20  </properties>.. \n+00000670: 2020 203c 7572 6c3e 6874 7470 3a2f 2f66     <url>http://f\n+00000680: 7573 6573 6f75 7263 652e 6769 7468 7562  usesource.github\n+00000690: 2e69 6f2f 6a61 6e73 693c 2f75 726c 3e0a  .io/jansi</url>.\n+000006a0: 2020 2020 3c69 6e63 6570 7469 6f6e 5965      <inceptionYe\n+000006b0: 6172 3e32 3030 393c 2f69 6e63 6570 7469  ar>2009</incepti\n+000006c0: 6f6e 5965 6172 3e0a 0a20 2020 203c 6973  onYear>..    <is\n+000006d0: 7375 654d 616e 6167 656d 656e 743e 0a20  sueManagement>. \n+000006e0: 2020 2020 2020 203c 7379 7374 656d 3e6a         <system>j\n+000006f0: 6972 613c 2f73 7973 7465 6d3e 0a20 2020  ira</system>.   \n+00000700: 2020 2020 203c 7572 6c3e 6874 7470 733a       <url>https:\n+00000710: 2f2f 6769 7468 7562 2e63 6f6d 2f66 7573  //github.com/fus\n+00000720: 6573 6f75 7263 652f 6a61 6e73 692f 6973  esource/jansi/is\n+00000730: 7375 6573 3c2f 7572 6c3e 0a20 2020 203c  sues</url>.    <\n+00000740: 2f69 7373 7565 4d61 6e61 6765 6d65 6e74  /issueManagement\n+00000750: 3e0a 0a20 2020 203c 6d61 696c 696e 674c  >..    <mailingL\n+00000760: 6973 7473 3e0a 2020 2020 2020 2020 3c6d  ists>.        <m\n+00000770: 6169 6c69 6e67 4c69 7374 3e0a 2020 2020  ailingList>.    \n+00000780: 2020 2020 2020 2020 3c6e 616d 653e 4469          <name>Di\n+00000790: 7363 7573 7369 6f6e 204c 6973 743c 2f6e  scussion List</n\n+000007a0: 616d 653e 0a20 2020 2020 2020 2020 2020  ame>.           \n+000007b0: 203c 6172 6368 6976 653e 6874 7470 3a2f   <archive>http:/\n+000007c0: 2f67 726f 7570 732e 676f 6f67 6c65 2e63  /groups.google.c\n+000007d0: 6f6d 2f67 726f 7570 2f6a 616e 7369 3c2f  om/group/jansi</\n+000007e0: 6172 6368 6976 653e 0a20 2020 2020 2020  archive>.       \n+000007f0: 2020 2020 203c 706f 7374 3e6a 616e 7369       <post>jansi\n+00000800: 2d64 6576 4067 6f6f 676c 6567 726f 7570  -dev@googlegroup\n+00000810: 732e 636f 6d3c 2f70 6f73 743e 0a20 2020  s.com</post>.   \n+00000820: 2020 2020 2020 2020 203c 7375 6273 6372           <subscr\n+00000830: 6962 653e 6a61 6e73 692d 6465 762b 7375  ibe>jansi-dev+su\n+00000840: 6273 6372 6962 6540 676f 6f67 6c65 6772  bscribe@googlegr\n+00000850: 6f75 7073 2e63 6f6d 3c2f 7375 6273 6372  oups.com</subscr\n+00000860: 6962 653e 0a20 2020 2020 2020 2020 2020  ibe>.           \n+00000870: 203c 756e 7375 6273 6372 6962 653e 6a61   <unsubscribe>ja\n+00000880: 6e73 692d 6465 762b 756e 7375 6273 6372  nsi-dev+unsubscr\n+00000890: 6962 6540 676f 6f67 6c65 6772 6f75 7073  ibe@googlegroups\n+000008a0: 2e63 6f6d 3c2f 756e 7375 6273 6372 6962  .com</unsubscrib\n+000008b0: 653e 0a20 2020 2020 2020 203c 2f6d 6169  e>.        </mai\n+000008c0: 6c69 6e67 4c69 7374 3e0a 2020 2020 2020  lingList>.      \n+000008d0: 2020 3c6d 6169 6c69 6e67 4c69 7374 3e0a    <mailingList>.\n+000008e0: 2020 2020 2020 2020 2020 2020 3c6e 616d              <nam\n+000008f0: 653e 436f 6d6d 6974 7320 616e 6420 4973  e>Commits and Is\n+00000900: 7375 6520 5472 6163 6b65 7220 4c69 7374  sue Tracker List\n+00000910: 3c2f 6e61 6d65 3e0a 2020 2020 2020 2020  </name>.        \n+00000920: 2020 2020 3c61 7263 6869 7665 3e68 7474      <archive>htt\n+00000930: 703a 2f2f 6772 6f75 7073 2e67 6f6f 676c  p://groups.googl\n+00000940: 652e 636f 6d2f 6772 6f75 702f 6a61 6e73  e.com/group/jans\n+00000950: 692d 636f 6d6d 6974 733c 2f61 7263 6869  i-commits</archi\n+00000960: 7665 3e0a 2020 2020 2020 2020 2020 2020  ve>.            \n+00000970: 3c70 6f73 743e 6a61 6e73 692d 636f 6d6d  <post>jansi-comm\n+00000980: 6974 7340 676f 6f67 6c65 6772 6f75 7073  its@googlegroups\n+00000990: 2e63 6f6d 3c2f 706f 7374 3e0a 2020 2020  .com</post>.    \n+000009a0: 2020 2020 2020 2020 3c73 7562 7363 7269          <subscri\n+000009b0: 6265 3e6a 616e 7369 2d63 6f6d 6d69 7473  be>jansi-commits\n+000009c0: 2b73 7562 7363 7269 6265 4067 6f6f 676c  +subscribe@googl\n+000009d0: 6567 726f 7570 732e 636f 6d3c 2f73 7562  egroups.com</sub\n+000009e0: 7363 7269 6265 3e0a 2020 2020 2020 2020  scribe>.        \n+000009f0: 2020 2020 3c75 6e73 7562 7363 7269 6265      <unsubscribe\n+00000a00: 3e6a 616e 7369 2d63 6f6d 6d69 736f 7473  >jansi-commisots\n+00000a10: 2b75 6e73 7562 7363 7269 6265 4067 6f6f  +unsubscribe@goo\n+00000a20: 676c 6567 726f 7570 732e 636f 6d3c 2f75  glegroups.com</u\n+00000a30: 6e73 7562 7363 7269 6265 3e0a 2020 2020  nsubscribe>.    \n+00000a40: 2020 2020 3c2f 6d61 696c 696e 674c 6973      </mailingLis\n+00000a50: 743e 0a20 2020 203c 2f6d 6169 6c69 6e67  t>.    </mailing\n+00000a60: 4c69 7374 733e 0a0a 2020 2020 3c6c 6963  Lists>..    <lic\n+00000a70: 656e 7365 733e 0a20 2020 2020 2020 203c  enses>.        <\n+00000a80: 6c69 6365 6e73 653e 0a20 2020 2020 2020  license>.       \n+00000a90: 2020 2020 203c 6e61 6d65 3e54 6865 2041       <name>The A\n+00000aa0: 7061 6368 6520 536f 6674 7761 7265 204c  pache Software L\n+00000ab0: 6963 656e 7365 2c20 5665 7273 696f 6e20  icense, Version \n+00000ac0: 322e 303c 2f6e 616d 653e 0a20 2020 2020  2.0</name>.     \n+00000ad0: 2020 2020 2020 203c 7572 6c3e 6874 7470         <url>http\n+00000ae0: 3a2f 2f77 7777 2e61 7061 6368 652e 6f72  ://www.apache.or\n+00000af0: 672f 6c69 6365 6e73 6573 2f4c 4943 454e  g/licenses/LICEN\n+00000b00: 5345 2d32 2e30 2e74 7874 3c2f 7572 6c3e  SE-2.0.txt</url>\n+00000b10: 0a20 2020 2020 2020 2020 2020 203c 6469  .            <di\n+00000b20: 7374 7269 6275 7469 6f6e 3e72 6570 6f3c  stribution>repo<\n+00000b30: 2f64 6973 7472 6962 7574 696f 6e3e 0a20  /distribution>. \n+00000b40: 2020 2020 2020 203c 2f6c 6963 656e 7365         </license\n+00000b50: 3e0a 2020 2020 3c2f 6c69 6365 6e73 6573  >.    </licenses\n+00000b60: 3e0a 0a20 2020 203c 7363 6d3e 0a20 2020  >..    <scm>.   \n+00000b70: 2020 2020 203c 7572 6c3e 6874 7470 733a       <url>https:\n+00000b80: 2f2f 6769 7468 7562 2e63 6f6d 2f66 7573  //github.com/fus\n+00000b90: 6573 6f75 7263 652f 6a61 6e73 693c 2f75  esource/jansi</u\n+00000ba0: 726c 3e0a 2020 2020 2020 2020 3c63 6f6e  rl>.        <con\n+00000bb0: 6e65 6374 696f 6e3e 7363 6d3a 6769 743a  nection>scm:git:\n+00000bc0: 6769 743a 2f2f 6769 7468 7562 2e63 6f6d  git://github.com\n+00000bd0: 2f66 7573 6573 6f75 7263 652f 6a61 6e73  /fusesource/jans\n+00000be0: 692e 6769 743c 2f63 6f6e 6e65 6374 696f  i.git</connectio\n+00000bf0: 6e3e 0a20 2020 2020 2020 203c 6465 7665  n>.        <deve\n+00000c00: 6c6f 7065 7243 6f6e 6e65 6374 696f 6e3e  loperConnection>\n+00000c10: 7363 6d3a 6769 743a 7373 683a 2f2f 6769  scm:git:ssh://gi\n+00000c20: 7440 6769 7468 7562 2e63 6f6d 2f66 7573  t@github.com/fus\n+00000c30: 6573 6f75 7263 652f 6a61 6e73 692e 6769  esource/jansi.gi\n+00000c40: 743c 2f64 6576 656c 6f70 6572 436f 6e6e  t</developerConn\n+00000c50: 6563 7469 6f6e 3e0a 2020 2020 2020 3c74  ection>.      <t\n+00000c60: 6167 3e6a 616e 7369 2d32 2e33 2e34 3c2f  ag>jansi-2.3.4</\n+00000c70: 7461 673e 0a20 203c 2f73 636d 3e0a 0a20  tag>.  </scm>.. \n+00000c80: 2020 203c 6469 7374 7269 6275 7469 6f6e     <distribution\n+00000c90: 4d61 6e61 6765 6d65 6e74 3e0a 2020 2020  Management>.    \n+00000ca0: 2020 2020 3c72 6570 6f73 6974 6f72 793e      <repository>\n+00000cb0: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n+00000cc0: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n+00000cd0: 7374 6167 696e 673c 2f69 643e 0a20 2020  staging</id>.   \n+00000ce0: 2020 2020 2020 2020 203c 6e61 6d65 3e53           <name>S\n+00000cf0: 6f6e 6174 7970 6520 5374 6167 696e 6720  onatype Staging \n+00000d00: 5265 706f 7369 746f 7279 3c2f 6e61 6d65  Repository</name\n+00000d10: 3e0a 2020 2020 2020 2020 2020 2020 3c75  >.            <u\n+00000d20: 726c 3e68 7474 7073 3a2f 2f6f 7373 2e73  rl>https://oss.s\n+00000d30: 6f6e 6174 7970 652e 6f72 672f 7365 7276  onatype.org/serv\n+00000d40: 6963 652f 6c6f 6361 6c2f 7374 6167 696e  ice/local/stagin\n+00000d50: 672f 6465 706c 6f79 2f6d 6176 656e 323c  g/deploy/maven2<\n+00000d60: 2f75 726c 3e0a 2020 2020 2020 2020 3c2f  /url>.        </\n+00000d70: 7265 706f 7369 746f 7279 3e0a 2020 2020  repository>.    \n+00000d80: 2020 2020 3c73 6e61 7073 686f 7452 6570      <snapshotRep\n+00000d90: 6f73 6974 6f72 793e 0a20 2020 2020 2020  ository>.       \n+00000da0: 2020 2020 203c 6964 3e73 6f6e 6174 7970       <id>sonatyp\n+00000db0: 652d 6e65 7875 732d 736e 6170 7368 6f74  e-nexus-snapshot\n+00000dc0: 733c 2f69 643e 0a20 2020 2020 2020 2020  s</id>.         \n+00000dd0: 2020 203c 6e61 6d65 3e53 6f6e 6174 7970     <name>Sonatyp\n+00000de0: 6520 536e 6170 7368 6f74 2052 6570 6f73  e Snapshot Repos\n+00000df0: 6974 6f72 793c 2f6e 616d 653e 0a20 2020  itory</name>.   \n+00000e00: 2020 2020 2020 2020 203c 7572 6c3e 6874           <url>ht\n+00000e10: 7470 733a 2f2f 6f73 732e 736f 6e61 7479  tps://oss.sonaty\n+00000e20: 7065 2e6f 7267 2f63 6f6e 7465 6e74 2f72  pe.org/content/r\n+00000e30: 6570 6f73 6974 6f72 6965 732f 736e 6170  epositories/snap\n+00000e40: 7368 6f74 733c 2f75 726c 3e0a 2020 2020  shots</url>.    \n+00000e50: 2020 2020 3c2f 736e 6170 7368 6f74 5265      </snapshotRe\n+00000e60: 706f 7369 746f 7279 3e0a 2020 2020 3c2f  pository>.    </\n+00000e70: 6469 7374 7269 6275 7469 6f6e 4d61 6e61  distributionMana\n+00000e80: 6765 6d65 6e74 3e0a 0a20 2020 203c 7265  gement>..    <re\n+00000e90: 706f 7369 746f 7269 6573 3e0a 2020 2020  positories>.    \n+00000ea0: 2020 2020 3c72 6570 6f73 6974 6f72 793e      <repository>\n+00000eb0: 0a20 2020 2020 2020 2020 2020 203c 6964  .            <id\n+00000ec0: 3e73 6f6e 6174 7970 652d 6e65 7875 732d  >sonatype-nexus-\n+00000ed0: 736e 6170 7368 6f74 733c 2f69 643e 0a20  snapshots</id>. \n+00000ee0: 2020 2020 2020 2020 2020 203c 6e61 6d65             <name\n+00000ef0: 3e53 6f6e 6174 7970 6520 536e 6170 7368  >Sonatype Snapsh\n+00000f00: 6f74 2052 6570 6f73 6974 6f72 793c 2f6e  ot Repository</n\n+00000f10: 616d 653e 0a20 2020 2020 2020 2020 2020  ame>.           \n+00000f20: 203c 7572 6c3e 6874 7470 733a 2f2f 6f73   <url>https://os\n+00000f30: 732e 736f 6e61 7479 7065 2e6f 7267 2f63  s.sonatype.org/c\n+00000f40: 6f6e 7465 6e74 2f72 6570 6f73 6974 6f72  ontent/repositor\n+00000f50: 6965 732f 736e 6170 7368 6f74 733c 2f75  ies/snapshots</u\n+00000f60: 726c 3e0a 2020 2020 2020 2020 2020 2020  rl>.            \n+00000f70: 3c73 6e61 7073 686f 7473 3e0a 2020 2020  <snapshots>.    \n+00000f80: 2020 2020 2020 2020 2020 2020 3c65 6e61              <ena\n+00000f90: 626c 6564 3e74 7275 653c 2f65 6e61 626c  bled>true</enabl\n+00000fa0: 6564 3e0a 2020 2020 2020 2020 2020 2020  ed>.            \n+00000fb0: 3c2f 736e 6170 7368 6f74 733e 0a20 2020  </snapshots>.   \n+00000fc0: 2020 2020 203c 2f72 6570 6f73 6974 6f72       </repositor\n+00000fd0: 793e 0a20 2020 203c 2f72 6570 6f73 6974  y>.    </reposit\n+00000fe0: 6f72 6965 733e 0a0a 2020 2020 3c64 6576  ories>..    <dev\n+00000ff0: 656c 6f70 6572 733e 0a20 2020 2020 2020  elopers>.       \n+00001000: 203c 6465 7665 6c6f 7065 723e 0a20 2020   <developer>.   \n+00001010: 2020 2020 2020 2020 203c 6964 3e63 6869           <id>chi\n+00001020: 7269 6e6f 3c2f 6964 3e0a 2020 2020 2020  rino</id>.      \n+00001030: 2020 2020 2020 3c6e 616d 653e 4869 7261        <name>Hira\n+00001040: 6d20 4368 6972 696e 6f3c 2f6e 616d 653e  m Chirino</name>\n+00001050: 0a20 2020 2020 2020 2020 2020 203c 656d  .            <em\n+00001060: 6169 6c3e 6869 7261 6d40 6869 7261 6d63  ail>hiram@hiramc\n+00001070: 6869 7269 6e6f 2e63 6f6d 3c2f 656d 6169  hirino.com</emai\n+00001080: 6c3e 0a20 2020 2020 2020 2020 2020 203c  l>.            <\n+00001090: 7572 6c3e 6874 7470 3a2f 2f68 6972 616d  url>http://hiram\n+000010a0: 6368 6972 696e 6f2e 636f 6d3c 2f75 726c  chirino.com</url\n+000010b0: 3e0a 2020 2020 2020 2020 2020 2020 3c74  >.            <t\n+000010c0: 696d 657a 6f6e 653e 474d 542d 353c 2f74  imezone>GMT-5</t\n+000010d0: 696d 657a 6f6e 653e 0a20 2020 2020 2020  imezone>.       \n+000010e0: 203c 2f64 6576 656c 6f70 6572 3e0a 2020   </developer>.  \n+000010f0: 2020 2020 2020 3c64 6576 656c 6f70 6572        <developer\n+00001100: 3e0a 2020 2020 2020 2020 2020 2020 3c69  >.            <i\n+00001110: 643e 676e 6f64 6574 3c2f 6964 3e0a 2020  d>gnodet</id>.  \n+00001120: 2020 2020 2020 2020 2020 3c6e 616d 653e            <name>\n+00001130: 4775 696c 6c61 756d 6520 4e6f 6465 743c  Guillaume Nodet<\n+00001140: 2f6e 616d 653e 0a20 2020 2020 2020 2020  /name>.         \n+00001150: 2020 203c 656d 6169 6c3e 676e 6f64 6574     <email>gnodet\n+00001160: 4067 6d61 696c 2e63 6f6d 3c2f 656d 6169  @gmail.com</emai\n+00001170: 6c3e 0a20 2020 2020 2020 2020 2020 203c  l>.            <\n+00001180: 7469 6d65 7a6f 6e65 3e47 4d54 2b31 3c2f  timezone>GMT+1</\n+00001190: 7469 6d65 7a6f 6e65 3e0a 2020 2020 2020  timezone>.      \n+000011a0: 2020 3c2f 6465 7665 6c6f 7065 723e 0a20    </developer>. \n+000011b0: 2020 203c 2f64 6576 656c 6f70 6572 733e     </developers>\n+000011c0: 0a0a 2020 2020 3c62 7569 6c64 3e0a 2020  ..    <build>.  \n+000011d0: 2020 2020 2020 3c65 7874 656e 7369 6f6e        <extension\n+000011e0: 733e 0a20 2020 2020 2020 2020 2020 203c  s>.            <\n+000011f0: 6578 7465 6e73 696f 6e3e 0a20 2020 2020  extension>.     \n+00001200: 2020 2020 2020 2020 2020 203c 6772 6f75             <grou\n+00001210: 7049 643e 6f72 672e 6675 7365 736f 7572  pId>org.fusesour\n+00001220: 6365 2e6d 766e 706c 7567 696e 733c 2f67  ce.mvnplugins</g\n+00001230: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00001240: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00001250: 7449 643e 6675 7365 2d6a 7872 2d73 6b69  tId>fuse-jxr-ski\n+00001260: 6e3c 2f61 7274 6966 6163 7449 643e 0a20  n</artifactId>. \n+00001270: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00001280: 7665 7273 696f 6e3e 312e 393c 2f76 6572  version>1.9</ver\n+00001290: 7369 6f6e 3e0a 2020 2020 2020 2020 2020  sion>.          \n+000012a0: 2020 3c2f 6578 7465 6e73 696f 6e3e 0a20    </extension>. \n+000012b0: 2020 2020 2020 203c 2f65 7874 656e 7369         </extensi\n+000012c0: 6f6e 733e 0a0a 2020 2020 2020 2020 3c72  ons>..        <r\n+000012d0: 6573 6f75 7263 6573 3e0a 2020 2020 2020  esources>.      \n+000012e0: 2020 2020 2020 3c72 6573 6f75 7263 653e        <resource>\n+000012f0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00001300: 203c 6469 7265 6374 6f72 793e 7372 632f   <directory>src/\n+00001310: 6d61 696e 2f72 6573 6f75 7263 6573 3c2f  main/resources</\n+00001320: 6469 7265 6374 6f72 793e 0a20 2020 2020  directory>.     \n+00001330: 2020 2020 2020 2020 2020 203c 6669 6c74             <filt\n+00001340: 6572 696e 673e 7472 7565 3c2f 6669 6c74  ering>true</filt\n+00001350: 6572 696e 673e 0a20 2020 2020 2020 2020  ering>.         \n+00001360: 2020 2020 2020 203c 696e 636c 7564 6573         <includes\n+00001370: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00001380: 2020 2020 2020 3c69 6e63 6c75 6465 3e2a        <include>*\n+00001390: 2a2f 2a2e 7072 6f70 6572 7469 6573 3c2f  */*.properties</\n+000013a0: 696e 636c 7564 653e 0a20 2020 2020 2020  include>.       \n+000013b0: 2020 2020 2020 2020 203c 2f69 6e63 6c75           </inclu\n+000013c0: 6465 733e 0a20 2020 2020 2020 2020 2020  des>.           \n+000013d0: 203c 2f72 6573 6f75 7263 653e 0a20 2020   </resource>.   \n+000013e0: 2020 2020 2020 2020 203c 7265 736f 7572           <resour\n+000013f0: 6365 3e0a 2020 2020 2020 2020 2020 2020  ce>.            \n+00001400: 2020 2020 3c64 6972 6563 746f 7279 3e73      <directory>s\n+00001410: 7263 2f6d 6169 6e2f 7265 736f 7572 6365  rc/main/resource\n+00001420: 733c 2f64 6972 6563 746f 7279 3e0a 2020  s</directory>.  \n+00001430: 2020 2020 2020 2020 2020 2020 2020 3c66                <f\n+00001440: 696c 7465 7269 6e67 3e66 616c 7365 3c2f  iltering>false</\n+00001450: 6669 6c74 6572 696e 673e 0a20 2020 2020  filtering>.     \n+00001460: 2020 2020 2020 2020 2020 203c 6578 636c             <excl\n+00001470: 7564 6573 3e0a 2020 2020 2020 2020 2020  udes>.          \n+00001480: 2020 2020 2020 2020 2020 3c65 7863 6c75            <exclu\n+00001490: 6465 3e2a 2a2f 2a2e 7072 6f70 6572 7469  de>**/*.properti\n+000014a0: 6573 3c2f 6578 636c 7564 653e 0a20 2020  es</exclude>.   \n+000014b0: 2020 2020 2020 2020 2020 2020 203c 2f65               </e\n+000014c0: 7863 6c75 6465 733e 0a20 2020 2020 2020  xcludes>.       \n+000014d0: 2020 2020 203c 2f72 6573 6f75 7263 653e       </resource>\n+000014e0: 0a20 2020 2020 2020 203c 2f72 6573 6f75  .        </resou\n+000014f0: 7263 6573 3e0a 0a20 2020 2020 2020 203c  rces>..        <\n+00001500: 706c 7567 696e 733e 0a20 2020 2020 2020  plugins>.       \n+00001510: 2020 2020 203c 706c 7567 696e 3e0a 2020       <plugin>.  \n+00001520: 2020 2020 2020 2020 2020 2020 2020 3c67                <g\n+00001530: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n+00001540: 652e 6d61 7665 6e2e 706c 7567 696e 733c  e.maven.plugins<\n+00001550: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+00001560: 2020 2020 2020 2020 2020 3c61 7274 6966            <artif\n+00001570: 6163 7449 643e 6d61 7665 6e2d 636f 6d70  actId>maven-comp\n+00001580: 696c 6572 2d70 6c75 6769 6e3c 2f61 7274  iler-plugin</art\n+00001590: 6966 6163 7449 643e 0a20 2020 2020 2020  ifactId>.       \n+000015a0: 2020 2020 2020 2020 203c 7665 7273 696f           <versio\n+000015b0: 6e3e 332e 382e 313c 2f76 6572 7369 6f6e  n>3.8.1</version\n+000015c0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000015d0: 2020 3c63 6f6e 6669 6775 7261 7469 6f6e    <configuration\n+000015e0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000015f0: 2020 2020 2020 3c21 2d2d 2070 6172 656e        <!-- paren\n+00001600: 7420 706f 6d20 312e 3131 2066 6f72 6365  t pom 1.11 force\n+00001610: 7320 7665 7273 696f 6e20 696e 7374 6561  s version instea\n+00001620: 6420 6f66 2075 7369 6e67 2070 726f 7065  d of using prope\n+00001630: 7274 7920 2d2d 3e0a 2020 2020 2020 2020  rty -->.        \n+00001640: 2020 2020 2020 2020 2020 2020 3c73 6f75              <sou\n+00001650: 7263 653e 247b 6a64 6b54 6172 6765 747d  rce>${jdkTarget}\n+00001660: 3c2f 736f 7572 6365 3e0a 2020 2020 2020  </source>.      \n+00001670: 2020 2020 2020 2020 2020 2020 2020 3c74                <t\n+00001680: 6172 6765 743e 247b 6a64 6b54 6172 6765  arget>${jdkTarge\n+00001690: 747d 3c2f 7461 7267 6574 3e0a 2020 2020  t}</target>.    \n+000016a0: 2020 2020 2020 2020 2020 2020 3c2f 636f              </co\n+000016b0: 6e66 6967 7572 6174 696f 6e3e 0a20 2020  nfiguration>.   \n+000016c0: 2020 2020 2020 2020 203c 2f70 6c75 6769           </plugi\n+000016d0: 6e3e 0a20 2020 2020 2020 2020 2020 203c  n>.            <\n+000016e0: 706c 7567 696e 3e0a 2020 2020 2020 2020  plugin>.        \n+000016f0: 2020 2020 2020 2020 3c67 726f 7570 4964          <groupId\n+00001700: 3e6f 7267 2e61 7061 6368 652e 6665 6c69  >org.apache.feli\n+00001710: 783c 2f67 726f 7570 4964 3e0a 2020 2020  x</groupId>.    \n+00001720: 2020 2020 2020 2020 2020 2020 3c61 7274              <art\n+00001730: 6966 6163 7449 643e 6d61 7665 6e2d 6275  ifactId>maven-bu\n+00001740: 6e64 6c65 2d70 6c75 6769 6e3c 2f61 7274  ndle-plugin</art\n+00001750: 6966 6163 7449 643e 0a20 2020 2020 2020  ifactId>.       \n+00001760: 2020 2020 2020 2020 203c 7665 7273 696f           <versio\n+00001770: 6e3e 352e 312e 313c 2f76 6572 7369 6f6e  n>5.1.1</version\n+00001780: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00001790: 2020 3c65 7865 6375 7469 6f6e 733e 0a20    <executions>. \n+000017a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000017b0: 2020 203c 6578 6563 7574 696f 6e3e 0a20     <execution>. \n+000017c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000017d0: 2020 2020 2020 203c 6964 3e62 756e 646c         <id>bundl\n+000017e0: 652d 6d61 6e69 6665 7374 3c2f 6964 3e0a  e-manifest</id>.\n+000017f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001800: 2020 2020 2020 2020 3c70 6861 7365 3e70          <phase>p\n+00001810: 726f 6365 7373 2d63 6c61 7373 6573 3c2f  rocess-classes</\n+00001820: 7068 6173 653e 0a20 2020 2020 2020 2020  phase>.         \n+00001830: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00001840: 676f 616c 733e 0a20 2020 2020 2020 2020  goals>.         \n+00001850: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001860: 2020 203c 676f 616c 3e6d 616e 6966 6573     <goal>manifes\n+00001870: 743c 2f67 6f61 6c3e 0a20 2020 2020 2020  t</goal>.       \n+00001880: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001890: 203c 2f67 6f61 6c73 3e0a 2020 2020 2020   </goals>.      \n+000018a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000018b0: 2020 3c63 6f6e 6669 6775 7261 7469 6f6e    <configuration\n+000018c0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000018d0: 2020 2020 2020 2020 2020 2020 2020 3c69                <i\n+000018e0: 6e73 7472 7563 7469 6f6e 733e 0a20 2020  nstructions>.   \n 000018f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001900: 2020 2020 2020 2020 2020 3c67 6f61 6c3e            <goal>\n-00001910: 6d61 6e69 6665 7374 3c2f 676f 616c 3e0d  manifest</goal>.\n-00001920: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001930: 2020 2020 2020 2020 203c 2f67 6f61 6c73           </goals\n-00001940: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00001950: 2020 2020 2020 2020 2020 203c 636f 6e66             <conf\n-00001960: 6967 7572 6174 696f 6e3e 0d0a 2020 2020  iguration>..    \n-00001970: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001980: 2020 2020 2020 2020 3c69 6e73 7472 7563          <instruc\n-00001990: 7469 6f6e 733e 0d0a 2020 2020 2020 2020  tions>..        \n-000019a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000019b0: 2020 2020 2020 2020 3c4d 6169 6e2d 436c          <Main-Cl\n-000019c0: 6173 733e 6f72 672e 6675 7365 736f 7572  ass>org.fusesour\n-000019d0: 6365 2e6a 616e 7369 2e41 6e73 694d 6169  ce.jansi.AnsiMai\n-000019e0: 6e3c 2f4d 6169 6e2d 436c 6173 733e 0d0a  n</Main-Class>..\n-000019f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001900: 2020 2020 2020 2020 2020 2020 203c 4d61               <Ma\n+00001910: 696e 2d43 6c61 7373 3e6f 7267 2e66 7573  in-Class>org.fus\n+00001920: 6573 6f75 7263 652e 6a61 6e73 692e 416e  esource.jansi.An\n+00001930: 7369 4d61 696e 3c2f 4d61 696e 2d43 6c61  siMain</Main-Cla\n+00001940: 7373 3e0a 2020 2020 2020 2020 2020 2020  ss>.            \n+00001950: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001960: 2020 2020 3c45 7870 6f72 742d 5061 636b      <Export-Pack\n+00001970: 6167 653e 0a20 2020 2020 2020 2020 2020  age>.           \n+00001980: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001990: 2020 2020 2020 2020 2021 6f72 672e 6675           !org.fu\n+000019a0: 7365 736f 7572 6365 2e6a 616e 7369 2e69  sesource.jansi.i\n+000019b0: 6e74 6572 6e61 6c2e 6e61 7469 7665 2e2a  nternal.native.*\n+000019c0: 3b0a 2020 2020 2020 2020 2020 2020 2020  ;.              \n+000019d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000019e0: 2020 2020 2020 6f72 672e 6675 7365 736f        org.fuseso\n+000019f0: 7572 6365 2e6a 616e 7369 2e2a 3b0a 2020  urce.jansi.*;.  \n 00001a00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a10: 3c45 7870 6f72 742d 5061 636b 6167 653e  <Export-Package>\n-00001a20: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00001a30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a40: 2020 2020 2020 216f 7267 2e66 7573 6573        !org.fuses\n-00001a50: 6f75 7263 652e 6a61 6e73 692e 696e 7465  ource.jansi.inte\n-00001a60: 726e 616c 2e6e 6174 6976 652e 2a3b 0d0a  rnal.native.*;..\n+00001a10: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001a20: 2020 2d6e 6f69 6d70 6f72 743a 3d74 7275    -noimport:=tru\n+00001a30: 650a 2020 2020 2020 2020 2020 2020 2020  e.              \n+00001a40: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001a50: 2020 3c2f 4578 706f 7274 2d50 6163 6b61    </Export-Packa\n+00001a60: 6765 3e0a 2020 2020 2020 2020 2020 2020  ge>.            \n 00001a70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a80: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001a90: 2020 2020 6f72 672e 6675 7365 736f 7572      org.fusesour\n-00001aa0: 6365 2e6a 616e 7369 2e2a 3b0d 0a20 2020  ce.jansi.*;..   \n-00001ab0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001ac0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001ad0: 202d 6e6f 696d 706f 7274 3a3d 7472 7565   -noimport:=true\n-00001ae0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n+00001a80: 2020 2020 3c5f 7265 6d6f 7665 6865 6164      <_removehead\n+00001a90: 6572 733e 426e 642d 4c61 7374 4d6f 6469  ers>Bnd-LastModi\n+00001aa0: 6669 6564 2c49 6e63 6c75 6465 2d52 6573  fied,Include-Res\n+00001ab0: 6f75 7263 652c 5072 6976 6174 652d 5061  ource,Private-Pa\n+00001ac0: 636b 6167 652c 4f72 6967 696e 616c 6c79  ckage,Originally\n+00001ad0: 2d43 7265 6174 6564 2d42 793c 2f5f 7265  -Created-By</_re\n+00001ae0: 6d6f 7665 6865 6164 6572 733e 0a20 2020  moveheaders>.   \n 00001af0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001b00: 2020 3c2f 4578 706f 7274 2d50 6163 6b61    </Export-Packa\n-00001b10: 6765 3e0d 0a20 2020 2020 2020 2020 2020  ge>..           \n-00001b20: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001b30: 2020 2020 203c 5f72 656d 6f76 6568 6561       <_removehea\n-00001b40: 6465 7273 3e42 6e64 2d4c 6173 744d 6f64  ders>Bnd-LastMod\n-00001b50: 6966 6965 642c 496e 636c 7564 652d 5265  ified,Include-Re\n-00001b60: 736f 7572 6365 2c50 7269 7661 7465 2d50  source,Private-P\n-00001b70: 6163 6b61 6765 2c4f 7269 6769 6e61 6c6c  ackage,Originall\n-00001b80: 792d 4372 6561 7465 642d 4279 3c2f 5f72  y-Created-By</_r\n-00001b90: 656d 6f76 6568 6561 6465 7273 3e0d 0a20  emoveheaders>.. \n-00001ba0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001bb0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001bc0: 5f72 6570 726f 6475 6369 626c 653e 7472  _reproducible>tr\n-00001bd0: 7565 3c2f 5f72 6570 726f 6475 6369 626c  ue</_reproducibl\n-00001be0: 653e 0d0a 2020 2020 2020 2020 2020 2020  e>..            \n+00001b00: 2020 2020 2020 2020 2020 2020 203c 5f72               <_r\n+00001b10: 6570 726f 6475 6369 626c 653e 7472 7565  eproducible>true\n+00001b20: 3c2f 5f72 6570 726f 6475 6369 626c 653e  </_reproducible>\n+00001b30: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00001b40: 2020 2020 2020 2020 2020 2020 203c 2f69               </i\n+00001b50: 6e73 7472 7563 7469 6f6e 733e 0a20 2020  nstructions>.   \n+00001b60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001b70: 2020 2020 203c 2f63 6f6e 6669 6775 7261       </configura\n+00001b80: 7469 6f6e 3e0a 2020 2020 2020 2020 2020  tion>.          \n+00001b90: 2020 2020 2020 2020 2020 3c2f 6578 6563            </exec\n+00001ba0: 7574 696f 6e3e 0a20 2020 2020 2020 2020  ution>.         \n+00001bb0: 2020 2020 2020 203c 2f65 7865 6375 7469         </executi\n+00001bc0: 6f6e 733e 0a20 2020 2020 2020 2020 2020  ons>.           \n+00001bd0: 203c 2f70 6c75 6769 6e3e 0a20 2020 2020   </plugin>.     \n+00001be0: 2020 2020 2020 203c 706c 7567 696e 3e0a         <plugin>.\n 00001bf0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001c00: 3c2f 696e 7374 7275 6374 696f 6e73 3e0d  </instructions>.\n-00001c10: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001c20: 2020 2020 2020 2020 203c 2f63 6f6e 6669           </confi\n-00001c30: 6775 7261 7469 6f6e 3e0d 0a20 2020 2020  guration>..     \n-00001c40: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001c50: 2f65 7865 6375 7469 6f6e 3e0d 0a20 2020  /execution>..   \n-00001c60: 2020 2020 2020 2020 2020 2020 203c 2f65               </e\n-00001c70: 7865 6375 7469 6f6e 733e 0d0a 2020 2020  xecutions>..    \n-00001c80: 2020 2020 2020 2020 3c2f 706c 7567 696e          </plugin\n-00001c90: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00001ca0: 706c 7567 696e 3e0d 0a20 2020 2020 2020  plugin>..       \n-00001cb0: 2020 2020 2020 2020 203c 6772 6f75 7049           <groupI\n-00001cc0: 643e 6f72 672e 636f 6465 6861 7573 2e6d  d>org.codehaus.m\n-00001cd0: 6f6a 6f3c 2f67 726f 7570 4964 3e0d 0a20  ojo</groupId>.. \n-00001ce0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00001cf0: 6172 7469 6661 6374 4964 3e65 7865 632d  artifactId>exec-\n-00001d00: 6d61 7665 6e2d 706c 7567 696e 3c2f 6172  maven-plugin</ar\n-00001d10: 7469 6661 6374 4964 3e0d 0a20 2020 2020  tifactId>..     \n-00001d20: 2020 2020 2020 2020 2020 203c 7665 7273             <vers\n-00001d30: 696f 6e3e 332e 302e 303c 2f76 6572 7369  ion>3.0.0</versi\n-00001d40: 6f6e 3e0d 0a20 2020 2020 2020 2020 2020  on>..           \n-00001d50: 2020 2020 203c 6578 6563 7574 696f 6e73       <executions\n-00001d60: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00001d70: 2020 2020 2020 203c 6578 6563 7574 696f         <executio\n-00001d80: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00001d90: 2020 2020 2020 2020 2020 2020 3c69 643e              <id>\n-00001da0: 6765 6e65 7261 7465 2d67 7261 616c 766d  generate-graalvm\n-00001db0: 2d69 6e66 6f3c 2f69 643e 0d0a 2020 2020  -info</id>..    \n-00001dc0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001dd0: 2020 2020 3c70 6861 7365 3e70 726f 6365      <phase>proce\n-00001de0: 7373 2d63 6c61 7373 6573 3c2f 7068 6173  ss-classes</phas\n-00001df0: 653e 0d0a 2020 2020 2020 2020 2020 2020  e>..            \n-00001e00: 2020 2020 2020 2020 2020 2020 3c67 6f61              <goa\n-00001e10: 6c73 3e0d 0a20 2020 2020 2020 2020 2020  ls>..           \n-00001e20: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001e30: 203c 676f 616c 3e6a 6176 613c 2f67 6f61   <goal>java</goa\n-00001e40: 6c3e 0d0a 2020 2020 2020 2020 2020 2020  l>..            \n-00001e50: 2020 2020 2020 2020 2020 2020 3c2f 676f              </go\n-00001e60: 616c 733e 0d0a 2020 2020 2020 2020 2020  als>..          \n-00001e70: 2020 2020 2020 2020 2020 2020 2020 3c63                <c\n-00001e80: 6f6e 6669 6775 7261 7469 6f6e 3e0d 0a20  onfiguration>.. \n-00001e90: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001ea0: 2020 2020 2020 2020 2020 203c 696e 636c             <incl\n-00001eb0: 7564 6550 726f 6a65 6374 4465 7065 6e64  udeProjectDepend\n-00001ec0: 656e 6369 6573 3e74 7275 653c 2f69 6e63  encies>true</inc\n-00001ed0: 6c75 6465 5072 6f6a 6563 7444 6570 656e  ludeProjectDepen\n-00001ee0: 6465 6e63 6965 733e 0d0a 2020 2020 2020  dencies>..      \n-00001ef0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001f00: 2020 2020 2020 3c63 6c61 7373 7061 7468        <classpath\n-00001f10: 5363 6f70 653e 7465 7374 3c2f 636c 6173  Scope>test</clas\n-00001f20: 7370 6174 6853 636f 7065 3e0d 0a20 2020  spathScope>..   \n-00001f30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001f40: 2020 2020 2020 2020 203c 6578 6563 7574           <execut\n-00001f50: 6162 6c65 4465 7065 6e64 656e 6379 3e0d  ableDependency>.\n-00001f60: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00001f70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001f80: 203c 6772 6f75 7049 643e 696e 666f 2e70   <groupId>info.p\n-00001f90: 6963 6f63 6c69 3c2f 6772 6f75 7049 643e  icocli</groupId>\n-00001fa0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00001fb0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00001fc0: 2020 3c61 7274 6966 6163 7449 643e 7069    <artifactId>pi\n-00001fd0: 636f 636c 692d 636f 6465 6765 6e3c 2f61  cocli-codegen</a\n-00001fe0: 7274 6966 6163 7449 643e 0d0a 2020 2020  rtifactId>..    \n+00001c00: 3c67 726f 7570 4964 3e6f 7267 2e63 6f64  <groupId>org.cod\n+00001c10: 6568 6175 732e 6d6f 6a6f 3c2f 6772 6f75  ehaus.mojo</grou\n+00001c20: 7049 643e 0a20 2020 2020 2020 2020 2020  pId>.           \n+00001c30: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00001c40: 3e65 7865 632d 6d61 7665 6e2d 706c 7567  >exec-maven-plug\n+00001c50: 696e 3c2f 6172 7469 6661 6374 4964 3e0a  in</artifactId>.\n+00001c60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001c70: 3c76 6572 7369 6f6e 3e33 2e30 2e30 3c2f  <version>3.0.0</\n+00001c80: 7665 7273 696f 6e3e 0a20 2020 2020 2020  version>.       \n+00001c90: 2020 2020 2020 2020 203c 6578 6563 7574           <execut\n+00001ca0: 696f 6e73 3e0a 2020 2020 2020 2020 2020  ions>.          \n+00001cb0: 2020 2020 2020 2020 2020 3c65 7865 6375            <execu\n+00001cc0: 7469 6f6e 3e0a 2020 2020 2020 2020 2020  tion>.          \n+00001cd0: 2020 2020 2020 2020 2020 2020 2020 3c69                <i\n+00001ce0: 643e 6765 6e65 7261 7465 2d67 7261 616c  d>generate-graal\n+00001cf0: 766d 2d69 6e66 6f3c 2f69 643e 0a20 2020  vm-info</id>.   \n+00001d00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001d10: 2020 2020 203c 7068 6173 653e 7072 6f63       <phase>proc\n+00001d20: 6573 732d 636c 6173 7365 733c 2f70 6861  ess-classes</pha\n+00001d30: 7365 3e0a 2020 2020 2020 2020 2020 2020  se>.            \n+00001d40: 2020 2020 2020 2020 2020 2020 3c67 6f61              <goa\n+00001d50: 6c73 3e0a 2020 2020 2020 2020 2020 2020  ls>.            \n+00001d60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001d70: 3c67 6f61 6c3e 6a61 7661 3c2f 676f 616c  <goal>java</goal\n+00001d80: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00001d90: 2020 2020 2020 2020 2020 3c2f 676f 616c            </goal\n+00001da0: 733e 0a20 2020 2020 2020 2020 2020 2020  s>.             \n+00001db0: 2020 2020 2020 2020 2020 203c 636f 6e66             <conf\n+00001dc0: 6967 7572 6174 696f 6e3e 0a20 2020 2020  iguration>.     \n+00001dd0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001de0: 2020 2020 2020 203c 696e 636c 7564 6550         <includeP\n+00001df0: 726f 6a65 6374 4465 7065 6e64 656e 6369  rojectDependenci\n+00001e00: 6573 3e74 7275 653c 2f69 6e63 6c75 6465  es>true</include\n+00001e10: 5072 6f6a 6563 7444 6570 656e 6465 6e63  ProjectDependenc\n+00001e20: 6965 733e 0a20 2020 2020 2020 2020 2020  ies>.           \n+00001e30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001e40: 203c 636c 6173 7370 6174 6853 636f 7065   <classpathScope\n+00001e50: 3e74 6573 743c 2f63 6c61 7373 7061 7468  >test</classpath\n+00001e60: 5363 6f70 653e 0a20 2020 2020 2020 2020  Scope>.         \n+00001e70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001e80: 2020 203c 6578 6563 7574 6162 6c65 4465     <executableDe\n+00001e90: 7065 6e64 656e 6379 3e0a 2020 2020 2020  pendency>.      \n+00001ea0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001eb0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n+00001ec0: 4964 3e69 6e66 6f2e 7069 636f 636c 693c  Id>info.picocli<\n+00001ed0: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+00001ee0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001ef0: 2020 2020 2020 2020 2020 3c61 7274 6966            <artif\n+00001f00: 6163 7449 643e 7069 636f 636c 692d 636f  actId>picocli-co\n+00001f10: 6465 6765 6e3c 2f61 7274 6966 6163 7449  degen</artifactI\n+00001f20: 643e 0a20 2020 2020 2020 2020 2020 2020  d>.             \n+00001f30: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00001f40: 2f65 7865 6375 7461 626c 6544 6570 656e  /executableDepen\n+00001f50: 6465 6e63 793e 0a20 2020 2020 2020 2020  dency>.         \n+00001f60: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001f70: 2020 203c 6d61 696e 436c 6173 733e 7069     <mainClass>pi\n+00001f80: 636f 636c 692e 636f 6465 6765 6e2e 616f  cocli.codegen.ao\n+00001f90: 742e 6772 6161 6c76 6d2e 4a6e 6943 6f6e  t.graalvm.JniCon\n+00001fa0: 6669 6747 656e 6572 6174 6f72 3c2f 6d61  figGenerator</ma\n+00001fb0: 696e 436c 6173 733e 0a20 2020 2020 2020  inClass>.       \n+00001fc0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00001fd0: 2020 2020 203c 6172 6775 6d65 6e74 733e       <arguments>\n+00001fe0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n 00001ff0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002000: 2020 2020 2020 2020 3c2f 6578 6563 7574          </execut\n-00002010: 6162 6c65 4465 7065 6e64 656e 6379 3e0d  ableDependency>.\n-00002020: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002030: 2020 2020 2020 2020 2020 2020 203c 6d61               <ma\n-00002040: 696e 436c 6173 733e 7069 636f 636c 692e  inClass>picocli.\n-00002050: 636f 6465 6765 6e2e 616f 742e 6772 6161  codegen.aot.graa\n-00002060: 6c76 6d2e 4a6e 6943 6f6e 6669 6747 656e  lvm.JniConfigGen\n-00002070: 6572 6174 6f72 3c2f 6d61 696e 436c 6173  erator</mainClas\n-00002080: 733e 0d0a 2020 2020 2020 2020 2020 2020  s>..            \n-00002090: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000020a0: 3c61 7267 756d 656e 7473 3e0d 0a20 2020  <arguments>..   \n-000020b0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000020c0: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n-000020d0: 6775 6d65 6e74 3e6f 7267 2e66 7573 6573  gument>org.fuses\n-000020e0: 6f75 7263 652e 6a61 6e73 692e 696e 7465  ource.jansi.inte\n-000020f0: 726e 616c 2e43 4c69 6272 6172 793c 2f61  rnal.CLibrary</a\n-00002100: 7267 756d 656e 743e 0d0a 2020 2020 2020  rgument>..      \n+00002000: 203c 6172 6775 6d65 6e74 3e6f 7267 2e66   <argument>org.f\n+00002010: 7573 6573 6f75 7263 652e 6a61 6e73 692e  usesource.jansi.\n+00002020: 696e 7465 726e 616c 2e43 4c69 6272 6172  internal.CLibrar\n+00002030: 793c 2f61 7267 756d 656e 743e 0a20 2020  y</argument>.   \n+00002040: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002050: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n+00002060: 6775 6d65 6e74 3e6f 7267 2e66 7573 6573  gument>org.fuses\n+00002070: 6f75 7263 652e 6a61 6e73 692e 696e 7465  ource.jansi.inte\n+00002080: 726e 616c 2e4b 6572 6e65 6c33 323c 2f61  rnal.Kernel32</a\n+00002090: 7267 756d 656e 743e 0a20 2020 2020 2020  rgument>.       \n+000020a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000020b0: 2020 2020 2020 2020 203c 6172 6775 6d65           <argume\n+000020c0: 6e74 3e2d 6f3d 7461 7267 6574 2f63 6c61  nt>-o=target/cla\n+000020d0: 7373 6573 2f4d 4554 412d 494e 462f 6e61  sses/META-INF/na\n+000020e0: 7469 7665 2d69 6d61 6765 2f6a 616e 7369  tive-image/jansi\n+000020f0: 2f6a 6e69 2d63 6f6e 6669 672e 6a73 6f6e  /jni-config.json\n+00002100: 3c2f 6172 6775 6d65 6e74 3e0a 2020 2020  </argument>.    \n 00002110: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002120: 2020 2020 2020 2020 2020 3c61 7267 756d            <argum\n-00002130: 656e 743e 6f72 672e 6675 7365 736f 7572  ent>org.fusesour\n-00002140: 6365 2e6a 616e 7369 2e69 6e74 6572 6e61  ce.jansi.interna\n-00002150: 6c2e 4b65 726e 656c 3332 3c2f 6172 6775  l.Kernel32</argu\n-00002160: 6d65 6e74 3e0d 0a20 2020 2020 2020 2020  ment>..         \n-00002170: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002180: 2020 2020 2020 203c 6172 6775 6d65 6e74         <argument\n-00002190: 3e2d 6f3d 7461 7267 6574 2f63 6c61 7373  >-o=target/class\n-000021a0: 6573 2f4d 4554 412d 494e 462f 6e61 7469  es/META-INF/nati\n-000021b0: 7665 2d69 6d61 6765 2f6a 616e 7369 2f6a  ve-image/jansi/j\n-000021c0: 6e69 2d63 6f6e 6669 672e 6a73 6f6e 3c2f  ni-config.json</\n-000021d0: 6172 6775 6d65 6e74 3e0d 0a20 2020 2020  argument>..     \n+00002120: 2020 2020 2020 2020 3c2f 6172 6775 6d65          </argume\n+00002130: 6e74 733e 0a20 2020 2020 2020 2020 2020  nts>.           \n+00002140: 2020 2020 2020 2020 2020 2020 203c 2f63               </c\n+00002150: 6f6e 6669 6775 7261 7469 6f6e 3e0a 2020  onfiguration>.  \n+00002160: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002170: 2020 3c2f 6578 6563 7574 696f 6e3e 0a20    </execution>. \n+00002180: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002190: 2f65 7865 6375 7469 6f6e 733e 0a20 2020  /executions>.   \n+000021a0: 2020 2020 2020 2020 2020 2020 203c 6465               <de\n+000021b0: 7065 6e64 656e 6369 6573 3e0a 2020 2020  pendencies>.    \n+000021c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000021d0: 3c64 6570 656e 6465 6e63 793e 0a20 2020  <dependency>.   \n 000021e0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000021f0: 2020 2020 2020 203c 2f61 7267 756d 656e         </argumen\n-00002200: 7473 3e0d 0a20 2020 2020 2020 2020 2020  ts>..           \n-00002210: 2020 2020 2020 2020 2020 2020 203c 2f63               </c\n-00002220: 6f6e 6669 6775 7261 7469 6f6e 3e0d 0a20  onfiguration>.. \n-00002230: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002240: 2020 203c 2f65 7865 6375 7469 6f6e 3e0d     </execution>.\n-00002250: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002260: 203c 2f65 7865 6375 7469 6f6e 733e 0d0a   </executions>..\n-00002270: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002280: 3c64 6570 656e 6465 6e63 6965 733e 0d0a  <dependencies>..\n-00002290: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000022a0: 2020 2020 3c64 6570 656e 6465 6e63 793e      <dependency>\n-000022b0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-000022c0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-000022d0: 4964 3e69 6e66 6f2e 7069 636f 636c 693c  Id>info.picocli<\n-000022e0: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-000022f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002300: 2020 203c 6172 7469 6661 6374 4964 3e70     <artifactId>p\n-00002310: 6963 6f63 6c69 2d63 6f64 6567 656e 3c2f  icocli-codegen</\n-00002320: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n+000021f0: 2020 2020 203c 6772 6f75 7049 643e 696e       <groupId>in\n+00002200: 666f 2e70 6963 6f63 6c69 3c2f 6772 6f75  fo.picocli</grou\n+00002210: 7049 643e 0a20 2020 2020 2020 2020 2020  pId>.           \n+00002220: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n+00002230: 7469 6661 6374 4964 3e70 6963 6f63 6c69  tifactId>picocli\n+00002240: 2d63 6f64 6567 656e 3c2f 6172 7469 6661  -codegen</artifa\n+00002250: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+00002260: 2020 2020 2020 2020 2020 2020 2020 3c76                <v\n+00002270: 6572 7369 6f6e 3e34 2e35 2e32 3c2f 7665  ersion>4.5.2</ve\n+00002280: 7273 696f 6e3e 0a20 2020 2020 2020 2020  rsion>.         \n+00002290: 2020 2020 2020 2020 2020 203c 2f64 6570             </dep\n+000022a0: 656e 6465 6e63 793e 0a20 2020 2020 2020  endency>.       \n+000022b0: 2020 2020 2020 2020 203c 2f64 6570 656e           </depen\n+000022c0: 6465 6e63 6965 733e 0a20 2020 2020 2020  dencies>.       \n+000022d0: 2020 2020 203c 2f70 6c75 6769 6e3e 0a20       </plugin>. \n+000022e0: 2020 2020 2020 2020 2020 203c 706c 7567             <plug\n+000022f0: 696e 3e0a 2020 2020 2020 2020 2020 2020  in>.            \n+00002300: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+00002310: 2e61 7061 6368 652e 6d61 7665 6e2e 706c  .apache.maven.pl\n+00002320: 7567 696e 733c 2f67 726f 7570 4964 3e0a  ugins</groupId>.\n 00002330: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002340: 2020 2020 203c 7665 7273 696f 6e3e 342e       <version>4.\n-00002350: 352e 323c 2f76 6572 7369 6f6e 3e0d 0a20  5.2</version>.. \n-00002360: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002370: 2020 203c 2f64 6570 656e 6465 6e63 793e     </dependency>\n-00002380: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00002390: 2020 3c2f 6465 7065 6e64 656e 6369 6573    </dependencies\n-000023a0: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-000023b0: 2f70 6c75 6769 6e3e 0d0a 2020 2020 2020  /plugin>..      \n-000023c0: 2020 2020 2020 3c70 6c75 6769 6e3e 0d0a        <plugin>..\n-000023d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000023e0: 3c67 726f 7570 4964 3e6f 7267 2e61 7061  <groupId>org.apa\n-000023f0: 6368 652e 6d61 7665 6e2e 706c 7567 696e  che.maven.plugin\n-00002400: 733c 2f67 726f 7570 4964 3e0d 0a20 2020  s</groupId>..   \n-00002410: 2020 2020 2020 2020 2020 2020 203c 6172               <ar\n-00002420: 7469 6661 6374 4964 3e6d 6176 656e 2d73  tifactId>maven-s\n-00002430: 7572 6566 6972 652d 706c 7567 696e 3c2f  urefire-plugin</\n-00002440: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n-00002450: 2020 2020 2020 2020 2020 2020 203c 7665               <ve\n-00002460: 7273 696f 6e3e 332e 302e 302d 4d35 3c2f  rsion>3.0.0-M5</\n-00002470: 7665 7273 696f 6e3e 0d0a 2020 2020 2020  version>..      \n-00002480: 2020 2020 2020 2020 2020 3c63 6f6e 6669            <confi\n-00002490: 6775 7261 7469 6f6e 3e0d 0a20 2020 2020  guration>..     \n-000024a0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-000024b0: 7265 6469 7265 6374 5465 7374 4f75 7470  redirectTestOutp\n-000024c0: 7574 546f 4669 6c65 3e74 7275 653c 2f72  utToFile>true</r\n-000024d0: 6564 6972 6563 7454 6573 744f 7574 7075  edirectTestOutpu\n-000024e0: 7454 6f46 696c 653e 0d0a 2020 2020 2020  tToFile>..      \n-000024f0: 2020 2020 2020 2020 2020 2020 2020 3c66                <f\n-00002500: 6f72 6b43 6f75 6e74 3e31 3c2f 666f 726b  orkCount>1</fork\n-00002510: 436f 756e 743e 0d0a 2020 2020 2020 2020  Count>..        \n-00002520: 2020 2020 2020 2020 2020 2020 3c72 6575              <reu\n-00002530: 7365 466f 726b 733e 7472 7565 3c2f 7265  seForks>true</re\n-00002540: 7573 6546 6f72 6b73 3e0d 0a20 2020 2020  useForks>..     \n-00002550: 2020 2020 2020 2020 2020 203c 2f63 6f6e             </con\n-00002560: 6669 6775 7261 7469 6f6e 3e0d 0a20 2020  figuration>..   \n-00002570: 2020 2020 2020 2020 203c 2f70 6c75 6769           </plugi\n-00002580: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00002590: 3c70 6c75 6769 6e3e 0d0a 2020 2020 2020  <plugin>..      \n-000025a0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-000025b0: 4964 3e6f 7267 2e61 7061 6368 652e 6d61  Id>org.apache.ma\n-000025c0: 7665 6e2e 706c 7567 696e 733c 2f67 726f  ven.plugins</gro\n-000025d0: 7570 4964 3e0d 0a20 2020 2020 2020 2020  upId>..         \n-000025e0: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-000025f0: 4964 3e6d 6176 656e 2d6a 6172 2d70 6c75  Id>maven-jar-plu\n-00002600: 6769 6e3c 2f61 7274 6966 6163 7449 643e  gin</artifactId>\n-00002610: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00002620: 2020 3c76 6572 7369 6f6e 3e33 2e32 2e30    <version>3.2.0\n-00002630: 3c2f 7665 7273 696f 6e3e 0d0a 2020 2020  </version>..    \n-00002640: 2020 2020 2020 2020 2020 2020 3c63 6f6e              <con\n-00002650: 6669 6775 7261 7469 6f6e 3e0d 0a20 2020  figuration>..   \n-00002660: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002670: 203c 6172 6368 6976 653e 0d0a 2020 2020   <archive>..    \n-00002680: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002690: 2020 2020 3c6d 616e 6966 6573 7445 6e74      <manifestEnt\n-000026a0: 7269 6573 3e0d 0a20 2020 2020 2020 2020  ries>..         \n-000026b0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000026c0: 2020 203c 4175 746f 6d61 7469 632d 4d6f     <Automatic-Mo\n-000026d0: 6475 6c65 2d4e 616d 653e 6f72 672e 6675  dule-Name>org.fu\n-000026e0: 7365 736f 7572 6365 2e6a 616e 7369 3c2f  sesource.jansi</\n-000026f0: 4175 746f 6d61 7469 632d 4d6f 6475 6c65  Automatic-Module\n-00002700: 2d4e 616d 653e 0d0a 2020 2020 2020 2020  -Name>..        \n-00002710: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002720: 3c2f 6d61 6e69 6665 7374 456e 7472 6965  </manifestEntrie\n-00002730: 733e 0d0a 2020 2020 2020 2020 2020 2020  s>..            \n-00002740: 2020 2020 2020 2020 2020 2020 3c6d 616e              <man\n-00002750: 6966 6573 7446 696c 653e 247b 7072 6f6a  ifestFile>${proj\n-00002760: 6563 742e 6275 696c 642e 6f75 7470 7574  ect.build.output\n-00002770: 4469 7265 6374 6f72 797d 2f4d 4554 412d  Directory}/META-\n-00002780: 494e 462f 4d41 4e49 4645 5354 2e4d 463c  INF/MANIFEST.MF<\n-00002790: 2f6d 616e 6966 6573 7446 696c 653e 0d0a  /manifestFile>..\n-000027a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000027b0: 2020 2020 3c2f 6172 6368 6976 653e 0d0a      </archive>..\n-000027c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000027d0: 3c2f 636f 6e66 6967 7572 6174 696f 6e3e  </configuration>\n-000027e0: 0d0a 2020 2020 2020 2020 2020 2020 3c2f  ..            </\n-000027f0: 706c 7567 696e 3e0d 0a20 2020 2020 2020  plugin>..       \n-00002800: 2020 2020 203c 706c 7567 696e 3e0d 0a20       <plugin>.. \n-00002810: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00002820: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n-00002830: 6865 2e6d 6176 656e 2e70 6c75 6769 6e73  he.maven.plugins\n-00002840: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-00002850: 2020 2020 2020 2020 2020 2020 3c61 7274              <art\n-00002860: 6966 6163 7449 643e 6d61 7665 6e2d 6a61  ifactId>maven-ja\n-00002870: 7661 646f 632d 706c 7567 696e 3c2f 6172  vadoc-plugin</ar\n-00002880: 7469 6661 6374 4964 3e0d 0a20 2020 2020  tifactId>..     \n-00002890: 2020 2020 2020 2020 2020 203c 7665 7273             <vers\n-000028a0: 696f 6e3e 332e 322e 303c 2f76 6572 7369  ion>3.2.0</versi\n-000028b0: 6f6e 3e0d 0a20 2020 2020 2020 2020 2020  on>..           \n-000028c0: 2020 2020 203c 636f 6e66 6967 7572 6174       <configurat\n-000028d0: 696f 6e3e 0d0a 2020 2020 2020 2020 2020  ion>..          \n-000028e0: 2020 2020 2020 2020 2020 3c64 6f63 7469            <docti\n-000028f0: 746c 653e 247b 7072 6f6a 6563 742e 6e61  tle>${project.na\n-00002900: 6d65 7d20 4150 4920 5265 6665 7265 6e63  me} API Referenc\n-00002910: 6520 2824 7b70 726f 6a65 6374 2e76 6572  e (${project.ver\n-00002920: 7369 6f6e 7d29 3c2f 646f 6374 6974 6c65  sion})</doctitle\n-00002930: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00002940: 2020 2020 2020 203c 7769 6e64 6f77 7469         <windowti\n-00002950: 746c 653e 247b 7072 6f6a 6563 742e 6e61  tle>${project.na\n-00002960: 6d65 7d20 4150 4920 5265 6665 7265 6e63  me} API Referenc\n-00002970: 6520 2824 7b70 726f 6a65 6374 2e76 6572  e (${project.ver\n-00002980: 7369 6f6e 7d29 3c2f 7769 6e64 6f77 7469  sion})</windowti\n-00002990: 746c 653e 0d0a 2020 2020 2020 2020 2020  tle>..          \n-000029a0: 2020 2020 2020 2020 2020 3c6c 6f63 616c            <local\n-000029b0: 653e 656e 5f55 533c 2f6c 6f63 616c 653e  e>en_US</locale>\n-000029c0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-000029d0: 2020 2020 2020 3c6c 696e 6b73 6f75 7263        <linksourc\n-000029e0: 653e 7472 7565 3c2f 6c69 6e6b 736f 7572  e>true</linksour\n-000029f0: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00002a00: 2020 2020 2020 2020 203c 6e6f 7469 6d65           <notime\n-00002a10: 7374 616d 703e 7472 7565 3c2f 6e6f 7469  stamp>true</noti\n-00002a20: 6d65 7374 616d 703e 0d0a 2020 2020 2020  mestamp>..      \n-00002a30: 2020 2020 2020 2020 2020 2020 2020 3c71                <q\n-00002a40: 7569 6574 3e74 7275 653c 2f71 7569 6574  uiet>true</quiet\n-00002a50: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00002a60: 2020 2020 2020 203c 646f 6365 6e63 6f64         <docencod\n-00002a70: 696e 673e 5554 462d 383c 2f64 6f63 656e  ing>UTF-8</docen\n-00002a80: 636f 6469 6e67 3e0d 0a20 2020 2020 2020  coding>..       \n-00002a90: 2020 2020 2020 2020 2020 2020 203c 7665               <ve\n-00002aa0: 7273 696f 6e3e 6661 6c73 653c 2f76 6572  rsion>false</ver\n-00002ab0: 7369 6f6e 3e0d 0a20 2020 2020 2020 2020  sion>..         \n-00002ac0: 2020 2020 2020 2020 2020 203c 6175 7468             <auth\n-00002ad0: 6f72 3e74 7275 653c 2f61 7574 686f 723e  or>true</author>\n-00002ae0: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00002af0: 2020 2020 2020 3c6b 6579 776f 7264 733e        <keywords>\n-00002b00: 7472 7565 3c2f 6b65 7977 6f72 6473 3e0d  true</keywords>.\n-00002b10: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002b20: 2020 2020 203c 736f 7572 6365 3e24 7b6a       <source>${j\n-00002b30: 6176 6164 6f63 536f 7572 6365 7d3c 2f73  avadocSource}</s\n-00002b40: 6f75 7263 653e 0d0a 2020 2020 2020 2020  ource>..        \n-00002b50: 2020 2020 2020 2020 3c2f 636f 6e66 6967          </config\n-00002b60: 7572 6174 696f 6e3e 0d0a 2020 2020 2020  uration>..      \n-00002b70: 2020 2020 2020 2020 2020 3c65 7865 6375            <execu\n-00002b80: 7469 6f6e 733e 0d0a 2020 2020 2020 2020  tions>..        \n-00002b90: 2020 2020 2020 2020 2020 2020 3c65 7865              <exe\n-00002ba0: 6375 7469 6f6e 3e0d 0a20 2020 2020 2020  cution>..       \n-00002bb0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002bc0: 203c 6964 3e61 7474 6163 682d 6a61 7661   <id>attach-java\n-00002bd0: 646f 6373 3c2f 6964 3e0d 0a20 2020 2020  docs</id>..     \n-00002be0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002bf0: 2020 203c 676f 616c 733e 0d0a 2020 2020     <goals>..    \n-00002c00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002c10: 2020 2020 2020 2020 3c67 6f61 6c3e 6a61          <goal>ja\n-00002c20: 723c 2f67 6f61 6c3e 0d0a 2020 2020 2020  r</goal>..      \n-00002c30: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002c40: 2020 3c2f 676f 616c 733e 0d0a 2020 2020    </goals>..    \n-00002c50: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002c60: 3c2f 6578 6563 7574 696f 6e3e 0d0a 2020  </execution>..  \n-00002c70: 2020 2020 2020 2020 2020 2020 2020 3c2f                </\n-00002c80: 6578 6563 7574 696f 6e73 3e0d 0a20 2020  executions>..   \n-00002c90: 2020 2020 2020 2020 203c 2f70 6c75 6769           </plugi\n-00002ca0: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00002cb0: 3c70 6c75 6769 6e3e 0d0a 2020 2020 2020  <plugin>..      \n-00002cc0: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-00002cd0: 4964 3e6f 7267 2e61 7061 6368 652e 6d61  Id>org.apache.ma\n-00002ce0: 7665 6e2e 706c 7567 696e 733c 2f67 726f  ven.plugins</gro\n-00002cf0: 7570 4964 3e0d 0a20 2020 2020 2020 2020  upId>..         \n-00002d00: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-00002d10: 4964 3e6d 6176 656e 2d73 6f75 7263 652d  Id>maven-source-\n-00002d20: 706c 7567 696e 3c2f 6172 7469 6661 6374  plugin</artifact\n-00002d30: 4964 3e0d 0a20 2020 2020 2020 2020 2020  Id>..           \n-00002d40: 2020 2020 203c 7665 7273 696f 6e3e 332e       <version>3.\n-00002d50: 322e 313c 2f76 6572 7369 6f6e 3e0d 0a20  2.1</version>.. \n-00002d60: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n-00002d70: 6578 6563 7574 696f 6e73 3e0d 0a20 2020  executions>..   \n-00002d80: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002d90: 203c 6578 6563 7574 696f 6e3e 0d0a 2020   <execution>..  \n-00002da0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002db0: 2020 2020 2020 3c69 643e 6174 7461 6368        <id>attach\n-00002dc0: 2d73 6f75 7263 6573 3c2f 6964 3e0d 0a20  -sources</id>.. \n-00002dd0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002de0: 2020 2020 2020 203c 676f 616c 733e 0d0a         <goals>..\n-00002df0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00002e00: 2020 2020 2020 2020 2020 2020 3c67 6f61              <goa\n-00002e10: 6c3e 6a61 722d 6e6f 2d66 6f72 6b3c 2f67  l>jar-no-fork</g\n-00002e20: 6f61 6c3e 0d0a 2020 2020 2020 2020 2020  oal>..          \n-00002e30: 2020 2020 2020 2020 2020 2020 2020 3c2f                </\n-00002e40: 676f 616c 733e 0d0a 2020 2020 2020 2020  goals>..        \n-00002e50: 2020 2020 2020 2020 2020 2020 3c2f 6578              </ex\n-00002e60: 6563 7574 696f 6e3e 0d0a 2020 2020 2020  ecution>..      \n-00002e70: 2020 2020 2020 2020 2020 3c2f 6578 6563            </exec\n-00002e80: 7574 696f 6e73 3e0d 0a20 2020 2020 2020  utions>..       \n-00002e90: 2020 2020 203c 2f70 6c75 6769 6e3e 0d0a       </plugin>..\n-00002ea0: 2020 2020 2020 2020 2020 2020 3c70 6c75              <plu\n-00002eb0: 6769 6e3e 0d0a 2020 2020 2020 2020 2020  gin>..          \n-00002ec0: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n-00002ed0: 7267 2e61 7061 6368 652e 6d61 7665 6e2e  rg.apache.maven.\n-00002ee0: 706c 7567 696e 733c 2f67 726f 7570 4964  plugins</groupId\n-00002ef0: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-00002f00: 2020 203c 6172 7469 6661 6374 4964 3e6d     <artifactId>m\n-00002f10: 6176 656e 2d64 6570 6c6f 792d 706c 7567  aven-deploy-plug\n-00002f20: 696e 3c2f 6172 7469 6661 6374 4964 3e0d  in</artifactId>.\n-00002f30: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00002f40: 203c 7665 7273 696f 6e3e 332e 302e 302d   <version>3.0.0-\n-00002f50: 4d31 3c2f 7665 7273 696f 6e3e 0d0a 2020  M1</version>..  \n-00002f60: 2020 2020 2020 2020 2020 3c2f 706c 7567            </plug\n-00002f70: 696e 3e0d 0a20 2020 2020 2020 2020 2020  in>..           \n-00002f80: 203c 706c 7567 696e 3e0d 0a20 2020 2020   <plugin>..     \n-00002f90: 2020 2020 2020 2020 2020 203c 6772 6f75             <grou\n-00002fa0: 7049 643e 6f72 672e 6170 6163 6865 2e6d  pId>org.apache.m\n-00002fb0: 6176 656e 2e70 6c75 6769 6e73 3c2f 6772  aven.plugins</gr\n-00002fc0: 6f75 7049 643e 0d0a 2020 2020 2020 2020  oupId>..        \n-00002fd0: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n-00002fe0: 7449 643e 6d61 7665 6e2d 7265 6c65 6173  tId>maven-releas\n-00002ff0: 652d 706c 7567 696e 3c2f 6172 7469 6661  e-plugin</artifa\n-00003000: 6374 4964 3e0d 0a20 2020 2020 2020 2020  ctId>..         \n-00003010: 2020 2020 2020 203c 7665 7273 696f 6e3e         <version>\n-00003020: 332e 302e 302d 4d31 3c2f 7665 7273 696f  3.0.0-M1</versio\n-00003030: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00003040: 3c2f 706c 7567 696e 3e0d 0a20 2020 2020  </plugin>..     \n-00003050: 2020 2020 2020 203c 706c 7567 696e 3e0d         <plugin>.\n-00003060: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00003070: 203c 6772 6f75 7049 643e 6f72 672e 6170   <groupId>org.ap\n-00003080: 6163 6865 2e6d 6176 656e 2e70 6c75 6769  ache.maven.plugi\n-00003090: 6e73 3c2f 6772 6f75 7049 643e 0d0a 2020  ns</groupId>..  \n-000030a0: 2020 2020 2020 2020 2020 2020 2020 3c61                <a\n-000030b0: 7274 6966 6163 7449 643e 6d61 7665 6e2d  rtifactId>maven-\n-000030c0: 6770 672d 706c 7567 696e 3c2f 6172 7469  gpg-plugin</arti\n-000030d0: 6661 6374 4964 3e0d 0a20 2020 2020 2020  factId>..       \n-000030e0: 2020 2020 2020 2020 203c 7665 7273 696f           <versio\n-000030f0: 6e3e 312e 363c 2f76 6572 7369 6f6e 3e0d  n>1.6</version>.\n-00003100: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00003110: 203c 6578 6563 7574 696f 6e73 3e0d 0a20   <executions>.. \n-00003120: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003130: 2020 203c 6578 6563 7574 696f 6e3e 0d0a     <execution>..\n-00003140: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003150: 2020 2020 2020 2020 3c69 643e 7369 676e          <id>sign\n-00003160: 2d61 7274 6966 6163 7473 3c2f 6964 3e0d  -artifacts</id>.\n-00003170: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-00003180: 2020 2020 2020 2020 203c 7068 6173 653e           <phase>\n-00003190: 7665 7269 6679 3c2f 7068 6173 653e 0d0a  verify</phase>..\n-000031a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-000031b0: 2020 2020 2020 2020 3c67 6f61 6c73 3e0d          <goals>.\n-000031c0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n-000031d0: 2020 2020 2020 2020 2020 2020 203c 676f               <go\n-000031e0: 616c 3e73 6967 6e3c 2f67 6f61 6c3e 0d0a  al>sign</goal>..\n-000031f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003200: 2020 2020 2020 2020 3c2f 676f 616c 733e          </goals>\n-00003210: 0d0a 2020 2020 2020 2020 2020 2020 2020  ..              \n-00003220: 2020 2020 2020 3c2f 6578 6563 7574 696f        </executio\n-00003230: 6e3e 0d0a 2020 2020 2020 2020 2020 2020  n>..            \n-00003240: 2020 2020 3c2f 6578 6563 7574 696f 6e73      </executions\n-00003250: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00003260: 2f70 6c75 6769 6e3e 0d0a 2020 2020 2020  /plugin>..      \n-00003270: 2020 2020 2020 3c70 6c75 6769 6e3e 0d0a        <plugin>..\n-00003280: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003290: 3c67 726f 7570 4964 3e6f 7267 2e73 6f6e  <groupId>org.son\n-000032a0: 6174 7970 652e 706c 7567 696e 733c 2f67  atype.plugins</g\n-000032b0: 726f 7570 4964 3e0d 0a20 2020 2020 2020  roupId>..       \n-000032c0: 2020 2020 2020 2020 203c 6172 7469 6661           <artifa\n-000032d0: 6374 4964 3e6e 6578 7573 2d73 7461 6769  ctId>nexus-stagi\n-000032e0: 6e67 2d6d 6176 656e 2d70 6c75 6769 6e3c  ng-maven-plugin<\n-000032f0: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00003300: 2020 2020 2020 2020 2020 2020 2020 3c76                <v\n-00003310: 6572 7369 6f6e 3e31 2e36 2e38 3c2f 7665  ersion>1.6.8</ve\n-00003320: 7273 696f 6e3e 0d0a 2020 2020 2020 2020  rsion>..        \n-00003330: 2020 2020 2020 2020 3c65 7874 656e 7369          <extensi\n-00003340: 6f6e 733e 7472 7565 3c2f 6578 7465 6e73  ons>true</extens\n-00003350: 696f 6e73 3e0d 0a20 2020 2020 2020 2020  ions>..         \n-00003360: 2020 2020 2020 203c 636f 6e66 6967 7572         <configur\n-00003370: 6174 696f 6e3e 0d0a 2020 2020 2020 2020  ation>..        \n-00003380: 2020 2020 2020 2020 2020 2020 3c73 6572              <ser\n-00003390: 7665 7249 643e 6f73 7372 683c 2f73 6572  verId>ossrh</ser\n-000033a0: 7665 7249 643e 0d0a 2020 2020 2020 2020  verId>..        \n-000033b0: 2020 2020 2020 2020 2020 2020 3c6e 6578              <nex\n-000033c0: 7573 5572 6c3e 6874 7470 733a 2f2f 6f73  usUrl>https://os\n-000033d0: 732e 736f 6e61 7479 7065 2e6f 7267 2f3c  s.sonatype.org/<\n-000033e0: 2f6e 6578 7573 5572 6c3e 0d0a 2020 2020  /nexusUrl>..    \n-000033f0: 2020 2020 2020 2020 2020 2020 3c2f 636f              </co\n-00003400: 6e66 6967 7572 6174 696f 6e3e 0d0a 2020  nfiguration>..  \n-00003410: 2020 2020 2020 2020 2020 3c2f 706c 7567            </plug\n-00003420: 696e 3e0d 0a20 2020 2020 2020 203c 2f70  in>..        </p\n-00003430: 6c75 6769 6e73 3e0d 0a20 2020 203c 2f62  lugins>..    </b\n-00003440: 7569 6c64 3e0d 0a0d 0a20 2020 203c 6465  uild>....    <de\n-00003450: 7065 6e64 656e 6369 6573 3e0d 0a20 2020  pendencies>..   \n-00003460: 2020 2020 203c 6465 7065 6e64 656e 6379       <dependency\n-00003470: 3e0d 0a20 2020 2020 2020 2020 2020 203c  >..            <\n-00003480: 6772 6f75 7049 643e 6f72 672e 6a75 6e69  groupId>org.juni\n-00003490: 742e 6a75 7069 7465 723c 2f67 726f 7570  t.jupiter</group\n-000034a0: 4964 3e0d 0a20 2020 2020 2020 2020 2020  Id>..           \n-000034b0: 203c 6172 7469 6661 6374 4964 3e6a 756e   <artifactId>jun\n-000034c0: 6974 2d6a 7570 6974 6572 3c2f 6172 7469  it-jupiter</arti\n-000034d0: 6661 6374 4964 3e0d 0a20 2020 2020 2020  factId>..       \n-000034e0: 2020 2020 203c 7665 7273 696f 6e3e 352e       <version>5.\n-000034f0: 372e 303c 2f76 6572 7369 6f6e 3e0d 0a20  7.0</version>.. \n-00003500: 2020 2020 2020 2020 2020 203c 7363 6f70             <scop\n-00003510: 653e 7465 7374 3c2f 7363 6f70 653e 0d0a  e>test</scope>..\n-00003520: 2020 2020 2020 2020 3c2f 6465 7065 6e64          </depend\n-00003530: 656e 6379 3e0d 0a20 2020 2020 2020 203c  ency>..        <\n-00003540: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00003550: 2020 2020 2020 2020 203c 6772 6f75 7049           <groupI\n-00003560: 643e 6f72 672e 6a75 6e69 742e 6a75 7069  d>org.junit.jupi\n-00003570: 7465 723c 2f67 726f 7570 4964 3e0d 0a20  ter</groupId>.. \n-00003580: 2020 2020 2020 2020 2020 203c 6172 7469             <arti\n-00003590: 6661 6374 4964 3e6a 756e 6974 2d6a 7570  factId>junit-jup\n-000035a0: 6974 6572 2d70 6172 616d 733c 2f61 7274  iter-params</art\n-000035b0: 6966 6163 7449 643e 0d0a 2020 2020 2020  ifactId>..      \n-000035c0: 2020 2020 2020 3c76 6572 7369 6f6e 3e35        <version>5\n-000035d0: 2e37 2e30 3c2f 7665 7273 696f 6e3e 0d0a  .7.0</version>..\n-000035e0: 2020 2020 2020 2020 2020 2020 3c73 636f              <sco\n-000035f0: 7065 3e74 6573 743c 2f73 636f 7065 3e0d  pe>test</scope>.\n-00003600: 0a20 2020 2020 2020 203c 2f64 6570 656e  .        </depen\n-00003610: 6465 6e63 793e 0d0a 2020 2020 2020 2020  dency>..        \n-00003620: 3c64 6570 656e 6465 6e63 793e 0d0a 2020  <dependency>..  \n-00003630: 2020 2020 2020 2020 2020 3c67 726f 7570            <group\n-00003640: 4964 3e69 6e66 6f2e 7069 636f 636c 693c  Id>info.picocli<\n-00003650: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-00003660: 2020 2020 2020 203c 6172 7469 6661 6374         <artifact\n-00003670: 4964 3e70 6963 6f63 6c69 2d63 6f64 6567  Id>picocli-codeg\n-00003680: 656e 3c2f 6172 7469 6661 6374 4964 3e0d  en</artifactId>.\n-00003690: 0a20 2020 2020 2020 2020 2020 203c 7665  .            <ve\n-000036a0: 7273 696f 6e3e 342e 352e 323c 2f76 6572  rsion>4.5.2</ver\n-000036b0: 7369 6f6e 3e0d 0a20 2020 2020 2020 2020  sion>..         \n-000036c0: 2020 203c 7363 6f70 653e 7465 7374 3c2f     <scope>test</\n-000036d0: 7363 6f70 653e 0d0a 2020 2020 2020 2020  scope>..        \n-000036e0: 3c2f 6465 7065 6e64 656e 6379 3e0d 0a20  </dependency>.. \n-000036f0: 2020 203c 2f64 6570 656e 6465 6e63 6965     </dependencie\n-00003700: 733e 0d0a 0d0a 2020 2020 3c70 726f 6669  s>....    <profi\n-00003710: 6c65 733e 0d0a 2020 2020 2020 2020 3c70  les>..        <p\n-00003720: 726f 6669 6c65 3e0d 0a20 2020 2020 2020  rofile>..       \n-00003730: 2020 2020 203c 6964 3e6a 646b 3135 2b3c       <id>jdk15+<\n-00003740: 2f69 643e 0d0a 2020 2020 2020 2020 2020  /id>..          \n-00003750: 2020 3c61 6374 6976 6174 696f 6e3e 0d0a    <activation>..\n-00003760: 2020 2020 2020 2020 2020 2020 2020 2020                  \n-00003770: 3c6a 646b 3e5b 3135 2c29 3c2f 6a64 6b3e  <jdk>[15,)</jdk>\n-00003780: 0d0a 2020 2020 2020 2020 2020 2020 3c2f  ..            </\n-00003790: 6163 7469 7661 7469 6f6e 3e0d 0a20 2020  activation>..   \n-000037a0: 2020 2020 2020 2020 203c 7072 6f70 6572           <proper\n-000037b0: 7469 6573 3e0d 0a20 2020 2020 2020 2020  ties>..         \n-000037c0: 2020 2020 2020 203c 6a64 6b54 6172 6765         <jdkTarge\n-000037d0: 743e 312e 373c 2f6a 646b 5461 7267 6574  t>1.7</jdkTarget\n-000037e0: 3e0d 0a20 2020 2020 2020 2020 2020 2020  >..             \n-000037f0: 2020 203c 6a61 7661 646f 6353 6f75 7263     <javadocSourc\n-00003800: 653e 373c 2f6a 6176 6164 6f63 536f 7572  e>7</javadocSour\n-00003810: 6365 3e0d 0a20 2020 2020 2020 2020 2020  ce>..           \n-00003820: 203c 2f70 726f 7065 7274 6965 733e 0d0a   </properties>..\n-00003830: 2020 2020 2020 2020 3c2f 7072 6f66 696c          </profil\n-00003840: 653e 0d0a 2020 2020 3c2f 7072 6f66 696c  e>..    </profil\n-00003850: 6573 3e0d 0a0d 0a3c 2f70 726f 6a65 6374  es>....</project\n-00003860: 3e0d 0a                                  >..\n+00002340: 3c61 7274 6966 6163 7449 643e 6d61 7665  <artifactId>mave\n+00002350: 6e2d 7375 7265 6669 7265 2d70 6c75 6769  n-surefire-plugi\n+00002360: 6e3c 2f61 7274 6966 6163 7449 643e 0a20  n</artifactId>. \n+00002370: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002380: 7665 7273 696f 6e3e 332e 302e 302d 4d35  version>3.0.0-M5\n+00002390: 3c2f 7665 7273 696f 6e3e 0a20 2020 2020  </version>.     \n+000023a0: 2020 2020 2020 2020 2020 203c 636f 6e66             <conf\n+000023b0: 6967 7572 6174 696f 6e3e 0a20 2020 2020  iguration>.     \n+000023c0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+000023d0: 7265 6469 7265 6374 5465 7374 4f75 7470  redirectTestOutp\n+000023e0: 7574 546f 4669 6c65 3e74 7275 653c 2f72  utToFile>true</r\n+000023f0: 6564 6972 6563 7454 6573 744f 7574 7075  edirectTestOutpu\n+00002400: 7454 6f46 696c 653e 0a20 2020 2020 2020  tToFile>.       \n+00002410: 2020 2020 2020 2020 2020 2020 203c 666f               <fo\n+00002420: 726b 436f 756e 743e 313c 2f66 6f72 6b43  rkCount>1</forkC\n+00002430: 6f75 6e74 3e0a 2020 2020 2020 2020 2020  ount>.          \n+00002440: 2020 2020 2020 2020 2020 3c72 6575 7365            <reuse\n+00002450: 466f 726b 733e 7472 7565 3c2f 7265 7573  Forks>true</reus\n+00002460: 6546 6f72 6b73 3e0a 2020 2020 2020 2020  eForks>.        \n+00002470: 2020 2020 2020 2020 3c2f 636f 6e66 6967          </config\n+00002480: 7572 6174 696f 6e3e 0a20 2020 2020 2020  uration>.       \n+00002490: 2020 2020 203c 2f70 6c75 6769 6e3e 0a20       </plugin>. \n+000024a0: 2020 2020 2020 2020 2020 203c 706c 7567             <plug\n+000024b0: 696e 3e0a 2020 2020 2020 2020 2020 2020  in>.            \n+000024c0: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+000024d0: 2e61 7061 6368 652e 6d61 7665 6e2e 706c  .apache.maven.pl\n+000024e0: 7567 696e 733c 2f67 726f 7570 4964 3e0a  ugins</groupId>.\n+000024f0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002500: 3c61 7274 6966 6163 7449 643e 6d61 7665  <artifactId>mave\n+00002510: 6e2d 6a61 722d 706c 7567 696e 3c2f 6172  n-jar-plugin</ar\n+00002520: 7469 6661 6374 4964 3e0a 2020 2020 2020  tifactId>.      \n+00002530: 2020 2020 2020 2020 2020 3c76 6572 7369            <versi\n+00002540: 6f6e 3e33 2e32 2e30 3c2f 7665 7273 696f  on>3.2.0</versio\n+00002550: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00002560: 2020 203c 636f 6e66 6967 7572 6174 696f     <configuratio\n+00002570: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00002580: 2020 2020 2020 203c 6172 6368 6976 653e         <archive>\n+00002590: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+000025a0: 2020 2020 2020 2020 203c 6d61 6e69 6665           <manife\n+000025b0: 7374 456e 7472 6965 733e 0a20 2020 2020  stEntries>.     \n+000025c0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000025d0: 2020 2020 2020 203c 4175 746f 6d61 7469         <Automati\n+000025e0: 632d 4d6f 6475 6c65 2d4e 616d 653e 6f72  c-Module-Name>or\n+000025f0: 672e 6675 7365 736f 7572 6365 2e6a 616e  g.fusesource.jan\n+00002600: 7369 3c2f 4175 746f 6d61 7469 632d 4d6f  si</Automatic-Mo\n+00002610: 6475 6c65 2d4e 616d 653e 0a20 2020 2020  dule-Name>.     \n+00002620: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002630: 2020 203c 2f6d 616e 6966 6573 7445 6e74     </manifestEnt\n+00002640: 7269 6573 3e0a 2020 2020 2020 2020 2020  ries>.          \n+00002650: 2020 2020 2020 2020 2020 2020 2020 3c6d                <m\n+00002660: 616e 6966 6573 7446 696c 653e 247b 7072  anifestFile>${pr\n+00002670: 6f6a 6563 742e 6275 696c 642e 6f75 7470  oject.build.outp\n+00002680: 7574 4469 7265 6374 6f72 797d 2f4d 4554  utDirectory}/MET\n+00002690: 412d 494e 462f 4d41 4e49 4645 5354 2e4d  A-INF/MANIFEST.M\n+000026a0: 463c 2f6d 616e 6966 6573 7446 696c 653e  F</manifestFile>\n+000026b0: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+000026c0: 2020 2020 203c 2f61 7263 6869 7665 3e0a       </archive>.\n+000026d0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000026e0: 3c2f 636f 6e66 6967 7572 6174 696f 6e3e  </configuration>\n+000026f0: 0a20 2020 2020 2020 2020 2020 203c 2f70  .            </p\n+00002700: 6c75 6769 6e3e 0a20 2020 2020 2020 2020  lugin>.         \n+00002710: 2020 203c 706c 7567 696e 3e0a 2020 2020     <plugin>.    \n+00002720: 2020 2020 2020 2020 2020 2020 3c67 726f              <gro\n+00002730: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n+00002740: 6d61 7665 6e2e 706c 7567 696e 733c 2f67  maven.plugins</g\n+00002750: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00002760: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00002770: 7449 643e 6d61 7665 6e2d 6a61 7661 646f  tId>maven-javado\n+00002780: 632d 706c 7567 696e 3c2f 6172 7469 6661  c-plugin</artifa\n+00002790: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+000027a0: 2020 2020 2020 3c76 6572 7369 6f6e 3e33        <version>3\n+000027b0: 2e32 2e30 3c2f 7665 7273 696f 6e3e 0a20  .2.0</version>. \n+000027c0: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+000027d0: 636f 6e66 6967 7572 6174 696f 6e3e 0a20  configuration>. \n+000027e0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000027f0: 2020 203c 646f 6374 6974 6c65 3e24 7b70     <doctitle>${p\n+00002800: 726f 6a65 6374 2e6e 616d 657d 2041 5049  roject.name} API\n+00002810: 2052 6566 6572 656e 6365 2028 247b 7072   Reference (${pr\n+00002820: 6f6a 6563 742e 7665 7273 696f 6e7d 293c  oject.version})<\n+00002830: 2f64 6f63 7469 746c 653e 0a20 2020 2020  /doctitle>.     \n+00002840: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002850: 7769 6e64 6f77 7469 746c 653e 247b 7072  windowtitle>${pr\n+00002860: 6f6a 6563 742e 6e61 6d65 7d20 4150 4920  oject.name} API \n+00002870: 5265 6665 7265 6e63 6520 2824 7b70 726f  Reference (${pro\n+00002880: 6a65 6374 2e76 6572 7369 6f6e 7d29 3c2f  ject.version})</\n+00002890: 7769 6e64 6f77 7469 746c 653e 0a20 2020  windowtitle>.   \n+000028a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000028b0: 203c 6c6f 6361 6c65 3e65 6e5f 5553 3c2f   <locale>en_US</\n+000028c0: 6c6f 6361 6c65 3e0a 2020 2020 2020 2020  locale>.        \n+000028d0: 2020 2020 2020 2020 2020 2020 3c6c 696e              <lin\n+000028e0: 6b73 6f75 7263 653e 7472 7565 3c2f 6c69  ksource>true</li\n+000028f0: 6e6b 736f 7572 6365 3e0a 2020 2020 2020  nksource>.      \n+00002900: 2020 2020 2020 2020 2020 2020 2020 3c6e                <n\n+00002910: 6f74 696d 6573 7461 6d70 3e74 7275 653c  otimestamp>true<\n+00002920: 2f6e 6f74 696d 6573 7461 6d70 3e0a 2020  /notimestamp>.  \n+00002930: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002940: 2020 3c71 7569 6574 3e74 7275 653c 2f71    <quiet>true</q\n+00002950: 7569 6574 3e0a 2020 2020 2020 2020 2020  uiet>.          \n+00002960: 2020 2020 2020 2020 2020 3c64 6f63 656e            <docen\n+00002970: 636f 6469 6e67 3e55 5446 2d38 3c2f 646f  coding>UTF-8</do\n+00002980: 6365 6e63 6f64 696e 673e 0a20 2020 2020  cencoding>.     \n+00002990: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+000029a0: 7665 7273 696f 6e3e 6661 6c73 653c 2f76  version>false</v\n+000029b0: 6572 7369 6f6e 3e0a 2020 2020 2020 2020  ersion>.        \n+000029c0: 2020 2020 2020 2020 2020 2020 3c61 7574              <aut\n+000029d0: 686f 723e 7472 7565 3c2f 6175 7468 6f72  hor>true</author\n+000029e0: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+000029f0: 2020 2020 2020 3c6b 6579 776f 7264 733e        <keywords>\n+00002a00: 7472 7565 3c2f 6b65 7977 6f72 6473 3e0a  true</keywords>.\n+00002a10: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002a20: 2020 2020 3c73 6f75 7263 653e 247b 6a61      <source>${ja\n+00002a30: 7661 646f 6353 6f75 7263 657d 3c2f 736f  vadocSource}</so\n+00002a40: 7572 6365 3e0a 2020 2020 2020 2020 2020  urce>.          \n+00002a50: 2020 2020 2020 3c2f 636f 6e66 6967 7572        </configur\n+00002a60: 6174 696f 6e3e 0a20 2020 2020 2020 2020  ation>.         \n+00002a70: 2020 2020 2020 203c 6578 6563 7574 696f         <executio\n+00002a80: 6e73 3e0a 2020 2020 2020 2020 2020 2020  ns>.            \n+00002a90: 2020 2020 2020 2020 3c65 7865 6375 7469          <executi\n+00002aa0: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+00002ab0: 2020 2020 2020 2020 2020 2020 3c69 643e              <id>\n+00002ac0: 6174 7461 6368 2d6a 6176 6164 6f63 733c  attach-javadocs<\n+00002ad0: 2f69 643e 0a20 2020 2020 2020 2020 2020  /id>.           \n+00002ae0: 2020 2020 2020 2020 2020 2020 203c 676f               <go\n+00002af0: 616c 733e 0a20 2020 2020 2020 2020 2020  als>.           \n+00002b00: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002b10: 203c 676f 616c 3e6a 6172 3c2f 676f 616c   <goal>jar</goal\n+00002b20: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00002b30: 2020 2020 2020 2020 2020 3c2f 676f 616c            </goal\n+00002b40: 733e 0a20 2020 2020 2020 2020 2020 2020  s>.             \n+00002b50: 2020 2020 2020 203c 2f65 7865 6375 7469         </executi\n+00002b60: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+00002b70: 2020 2020 3c2f 6578 6563 7574 696f 6e73      </executions\n+00002b80: 3e0a 2020 2020 2020 2020 2020 2020 3c2f  >.            </\n+00002b90: 706c 7567 696e 3e0a 2020 2020 2020 2020  plugin>.        \n+00002ba0: 2020 2020 3c70 6c75 6769 6e3e 0a20 2020      <plugin>.   \n+00002bb0: 2020 2020 2020 2020 2020 2020 203c 6772               <gr\n+00002bc0: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+00002bd0: 2e6d 6176 656e 2e70 6c75 6769 6e73 3c2f  .maven.plugins</\n+00002be0: 6772 6f75 7049 643e 0a20 2020 2020 2020  groupId>.       \n+00002bf0: 2020 2020 2020 2020 203c 6172 7469 6661           <artifa\n+00002c00: 6374 4964 3e6d 6176 656e 2d73 6f75 7263  ctId>maven-sourc\n+00002c10: 652d 706c 7567 696e 3c2f 6172 7469 6661  e-plugin</artifa\n+00002c20: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+00002c30: 2020 2020 2020 3c76 6572 7369 6f6e 3e33        <version>3\n+00002c40: 2e32 2e31 3c2f 7665 7273 696f 6e3e 0a20  .2.1</version>. \n+00002c50: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00002c60: 6578 6563 7574 696f 6e73 3e0a 2020 2020  executions>.    \n+00002c70: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002c80: 3c65 7865 6375 7469 6f6e 3e0a 2020 2020  <execution>.    \n+00002c90: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002ca0: 2020 2020 3c69 643e 6174 7461 6368 2d73      <id>attach-s\n+00002cb0: 6f75 7263 6573 3c2f 6964 3e0a 2020 2020  ources</id>.    \n+00002cc0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002cd0: 2020 2020 3c67 6f61 6c73 3e0a 2020 2020      <goals>.    \n+00002ce0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00002cf0: 2020 2020 2020 2020 3c67 6f61 6c3e 6a61          <goal>ja\n+00002d00: 722d 6e6f 2d66 6f72 6b3c 2f67 6f61 6c3e  r-no-fork</goal>\n+00002d10: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00002d20: 2020 2020 2020 2020 203c 2f67 6f61 6c73           </goals\n+00002d30: 3e0a 2020 2020 2020 2020 2020 2020 2020  >.              \n+00002d40: 2020 2020 2020 3c2f 6578 6563 7574 696f        </executio\n+00002d50: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00002d60: 2020 203c 2f65 7865 6375 7469 6f6e 733e     </executions>\n+00002d70: 0a20 2020 2020 2020 2020 2020 203c 2f70  .            </p\n+00002d80: 6c75 6769 6e3e 0a20 2020 2020 2020 2020  lugin>.         \n+00002d90: 2020 203c 706c 7567 696e 3e0a 2020 2020     <plugin>.    \n+00002da0: 2020 2020 2020 2020 2020 2020 3c67 726f              <gro\n+00002db0: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n+00002dc0: 6d61 7665 6e2e 706c 7567 696e 733c 2f67  maven.plugins</g\n+00002dd0: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00002de0: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00002df0: 7449 643e 6d61 7665 6e2d 6465 706c 6f79  tId>maven-deploy\n+00002e00: 2d70 6c75 6769 6e3c 2f61 7274 6966 6163  -plugin</artifac\n+00002e10: 7449 643e 0a20 2020 2020 2020 2020 2020  tId>.           \n+00002e20: 2020 2020 203c 7665 7273 696f 6e3e 332e       <version>3.\n+00002e30: 302e 302d 4d31 3c2f 7665 7273 696f 6e3e  0.0-M1</version>\n+00002e40: 0a20 2020 2020 2020 2020 2020 203c 2f70  .            </p\n+00002e50: 6c75 6769 6e3e 0a20 2020 2020 2020 2020  lugin>.         \n+00002e60: 2020 203c 706c 7567 696e 3e0a 2020 2020     <plugin>.    \n+00002e70: 2020 2020 2020 2020 2020 2020 3c67 726f              <gro\n+00002e80: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n+00002e90: 6d61 7665 6e2e 706c 7567 696e 733c 2f67  maven.plugins</g\n+00002ea0: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00002eb0: 2020 2020 2020 2020 3c61 7274 6966 6163          <artifac\n+00002ec0: 7449 643e 6d61 7665 6e2d 7265 6c65 6173  tId>maven-releas\n+00002ed0: 652d 706c 7567 696e 3c2f 6172 7469 6661  e-plugin</artifa\n+00002ee0: 6374 4964 3e0a 2020 2020 2020 2020 2020  ctId>.          \n+00002ef0: 2020 2020 2020 3c76 6572 7369 6f6e 3e33        <version>3\n+00002f00: 2e30 2e30 2d4d 313c 2f76 6572 7369 6f6e  .0.0-M1</version\n+00002f10: 3e0a 2020 2020 2020 2020 2020 2020 3c2f  >.            </\n+00002f20: 706c 7567 696e 3e0a 2020 2020 2020 2020  plugin>.        \n+00002f30: 2020 2020 3c70 6c75 6769 6e3e 0a20 2020      <plugin>.   \n+00002f40: 2020 2020 2020 2020 2020 2020 203c 6772               <gr\n+00002f50: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+00002f60: 2e6d 6176 656e 2e70 6c75 6769 6e73 3c2f  .maven.plugins</\n+00002f70: 6772 6f75 7049 643e 0a20 2020 2020 2020  groupId>.       \n+00002f80: 2020 2020 2020 2020 203c 6172 7469 6661           <artifa\n+00002f90: 6374 4964 3e6d 6176 656e 2d67 7067 2d70  ctId>maven-gpg-p\n+00002fa0: 6c75 6769 6e3c 2f61 7274 6966 6163 7449  lugin</artifactI\n+00002fb0: 643e 0a20 2020 2020 2020 2020 2020 2020  d>.             \n+00002fc0: 2020 203c 7665 7273 696f 6e3e 312e 363c     <version>1.6<\n+00002fd0: 2f76 6572 7369 6f6e 3e0a 2020 2020 2020  /version>.      \n+00002fe0: 2020 2020 2020 2020 2020 3c65 7865 6375            <execu\n+00002ff0: 7469 6f6e 733e 0a20 2020 2020 2020 2020  tions>.         \n+00003000: 2020 2020 2020 2020 2020 203c 6578 6563             <exec\n+00003010: 7574 696f 6e3e 0a20 2020 2020 2020 2020  ution>.         \n+00003020: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00003030: 6964 3e73 6967 6e2d 6172 7469 6661 6374  id>sign-artifact\n+00003040: 733c 2f69 643e 0a20 2020 2020 2020 2020  s</id>.         \n+00003050: 2020 2020 2020 2020 2020 2020 2020 203c                 <\n+00003060: 7068 6173 653e 7665 7269 6679 3c2f 7068  phase>verify</ph\n+00003070: 6173 653e 0a20 2020 2020 2020 2020 2020  ase>.           \n+00003080: 2020 2020 2020 2020 2020 2020 203c 676f               <go\n+00003090: 616c 733e 0a20 2020 2020 2020 2020 2020  als>.           \n+000030a0: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+000030b0: 203c 676f 616c 3e73 6967 6e3c 2f67 6f61   <goal>sign</goa\n+000030c0: 6c3e 0a20 2020 2020 2020 2020 2020 2020  l>.             \n+000030d0: 2020 2020 2020 2020 2020 203c 2f67 6f61             </goa\n+000030e0: 6c73 3e0a 2020 2020 2020 2020 2020 2020  ls>.            \n+000030f0: 2020 2020 2020 2020 3c2f 6578 6563 7574          </execut\n+00003100: 696f 6e3e 0a20 2020 2020 2020 2020 2020  ion>.           \n+00003110: 2020 2020 203c 2f65 7865 6375 7469 6f6e       </execution\n+00003120: 733e 0a20 2020 2020 2020 2020 2020 203c  s>.            <\n+00003130: 2f70 6c75 6769 6e3e 0a20 2020 2020 2020  /plugin>.       \n+00003140: 2020 2020 203c 706c 7567 696e 3e0a 2020       <plugin>.  \n+00003150: 2020 2020 2020 2020 2020 2020 2020 3c67                <g\n+00003160: 726f 7570 4964 3e6f 7267 2e73 6f6e 6174  roupId>org.sonat\n+00003170: 7970 652e 706c 7567 696e 733c 2f67 726f  ype.plugins</gro\n+00003180: 7570 4964 3e0a 2020 2020 2020 2020 2020  upId>.          \n+00003190: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n+000031a0: 643e 6e65 7875 732d 7374 6167 696e 672d  d>nexus-staging-\n+000031b0: 6d61 7665 6e2d 706c 7567 696e 3c2f 6172  maven-plugin</ar\n+000031c0: 7469 6661 6374 4964 3e0a 2020 2020 2020  tifactId>.      \n+000031d0: 2020 2020 2020 2020 2020 3c76 6572 7369            <versi\n+000031e0: 6f6e 3e31 2e36 2e38 3c2f 7665 7273 696f  on>1.6.8</versio\n+000031f0: 6e3e 0a20 2020 2020 2020 2020 2020 2020  n>.             \n+00003200: 2020 203c 6578 7465 6e73 696f 6e73 3e74     <extensions>t\n+00003210: 7275 653c 2f65 7874 656e 7369 6f6e 733e  rue</extensions>\n+00003220: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00003230: 203c 636f 6e66 6967 7572 6174 696f 6e3e   <configuration>\n+00003240: 0a20 2020 2020 2020 2020 2020 2020 2020  .               \n+00003250: 2020 2020 203c 7365 7276 6572 4964 3e6f       <serverId>o\n+00003260: 7373 7268 3c2f 7365 7276 6572 4964 3e0a  ssrh</serverId>.\n+00003270: 2020 2020 2020 2020 2020 2020 2020 2020                  \n+00003280: 2020 2020 3c6e 6578 7573 5572 6c3e 6874      <nexusUrl>ht\n+00003290: 7470 733a 2f2f 6f73 732e 736f 6e61 7479  tps://oss.sonaty\n+000032a0: 7065 2e6f 7267 2f3c 2f6e 6578 7573 5572  pe.org/</nexusUr\n+000032b0: 6c3e 0a20 2020 2020 2020 2020 2020 2020  l>.             \n+000032c0: 2020 203c 2f63 6f6e 6669 6775 7261 7469     </configurati\n+000032d0: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+000032e0: 3c2f 706c 7567 696e 3e0a 2020 2020 2020  </plugin>.      \n+000032f0: 2020 3c2f 706c 7567 696e 733e 0a20 2020    </plugins>.   \n+00003300: 203c 2f62 7569 6c64 3e0a 0a20 2020 203c   </build>..    <\n+00003310: 6465 7065 6e64 656e 6369 6573 3e0a 2020  dependencies>.  \n+00003320: 2020 2020 2020 3c64 6570 656e 6465 6e63        <dependenc\n+00003330: 793e 0a20 2020 2020 2020 2020 2020 203c  y>.            <\n+00003340: 6772 6f75 7049 643e 6f72 672e 6a75 6e69  groupId>org.juni\n+00003350: 742e 6a75 7069 7465 723c 2f67 726f 7570  t.jupiter</group\n+00003360: 4964 3e0a 2020 2020 2020 2020 2020 2020  Id>.            \n+00003370: 3c61 7274 6966 6163 7449 643e 6a75 6e69  <artifactId>juni\n+00003380: 742d 6a75 7069 7465 723c 2f61 7274 6966  t-jupiter</artif\n+00003390: 6163 7449 643e 0a20 2020 2020 2020 2020  actId>.         \n+000033a0: 2020 203c 7665 7273 696f 6e3e 352e 372e     <version>5.7.\n+000033b0: 303c 2f76 6572 7369 6f6e 3e0a 2020 2020  0</version>.    \n+000033c0: 2020 2020 2020 2020 3c73 636f 7065 3e74          <scope>t\n+000033d0: 6573 743c 2f73 636f 7065 3e0a 2020 2020  est</scope>.    \n+000033e0: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+000033f0: 3e0a 2020 2020 2020 2020 3c64 6570 656e  >.        <depen\n+00003400: 6465 6e63 793e 0a20 2020 2020 2020 2020  dency>.         \n+00003410: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00003420: 6a75 6e69 742e 6a75 7069 7465 723c 2f67  junit.jupiter</g\n+00003430: 726f 7570 4964 3e0a 2020 2020 2020 2020  roupId>.        \n+00003440: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+00003450: 6a75 6e69 742d 6a75 7069 7465 722d 7061  junit-jupiter-pa\n+00003460: 7261 6d73 3c2f 6172 7469 6661 6374 4964  rams</artifactId\n+00003470: 3e0a 2020 2020 2020 2020 2020 2020 3c76  >.            <v\n+00003480: 6572 7369 6f6e 3e35 2e37 2e30 3c2f 7665  ersion>5.7.0</ve\n+00003490: 7273 696f 6e3e 0a20 2020 2020 2020 2020  rsion>.         \n+000034a0: 2020 203c 7363 6f70 653e 7465 7374 3c2f     <scope>test</\n+000034b0: 7363 6f70 653e 0a20 2020 2020 2020 203c  scope>.        <\n+000034c0: 2f64 6570 656e 6465 6e63 793e 0a20 2020  /dependency>.   \n+000034d0: 2020 2020 203c 6465 7065 6e64 656e 6379       <dependency\n+000034e0: 3e0a 2020 2020 2020 2020 2020 2020 3c67  >.            <g\n+000034f0: 726f 7570 4964 3e69 6e66 6f2e 7069 636f  roupId>info.pico\n+00003500: 636c 693c 2f67 726f 7570 4964 3e0a 2020  cli</groupId>.  \n+00003510: 2020 2020 2020 2020 2020 3c61 7274 6966            <artif\n+00003520: 6163 7449 643e 7069 636f 636c 692d 636f  actId>picocli-co\n+00003530: 6465 6765 6e3c 2f61 7274 6966 6163 7449  degen</artifactI\n+00003540: 643e 0a20 2020 2020 2020 2020 2020 203c  d>.            <\n+00003550: 7665 7273 696f 6e3e 342e 352e 323c 2f76  version>4.5.2</v\n+00003560: 6572 7369 6f6e 3e0a 2020 2020 2020 2020  ersion>.        \n+00003570: 2020 2020 3c73 636f 7065 3e74 6573 743c      <scope>test<\n+00003580: 2f73 636f 7065 3e0a 2020 2020 2020 2020  /scope>.        \n+00003590: 3c2f 6465 7065 6e64 656e 6379 3e0a 2020  </dependency>.  \n+000035a0: 2020 3c2f 6465 7065 6e64 656e 6369 6573    </dependencies\n+000035b0: 3e0a 0a20 2020 203c 7072 6f66 696c 6573  >..    <profiles\n+000035c0: 3e0a 2020 2020 2020 2020 3c70 726f 6669  >.        <profi\n+000035d0: 6c65 3e0a 2020 2020 2020 2020 2020 2020  le>.            \n+000035e0: 3c69 643e 6a64 6b31 352b 3c2f 6964 3e0a  <id>jdk15+</id>.\n+000035f0: 2020 2020 2020 2020 2020 2020 3c61 6374              <act\n+00003600: 6976 6174 696f 6e3e 0a20 2020 2020 2020  ivation>.       \n+00003610: 2020 2020 2020 2020 203c 6a64 6b3e 5b31           <jdk>[1\n+00003620: 352c 293c 2f6a 646b 3e0a 2020 2020 2020  5,)</jdk>.      \n+00003630: 2020 2020 2020 3c2f 6163 7469 7661 7469        </activati\n+00003640: 6f6e 3e0a 2020 2020 2020 2020 2020 2020  on>.            \n+00003650: 3c70 726f 7065 7274 6965 733e 0a20 2020  <properties>.   \n+00003660: 2020 2020 2020 2020 2020 2020 203c 6a64               <jd\n+00003670: 6b54 6172 6765 743e 312e 373c 2f6a 646b  kTarget>1.7</jdk\n+00003680: 5461 7267 6574 3e0a 2020 2020 2020 2020  Target>.        \n+00003690: 2020 2020 2020 2020 3c6a 6176 6164 6f63          <javadoc\n+000036a0: 536f 7572 6365 3e37 3c2f 6a61 7661 646f  Source>7</javado\n+000036b0: 6353 6f75 7263 653e 0a20 2020 2020 2020  cSource>.       \n+000036c0: 2020 2020 203c 2f70 726f 7065 7274 6965       </propertie\n+000036d0: 733e 0a20 2020 2020 2020 203c 2f70 726f  s>.        </pro\n+000036e0: 6669 6c65 3e0a 2020 2020 3c2f 7072 6f66  file>.    </prof\n+000036f0: 696c 6573 3e0a 0a3c 2f70 726f 6a65 6374  iles>..</project\n+00003700: 3e0a                                     >.\n"}, {"source1": "META-INF/native-image/jansi/resource-config.json", "source2": "META-INF/native-image/jansi/resource-config.json", "comments": ["Format-specific differences are supported for JSON files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: JSON text data"], "has_internal_linenos": true, "unified_diff": "@@ -1,10 +1,9 @@\n-00000000: 7b0d 0a20 2022 7265 736f 7572 6365 7322  {..  \"resources\"\n-00000010: 3a20 5b0d 0a20 2020 207b 2270 6174 7465  : [..    {\"patte\n-00000020: 726e 223a 2022 6f72 672f 6675 7365 736f  rn\": \"org/fuseso\n-00000030: 7572 6365 2f6a 616e 7369 2f6a 616e 7369  urce/jansi/jansi\n-00000040: 2e70 726f 7065 7274 6965 7322 7d2c 0d0a  .properties\"},..\n-00000050: 2020 2020 7b22 7061 7474 6572 6e22 3a20      {\"pattern\": \n-00000060: 226f 7267 2f66 7573 6573 6f75 7263 652f  \"org/fusesource/\n-00000070: 6a61 6e73 692f 696e 7465 726e 616c 2f6e  jansi/internal/n\n-00000080: 6174 6976 652f 2e2a 227d 0d0a 2020 5d0d  ative/.*\"}..  ].\n-00000090: 0a7d                                     .}\n+00000000: 7b0a 2020 2272 6573 6f75 7263 6573 223a  {.  \"resources\":\n+00000010: 205b 0a20 2020 207b 2270 6174 7465 726e   [.    {\"pattern\n+00000020: 223a 2022 6f72 672f 6675 7365 736f 7572  \": \"org/fusesour\n+00000030: 6365 2f6a 616e 7369 2f6a 616e 7369 2e70  ce/jansi/jansi.p\n+00000040: 726f 7065 7274 6965 7322 7d2c 0a20 2020  roperties\"},.   \n+00000050: 207b 2270 6174 7465 726e 223a 2022 6f72   {\"pattern\": \"or\n+00000060: 672f 6675 7365 736f 7572 6365 2f6a 616e  g/fusesource/jan\n+00000070: 7369 2f69 6e74 6572 6e61 6c2f 6e61 7469  si/internal/nati\n+00000080: 7665 2f2e 2a22 7d0a 2020 5d0a 7d         ve/.*\"}.  ].}\n"}, {"source1": "org/fusesource/jansi/Ansi.java", "source2": "org/fusesource/jansi/Ansi.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,948 +1,948 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.util.ArrayList;\r\n-import java.util.concurrent.Callable;\r\n-\r\n-/**\r\n- * Provides a fluent API for generating\r\n- * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">ANSI escape sequences</a>.\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @since 1.0\r\n- */\r\n-public class Ansi implements Appendable {\r\n-\r\n-    private static final char FIRST_ESC_CHAR = 27;\r\n-    private static final char SECOND_ESC_CHAR = '[';\r\n-\r\n-    /**\r\n-     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\">ANSI 8 colors</a> for fluent API\r\n-     */\r\n-    public enum Color {\r\n-        BLACK(0, \"BLACK\"),\r\n-        RED(1, \"RED\"),\r\n-        GREEN(2, \"GREEN\"),\r\n-        YELLOW(3, \"YELLOW\"),\r\n-        BLUE(4, \"BLUE\"),\r\n-        MAGENTA(5, \"MAGENTA\"),\r\n-        CYAN(6, \"CYAN\"),\r\n-        WHITE(7, \"WHITE\"),\r\n-        DEFAULT(9, \"DEFAULT\");\r\n-\r\n-        private final int value;\r\n-        private final String name;\r\n-\r\n-        Color(int index, String name) {\r\n-            this.value = index;\r\n-            this.name = name;\r\n-        }\r\n-\r\n-        @Override\r\n-        public String toString() {\r\n-            return name;\r\n-        }\r\n-\r\n-        public int value() {\r\n-            return value;\r\n-        }\r\n-\r\n-        public int fg() {\r\n-            return value + 30;\r\n-        }\r\n-\r\n-        public int bg() {\r\n-            return value + 40;\r\n-        }\r\n-\r\n-        public int fgBright() {\r\n-            return value + 90;\r\n-        }\r\n-\r\n-        public int bgBright() {\r\n-            return value + 100;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Display attributes, also know as\r\n-     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters\">SGR\r\n-     * (Select Graphic Rendition) parameters</a>.\r\n-     */\r\n-    public enum Attribute {\r\n-        RESET(0, \"RESET\"),\r\n-        INTENSITY_BOLD(1, \"INTENSITY_BOLD\"),\r\n-        INTENSITY_FAINT(2, \"INTENSITY_FAINT\"),\r\n-        ITALIC(3, \"ITALIC_ON\"),\r\n-        UNDERLINE(4, \"UNDERLINE_ON\"),\r\n-        BLINK_SLOW(5, \"BLINK_SLOW\"),\r\n-        BLINK_FAST(6, \"BLINK_FAST\"),\r\n-        NEGATIVE_ON(7, \"NEGATIVE_ON\"),\r\n-        CONCEAL_ON(8, \"CONCEAL_ON\"),\r\n-        STRIKETHROUGH_ON(9, \"STRIKETHROUGH_ON\"),\r\n-        UNDERLINE_DOUBLE(21, \"UNDERLINE_DOUBLE\"),\r\n-        INTENSITY_BOLD_OFF(22, \"INTENSITY_BOLD_OFF\"),\r\n-        ITALIC_OFF(23, \"ITALIC_OFF\"),\r\n-        UNDERLINE_OFF(24, \"UNDERLINE_OFF\"),\r\n-        BLINK_OFF(25, \"BLINK_OFF\"),\r\n-        NEGATIVE_OFF(27, \"NEGATIVE_OFF\"),\r\n-        CONCEAL_OFF(28, \"CONCEAL_OFF\"),\r\n-        STRIKETHROUGH_OFF(29, \"STRIKETHROUGH_OFF\");\r\n-\r\n-        private final int value;\r\n-        private final String name;\r\n-\r\n-        Attribute(int index, String name) {\r\n-            this.value = index;\r\n-            this.name = name;\r\n-        }\r\n-\r\n-        @Override\r\n-        public String toString() {\r\n-            return name;\r\n-        }\r\n-\r\n-        public int value() {\r\n-            return value;\r\n-        }\r\n-\r\n-    }\r\n-\r\n-    /**\r\n-     * ED (Erase in Display) / EL (Erase in Line) parameter (see\r\n-     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">CSI sequence J and K</a>)\r\n-     * @see Ansi#eraseScreen(Erase)\r\n-     * @see Ansi#eraseLine(Erase)\r\n-     */\r\n-    public enum Erase {\r\n-        FORWARD(0, \"FORWARD\"),\r\n-        BACKWARD(1, \"BACKWARD\"),\r\n-        ALL(2, \"ALL\");\r\n-\r\n-        private final int value;\r\n-        private final String name;\r\n-\r\n-        Erase(int index, String name) {\r\n-            this.value = index;\r\n-            this.name = name;\r\n-        }\r\n-\r\n-        @Override\r\n-        public String toString() {\r\n-            return name;\r\n-        }\r\n-\r\n-        public int value() {\r\n-            return value;\r\n-        }\r\n-    }\r\n-\r\n-    public interface Consumer {\r\n-        void apply(Ansi ansi);\r\n-    }\r\n-\r\n-    public static final String DISABLE = Ansi.class.getName() + \".disable\";\r\n-\r\n-    private static Callable<Boolean> detector = new Callable<Boolean>() {\r\n-        public Boolean call() throws Exception {\r\n-            return !Boolean.getBoolean(DISABLE);\r\n-        }\r\n-    };\r\n-\r\n-    public static void setDetector(final Callable<Boolean> detector) {\r\n-        if (detector == null) throw new IllegalArgumentException();\r\n-        Ansi.detector = detector;\r\n-    }\r\n-\r\n-    public static boolean isDetected() {\r\n-        try {\r\n-            return detector.call();\r\n-        } catch (Exception e) {\r\n-            return true;\r\n-        }\r\n-    }\r\n-\r\n-    private static final InheritableThreadLocal<Boolean> holder = new InheritableThreadLocal<Boolean>() {\r\n-        @Override\r\n-        protected Boolean initialValue() {\r\n-            return isDetected();\r\n-        }\r\n-    };\r\n-\r\n-    public static void setEnabled(final boolean flag) {\r\n-        holder.set(flag);\r\n-    }\r\n-\r\n-    public static boolean isEnabled() {\r\n-        return holder.get();\r\n-    }\r\n-\r\n-    public static Ansi ansi() {\r\n-        if (isEnabled()) {\r\n-            return new Ansi();\r\n-        } else {\r\n-            return new NoAnsi();\r\n-        }\r\n-    }\r\n-\r\n-    public static Ansi ansi(StringBuilder builder) {\r\n-        if (isEnabled()) {\r\n-            return new Ansi(builder);\r\n-        } else {\r\n-            return new NoAnsi(builder);\r\n-        }\r\n-    }\r\n-\r\n-    public static Ansi ansi(int size) {\r\n-        if (isEnabled()) {\r\n-            return new Ansi(size);\r\n-        } else {\r\n-            return new NoAnsi(size);\r\n-        }\r\n-    }\r\n-\r\n-    private static class NoAnsi\r\n-            extends Ansi {\r\n-        public NoAnsi() {\r\n-            super();\r\n-        }\r\n-\r\n-        public NoAnsi(int size) {\r\n-            super(size);\r\n-        }\r\n-\r\n-        public NoAnsi(StringBuilder builder) {\r\n-            super(builder);\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fg(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bg(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fgBright(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bgBright(Color color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fg(int color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi fgRgb(int r, int g, int b) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bg(int color) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi bgRgb(int r, int g, int b) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi a(Attribute attribute) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursor(int row, int column) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorToColumn(int x) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorUp(int y) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorRight(int x) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorDown(int y) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorLeft(int x) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorDownLine() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorDownLine(final int n) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorUpLine() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi cursorUpLine(final int n) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseScreen() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseScreen(Erase kind) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseLine() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi eraseLine(Erase kind) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi scrollUp(int rows) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi scrollDown(int rows) {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi saveCursorPosition() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        @Deprecated\r\n-        public Ansi restorCursorPosition() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi restoreCursorPosition() {\r\n-            return this;\r\n-        }\r\n-\r\n-        @Override\r\n-        public Ansi reset() {\r\n-            return this;\r\n-        }\r\n-    }\r\n-\r\n-    private final StringBuilder builder;\r\n-    private final ArrayList<Integer> attributeOptions = new ArrayList<Integer>(5);\r\n-\r\n-    public Ansi() {\r\n-        this(new StringBuilder(80));\r\n-    }\r\n-\r\n-    public Ansi(Ansi parent) {\r\n-        this(new StringBuilder(parent.builder));\r\n-        attributeOptions.addAll(parent.attributeOptions);\r\n-    }\r\n-\r\n-    public Ansi(int size) {\r\n-        this(new StringBuilder(size));\r\n-    }\r\n-\r\n-    public Ansi(StringBuilder builder) {\r\n-        this.builder = builder;\r\n-    }\r\n-\r\n-    public Ansi fg(Color color) {\r\n-        attributeOptions.add(color.fg());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fg(int color) {\r\n-        attributeOptions.add(38);\r\n-        attributeOptions.add(5);\r\n-        attributeOptions.add(color & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fgRgb(int color) {\r\n-        return fgRgb(color >> 16, color >> 8, color);\r\n-    }\r\n-\r\n-    public Ansi fgRgb(int r, int g, int b) {\r\n-        attributeOptions.add(38);\r\n-        attributeOptions.add(2);\r\n-        attributeOptions.add(r & 0xff);\r\n-        attributeOptions.add(g & 0xff);\r\n-        attributeOptions.add(b & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fgBlack() {\r\n-        return this.fg(Color.BLACK);\r\n-    }\r\n-\r\n-    public Ansi fgBlue() {\r\n-        return this.fg(Color.BLUE);\r\n-    }\r\n-\r\n-    public Ansi fgCyan() {\r\n-        return this.fg(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi fgDefault() {\r\n-        return this.fg(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi fgGreen() {\r\n-        return this.fg(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi fgMagenta() {\r\n-        return this.fg(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi fgRed() {\r\n-        return this.fg(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi fgYellow() {\r\n-        return this.fg(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi bg(Color color) {\r\n-        attributeOptions.add(color.bg());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bg(int color) {\r\n-        attributeOptions.add(48);\r\n-        attributeOptions.add(5);\r\n-        attributeOptions.add(color & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bgRgb(int color) {\r\n-        return bgRgb(color >> 16, color >> 8, color);\r\n-    }\r\n-\r\n-    public Ansi bgRgb(int r, int g, int b) {\r\n-        attributeOptions.add(48);\r\n-        attributeOptions.add(2);\r\n-        attributeOptions.add(r & 0xff);\r\n-        attributeOptions.add(g & 0xff);\r\n-        attributeOptions.add(b & 0xff);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bgCyan() {\r\n-        return this.bg(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi bgDefault() {\r\n-        return this.bg(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi bgGreen() {\r\n-        return this.bg(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi bgMagenta() {\r\n-        return this.bg(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi bgRed() {\r\n-        return this.bg(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi bgYellow() {\r\n-        return this.bg(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi fgBright(Color color) {\r\n-        attributeOptions.add(color.fgBright());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi fgBrightBlack() {\r\n-        return this.fgBright(Color.BLACK);\r\n-    }\r\n-\r\n-    public Ansi fgBrightBlue() {\r\n-        return this.fgBright(Color.BLUE);\r\n-    }\r\n-\r\n-    public Ansi fgBrightCyan() {\r\n-        return this.fgBright(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi fgBrightDefault() {\r\n-        return this.fgBright(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi fgBrightGreen() {\r\n-        return this.fgBright(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi fgBrightMagenta() {\r\n-        return this.fgBright(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi fgBrightRed() {\r\n-        return this.fgBright(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi fgBrightYellow() {\r\n-        return this.fgBright(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi bgBright(Color color) {\r\n-        attributeOptions.add(color.bgBright());\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi bgBrightCyan() {\r\n-        return this.bgBright(Color.CYAN);\r\n-    }\r\n-\r\n-    public Ansi bgBrightDefault() {\r\n-        return this.bgBright(Color.DEFAULT);\r\n-    }\r\n-\r\n-    public Ansi bgBrightGreen() {\r\n-        return this.bgBright(Color.GREEN);\r\n-    }\r\n-\r\n-    public Ansi bgBrightMagenta() {\r\n-        return this.bgBright(Color.MAGENTA);\r\n-    }\r\n-\r\n-    public Ansi bgBrightRed() {\r\n-        return this.bgBright(Color.RED);\r\n-    }\r\n-\r\n-    public Ansi bgBrightYellow() {\r\n-        return this.bgBright(Color.YELLOW);\r\n-    }\r\n-\r\n-    public Ansi a(Attribute attribute) {\r\n-        attributeOptions.add(attribute.value());\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to row n, column m. The values are 1-based.\r\n-     * Any values less than 1 are mapped to 1.\r\n-     *\r\n-     * @param row    row (1-based) from top\r\n-     * @param column column (1 based) from left\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursor(final int row, final int column) {\r\n-        return appendEscapeSequence('H', Math.max(1, row), Math.max(1, column));\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to column n. The parameter n is 1-based.\r\n-     * If n is less than 1 it is moved to the first column.\r\n-     *\r\n-     * @param x the index (1-based) of the column to move to\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorToColumn(final int x) {\r\n-        return appendEscapeSequence('G', Math.max(1, x));\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor up. If the parameter y is negative it moves the cursor down.\r\n-     *\r\n-     * @param y the number of lines to move up\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorUp(final int y) {\r\n-        return y > 0 ? appendEscapeSequence('A', y) : y < 0 ? cursorDown(-y) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor down. If the parameter y is negative it moves the cursor up.\r\n-     *\r\n-     * @param y the number of lines to move down\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorDown(final int y) {\r\n-        return y > 0 ? appendEscapeSequence('B', y) : y < 0 ? cursorUp(-y) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor right. If the parameter x is negative it moves the cursor left.\r\n-     *\r\n-     * @param x the number of characters to move right\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorRight(final int x) {\r\n-        return x > 0 ? appendEscapeSequence('C', x) : x < 0 ? cursorLeft(-x) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor left. If the parameter x is negative it moves the cursor right.\r\n-     *\r\n-     * @param x the number of characters to move left\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorLeft(final int x) {\r\n-        return x > 0 ? appendEscapeSequence('D', x) : x < 0 ? cursorRight(-x) : this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor relative to the current position. The cursor is moved right if x is\r\n-     * positive, left if negative and down if y is positive and up if negative.\r\n-     *\r\n-     * @param x the number of characters to move horizontally\r\n-     * @param y the number of lines to move vertically\r\n-     * @return this Ansi instance\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi cursorMove(final int x, final int y) {\r\n-        return cursorRight(x).cursorDown(y);\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the line below.\r\n-     *\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorDownLine() {\r\n-        return appendEscapeSequence('E');\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the n-th line below. If the parameter n is negative it\r\n-     * moves the cursor to the beginning of the n-th line above.\r\n-     *\r\n-     * @param n the number of lines to move the cursor\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorDownLine(final int n) {\r\n-        return n < 0 ? cursorUpLine(-n) : appendEscapeSequence('E', n);\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the line above.\r\n-     *\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorUpLine() {\r\n-        return appendEscapeSequence('F');\r\n-    }\r\n-\r\n-    /**\r\n-     * Moves the cursor to the beginning of the n-th line above. If the parameter n is negative it\r\n-     * moves the cursor to the beginning of the n-th line below.\r\n-     *\r\n-     * @param n the number of lines to move the cursor\r\n-     * @return this Ansi instance\r\n-     */\r\n-    public Ansi cursorUpLine(final int n) {\r\n-        return n < 0 ? cursorDownLine(-n) : appendEscapeSequence('F', n);\r\n-    }\r\n-\r\n-    public Ansi eraseScreen() {\r\n-        return appendEscapeSequence('J', Erase.ALL.value());\r\n-    }\r\n-\r\n-    public Ansi eraseScreen(final Erase kind) {\r\n-        return appendEscapeSequence('J', kind.value());\r\n-    }\r\n-\r\n-    public Ansi eraseLine() {\r\n-        return appendEscapeSequence('K');\r\n-    }\r\n-\r\n-    public Ansi eraseLine(final Erase kind) {\r\n-        return appendEscapeSequence('K', kind.value());\r\n-    }\r\n-\r\n-    public Ansi scrollUp(final int rows) {\r\n-        return rows > 0 ? appendEscapeSequence('S', rows) : rows < 0 ? scrollDown(-rows) : this;\r\n-    }\r\n-\r\n-    public Ansi scrollDown(final int rows) {\r\n-        return rows > 0 ? appendEscapeSequence('T', rows) : rows < 0 ? scrollUp(-rows) : this;\r\n-    }\r\n-\r\n-    public Ansi saveCursorPosition() {\r\n-        return appendEscapeSequence('s');\r\n-    }\r\n-\r\n-    @Deprecated\r\n-    public Ansi restorCursorPosition() {\r\n-        return appendEscapeSequence('u');\r\n-    }\r\n-\r\n-    public Ansi restoreCursorPosition() {\r\n-        return appendEscapeSequence('u');\r\n-    }\r\n-\r\n-    public Ansi reset() {\r\n-        return a(Attribute.RESET);\r\n-    }\r\n-\r\n-    public Ansi bold() {\r\n-        return a(Attribute.INTENSITY_BOLD);\r\n-    }\r\n-\r\n-    public Ansi boldOff() {\r\n-        return a(Attribute.INTENSITY_BOLD_OFF);\r\n-    }\r\n-\r\n-    public Ansi a(String value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(boolean value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(char value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(char[] value, int offset, int len) {\r\n-        flushAttributes();\r\n-        builder.append(value, offset, len);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(char[] value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(CharSequence value, int start, int end) {\r\n-        flushAttributes();\r\n-        builder.append(value, start, end);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(CharSequence value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(double value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(float value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(int value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(long value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(Object value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi a(StringBuffer value) {\r\n-        flushAttributes();\r\n-        builder.append(value);\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi newline() {\r\n-        flushAttributes();\r\n-        builder.append(System.getProperty(\"line.separator\"));\r\n-        return this;\r\n-    }\r\n-\r\n-    public Ansi format(String pattern, Object... args) {\r\n-        flushAttributes();\r\n-        builder.append(String.format(pattern, args));\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Applies another function to this Ansi instance.\r\n-     *\r\n-     * @param fun the function to apply\r\n-     * @return this Ansi instance\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi apply(Consumer fun) {\r\n-        fun.apply(this);\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * Uses the {@link AnsiRenderer}\r\n-     * to generate the ANSI escape sequences for the supplied text.\r\n-     *\r\n-     * @param text text\r\n-     * @return this\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi render(final String text) {\r\n-        a(AnsiRenderer.render(text));\r\n-        return this;\r\n-    }\r\n-\r\n-    /**\r\n-     * String formats and renders the supplied arguments.  Uses the {@link AnsiRenderer}\r\n-     * to generate the ANSI escape sequences.\r\n-     *\r\n-     * @param text format\r\n-     * @param args arguments\r\n-     * @return this\r\n-     * @since 2.2\r\n-     */\r\n-    public Ansi render(final String text, Object... args) {\r\n-        a(String.format(AnsiRenderer.render(text), args));\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public String toString() {\r\n-        flushAttributes();\r\n-        return builder.toString();\r\n-    }\r\n-\r\n-    ///////////////////////////////////////////////////////////////////\r\n-    // Private Helper Methods\r\n-    ///////////////////////////////////////////////////////////////////\r\n-\r\n-    private Ansi appendEscapeSequence(char command) {\r\n-        flushAttributes();\r\n-        builder.append(FIRST_ESC_CHAR);\r\n-        builder.append(SECOND_ESC_CHAR);\r\n-        builder.append(command);\r\n-        return this;\r\n-    }\r\n-\r\n-    private Ansi appendEscapeSequence(char command, int option) {\r\n-        flushAttributes();\r\n-        builder.append(FIRST_ESC_CHAR);\r\n-        builder.append(SECOND_ESC_CHAR);\r\n-        builder.append(option);\r\n-        builder.append(command);\r\n-        return this;\r\n-    }\r\n-\r\n-    private Ansi appendEscapeSequence(char command, Object... options) {\r\n-        flushAttributes();\r\n-        return _appendEscapeSequence(command, options);\r\n-    }\r\n-\r\n-    private void flushAttributes() {\r\n-        if (attributeOptions.isEmpty())\r\n-            return;\r\n-        if (attributeOptions.size() == 1 && attributeOptions.get(0) == 0) {\r\n-            builder.append(FIRST_ESC_CHAR);\r\n-            builder.append(SECOND_ESC_CHAR);\r\n-            builder.append('m');\r\n-        } else {\r\n-            _appendEscapeSequence('m', attributeOptions.toArray());\r\n-        }\r\n-        attributeOptions.clear();\r\n-    }\r\n-\r\n-    private Ansi _appendEscapeSequence(char command, Object... options) {\r\n-        builder.append(FIRST_ESC_CHAR);\r\n-        builder.append(SECOND_ESC_CHAR);\r\n-        int size = options.length;\r\n-        for (int i = 0; i < size; i++) {\r\n-            if (i != 0) {\r\n-                builder.append(';');\r\n-            }\r\n-            if (options[i] != null) {\r\n-                builder.append(options[i]);\r\n-            }\r\n-        }\r\n-        builder.append(command);\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public Ansi append(CharSequence csq) {\r\n-        builder.append(csq);\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public Ansi append(CharSequence csq, int start, int end) {\r\n-        builder.append(csq, start, end);\r\n-        return this;\r\n-    }\r\n-\r\n-    @Override\r\n-    public Ansi append(char c) {\r\n-        builder.append(c);\r\n-        return this;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.util.ArrayList;\n+import java.util.concurrent.Callable;\n+\n+/**\n+ * Provides a fluent API for generating\n+ * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">ANSI escape sequences</a>.\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @since 1.0\n+ */\n+public class Ansi implements Appendable {\n+\n+    private static final char FIRST_ESC_CHAR = 27;\n+    private static final char SECOND_ESC_CHAR = '[';\n+\n+    /**\n+     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\">ANSI 8 colors</a> for fluent API\n+     */\n+    public enum Color {\n+        BLACK(0, \"BLACK\"),\n+        RED(1, \"RED\"),\n+        GREEN(2, \"GREEN\"),\n+        YELLOW(3, \"YELLOW\"),\n+        BLUE(4, \"BLUE\"),\n+        MAGENTA(5, \"MAGENTA\"),\n+        CYAN(6, \"CYAN\"),\n+        WHITE(7, \"WHITE\"),\n+        DEFAULT(9, \"DEFAULT\");\n+\n+        private final int value;\n+        private final String name;\n+\n+        Color(int index, String name) {\n+            this.value = index;\n+            this.name = name;\n+        }\n+\n+        @Override\n+        public String toString() {\n+            return name;\n+        }\n+\n+        public int value() {\n+            return value;\n+        }\n+\n+        public int fg() {\n+            return value + 30;\n+        }\n+\n+        public int bg() {\n+            return value + 40;\n+        }\n+\n+        public int fgBright() {\n+            return value + 90;\n+        }\n+\n+        public int bgBright() {\n+            return value + 100;\n+        }\n+    }\n+\n+    /**\n+     * Display attributes, also know as\n+     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters\">SGR\n+     * (Select Graphic Rendition) parameters</a>.\n+     */\n+    public enum Attribute {\n+        RESET(0, \"RESET\"),\n+        INTENSITY_BOLD(1, \"INTENSITY_BOLD\"),\n+        INTENSITY_FAINT(2, \"INTENSITY_FAINT\"),\n+        ITALIC(3, \"ITALIC_ON\"),\n+        UNDERLINE(4, \"UNDERLINE_ON\"),\n+        BLINK_SLOW(5, \"BLINK_SLOW\"),\n+        BLINK_FAST(6, \"BLINK_FAST\"),\n+        NEGATIVE_ON(7, \"NEGATIVE_ON\"),\n+        CONCEAL_ON(8, \"CONCEAL_ON\"),\n+        STRIKETHROUGH_ON(9, \"STRIKETHROUGH_ON\"),\n+        UNDERLINE_DOUBLE(21, \"UNDERLINE_DOUBLE\"),\n+        INTENSITY_BOLD_OFF(22, \"INTENSITY_BOLD_OFF\"),\n+        ITALIC_OFF(23, \"ITALIC_OFF\"),\n+        UNDERLINE_OFF(24, \"UNDERLINE_OFF\"),\n+        BLINK_OFF(25, \"BLINK_OFF\"),\n+        NEGATIVE_OFF(27, \"NEGATIVE_OFF\"),\n+        CONCEAL_OFF(28, \"CONCEAL_OFF\"),\n+        STRIKETHROUGH_OFF(29, \"STRIKETHROUGH_OFF\");\n+\n+        private final int value;\n+        private final String name;\n+\n+        Attribute(int index, String name) {\n+            this.value = index;\n+            this.name = name;\n+        }\n+\n+        @Override\n+        public String toString() {\n+            return name;\n+        }\n+\n+        public int value() {\n+            return value;\n+        }\n+\n+    }\n+\n+    /**\n+     * ED (Erase in Display) / EL (Erase in Line) parameter (see\n+     * <a href=\"https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences\">CSI sequence J and K</a>)\n+     * @see Ansi#eraseScreen(Erase)\n+     * @see Ansi#eraseLine(Erase)\n+     */\n+    public enum Erase {\n+        FORWARD(0, \"FORWARD\"),\n+        BACKWARD(1, \"BACKWARD\"),\n+        ALL(2, \"ALL\");\n+\n+        private final int value;\n+        private final String name;\n+\n+        Erase(int index, String name) {\n+            this.value = index;\n+            this.name = name;\n+        }\n+\n+        @Override\n+        public String toString() {\n+            return name;\n+        }\n+\n+        public int value() {\n+            return value;\n+        }\n+    }\n+\n+    public interface Consumer {\n+        void apply(Ansi ansi);\n+    }\n+\n+    public static final String DISABLE = Ansi.class.getName() + \".disable\";\n+\n+    private static Callable<Boolean> detector = new Callable<Boolean>() {\n+        public Boolean call() throws Exception {\n+            return !Boolean.getBoolean(DISABLE);\n+        }\n+    };\n+\n+    public static void setDetector(final Callable<Boolean> detector) {\n+        if (detector == null) throw new IllegalArgumentException();\n+        Ansi.detector = detector;\n+    }\n+\n+    public static boolean isDetected() {\n+        try {\n+            return detector.call();\n+        } catch (Exception e) {\n+            return true;\n+        }\n+    }\n+\n+    private static final InheritableThreadLocal<Boolean> holder = new InheritableThreadLocal<Boolean>() {\n+        @Override\n+        protected Boolean initialValue() {\n+            return isDetected();\n+        }\n+    };\n+\n+    public static void setEnabled(final boolean flag) {\n+        holder.set(flag);\n+    }\n+\n+    public static boolean isEnabled() {\n+        return holder.get();\n+    }\n+\n+    public static Ansi ansi() {\n+        if (isEnabled()) {\n+            return new Ansi();\n+        } else {\n+            return new NoAnsi();\n+        }\n+    }\n+\n+    public static Ansi ansi(StringBuilder builder) {\n+        if (isEnabled()) {\n+            return new Ansi(builder);\n+        } else {\n+            return new NoAnsi(builder);\n+        }\n+    }\n+\n+    public static Ansi ansi(int size) {\n+        if (isEnabled()) {\n+            return new Ansi(size);\n+        } else {\n+            return new NoAnsi(size);\n+        }\n+    }\n+\n+    private static class NoAnsi\n+            extends Ansi {\n+        public NoAnsi() {\n+            super();\n+        }\n+\n+        public NoAnsi(int size) {\n+            super(size);\n+        }\n+\n+        public NoAnsi(StringBuilder builder) {\n+            super(builder);\n+        }\n+\n+        @Override\n+        public Ansi fg(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bg(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi fgBright(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bgBright(Color color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi fg(int color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi fgRgb(int r, int g, int b) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bg(int color) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi bgRgb(int r, int g, int b) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi a(Attribute attribute) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursor(int row, int column) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorToColumn(int x) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorUp(int y) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorRight(int x) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorDown(int y) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorLeft(int x) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorDownLine() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorDownLine(final int n) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorUpLine() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi cursorUpLine(final int n) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseScreen() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseScreen(Erase kind) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseLine() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi eraseLine(Erase kind) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi scrollUp(int rows) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi scrollDown(int rows) {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi saveCursorPosition() {\n+            return this;\n+        }\n+\n+        @Override\n+        @Deprecated\n+        public Ansi restorCursorPosition() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi restoreCursorPosition() {\n+            return this;\n+        }\n+\n+        @Override\n+        public Ansi reset() {\n+            return this;\n+        }\n+    }\n+\n+    private final StringBuilder builder;\n+    private final ArrayList<Integer> attributeOptions = new ArrayList<Integer>(5);\n+\n+    public Ansi() {\n+        this(new StringBuilder(80));\n+    }\n+\n+    public Ansi(Ansi parent) {\n+        this(new StringBuilder(parent.builder));\n+        attributeOptions.addAll(parent.attributeOptions);\n+    }\n+\n+    public Ansi(int size) {\n+        this(new StringBuilder(size));\n+    }\n+\n+    public Ansi(StringBuilder builder) {\n+        this.builder = builder;\n+    }\n+\n+    public Ansi fg(Color color) {\n+        attributeOptions.add(color.fg());\n+        return this;\n+    }\n+\n+    public Ansi fg(int color) {\n+        attributeOptions.add(38);\n+        attributeOptions.add(5);\n+        attributeOptions.add(color & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi fgRgb(int color) {\n+        return fgRgb(color >> 16, color >> 8, color);\n+    }\n+\n+    public Ansi fgRgb(int r, int g, int b) {\n+        attributeOptions.add(38);\n+        attributeOptions.add(2);\n+        attributeOptions.add(r & 0xff);\n+        attributeOptions.add(g & 0xff);\n+        attributeOptions.add(b & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi fgBlack() {\n+        return this.fg(Color.BLACK);\n+    }\n+\n+    public Ansi fgBlue() {\n+        return this.fg(Color.BLUE);\n+    }\n+\n+    public Ansi fgCyan() {\n+        return this.fg(Color.CYAN);\n+    }\n+\n+    public Ansi fgDefault() {\n+        return this.fg(Color.DEFAULT);\n+    }\n+\n+    public Ansi fgGreen() {\n+        return this.fg(Color.GREEN);\n+    }\n+\n+    public Ansi fgMagenta() {\n+        return this.fg(Color.MAGENTA);\n+    }\n+\n+    public Ansi fgRed() {\n+        return this.fg(Color.RED);\n+    }\n+\n+    public Ansi fgYellow() {\n+        return this.fg(Color.YELLOW);\n+    }\n+\n+    public Ansi bg(Color color) {\n+        attributeOptions.add(color.bg());\n+        return this;\n+    }\n+\n+    public Ansi bg(int color) {\n+        attributeOptions.add(48);\n+        attributeOptions.add(5);\n+        attributeOptions.add(color & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi bgRgb(int color) {\n+        return bgRgb(color >> 16, color >> 8, color);\n+    }\n+\n+    public Ansi bgRgb(int r, int g, int b) {\n+        attributeOptions.add(48);\n+        attributeOptions.add(2);\n+        attributeOptions.add(r & 0xff);\n+        attributeOptions.add(g & 0xff);\n+        attributeOptions.add(b & 0xff);\n+        return this;\n+    }\n+\n+    public Ansi bgCyan() {\n+        return this.bg(Color.CYAN);\n+    }\n+\n+    public Ansi bgDefault() {\n+        return this.bg(Color.DEFAULT);\n+    }\n+\n+    public Ansi bgGreen() {\n+        return this.bg(Color.GREEN);\n+    }\n+\n+    public Ansi bgMagenta() {\n+        return this.bg(Color.MAGENTA);\n+    }\n+\n+    public Ansi bgRed() {\n+        return this.bg(Color.RED);\n+    }\n+\n+    public Ansi bgYellow() {\n+        return this.bg(Color.YELLOW);\n+    }\n+\n+    public Ansi fgBright(Color color) {\n+        attributeOptions.add(color.fgBright());\n+        return this;\n+    }\n+\n+    public Ansi fgBrightBlack() {\n+        return this.fgBright(Color.BLACK);\n+    }\n+\n+    public Ansi fgBrightBlue() {\n+        return this.fgBright(Color.BLUE);\n+    }\n+\n+    public Ansi fgBrightCyan() {\n+        return this.fgBright(Color.CYAN);\n+    }\n+\n+    public Ansi fgBrightDefault() {\n+        return this.fgBright(Color.DEFAULT);\n+    }\n+\n+    public Ansi fgBrightGreen() {\n+        return this.fgBright(Color.GREEN);\n+    }\n+\n+    public Ansi fgBrightMagenta() {\n+        return this.fgBright(Color.MAGENTA);\n+    }\n+\n+    public Ansi fgBrightRed() {\n+        return this.fgBright(Color.RED);\n+    }\n+\n+    public Ansi fgBrightYellow() {\n+        return this.fgBright(Color.YELLOW);\n+    }\n+\n+    public Ansi bgBright(Color color) {\n+        attributeOptions.add(color.bgBright());\n+        return this;\n+    }\n+\n+    public Ansi bgBrightCyan() {\n+        return this.bgBright(Color.CYAN);\n+    }\n+\n+    public Ansi bgBrightDefault() {\n+        return this.bgBright(Color.DEFAULT);\n+    }\n+\n+    public Ansi bgBrightGreen() {\n+        return this.bgBright(Color.GREEN);\n+    }\n+\n+    public Ansi bgBrightMagenta() {\n+        return this.bgBright(Color.MAGENTA);\n+    }\n+\n+    public Ansi bgBrightRed() {\n+        return this.bgBright(Color.RED);\n+    }\n+\n+    public Ansi bgBrightYellow() {\n+        return this.bgBright(Color.YELLOW);\n+    }\n+\n+    public Ansi a(Attribute attribute) {\n+        attributeOptions.add(attribute.value());\n+        return this;\n+    }\n+\n+    /**\n+     * Moves the cursor to row n, column m. The values are 1-based.\n+     * Any values less than 1 are mapped to 1.\n+     *\n+     * @param row    row (1-based) from top\n+     * @param column column (1 based) from left\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursor(final int row, final int column) {\n+        return appendEscapeSequence('H', Math.max(1, row), Math.max(1, column));\n+    }\n+\n+    /**\n+     * Moves the cursor to column n. The parameter n is 1-based.\n+     * If n is less than 1 it is moved to the first column.\n+     *\n+     * @param x the index (1-based) of the column to move to\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorToColumn(final int x) {\n+        return appendEscapeSequence('G', Math.max(1, x));\n+    }\n+\n+    /**\n+     * Moves the cursor up. If the parameter y is negative it moves the cursor down.\n+     *\n+     * @param y the number of lines to move up\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorUp(final int y) {\n+        return y > 0 ? appendEscapeSequence('A', y) : y < 0 ? cursorDown(-y) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor down. If the parameter y is negative it moves the cursor up.\n+     *\n+     * @param y the number of lines to move down\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorDown(final int y) {\n+        return y > 0 ? appendEscapeSequence('B', y) : y < 0 ? cursorUp(-y) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor right. If the parameter x is negative it moves the cursor left.\n+     *\n+     * @param x the number of characters to move right\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorRight(final int x) {\n+        return x > 0 ? appendEscapeSequence('C', x) : x < 0 ? cursorLeft(-x) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor left. If the parameter x is negative it moves the cursor right.\n+     *\n+     * @param x the number of characters to move left\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorLeft(final int x) {\n+        return x > 0 ? appendEscapeSequence('D', x) : x < 0 ? cursorRight(-x) : this;\n+    }\n+\n+    /**\n+     * Moves the cursor relative to the current position. The cursor is moved right if x is\n+     * positive, left if negative and down if y is positive and up if negative.\n+     *\n+     * @param x the number of characters to move horizontally\n+     * @param y the number of lines to move vertically\n+     * @return this Ansi instance\n+     * @since 2.2\n+     */\n+    public Ansi cursorMove(final int x, final int y) {\n+        return cursorRight(x).cursorDown(y);\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the line below.\n+     *\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorDownLine() {\n+        return appendEscapeSequence('E');\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the n-th line below. If the parameter n is negative it\n+     * moves the cursor to the beginning of the n-th line above.\n+     *\n+     * @param n the number of lines to move the cursor\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorDownLine(final int n) {\n+        return n < 0 ? cursorUpLine(-n) : appendEscapeSequence('E', n);\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the line above.\n+     *\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorUpLine() {\n+        return appendEscapeSequence('F');\n+    }\n+\n+    /**\n+     * Moves the cursor to the beginning of the n-th line above. If the parameter n is negative it\n+     * moves the cursor to the beginning of the n-th line below.\n+     *\n+     * @param n the number of lines to move the cursor\n+     * @return this Ansi instance\n+     */\n+    public Ansi cursorUpLine(final int n) {\n+        return n < 0 ? cursorDownLine(-n) : appendEscapeSequence('F', n);\n+    }\n+\n+    public Ansi eraseScreen() {\n+        return appendEscapeSequence('J', Erase.ALL.value());\n+    }\n+\n+    public Ansi eraseScreen(final Erase kind) {\n+        return appendEscapeSequence('J', kind.value());\n+    }\n+\n+    public Ansi eraseLine() {\n+        return appendEscapeSequence('K');\n+    }\n+\n+    public Ansi eraseLine(final Erase kind) {\n+        return appendEscapeSequence('K', kind.value());\n+    }\n+\n+    public Ansi scrollUp(final int rows) {\n+        return rows > 0 ? appendEscapeSequence('S', rows) : rows < 0 ? scrollDown(-rows) : this;\n+    }\n+\n+    public Ansi scrollDown(final int rows) {\n+        return rows > 0 ? appendEscapeSequence('T', rows) : rows < 0 ? scrollUp(-rows) : this;\n+    }\n+\n+    public Ansi saveCursorPosition() {\n+        return appendEscapeSequence('s');\n+    }\n+\n+    @Deprecated\n+    public Ansi restorCursorPosition() {\n+        return appendEscapeSequence('u');\n+    }\n+\n+    public Ansi restoreCursorPosition() {\n+        return appendEscapeSequence('u');\n+    }\n+\n+    public Ansi reset() {\n+        return a(Attribute.RESET);\n+    }\n+\n+    public Ansi bold() {\n+        return a(Attribute.INTENSITY_BOLD);\n+    }\n+\n+    public Ansi boldOff() {\n+        return a(Attribute.INTENSITY_BOLD_OFF);\n+    }\n+\n+    public Ansi a(String value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(boolean value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(char value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(char[] value, int offset, int len) {\n+        flushAttributes();\n+        builder.append(value, offset, len);\n+        return this;\n+    }\n+\n+    public Ansi a(char[] value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(CharSequence value, int start, int end) {\n+        flushAttributes();\n+        builder.append(value, start, end);\n+        return this;\n+    }\n+\n+    public Ansi a(CharSequence value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(double value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(float value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(int value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(long value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(Object value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi a(StringBuffer value) {\n+        flushAttributes();\n+        builder.append(value);\n+        return this;\n+    }\n+\n+    public Ansi newline() {\n+        flushAttributes();\n+        builder.append(System.getProperty(\"line.separator\"));\n+        return this;\n+    }\n+\n+    public Ansi format(String pattern, Object... args) {\n+        flushAttributes();\n+        builder.append(String.format(pattern, args));\n+        return this;\n+    }\n+\n+    /**\n+     * Applies another function to this Ansi instance.\n+     *\n+     * @param fun the function to apply\n+     * @return this Ansi instance\n+     * @since 2.2\n+     */\n+    public Ansi apply(Consumer fun) {\n+        fun.apply(this);\n+        return this;\n+    }\n+\n+    /**\n+     * Uses the {@link AnsiRenderer}\n+     * to generate the ANSI escape sequences for the supplied text.\n+     *\n+     * @param text text\n+     * @return this\n+     * @since 2.2\n+     */\n+    public Ansi render(final String text) {\n+        a(AnsiRenderer.render(text));\n+        return this;\n+    }\n+\n+    /**\n+     * String formats and renders the supplied arguments.  Uses the {@link AnsiRenderer}\n+     * to generate the ANSI escape sequences.\n+     *\n+     * @param text format\n+     * @param args arguments\n+     * @return this\n+     * @since 2.2\n+     */\n+    public Ansi render(final String text, Object... args) {\n+        a(String.format(AnsiRenderer.render(text), args));\n+        return this;\n+    }\n+\n+    @Override\n+    public String toString() {\n+        flushAttributes();\n+        return builder.toString();\n+    }\n+\n+    ///////////////////////////////////////////////////////////////////\n+    // Private Helper Methods\n+    ///////////////////////////////////////////////////////////////////\n+\n+    private Ansi appendEscapeSequence(char command) {\n+        flushAttributes();\n+        builder.append(FIRST_ESC_CHAR);\n+        builder.append(SECOND_ESC_CHAR);\n+        builder.append(command);\n+        return this;\n+    }\n+\n+    private Ansi appendEscapeSequence(char command, int option) {\n+        flushAttributes();\n+        builder.append(FIRST_ESC_CHAR);\n+        builder.append(SECOND_ESC_CHAR);\n+        builder.append(option);\n+        builder.append(command);\n+        return this;\n+    }\n+\n+    private Ansi appendEscapeSequence(char command, Object... options) {\n+        flushAttributes();\n+        return _appendEscapeSequence(command, options);\n+    }\n+\n+    private void flushAttributes() {\n+        if (attributeOptions.isEmpty())\n+            return;\n+        if (attributeOptions.size() == 1 && attributeOptions.get(0) == 0) {\n+            builder.append(FIRST_ESC_CHAR);\n+            builder.append(SECOND_ESC_CHAR);\n+            builder.append('m');\n+        } else {\n+            _appendEscapeSequence('m', attributeOptions.toArray());\n+        }\n+        attributeOptions.clear();\n+    }\n+\n+    private Ansi _appendEscapeSequence(char command, Object... options) {\n+        builder.append(FIRST_ESC_CHAR);\n+        builder.append(SECOND_ESC_CHAR);\n+        int size = options.length;\n+        for (int i = 0; i < size; i++) {\n+            if (i != 0) {\n+                builder.append(';');\n+            }\n+            if (options[i] != null) {\n+                builder.append(options[i]);\n+            }\n+        }\n+        builder.append(command);\n+        return this;\n+    }\n+\n+    @Override\n+    public Ansi append(CharSequence csq) {\n+        builder.append(csq);\n+        return this;\n+    }\n+\n+    @Override\n+    public Ansi append(CharSequence csq, int start, int end) {\n+        builder.append(csq, start, end);\n+        return this;\n+    }\n+\n+    @Override\n+    public Ansi append(char c) {\n+        builder.append(c);\n+        return this;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiColors.java", "source2": "org/fusesource/jansi/AnsiColors.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,38 +1,38 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-/**\r\n- * Colors support.\r\n- *\r\n- * @since 2.1\r\n- */\r\n-public enum AnsiColors {\r\n-\r\n-    Colors16(\"16 colors\"),\r\n-    Colors256(\"256 colors\"),\r\n-    TrueColor(\"24-bit colors\");\r\n-\r\n-    private final String description;\r\n-\r\n-    AnsiColors(String description) {\r\n-        this.description = description;\r\n-    }\r\n-\r\n-    String getDescription() {\r\n-        return description;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+/**\n+ * Colors support.\n+ *\n+ * @since 2.1\n+ */\n+public enum AnsiColors {\n+\n+    Colors16(\"16 colors\"),\n+    Colors256(\"256 colors\"),\n+    TrueColor(\"24-bit colors\");\n+\n+    private final String description;\n+\n+    AnsiColors(String description) {\n+        this.description = description;\n+    }\n+\n+    String getDescription() {\n+        return description;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiConsole.java", "source2": "org/fusesource/jansi/AnsiConsole.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,560 +1,560 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.FileDescriptor;\r\n-import java.io.FileOutputStream;\r\n-import java.io.IOError;\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.io.PrintStream;\r\n-import java.io.UnsupportedEncodingException;\r\n-import java.nio.charset.Charset;\r\n-import java.nio.charset.UnsupportedCharsetException;\r\n-import java.util.Locale;\r\n-\r\n-import org.fusesource.jansi.internal.CLibrary;\r\n-import org.fusesource.jansi.internal.CLibrary.WinSize;\r\n-import org.fusesource.jansi.io.AnsiOutputStream;\r\n-import org.fusesource.jansi.io.AnsiProcessor;\r\n-import org.fusesource.jansi.io.FastBufferedOutputStream;\r\n-import org.fusesource.jansi.io.WindowsAnsiProcessor;\r\n-import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\r\n-\r\n-import static org.fusesource.jansi.internal.CLibrary.ioctl;\r\n-import static org.fusesource.jansi.internal.CLibrary.isatty;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetConsoleMode;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleMode;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\r\n-\r\n-/**\r\n- * Provides consistent access to an ANSI aware console PrintStream or an ANSI codes stripping PrintStream\r\n- * if not on a terminal (see \r\n- * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/CLibrary.html\">Jansi native\r\n- * CLibrary isatty(int)</a>).\r\n- * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\r\n- * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @since 1.0\r\n- * @see #systemInstall()\r\n- * @see #out()\r\n- * @see #err()\r\n- * @see #ansiStream(boolean) for more details on ANSI mode selection\r\n- */\r\n-public class AnsiConsole {\r\n-\r\n-    /**\r\n-     * The default mode which Jansi will use, can be either <code>force</code>, <code>strip</code>\r\n-     * or <code>default</code> (the default).\r\n-     * If this property is set, it will override <code>jansi.passthrough</code>,\r\n-     * <code>jansi.strip</code> and <code>jansi.force</code> properties.\r\n-     */\r\n-    public static final String JANSI_MODE = \"jansi.mode\";\r\n-    /**\r\n-     * Jansi mode specific to the standard output stream.\r\n-     */\r\n-    public static final String JANSI_OUT_MODE = \"jansi.out.mode\";\r\n-    /**\r\n-     * Jansi mode specific to the standard error stream.\r\n-     */\r\n-    public static final String JANSI_ERR_MODE = \"jansi.err.mode\";\r\n-\r\n-    /**\r\n-     * Jansi mode value to strip all ansi sequences.\r\n-     */\r\n-    public static final String JANSI_MODE_STRIP = \"strip\";\r\n-    /**\r\n-     * Jansi mode value to force ansi sequences to the stream even if it's not a terminal.\r\n-     */\r\n-    public static final String JANSI_MODE_FORCE = \"force\";\r\n-    /**\r\n-     * Jansi mode value that output sequences if on a terminal, else strip them.\r\n-     */\r\n-    public static final String JANSI_MODE_DEFAULT = \"default\";\r\n-\r\n-    /**\r\n-     * The default color support that Jansi will use, can be either <code>16</code>,\r\n-     * <code>256</code> or <code>truecolor</code>.  If not set, JANSI will try to\r\n-     * autodetect the number of colors supported by the terminal by checking the\r\n-     * <code>COLORTERM</code> and <code>TERM</code> variables.\r\n-     */\r\n-    public static final String JANSI_COLORS = \"jansi.colors\";\r\n-    /**\r\n-     * Jansi colors specific to the standard output stream.\r\n-     */\r\n-    public static final String JANSI_OUT_COLORS = \"jansi.out.colors\";\r\n-    /**\r\n-     * Jansi colors specific to the standard error stream.\r\n-     */\r\n-    public static final String JANSI_ERR_COLORS = \"jansi.err.colors\";\r\n-\r\n-    /**\r\n-     * Force the use of 16 colors. When using a 256-indexed color, or an RGB\r\n-     * color, the color will be rounded to the nearest one from the 16 palette.\r\n-     */\r\n-    public static final String JANSI_COLORS_16 = \"16\";\r\n-    /**\r\n-     * Force the use of 256 colors. When using an RGB color, the color will be\r\n-     * rounded to the nearest one from the standard 256 palette.\r\n-     */\r\n-    public static final String JANSI_COLORS_256 = \"256\";\r\n-    /**\r\n-     * Force the use of 24-bit colors.\r\n-     */\r\n-    public static final String JANSI_COLORS_TRUECOLOR = \"truecolor\";\r\n-\r\n-    /**\r\n-     * If the <code>jansi.passthrough</code> system property is set to true, will not perform any transformation\r\n-     * and any ansi sequence will be conveyed without any modification.\r\n-     *\r\n-     * @deprecated use {@link #JANSI_MODE} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static final String JANSI_PASSTHROUGH = \"jansi.passthrough\";\r\n-    /**\r\n-     * If the <code>jansi.strip</code> system property is set to true, and <code>jansi.passthrough</code>\r\n-     * is not enabled, all ansi sequences will be stripped before characters are written to the output streams.\r\n-     *\r\n-     * @deprecated use {@link #JANSI_MODE} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static final String JANSI_STRIP = \"jansi.strip\";\r\n-    /**\r\n-     * If the <code>jansi.force</code> system property is set to true, and neither <code>jansi.passthrough</code>\r\n-     * nor <code>jansi.strip</code> are set, then ansi sequences will be printed to the output stream.\r\n-     * This forces the behavior which is by default dependent on the output stream being a real console: if the\r\n-     * output stream is redirected to a file or through a system pipe, ansi sequences are disabled by default.\r\n-     *\r\n-     * @deprecated use {@link #JANSI_MODE} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static final String JANSI_FORCE = \"jansi.force\";\r\n-    /**\r\n-     * If the <code>jansi.eager</code> system property is set to true, the system streams will be eagerly\r\n-     * initialized, else the initialization is delayed until {@link #out()}, {@link #err()} or {@link #systemInstall()}\r\n-     * is called.\r\n-     *\r\n-     * @deprecated this property has been added but only for backward compatibility.\r\n-     * @since 2.1\r\n-     */\r\n-    @Deprecated()\r\n-    public static final String JANSI_EAGER = \"jansi.eager\";\r\n-    /**\r\n-     * If the <code>jansi.noreset</code> system property is set to true, the attributes won't be\r\n-     * reset when the streams are uninstalled.\r\n-     */\r\n-    public static final String JANSI_NORESET = \"jansi.noreset\";\r\n-\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #sysOut()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream system_out = System.out;\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #out()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream out;\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #sysErr()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream system_err = System.err;\r\n-    /**\r\n-     * @deprecated this field will be made private in a future release, use {@link #err()} instead\r\n-     */\r\n-    @Deprecated\r\n-    public static PrintStream err;\r\n-\r\n-    /**\r\n-     * Try to find the width of the console for this process.\r\n-     * Both output and error streams will be checked to determine the width.\r\n-     * A value of 0 is returned if the width can not be determined.\r\n-     * @since 2.2\r\n-     */\r\n-    public static int getTerminalWidth() {\r\n-        int w = out().getTerminalWidth();\r\n-        if (w <= 0) {\r\n-            w = err().getTerminalWidth();\r\n-        }\r\n-        return w;\r\n-    }\r\n-\r\n-    static final boolean IS_WINDOWS = System.getProperty(\"os.name\").toLowerCase(Locale.ENGLISH).contains(\"win\");\r\n-\r\n-    static final boolean IS_CYGWIN = IS_WINDOWS\r\n-            && System.getenv(\"PWD\") != null\r\n-            && System.getenv(\"PWD\").startsWith(\"/\");\r\n-\r\n-    static final boolean IS_MSYSTEM = IS_WINDOWS\r\n-            && System.getenv(\"MSYSTEM\") != null\r\n-            && (System.getenv(\"MSYSTEM\").startsWith(\"MINGW\")\r\n-                || System.getenv(\"MSYSTEM\").equals(\"MSYS\"));\r\n-\r\n-    static final boolean IS_CONEMU = IS_WINDOWS\r\n-            && System.getenv(\"ConEmuPID\") != null;\r\n-\r\n-    static final int ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;\r\n-\r\n-    static int STDOUT_FILENO = 1;\r\n-\r\n-    static int STDERR_FILENO = 2;\r\n-\r\n-\r\n-    static {\r\n-        if (getBoolean(JANSI_EAGER)) {\r\n-            initStreams();\r\n-        }\r\n-    }\r\n-\r\n-    private static boolean initialized;\r\n-    private static int installed;\r\n-    private static int virtualProcessing;\r\n-\r\n-    private AnsiConsole() {\r\n-    }\r\n-\r\n-    private static AnsiPrintStream ansiStream(boolean stdout) {\r\n-        FileDescriptor descriptor = stdout ? FileDescriptor.out : FileDescriptor.err;\r\n-        final OutputStream out = new FastBufferedOutputStream(new FileOutputStream(descriptor));\r\n-\r\n-        String enc = System.getProperty(stdout ? \"sun.stdout.encoding\" : \"sun.stderr.encoding\");\r\n-\r\n-        final boolean isatty;\r\n-        boolean isAtty;\r\n-        boolean withException;\r\n-        // Do not use the CLibrary.STDOUT_FILENO to avoid errors in case\r\n-        // the library can not be loaded on unsupported platforms\r\n-        final int fd = stdout ? STDOUT_FILENO : STDERR_FILENO;\r\n-        try {\r\n-            // If we can detect that stdout is not a tty.. then setup\r\n-            // to strip the ANSI sequences..\r\n-            isAtty = isatty(fd) != 0;\r\n-            String term = System.getenv(\"TERM\");\r\n-            String emacs = System.getenv(\"INSIDE_EMACS\");\r\n-            if (isAtty && \"dumb\".equals(term) && emacs != null && !emacs.contains(\"comint\")) {\r\n-                isAtty = false;\r\n-            }\r\n-            withException = false;\r\n-        } catch (Throwable ignore) {\r\n-            // These errors happen if the JNI lib is not available for your platform.\r\n-            // But since we are on ANSI friendly platform, assume the user is on the console.\r\n-            isAtty = false;\r\n-            withException = true;\r\n-        }\r\n-        isatty = isAtty;\r\n-\r\n-        final AnsiOutputStream.WidthSupplier width;\r\n-        final AnsiProcessor processor;\r\n-        final AnsiType type;\r\n-        final AnsiOutputStream.IoRunnable installer;\r\n-        final AnsiOutputStream.IoRunnable uninstaller;\r\n-        if (!isatty) {\r\n-            processor = null;\r\n-            type = withException ? AnsiType.Unsupported : AnsiType.Redirected;\r\n-            installer = uninstaller = null;\r\n-            width = new AnsiOutputStream.ZeroWidthSupplier();\r\n-        }\r\n-        else if (IS_WINDOWS) {\r\n-            final long console = GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);\r\n-            final int[] mode = new int[1];\r\n-            final boolean isConsole = GetConsoleMode(console, mode) != 0;\r\n-            if (isConsole\r\n-                    && SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING) != 0) {\r\n-                SetConsoleMode(console, mode[0]); // set it back for now, but we know it works\r\n-                processor = null;\r\n-                type = AnsiType.VirtualTerminal;\r\n-                installer = new AnsiOutputStream.IoRunnable() {\r\n-                    @Override\r\n-                    public void run() throws IOException {\r\n-                        virtualProcessing++;\r\n-                        SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING);\r\n-                    }\r\n-                };\r\n-                uninstaller = new AnsiOutputStream.IoRunnable() {\r\n-                    @Override\r\n-                    public void run() throws IOException {\r\n-                        if (--virtualProcessing == 0) {\r\n-                            SetConsoleMode(console, mode[0]);\r\n-                        }\r\n-                    }\r\n-                };\r\n-            }\r\n-            else if ((IS_CONEMU || IS_CYGWIN || IS_MSYSTEM) && !isConsole) {\r\n-                // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\r\n-                processor = null;\r\n-                type = AnsiType.Native;\r\n-                installer = uninstaller = null;\r\n-            }\r\n-            else {\r\n-                // On Windows, when no ANSI-capable terminal is used, we know the console does not natively interpret ANSI\r\n-                // codes but we can use jansi Kernel32 API for console\r\n-                AnsiProcessor proc;\r\n-                AnsiType ttype;\r\n-                try {\r\n-                    proc = new WindowsAnsiProcessor(out, console);\r\n-                    ttype = AnsiType.Emulation;\r\n-                } catch (Throwable ignore) {\r\n-                    // this happens when the stdout is being redirected to a file.\r\n-                    // Use the AnsiProcessor to strip out the ANSI escape sequences.\r\n-                    proc = new AnsiProcessor(out);\r\n-                    ttype = AnsiType.Unsupported;\r\n-                }\r\n-                processor = proc;\r\n-                type = ttype;\r\n-                installer = uninstaller = null;\r\n-            }\r\n-            width = new AnsiOutputStream.WidthSupplier() {\r\n-                @Override\r\n-                public int getTerminalWidth() {\r\n-                    CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\r\n-                    GetConsoleScreenBufferInfo(console, info);\r\n-                    return info.windowWidth();\r\n-                }\r\n-            };\r\n-        }\r\n-\r\n-        // We must be on some Unix variant...\r\n-        else {\r\n-            // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\r\n-            processor = null;\r\n-            type = AnsiType.Native;\r\n-            installer = uninstaller = null;\r\n-            width = new AnsiOutputStream.WidthSupplier() {\r\n-                @Override\r\n-                public int getTerminalWidth() {\r\n-                    WinSize sz = new WinSize();\r\n-                    ioctl(fd, CLibrary.TIOCGWINSZ, sz);\r\n-                    return sz.ws_col;\r\n-                }\r\n-            };\r\n-        }\r\n-\r\n-        AnsiMode mode;\r\n-\r\n-        // If the jansi.mode property is set, use it\r\n-        String jansiMode = System.getProperty(stdout ? JANSI_OUT_MODE : JANSI_ERR_MODE, System.getProperty(JANSI_MODE));\r\n-        if (JANSI_MODE_FORCE.equals(jansiMode)) {\r\n-            mode = AnsiMode.Force;\r\n-        } else if (JANSI_MODE_STRIP.equals(jansiMode)) {\r\n-            mode = AnsiMode.Strip;\r\n-        } else if (jansiMode != null) {\r\n-            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\r\n-        }\r\n-\r\n-        // If the jansi.passthrough property is set, then don't interpret\r\n-        // any of the ansi sequences.\r\n-        else if (getBoolean(JANSI_PASSTHROUGH)) {\r\n-            mode = AnsiMode.Force;\r\n-        }\r\n-\r\n-        // If the jansi.strip property is set, then we just strip the\r\n-        // the ansi escapes.\r\n-        else if (getBoolean(JANSI_STRIP)) {\r\n-            mode = AnsiMode.Strip;\r\n-        }\r\n-\r\n-        // If the jansi.force property is set, then we force to output\r\n-        // the ansi escapes for piping it into ansi color aware commands (e.g. less -r)\r\n-        else if (getBoolean(JANSI_FORCE)) {\r\n-            mode = AnsiMode.Force;\r\n-        }\r\n-\r\n-        else {\r\n-            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\r\n-        }\r\n-\r\n-        AnsiColors colors;\r\n-\r\n-        String colorterm, term;\r\n-        // If the jansi.colors property is set, use it\r\n-        String jansiColors = System.getProperty(stdout ? JANSI_OUT_COLORS : JANSI_ERR_COLORS, System.getProperty(JANSI_COLORS));\r\n-        if (JANSI_COLORS_TRUECOLOR.equals(jansiColors)) {\r\n-            colors = AnsiColors.TrueColor;\r\n-        } else if (JANSI_COLORS_256.equals(jansiColors)) {\r\n-            colors = AnsiColors.Colors256;\r\n-        } else if (jansiColors != null) {\r\n-            colors = AnsiColors.Colors16;\r\n-        }\r\n-\r\n-        // If the COLORTERM env variable contains \"truecolor\" or \"24bit\", assume true color support\r\n-        // see https://gist.github.com/XVilka/8346728#true-color-detection\r\n-        else if ((colorterm = System.getenv(\"COLORTERM\")) != null\r\n-                && (colorterm.contains(\"truecolor\") || colorterm.contains(\"24bit\"))) {\r\n-            colors = AnsiColors.TrueColor;\r\n-        }\r\n-\r\n-        // check the if TERM contains -direct\r\n-        else if ((term = System.getenv(\"TERM\")) != null && term.contains(\"-direct\")) {\r\n-            colors = AnsiColors.TrueColor;\r\n-        }\r\n-\r\n-        // check the if TERM contains -256color\r\n-        else if (term != null && term.contains(\"-256color\")) {\r\n-            colors = AnsiColors.Colors256;\r\n-        }\r\n-\r\n-        // else defaults to 16 colors\r\n-        else {\r\n-            colors = AnsiColors.Colors16;\r\n-        }\r\n-\r\n-        // If the jansi.noreset property is not set, reset the attributes\r\n-        // when the stream is closed\r\n-        boolean resetAtUninstall = type != AnsiType.Unsupported && !getBoolean(JANSI_NORESET);\r\n-\r\n-        Charset cs = Charset.defaultCharset();\r\n-        if (enc != null) {\r\n-            try {\r\n-                cs = Charset.forName(enc);\r\n-            } catch (UnsupportedCharsetException e) {\r\n-            }\r\n-        }\r\n-        return newPrintStream(new AnsiOutputStream(out, width, mode, processor, type, colors, cs,\r\n-                installer, uninstaller, resetAtUninstall), cs.name());\r\n-    }\r\n-\r\n-    private static AnsiPrintStream newPrintStream(AnsiOutputStream out, String enc) {\r\n-        if (enc != null) {\r\n-            try {\r\n-                return new AnsiPrintStream(out, true, enc);\r\n-            } catch (UnsupportedEncodingException e) {\r\n-            }\r\n-        }\r\n-        return new AnsiPrintStream(out, true);\r\n-    }\r\n-\r\n-    static boolean getBoolean(String name) {\r\n-        boolean result = false;\r\n-        try {\r\n-            String val = System.getProperty(name);\r\n-            result = val.isEmpty() || Boolean.parseBoolean(val);\r\n-        } catch (IllegalArgumentException e) {\r\n-        } catch (NullPointerException e) {\r\n-        }\r\n-        return result;\r\n-    }\r\n-\r\n-    /**\r\n-     * If the standard out natively supports ANSI escape codes, then this just\r\n-     * returns System.out, otherwise it will provide an ANSI aware PrintStream\r\n-     * which strips out the ANSI escape sequences or which implement the escape\r\n-     * sequences.\r\n-     *\r\n-     * @return a PrintStream which is ANSI aware.\r\n-     */\r\n-    public static AnsiPrintStream out() {\r\n-        initStreams();\r\n-        return (AnsiPrintStream) out;\r\n-    }\r\n-\r\n-    /**\r\n-     * Access to the original System.out stream before ansi streams were installed.\r\n-     *\r\n-     * @return the originial System.out print stream\r\n-     */\r\n-    public static PrintStream sysOut() {\r\n-        return system_out;\r\n-    }\r\n-\r\n-    /**\r\n-     * If the standard out natively supports ANSI escape codes, then this just\r\n-     * returns System.err, otherwise it will provide an ANSI aware PrintStream\r\n-     * which strips out the ANSI escape sequences or which implement the escape\r\n-     * sequences.\r\n-     *\r\n-     * @return a PrintStream which is ANSI aware.\r\n-     */\r\n-    public static AnsiPrintStream err() {\r\n-        initStreams();\r\n-        return (AnsiPrintStream) err;\r\n-    }\r\n-\r\n-    /**\r\n-     * Access to the original System.err stream before ansi streams were installed.\r\n-     *\r\n-     * @return the originial System.err print stream\r\n-     */\r\n-    public static PrintStream sysErr() {\r\n-        return system_err;\r\n-    }\r\n-\r\n-    /**\r\n-     * Install <code>AnsiConsole.out()</code> to <code>System.out</code> and\r\n-     * <code>AnsiConsole.err()</code> to <code>System.err</code>.\r\n-     * @see #systemUninstall()\r\n-     */\r\n-    synchronized static public void systemInstall() {\r\n-        installed++;\r\n-        if (installed == 1) {\r\n-            initStreams();\r\n-            try {\r\n-                ((AnsiPrintStream) out).install();\r\n-                ((AnsiPrintStream) err).install();\r\n-            } catch (IOException e) {\r\n-                throw new IOError(e);\r\n-            }\r\n-            System.setOut(out);\r\n-            System.setErr(err);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * check if the streams have been installed or not\r\n-     */\r\n-    synchronized public static boolean isInstalled() {\r\n-        return installed > 0;\r\n-    }\r\n-\r\n-    /**\r\n-     * undo a previous {@link #systemInstall()}.  If {@link #systemInstall()} was called\r\n-     * multiple times, {@link #systemUninstall()} must be called the same number of times before\r\n-     * it is actually uninstalled.\r\n-     */\r\n-    synchronized public static void systemUninstall() {\r\n-        installed--;\r\n-        if (installed == 0) {\r\n-            try {\r\n-                ((AnsiPrintStream) out).uninstall();\r\n-                ((AnsiPrintStream) err).uninstall();\r\n-            } catch (IOException e) {\r\n-                throw new IOError(e);\r\n-            }\r\n-            initialized = false;\r\n-            System.setOut(system_out);\r\n-            System.setErr(system_err);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Initialize the out/err ansi-enabled streams\r\n-     */\r\n-    synchronized static void initStreams()\r\n-    {\r\n-        if ( !initialized )\r\n-        {\r\n-            out = ansiStream(true);\r\n-            err = ansiStream(false);\r\n-            initialized = true;\r\n-        }\r\n-    }\r\n-\r\n-    ;\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.FileDescriptor;\n+import java.io.FileOutputStream;\n+import java.io.IOError;\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.io.PrintStream;\n+import java.io.UnsupportedEncodingException;\n+import java.nio.charset.Charset;\n+import java.nio.charset.UnsupportedCharsetException;\n+import java.util.Locale;\n+\n+import org.fusesource.jansi.internal.CLibrary;\n+import org.fusesource.jansi.internal.CLibrary.WinSize;\n+import org.fusesource.jansi.io.AnsiOutputStream;\n+import org.fusesource.jansi.io.AnsiProcessor;\n+import org.fusesource.jansi.io.FastBufferedOutputStream;\n+import org.fusesource.jansi.io.WindowsAnsiProcessor;\n+import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\n+\n+import static org.fusesource.jansi.internal.CLibrary.ioctl;\n+import static org.fusesource.jansi.internal.CLibrary.isatty;\n+import static org.fusesource.jansi.internal.Kernel32.GetConsoleMode;\n+import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\n+import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleMode;\n+import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\n+\n+/**\n+ * Provides consistent access to an ANSI aware console PrintStream or an ANSI codes stripping PrintStream\n+ * if not on a terminal (see \n+ * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/CLibrary.html\">Jansi native\n+ * CLibrary isatty(int)</a>).\n+ * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\n+ * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @since 1.0\n+ * @see #systemInstall()\n+ * @see #out()\n+ * @see #err()\n+ * @see #ansiStream(boolean) for more details on ANSI mode selection\n+ */\n+public class AnsiConsole {\n+\n+    /**\n+     * The default mode which Jansi will use, can be either <code>force</code>, <code>strip</code>\n+     * or <code>default</code> (the default).\n+     * If this property is set, it will override <code>jansi.passthrough</code>,\n+     * <code>jansi.strip</code> and <code>jansi.force</code> properties.\n+     */\n+    public static final String JANSI_MODE = \"jansi.mode\";\n+    /**\n+     * Jansi mode specific to the standard output stream.\n+     */\n+    public static final String JANSI_OUT_MODE = \"jansi.out.mode\";\n+    /**\n+     * Jansi mode specific to the standard error stream.\n+     */\n+    public static final String JANSI_ERR_MODE = \"jansi.err.mode\";\n+\n+    /**\n+     * Jansi mode value to strip all ansi sequences.\n+     */\n+    public static final String JANSI_MODE_STRIP = \"strip\";\n+    /**\n+     * Jansi mode value to force ansi sequences to the stream even if it's not a terminal.\n+     */\n+    public static final String JANSI_MODE_FORCE = \"force\";\n+    /**\n+     * Jansi mode value that output sequences if on a terminal, else strip them.\n+     */\n+    public static final String JANSI_MODE_DEFAULT = \"default\";\n+\n+    /**\n+     * The default color support that Jansi will use, can be either <code>16</code>,\n+     * <code>256</code> or <code>truecolor</code>.  If not set, JANSI will try to\n+     * autodetect the number of colors supported by the terminal by checking the\n+     * <code>COLORTERM</code> and <code>TERM</code> variables.\n+     */\n+    public static final String JANSI_COLORS = \"jansi.colors\";\n+    /**\n+     * Jansi colors specific to the standard output stream.\n+     */\n+    public static final String JANSI_OUT_COLORS = \"jansi.out.colors\";\n+    /**\n+     * Jansi colors specific to the standard error stream.\n+     */\n+    public static final String JANSI_ERR_COLORS = \"jansi.err.colors\";\n+\n+    /**\n+     * Force the use of 16 colors. When using a 256-indexed color, or an RGB\n+     * color, the color will be rounded to the nearest one from the 16 palette.\n+     */\n+    public static final String JANSI_COLORS_16 = \"16\";\n+    /**\n+     * Force the use of 256 colors. When using an RGB color, the color will be\n+     * rounded to the nearest one from the standard 256 palette.\n+     */\n+    public static final String JANSI_COLORS_256 = \"256\";\n+    /**\n+     * Force the use of 24-bit colors.\n+     */\n+    public static final String JANSI_COLORS_TRUECOLOR = \"truecolor\";\n+\n+    /**\n+     * If the <code>jansi.passthrough</code> system property is set to true, will not perform any transformation\n+     * and any ansi sequence will be conveyed without any modification.\n+     *\n+     * @deprecated use {@link #JANSI_MODE} instead\n+     */\n+    @Deprecated\n+    public static final String JANSI_PASSTHROUGH = \"jansi.passthrough\";\n+    /**\n+     * If the <code>jansi.strip</code> system property is set to true, and <code>jansi.passthrough</code>\n+     * is not enabled, all ansi sequences will be stripped before characters are written to the output streams.\n+     *\n+     * @deprecated use {@link #JANSI_MODE} instead\n+     */\n+    @Deprecated\n+    public static final String JANSI_STRIP = \"jansi.strip\";\n+    /**\n+     * If the <code>jansi.force</code> system property is set to true, and neither <code>jansi.passthrough</code>\n+     * nor <code>jansi.strip</code> are set, then ansi sequences will be printed to the output stream.\n+     * This forces the behavior which is by default dependent on the output stream being a real console: if the\n+     * output stream is redirected to a file or through a system pipe, ansi sequences are disabled by default.\n+     *\n+     * @deprecated use {@link #JANSI_MODE} instead\n+     */\n+    @Deprecated\n+    public static final String JANSI_FORCE = \"jansi.force\";\n+    /**\n+     * If the <code>jansi.eager</code> system property is set to true, the system streams will be eagerly\n+     * initialized, else the initialization is delayed until {@link #out()}, {@link #err()} or {@link #systemInstall()}\n+     * is called.\n+     *\n+     * @deprecated this property has been added but only for backward compatibility.\n+     * @since 2.1\n+     */\n+    @Deprecated()\n+    public static final String JANSI_EAGER = \"jansi.eager\";\n+    /**\n+     * If the <code>jansi.noreset</code> system property is set to true, the attributes won't be\n+     * reset when the streams are uninstalled.\n+     */\n+    public static final String JANSI_NORESET = \"jansi.noreset\";\n+\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #sysOut()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream system_out = System.out;\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #out()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream out;\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #sysErr()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream system_err = System.err;\n+    /**\n+     * @deprecated this field will be made private in a future release, use {@link #err()} instead\n+     */\n+    @Deprecated\n+    public static PrintStream err;\n+\n+    /**\n+     * Try to find the width of the console for this process.\n+     * Both output and error streams will be checked to determine the width.\n+     * A value of 0 is returned if the width can not be determined.\n+     * @since 2.2\n+     */\n+    public static int getTerminalWidth() {\n+        int w = out().getTerminalWidth();\n+        if (w <= 0) {\n+            w = err().getTerminalWidth();\n+        }\n+        return w;\n+    }\n+\n+    static final boolean IS_WINDOWS = System.getProperty(\"os.name\").toLowerCase(Locale.ENGLISH).contains(\"win\");\n+\n+    static final boolean IS_CYGWIN = IS_WINDOWS\n+            && System.getenv(\"PWD\") != null\n+            && System.getenv(\"PWD\").startsWith(\"/\");\n+\n+    static final boolean IS_MSYSTEM = IS_WINDOWS\n+            && System.getenv(\"MSYSTEM\") != null\n+            && (System.getenv(\"MSYSTEM\").startsWith(\"MINGW\")\n+                || System.getenv(\"MSYSTEM\").equals(\"MSYS\"));\n+\n+    static final boolean IS_CONEMU = IS_WINDOWS\n+            && System.getenv(\"ConEmuPID\") != null;\n+\n+    static final int ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;\n+\n+    static int STDOUT_FILENO = 1;\n+\n+    static int STDERR_FILENO = 2;\n+\n+\n+    static {\n+        if (getBoolean(JANSI_EAGER)) {\n+            initStreams();\n+        }\n+    }\n+\n+    private static boolean initialized;\n+    private static int installed;\n+    private static int virtualProcessing;\n+\n+    private AnsiConsole() {\n+    }\n+\n+    private static AnsiPrintStream ansiStream(boolean stdout) {\n+        FileDescriptor descriptor = stdout ? FileDescriptor.out : FileDescriptor.err;\n+        final OutputStream out = new FastBufferedOutputStream(new FileOutputStream(descriptor));\n+\n+        String enc = System.getProperty(stdout ? \"sun.stdout.encoding\" : \"sun.stderr.encoding\");\n+\n+        final boolean isatty;\n+        boolean isAtty;\n+        boolean withException;\n+        // Do not use the CLibrary.STDOUT_FILENO to avoid errors in case\n+        // the library can not be loaded on unsupported platforms\n+        final int fd = stdout ? STDOUT_FILENO : STDERR_FILENO;\n+        try {\n+            // If we can detect that stdout is not a tty.. then setup\n+            // to strip the ANSI sequences..\n+            isAtty = isatty(fd) != 0;\n+            String term = System.getenv(\"TERM\");\n+            String emacs = System.getenv(\"INSIDE_EMACS\");\n+            if (isAtty && \"dumb\".equals(term) && emacs != null && !emacs.contains(\"comint\")) {\n+                isAtty = false;\n+            }\n+            withException = false;\n+        } catch (Throwable ignore) {\n+            // These errors happen if the JNI lib is not available for your platform.\n+            // But since we are on ANSI friendly platform, assume the user is on the console.\n+            isAtty = false;\n+            withException = true;\n+        }\n+        isatty = isAtty;\n+\n+        final AnsiOutputStream.WidthSupplier width;\n+        final AnsiProcessor processor;\n+        final AnsiType type;\n+        final AnsiOutputStream.IoRunnable installer;\n+        final AnsiOutputStream.IoRunnable uninstaller;\n+        if (!isatty) {\n+            processor = null;\n+            type = withException ? AnsiType.Unsupported : AnsiType.Redirected;\n+            installer = uninstaller = null;\n+            width = new AnsiOutputStream.ZeroWidthSupplier();\n+        }\n+        else if (IS_WINDOWS) {\n+            final long console = GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);\n+            final int[] mode = new int[1];\n+            final boolean isConsole = GetConsoleMode(console, mode) != 0;\n+            if (isConsole\n+                    && SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING) != 0) {\n+                SetConsoleMode(console, mode[0]); // set it back for now, but we know it works\n+                processor = null;\n+                type = AnsiType.VirtualTerminal;\n+                installer = new AnsiOutputStream.IoRunnable() {\n+                    @Override\n+                    public void run() throws IOException {\n+                        virtualProcessing++;\n+                        SetConsoleMode(console, mode[0] | ENABLE_VIRTUAL_TERMINAL_PROCESSING);\n+                    }\n+                };\n+                uninstaller = new AnsiOutputStream.IoRunnable() {\n+                    @Override\n+                    public void run() throws IOException {\n+                        if (--virtualProcessing == 0) {\n+                            SetConsoleMode(console, mode[0]);\n+                        }\n+                    }\n+                };\n+            }\n+            else if ((IS_CONEMU || IS_CYGWIN || IS_MSYSTEM) && !isConsole) {\n+                // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\n+                processor = null;\n+                type = AnsiType.Native;\n+                installer = uninstaller = null;\n+            }\n+            else {\n+                // On Windows, when no ANSI-capable terminal is used, we know the console does not natively interpret ANSI\n+                // codes but we can use jansi Kernel32 API for console\n+                AnsiProcessor proc;\n+                AnsiType ttype;\n+                try {\n+                    proc = new WindowsAnsiProcessor(out, console);\n+                    ttype = AnsiType.Emulation;\n+                } catch (Throwable ignore) {\n+                    // this happens when the stdout is being redirected to a file.\n+                    // Use the AnsiProcessor to strip out the ANSI escape sequences.\n+                    proc = new AnsiProcessor(out);\n+                    ttype = AnsiType.Unsupported;\n+                }\n+                processor = proc;\n+                type = ttype;\n+                installer = uninstaller = null;\n+            }\n+            width = new AnsiOutputStream.WidthSupplier() {\n+                @Override\n+                public int getTerminalWidth() {\n+                    CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\n+                    GetConsoleScreenBufferInfo(console, info);\n+                    return info.windowWidth();\n+                }\n+            };\n+        }\n+\n+        // We must be on some Unix variant...\n+        else {\n+            // ANSI-enabled ConEmu, Cygwin or MSYS(2) on Windows...\n+            processor = null;\n+            type = AnsiType.Native;\n+            installer = uninstaller = null;\n+            width = new AnsiOutputStream.WidthSupplier() {\n+                @Override\n+                public int getTerminalWidth() {\n+                    WinSize sz = new WinSize();\n+                    ioctl(fd, CLibrary.TIOCGWINSZ, sz);\n+                    return sz.ws_col;\n+                }\n+            };\n+        }\n+\n+        AnsiMode mode;\n+\n+        // If the jansi.mode property is set, use it\n+        String jansiMode = System.getProperty(stdout ? JANSI_OUT_MODE : JANSI_ERR_MODE, System.getProperty(JANSI_MODE));\n+        if (JANSI_MODE_FORCE.equals(jansiMode)) {\n+            mode = AnsiMode.Force;\n+        } else if (JANSI_MODE_STRIP.equals(jansiMode)) {\n+            mode = AnsiMode.Strip;\n+        } else if (jansiMode != null) {\n+            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\n+        }\n+\n+        // If the jansi.passthrough property is set, then don't interpret\n+        // any of the ansi sequences.\n+        else if (getBoolean(JANSI_PASSTHROUGH)) {\n+            mode = AnsiMode.Force;\n+        }\n+\n+        // If the jansi.strip property is set, then we just strip the\n+        // the ansi escapes.\n+        else if (getBoolean(JANSI_STRIP)) {\n+            mode = AnsiMode.Strip;\n+        }\n+\n+        // If the jansi.force property is set, then we force to output\n+        // the ansi escapes for piping it into ansi color aware commands (e.g. less -r)\n+        else if (getBoolean(JANSI_FORCE)) {\n+            mode = AnsiMode.Force;\n+        }\n+\n+        else {\n+            mode = isatty ? AnsiMode.Default : AnsiMode.Strip;\n+        }\n+\n+        AnsiColors colors;\n+\n+        String colorterm, term;\n+        // If the jansi.colors property is set, use it\n+        String jansiColors = System.getProperty(stdout ? JANSI_OUT_COLORS : JANSI_ERR_COLORS, System.getProperty(JANSI_COLORS));\n+        if (JANSI_COLORS_TRUECOLOR.equals(jansiColors)) {\n+            colors = AnsiColors.TrueColor;\n+        } else if (JANSI_COLORS_256.equals(jansiColors)) {\n+            colors = AnsiColors.Colors256;\n+        } else if (jansiColors != null) {\n+            colors = AnsiColors.Colors16;\n+        }\n+\n+        // If the COLORTERM env variable contains \"truecolor\" or \"24bit\", assume true color support\n+        // see https://gist.github.com/XVilka/8346728#true-color-detection\n+        else if ((colorterm = System.getenv(\"COLORTERM\")) != null\n+                && (colorterm.contains(\"truecolor\") || colorterm.contains(\"24bit\"))) {\n+            colors = AnsiColors.TrueColor;\n+        }\n+\n+        // check the if TERM contains -direct\n+        else if ((term = System.getenv(\"TERM\")) != null && term.contains(\"-direct\")) {\n+            colors = AnsiColors.TrueColor;\n+        }\n+\n+        // check the if TERM contains -256color\n+        else if (term != null && term.contains(\"-256color\")) {\n+            colors = AnsiColors.Colors256;\n+        }\n+\n+        // else defaults to 16 colors\n+        else {\n+            colors = AnsiColors.Colors16;\n+        }\n+\n+        // If the jansi.noreset property is not set, reset the attributes\n+        // when the stream is closed\n+        boolean resetAtUninstall = type != AnsiType.Unsupported && !getBoolean(JANSI_NORESET);\n+\n+        Charset cs = Charset.defaultCharset();\n+        if (enc != null) {\n+            try {\n+                cs = Charset.forName(enc);\n+            } catch (UnsupportedCharsetException e) {\n+            }\n+        }\n+        return newPrintStream(new AnsiOutputStream(out, width, mode, processor, type, colors, cs,\n+                installer, uninstaller, resetAtUninstall), cs.name());\n+    }\n+\n+    private static AnsiPrintStream newPrintStream(AnsiOutputStream out, String enc) {\n+        if (enc != null) {\n+            try {\n+                return new AnsiPrintStream(out, true, enc);\n+            } catch (UnsupportedEncodingException e) {\n+            }\n+        }\n+        return new AnsiPrintStream(out, true);\n+    }\n+\n+    static boolean getBoolean(String name) {\n+        boolean result = false;\n+        try {\n+            String val = System.getProperty(name);\n+            result = val.isEmpty() || Boolean.parseBoolean(val);\n+        } catch (IllegalArgumentException e) {\n+        } catch (NullPointerException e) {\n+        }\n+        return result;\n+    }\n+\n+    /**\n+     * If the standard out natively supports ANSI escape codes, then this just\n+     * returns System.out, otherwise it will provide an ANSI aware PrintStream\n+     * which strips out the ANSI escape sequences or which implement the escape\n+     * sequences.\n+     *\n+     * @return a PrintStream which is ANSI aware.\n+     */\n+    public static AnsiPrintStream out() {\n+        initStreams();\n+        return (AnsiPrintStream) out;\n+    }\n+\n+    /**\n+     * Access to the original System.out stream before ansi streams were installed.\n+     *\n+     * @return the originial System.out print stream\n+     */\n+    public static PrintStream sysOut() {\n+        return system_out;\n+    }\n+\n+    /**\n+     * If the standard out natively supports ANSI escape codes, then this just\n+     * returns System.err, otherwise it will provide an ANSI aware PrintStream\n+     * which strips out the ANSI escape sequences or which implement the escape\n+     * sequences.\n+     *\n+     * @return a PrintStream which is ANSI aware.\n+     */\n+    public static AnsiPrintStream err() {\n+        initStreams();\n+        return (AnsiPrintStream) err;\n+    }\n+\n+    /**\n+     * Access to the original System.err stream before ansi streams were installed.\n+     *\n+     * @return the originial System.err print stream\n+     */\n+    public static PrintStream sysErr() {\n+        return system_err;\n+    }\n+\n+    /**\n+     * Install <code>AnsiConsole.out()</code> to <code>System.out</code> and\n+     * <code>AnsiConsole.err()</code> to <code>System.err</code>.\n+     * @see #systemUninstall()\n+     */\n+    synchronized static public void systemInstall() {\n+        installed++;\n+        if (installed == 1) {\n+            initStreams();\n+            try {\n+                ((AnsiPrintStream) out).install();\n+                ((AnsiPrintStream) err).install();\n+            } catch (IOException e) {\n+                throw new IOError(e);\n+            }\n+            System.setOut(out);\n+            System.setErr(err);\n+        }\n+    }\n+\n+    /**\n+     * check if the streams have been installed or not\n+     */\n+    synchronized public static boolean isInstalled() {\n+        return installed > 0;\n+    }\n+\n+    /**\n+     * undo a previous {@link #systemInstall()}.  If {@link #systemInstall()} was called\n+     * multiple times, {@link #systemUninstall()} must be called the same number of times before\n+     * it is actually uninstalled.\n+     */\n+    synchronized public static void systemUninstall() {\n+        installed--;\n+        if (installed == 0) {\n+            try {\n+                ((AnsiPrintStream) out).uninstall();\n+                ((AnsiPrintStream) err).uninstall();\n+            } catch (IOException e) {\n+                throw new IOError(e);\n+            }\n+            initialized = false;\n+            System.setOut(system_out);\n+            System.setErr(system_err);\n+        }\n+    }\n+\n+    /**\n+     * Initialize the out/err ansi-enabled streams\n+     */\n+    synchronized static void initStreams()\n+    {\n+        if ( !initialized )\n+        {\n+            out = ansiStream(true);\n+            err = ansiStream(false);\n+            initialized = true;\n+        }\n+    }\n+\n+    ;\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiMain.java", "source2": "org/fusesource/jansi/AnsiMain.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,289 +1,289 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import static org.fusesource.jansi.Ansi.ansi;\r\n-\r\n-import java.io.BufferedReader;\r\n-import java.io.Closeable;\r\n-import java.io.File;\r\n-import java.io.FileInputStream;\r\n-import java.io.IOException;\r\n-import java.io.InputStream;\r\n-import java.io.InputStreamReader;\r\n-import java.io.PrintStream;\r\n-import java.util.Properties;\r\n-\r\n-import org.fusesource.jansi.Ansi.Attribute;\r\n-import org.fusesource.jansi.internal.CLibrary;\r\n-import org.fusesource.jansi.internal.JansiLoader;\r\n-\r\n-/**\r\n- * Main class for the library, providing executable jar to diagnose Jansi setup.\r\n- * <p>If no system property is set and output is sent to a terminal (no redirect to a file):\r\n- * <ul>\r\n- * <li>any terminal on any Unix should get <code>RESET_ANSI_AT_CLOSE</code> mode,</li>\r\n- * <li>on Windows, Git-bash or Cygwin terminals should get <code>RESET_ANSI_AT_CLOSE</code> mode also, since they\r\n- * support natively ANSI escape sequences like any Unix terminal,</li>\r\n- * <li>on Windows, cmd.exe, PowerShell or Git-cmd terminals should get <code>WINDOWS</code> mode.</li>\r\n- * </ul>\r\n- * If stdout is redirected to a file (<code>&gt; out.txt</code>), System.out should switch to <code>STRIP_ANSI</code>.\r\n- * Same for stderr redirection (<code>2&gt; err.txt</code>) which should affect System.err mode.\r\n- * <p>The results will vary if you play with <code>jansi.passthrough</code>, <code>jansi.strip</code> or\r\n- * <code>jansi.force</code> system property, or if you redirect output to a file.\r\n- * <p>If you have a specific situation that is not covered, please report precise conditions to reproduce\r\n- * the issue and ideas on how to detect precisely the affected situation.\r\n- * @see AnsiConsole\r\n- */\r\n-public class AnsiMain {\r\n-    public static void main(String... args) throws IOException {\r\n-        System.out.println(\"Jansi \" + getJansiVersion());\r\n-\r\n-        System.out.println();\r\n-\r\n-        // info on native library\r\n-        System.out.println(\"library.jansi.path= \" + System.getProperty(\"library.jansi.path\", \"\"));\r\n-        System.out.println(\"library.jansi.version= \" + System.getProperty(\"library.jansi.version\", \"\"));\r\n-        JansiLoader.initialize();\r\n-        System.out.println(\"Jansi native library loaded from \" + JansiLoader.getNativeLibraryPath());\r\n-        if (JansiLoader.getNativeLibrarySourceUrl() != null) {\r\n-            System.out.println(\"   which was auto-extracted from \" + JansiLoader.getNativeLibrarySourceUrl());\r\n-        }\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(\"os.name= \" + System.getProperty(\"os.name\") + \", \"\r\n-                        + \"os.version= \" + System.getProperty(\"os.version\") + \", \"\r\n-                        + \"os.arch= \" + System.getProperty(\"os.arch\"));\r\n-        System.out.println(\"file.encoding= \" + System.getProperty(\"file.encoding\"));\r\n-        System.out.println(\"java.version= \" + System.getProperty(\"java.version\") + \", \"\r\n-                        + \"java.vendor= \" + System.getProperty(\"java.vendor\") + \",\"\r\n-                        + \" java.home= \" + System.getProperty(\"java.home\"));\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(AnsiConsole.JANSI_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_MODE, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_OUT_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_MODE, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_ERR_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_MODE, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_COLORS, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_OUT_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_COLORS, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_ERR_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_COLORS, \"\"));\r\n-        System.out.println(AnsiConsole.JANSI_PASSTHROUGH + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_PASSTHROUGH));\r\n-        System.out.println(AnsiConsole.JANSI_STRIP + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_STRIP));\r\n-        System.out.println(AnsiConsole.JANSI_FORCE + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_FORCE));\r\n-        System.out.println(AnsiConsole.JANSI_NORESET + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_NORESET));\r\n-        System.out.println(Ansi.DISABLE + \"= \" + AnsiConsole.getBoolean(Ansi.DISABLE));\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(\"IS_WINDOWS: \" + AnsiConsole.IS_WINDOWS);\r\n-        if (AnsiConsole.IS_WINDOWS) {\r\n-            System.out.println(\"IS_CONEMU: \" + AnsiConsole.IS_CONEMU);\r\n-            System.out.println(\"IS_CYGWIN: \" + AnsiConsole.IS_CYGWIN);\r\n-            System.out.println(\"IS_MSYSTEM: \" + AnsiConsole.IS_MSYSTEM);\r\n-        }\r\n-\r\n-        System.out.println();\r\n-\r\n-        diagnoseTty(false); // System.out\r\n-        diagnoseTty(true);  // System.err\r\n-\r\n-        AnsiConsole.systemInstall();\r\n-\r\n-        System.out.println();\r\n-\r\n-        System.out.println(\"Resulting Jansi modes for stout/stderr streams:\");\r\n-        System.out.println(\"  - System.out: \" + AnsiConsole.out().toString());\r\n-        System.out.println(\"  - System.err: \" + AnsiConsole.err().toString());\r\n-        System.out.println(\"Processor types description:\");\r\n-        for (AnsiType type : AnsiType.values()) {\r\n-            System.out.println(\"  - \" + type + \": \" + type.getDescription());\r\n-        }\r\n-        System.out.println(\"Colors support description:\");\r\n-        for (AnsiColors colors : AnsiColors.values()) {\r\n-            System.out.println(\"  - \" + colors + \": \" + colors.getDescription());\r\n-        }\r\n-        System.out.println(\"Modes description:\");\r\n-        for (AnsiMode mode : AnsiMode.values()) {\r\n-            System.out.println(\"  - \" + mode + \": \" + mode.getDescription());\r\n-        }\r\n-\r\n-        try {\r\n-            System.out.println();\r\n-\r\n-            testAnsi(false);\r\n-            testAnsi(true);\r\n-\r\n-            if (args.length == 0) {\r\n-                printJansiLogoDemo();\r\n-                return;\r\n-            }\r\n-\r\n-            System.out.println();\r\n-\r\n-            if (args.length == 1) {\r\n-                File f = new File(args[0]);\r\n-                if (f.exists())\r\n-                {\r\n-                    // write file content\r\n-                    System.out.println(ansi().bold().a(\"\\\"\" + args[0] + \"\\\" content:\").reset());\r\n-                    writeFileContent(f);\r\n-                    return;\r\n-                }\r\n-            }\r\n-\r\n-            // write args without Jansi then with Jansi AnsiConsole\r\n-            System.out.println(ansi().bold().a(\"original args:\").reset());\r\n-            int i = 1;\r\n-            for (String arg: args) {\r\n-                AnsiConsole.system_out.print(i++ + \": \");\r\n-                AnsiConsole.system_out.println(arg);\r\n-            }\r\n-\r\n-            System.out.println(ansi().bold().a(\"Jansi filtered args:\").reset());\r\n-            i = 1;\r\n-            for (String arg: args) {\r\n-                System.out.print(i++ + \": \");\r\n-                System.out.println(arg);\r\n-            }\r\n-        } finally {\r\n-            AnsiConsole.systemUninstall();\r\n-        }\r\n-    }\r\n-\r\n-    private static String getJansiVersion() {\r\n-        Package p = AnsiMain.class.getPackage();\r\n-        return ( p == null ) ? null : p.getImplementationVersion();\r\n-    }\r\n-\r\n-    private static void diagnoseTty(boolean stderr) {\r\n-        int fd = stderr ? CLibrary.STDERR_FILENO : CLibrary.STDOUT_FILENO;\r\n-        int isatty = CLibrary.isatty(fd);\r\n-\r\n-        System.out.println(\"isatty(STD\" + (stderr ? \"ERR\" : \"OUT\") + \"_FILENO): \" + isatty + \", System.\"\r\n-            + (stderr ? \"err\" : \"out\") + \" \" + ((isatty == 0) ? \"is *NOT*\" : \"is\") + \" a terminal\");\r\n-    }\r\n-\r\n-    private static void testAnsi(boolean stderr) {\r\n-        @SuppressWarnings( \"resource\" )\r\n-        PrintStream s = stderr ? System.err : System.out;\r\n-        s.print(\"test on System.\" + (stderr ? \"err\" : \"out\") + \":\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"            bright:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().fgBright(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"              bold:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().bold().fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"             faint:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        s.print(\"        bold+faint:\");\r\n-        for(Ansi.Color c: Ansi.Color.values()) {\r\n-            s.print(\" \" + ansi().bold().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\r\n-        }\r\n-        s.println();\r\n-        Ansi ansi = ansi();\r\n-        ansi.a(\"        256 colors: \");\r\n-        for (int i = 0; i < 6*6*6; i++) {\r\n-            if (i > 0 && i % 36 == 0) {\r\n-                ansi.reset();\r\n-                ansi.newline();\r\n-                ansi.a(\"                    \");\r\n-            } else if (i > 0 && i % 6 == 0) {\r\n-                ansi.reset();\r\n-                ansi.a(\"  \");\r\n-            }\r\n-            int a0 = i % 6;\r\n-            int a1 = (i  / 6) % 6;\r\n-            int a2 = i / 36;\r\n-            ansi.bg(16 + a0 + a2 * 6 + a1 * 36).a(' ');\r\n-        }\r\n-        ansi.reset();\r\n-        s.println(ansi);\r\n-        ansi = ansi();\r\n-        ansi.a(\"         truecolor: \");\r\n-        for (int i = 0; i < 256; i++) {\r\n-            if (i > 0 && i % 48 == 0) {\r\n-                ansi.reset();\r\n-                ansi.newline();\r\n-                ansi.a(\"                    \");\r\n-            }\r\n-            int r = 255 - i;\r\n-            int g = i * 2 > 255 ? 255 - 2 * i : 2 * i;\r\n-            int b = i;\r\n-            ansi.bgRgb(r, g, b).fgRgb(255 - r, 255 - g, 255 - b).a(i % 2 == 0 ? '/' : '\\\\');\r\n-        }\r\n-        ansi.reset();\r\n-        s.println(ansi);\r\n-    }\r\n-\r\n-    private static String getPomPropertiesVersion(String path) throws IOException {\r\n-        InputStream in = AnsiMain.class.getResourceAsStream(\"/META-INF/maven/\" + path + \"/pom.properties\");\r\n-        if (in == null) {\r\n-            return null;\r\n-        }\r\n-        try {\r\n-            Properties p = new Properties();\r\n-            p.load(in);\r\n-            return p.getProperty(\"version\");\r\n-        } finally {\r\n-            closeQuietly(in);\r\n-        }\r\n-    }\r\n-\r\n-    private static void printJansiLogoDemo() throws IOException {\r\n-        BufferedReader in = new BufferedReader(new InputStreamReader(AnsiMain.class.getResourceAsStream(\"jansi.txt\"), \"UTF-8\"));\r\n-        try {\r\n-            String l;\r\n-            while ((l = in.readLine()) != null) {\r\n-                System.out.println(l);\r\n-            }\r\n-        } finally {\r\n-            closeQuietly(in);\r\n-        }\r\n-    }\r\n-\r\n-    private static void writeFileContent(File f) throws IOException {\r\n-        InputStream in = new FileInputStream(f);\r\n-        try {\r\n-            byte[] buf = new byte[1024];\r\n-            int l = 0;\r\n-            while ((l = in.read(buf)) >= 0) {\r\n-                System.out.write(buf, 0, l);\r\n-            }\r\n-        } finally {\r\n-            closeQuietly(in);\r\n-        }\r\n-    }\r\n-\r\n-    private static void closeQuietly(Closeable c) {\r\n-        try {\r\n-            c.close();\r\n-        } catch (IOException ioe) {\r\n-            ioe.printStackTrace(System.err);\r\n-        }\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import static org.fusesource.jansi.Ansi.ansi;\n+\n+import java.io.BufferedReader;\n+import java.io.Closeable;\n+import java.io.File;\n+import java.io.FileInputStream;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.InputStreamReader;\n+import java.io.PrintStream;\n+import java.util.Properties;\n+\n+import org.fusesource.jansi.Ansi.Attribute;\n+import org.fusesource.jansi.internal.CLibrary;\n+import org.fusesource.jansi.internal.JansiLoader;\n+\n+/**\n+ * Main class for the library, providing executable jar to diagnose Jansi setup.\n+ * <p>If no system property is set and output is sent to a terminal (no redirect to a file):\n+ * <ul>\n+ * <li>any terminal on any Unix should get <code>RESET_ANSI_AT_CLOSE</code> mode,</li>\n+ * <li>on Windows, Git-bash or Cygwin terminals should get <code>RESET_ANSI_AT_CLOSE</code> mode also, since they\n+ * support natively ANSI escape sequences like any Unix terminal,</li>\n+ * <li>on Windows, cmd.exe, PowerShell or Git-cmd terminals should get <code>WINDOWS</code> mode.</li>\n+ * </ul>\n+ * If stdout is redirected to a file (<code>&gt; out.txt</code>), System.out should switch to <code>STRIP_ANSI</code>.\n+ * Same for stderr redirection (<code>2&gt; err.txt</code>) which should affect System.err mode.\n+ * <p>The results will vary if you play with <code>jansi.passthrough</code>, <code>jansi.strip</code> or\n+ * <code>jansi.force</code> system property, or if you redirect output to a file.\n+ * <p>If you have a specific situation that is not covered, please report precise conditions to reproduce\n+ * the issue and ideas on how to detect precisely the affected situation.\n+ * @see AnsiConsole\n+ */\n+public class AnsiMain {\n+    public static void main(String... args) throws IOException {\n+        System.out.println(\"Jansi \" + getJansiVersion());\n+\n+        System.out.println();\n+\n+        // info on native library\n+        System.out.println(\"library.jansi.path= \" + System.getProperty(\"library.jansi.path\", \"\"));\n+        System.out.println(\"library.jansi.version= \" + System.getProperty(\"library.jansi.version\", \"\"));\n+        JansiLoader.initialize();\n+        System.out.println(\"Jansi native library loaded from \" + JansiLoader.getNativeLibraryPath());\n+        if (JansiLoader.getNativeLibrarySourceUrl() != null) {\n+            System.out.println(\"   which was auto-extracted from \" + JansiLoader.getNativeLibrarySourceUrl());\n+        }\n+\n+        System.out.println();\n+\n+        System.out.println(\"os.name= \" + System.getProperty(\"os.name\") + \", \"\n+                        + \"os.version= \" + System.getProperty(\"os.version\") + \", \"\n+                        + \"os.arch= \" + System.getProperty(\"os.arch\"));\n+        System.out.println(\"file.encoding= \" + System.getProperty(\"file.encoding\"));\n+        System.out.println(\"java.version= \" + System.getProperty(\"java.version\") + \", \"\n+                        + \"java.vendor= \" + System.getProperty(\"java.vendor\") + \",\"\n+                        + \" java.home= \" + System.getProperty(\"java.home\"));\n+\n+        System.out.println();\n+\n+        System.out.println(AnsiConsole.JANSI_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_MODE, \"\"));\n+        System.out.println(AnsiConsole.JANSI_OUT_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_MODE, \"\"));\n+        System.out.println(AnsiConsole.JANSI_ERR_MODE + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_MODE, \"\"));\n+        System.out.println(AnsiConsole.JANSI_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_COLORS, \"\"));\n+        System.out.println(AnsiConsole.JANSI_OUT_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_OUT_COLORS, \"\"));\n+        System.out.println(AnsiConsole.JANSI_ERR_COLORS + \"= \" + System.getProperty(AnsiConsole.JANSI_ERR_COLORS, \"\"));\n+        System.out.println(AnsiConsole.JANSI_PASSTHROUGH + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_PASSTHROUGH));\n+        System.out.println(AnsiConsole.JANSI_STRIP + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_STRIP));\n+        System.out.println(AnsiConsole.JANSI_FORCE + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_FORCE));\n+        System.out.println(AnsiConsole.JANSI_NORESET + \"= \" + AnsiConsole.getBoolean(AnsiConsole.JANSI_NORESET));\n+        System.out.println(Ansi.DISABLE + \"= \" + AnsiConsole.getBoolean(Ansi.DISABLE));\n+\n+        System.out.println();\n+\n+        System.out.println(\"IS_WINDOWS: \" + AnsiConsole.IS_WINDOWS);\n+        if (AnsiConsole.IS_WINDOWS) {\n+            System.out.println(\"IS_CONEMU: \" + AnsiConsole.IS_CONEMU);\n+            System.out.println(\"IS_CYGWIN: \" + AnsiConsole.IS_CYGWIN);\n+            System.out.println(\"IS_MSYSTEM: \" + AnsiConsole.IS_MSYSTEM);\n+        }\n+\n+        System.out.println();\n+\n+        diagnoseTty(false); // System.out\n+        diagnoseTty(true);  // System.err\n+\n+        AnsiConsole.systemInstall();\n+\n+        System.out.println();\n+\n+        System.out.println(\"Resulting Jansi modes for stout/stderr streams:\");\n+        System.out.println(\"  - System.out: \" + AnsiConsole.out().toString());\n+        System.out.println(\"  - System.err: \" + AnsiConsole.err().toString());\n+        System.out.println(\"Processor types description:\");\n+        for (AnsiType type : AnsiType.values()) {\n+            System.out.println(\"  - \" + type + \": \" + type.getDescription());\n+        }\n+        System.out.println(\"Colors support description:\");\n+        for (AnsiColors colors : AnsiColors.values()) {\n+            System.out.println(\"  - \" + colors + \": \" + colors.getDescription());\n+        }\n+        System.out.println(\"Modes description:\");\n+        for (AnsiMode mode : AnsiMode.values()) {\n+            System.out.println(\"  - \" + mode + \": \" + mode.getDescription());\n+        }\n+\n+        try {\n+            System.out.println();\n+\n+            testAnsi(false);\n+            testAnsi(true);\n+\n+            if (args.length == 0) {\n+                printJansiLogoDemo();\n+                return;\n+            }\n+\n+            System.out.println();\n+\n+            if (args.length == 1) {\n+                File f = new File(args[0]);\n+                if (f.exists())\n+                {\n+                    // write file content\n+                    System.out.println(ansi().bold().a(\"\\\"\" + args[0] + \"\\\" content:\").reset());\n+                    writeFileContent(f);\n+                    return;\n+                }\n+            }\n+\n+            // write args without Jansi then with Jansi AnsiConsole\n+            System.out.println(ansi().bold().a(\"original args:\").reset());\n+            int i = 1;\n+            for (String arg: args) {\n+                AnsiConsole.system_out.print(i++ + \": \");\n+                AnsiConsole.system_out.println(arg);\n+            }\n+\n+            System.out.println(ansi().bold().a(\"Jansi filtered args:\").reset());\n+            i = 1;\n+            for (String arg: args) {\n+                System.out.print(i++ + \": \");\n+                System.out.println(arg);\n+            }\n+        } finally {\n+            AnsiConsole.systemUninstall();\n+        }\n+    }\n+\n+    private static String getJansiVersion() {\n+        Package p = AnsiMain.class.getPackage();\n+        return ( p == null ) ? null : p.getImplementationVersion();\n+    }\n+\n+    private static void diagnoseTty(boolean stderr) {\n+        int fd = stderr ? CLibrary.STDERR_FILENO : CLibrary.STDOUT_FILENO;\n+        int isatty = CLibrary.isatty(fd);\n+\n+        System.out.println(\"isatty(STD\" + (stderr ? \"ERR\" : \"OUT\") + \"_FILENO): \" + isatty + \", System.\"\n+            + (stderr ? \"err\" : \"out\") + \" \" + ((isatty == 0) ? \"is *NOT*\" : \"is\") + \" a terminal\");\n+    }\n+\n+    private static void testAnsi(boolean stderr) {\n+        @SuppressWarnings( \"resource\" )\n+        PrintStream s = stderr ? System.err : System.out;\n+        s.print(\"test on System.\" + (stderr ? \"err\" : \"out\") + \":\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"            bright:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().fgBright(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"              bold:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().bold().fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"             faint:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        s.print(\"        bold+faint:\");\n+        for(Ansi.Color c: Ansi.Color.values()) {\n+            s.print(\" \" + ansi().bold().a(Attribute.INTENSITY_FAINT).fg(c) + c + ansi().reset());\n+        }\n+        s.println();\n+        Ansi ansi = ansi();\n+        ansi.a(\"        256 colors: \");\n+        for (int i = 0; i < 6*6*6; i++) {\n+            if (i > 0 && i % 36 == 0) {\n+                ansi.reset();\n+                ansi.newline();\n+                ansi.a(\"                    \");\n+            } else if (i > 0 && i % 6 == 0) {\n+                ansi.reset();\n+                ansi.a(\"  \");\n+            }\n+            int a0 = i % 6;\n+            int a1 = (i  / 6) % 6;\n+            int a2 = i / 36;\n+            ansi.bg(16 + a0 + a2 * 6 + a1 * 36).a(' ');\n+        }\n+        ansi.reset();\n+        s.println(ansi);\n+        ansi = ansi();\n+        ansi.a(\"         truecolor: \");\n+        for (int i = 0; i < 256; i++) {\n+            if (i > 0 && i % 48 == 0) {\n+                ansi.reset();\n+                ansi.newline();\n+                ansi.a(\"                    \");\n+            }\n+            int r = 255 - i;\n+            int g = i * 2 > 255 ? 255 - 2 * i : 2 * i;\n+            int b = i;\n+            ansi.bgRgb(r, g, b).fgRgb(255 - r, 255 - g, 255 - b).a(i % 2 == 0 ? '/' : '\\\\');\n+        }\n+        ansi.reset();\n+        s.println(ansi);\n+    }\n+\n+    private static String getPomPropertiesVersion(String path) throws IOException {\n+        InputStream in = AnsiMain.class.getResourceAsStream(\"/META-INF/maven/\" + path + \"/pom.properties\");\n+        if (in == null) {\n+            return null;\n+        }\n+        try {\n+            Properties p = new Properties();\n+            p.load(in);\n+            return p.getProperty(\"version\");\n+        } finally {\n+            closeQuietly(in);\n+        }\n+    }\n+\n+    private static void printJansiLogoDemo() throws IOException {\n+        BufferedReader in = new BufferedReader(new InputStreamReader(AnsiMain.class.getResourceAsStream(\"jansi.txt\"), \"UTF-8\"));\n+        try {\n+            String l;\n+            while ((l = in.readLine()) != null) {\n+                System.out.println(l);\n+            }\n+        } finally {\n+            closeQuietly(in);\n+        }\n+    }\n+\n+    private static void writeFileContent(File f) throws IOException {\n+        InputStream in = new FileInputStream(f);\n+        try {\n+            byte[] buf = new byte[1024];\n+            int l = 0;\n+            while ((l = in.read(buf)) >= 0) {\n+                System.out.write(buf, 0, l);\n+            }\n+        } finally {\n+            closeQuietly(in);\n+        }\n+    }\n+\n+    private static void closeQuietly(Closeable c) {\n+        try {\n+            c.close();\n+        } catch (IOException ioe) {\n+            ioe.printStackTrace(System.err);\n+        }\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiMode.java", "source2": "org/fusesource/jansi/AnsiMode.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,38 +1,38 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-/**\r\n- * Ansi mode.\r\n- *\r\n- * @since 2.1\r\n- */\r\n-public enum AnsiMode {\r\n-\r\n-    Strip(\"Strip all ansi sequences\"),\r\n-    Default(\"Print ansi sequences if the stream is a terminal\"),\r\n-    Force(\"Always print ansi sequences, even if the stream is redirected\");\r\n-\r\n-    private final String description;\r\n-\r\n-    AnsiMode(String description) {\r\n-        this.description = description;\r\n-    }\r\n-\r\n-    String getDescription() {\r\n-        return description;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+/**\n+ * Ansi mode.\n+ *\n+ * @since 2.1\n+ */\n+public enum AnsiMode {\n+\n+    Strip(\"Strip all ansi sequences\"),\n+    Default(\"Print ansi sequences if the stream is a terminal\"),\n+    Force(\"Always print ansi sequences, even if the stream is redirected\");\n+\n+    private final String description;\n+\n+    AnsiMode(String description) {\n+        this.description = description;\n+    }\n+\n+    String getDescription() {\n+        return description;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiPrintStream.java", "source2": "org/fusesource/jansi/AnsiPrintStream.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,95 +1,95 @@\n-/*\r\n- * Copyright (C) 2009-2020 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.PrintStream;\r\n-import java.io.UnsupportedEncodingException;\r\n-\r\n-import org.fusesource.jansi.io.AnsiOutputStream;\r\n-\r\n-/**\r\n- * Simple PrintStream holding an AnsiOutputStream.\r\n- * This allows changing the mode in which the underlying AnsiOutputStream operates.\r\n- */\r\n-public class AnsiPrintStream extends PrintStream {\r\n-\r\n-    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush) {\r\n-        super(out, autoFlush);\r\n-    }\r\n-\r\n-    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException {\r\n-        super(out, autoFlush, encoding);\r\n-    }\r\n-\r\n-    protected AnsiOutputStream getOut() {\r\n-        return (AnsiOutputStream) out;\r\n-    }\r\n-\r\n-    public AnsiType getType() {\r\n-        return getOut().getType();\r\n-    }\r\n-\r\n-    public AnsiColors getColors() {\r\n-        return getOut().getColors();\r\n-    }\r\n-\r\n-    public AnsiMode getMode() {\r\n-        return getOut().getMode();\r\n-    }\r\n-\r\n-    public void setMode(AnsiMode ansiMode) {\r\n-        getOut().setMode(ansiMode);\r\n-    }\r\n-\r\n-    public boolean isResetAtUninstall() {\r\n-        return getOut().isResetAtUninstall();\r\n-    }\r\n-\r\n-    public void setResetAtUninstall(boolean resetAtClose) {\r\n-        getOut().setResetAtUninstall(resetAtClose);\r\n-    }\r\n-\r\n-    /**\r\n-     * Returns the width of the terminal associated with this stream or 0.\r\n-     * @since 2.2\r\n-     */\r\n-    public int getTerminalWidth() {\r\n-        return getOut().getTerminalWidth();\r\n-    }\r\n-\r\n-    public void install() throws IOException {\r\n-        getOut().install();\r\n-    }\r\n-\r\n-    public void uninstall() throws IOException {\r\n-        // If the system output stream has been closed, out should be null, so avoid a NPE\r\n-        AnsiOutputStream out = getOut();\r\n-        if (out != null) {\r\n-            out.uninstall();\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    public String toString() {\r\n-        return \"AnsiPrintStream{\"\r\n-                + \"type=\" + getType()\r\n-                + \", colors=\" + getColors()\r\n-                + \", mode=\" + getMode()\r\n-                + \", resetAtUninstall=\" + isResetAtUninstall()\r\n-                + \"}\";\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2020 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.IOException;\n+import java.io.PrintStream;\n+import java.io.UnsupportedEncodingException;\n+\n+import org.fusesource.jansi.io.AnsiOutputStream;\n+\n+/**\n+ * Simple PrintStream holding an AnsiOutputStream.\n+ * This allows changing the mode in which the underlying AnsiOutputStream operates.\n+ */\n+public class AnsiPrintStream extends PrintStream {\n+\n+    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush) {\n+        super(out, autoFlush);\n+    }\n+\n+    public AnsiPrintStream(AnsiOutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException {\n+        super(out, autoFlush, encoding);\n+    }\n+\n+    protected AnsiOutputStream getOut() {\n+        return (AnsiOutputStream) out;\n+    }\n+\n+    public AnsiType getType() {\n+        return getOut().getType();\n+    }\n+\n+    public AnsiColors getColors() {\n+        return getOut().getColors();\n+    }\n+\n+    public AnsiMode getMode() {\n+        return getOut().getMode();\n+    }\n+\n+    public void setMode(AnsiMode ansiMode) {\n+        getOut().setMode(ansiMode);\n+    }\n+\n+    public boolean isResetAtUninstall() {\n+        return getOut().isResetAtUninstall();\n+    }\n+\n+    public void setResetAtUninstall(boolean resetAtClose) {\n+        getOut().setResetAtUninstall(resetAtClose);\n+    }\n+\n+    /**\n+     * Returns the width of the terminal associated with this stream or 0.\n+     * @since 2.2\n+     */\n+    public int getTerminalWidth() {\n+        return getOut().getTerminalWidth();\n+    }\n+\n+    public void install() throws IOException {\n+        getOut().install();\n+    }\n+\n+    public void uninstall() throws IOException {\n+        // If the system output stream has been closed, out should be null, so avoid a NPE\n+        AnsiOutputStream out = getOut();\n+        if (out != null) {\n+            out.uninstall();\n+        }\n+    }\n+\n+    @Override\n+    public String toString() {\n+        return \"AnsiPrintStream{\"\n+                + \"type=\" + getType()\n+                + \", colors=\" + getColors()\n+                + \", mode=\" + getMode()\n+                + \", resetAtUninstall=\" + isResetAtUninstall()\n+                + \"}\";\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/AnsiRenderer.java", "source2": "org/fusesource/jansi/AnsiRenderer.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,256 +1,256 @@\n-/*\r\n- * Copyright (C) 2009-2021 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.IOException;\r\n-import java.util.Locale;\r\n-\r\n-import org.fusesource.jansi.Ansi.Attribute;\r\n-import org.fusesource.jansi.Ansi.Color;\r\n-\r\n-/**\r\n- * Renders ANSI color escape-codes in strings by parsing out some special syntax to pick up the correct fluff to use.\r\n- *\r\n- * The syntax for embedded ANSI codes is:\r\n- *\r\n- * <pre>\r\n- *   &#64;|<em>code</em>(,<em>code</em>)* <em>text</em>|&#64;\r\n- * </pre>\r\n- *\r\n- * Examples:\r\n- *\r\n- * <pre>\r\n- *   &#64;|bold Hello|&#64;\r\n- * </pre>\r\n- *\r\n- * <pre>\r\n- *   &#64;|bold,red Warning!|&#64;\r\n- * </pre>\r\n- *\r\n- * @since 2.2\r\n- */\r\n-public class AnsiRenderer {\r\n-\r\n-    public static final String BEGIN_TOKEN = \"@|\";\r\n-\r\n-    public static final String END_TOKEN = \"|@\";\r\n-\r\n-    public static final String CODE_TEXT_SEPARATOR = \" \";\r\n-\r\n-    public static final String CODE_LIST_SEPARATOR = \",\";\r\n-\r\n-    private static final int BEGIN_TOKEN_LEN = 2;\r\n-\r\n-    private static final int END_TOKEN_LEN = 2;\r\n-\r\n-    public static String render(final String input) throws IllegalArgumentException {\r\n-        try {\r\n-            return render(input, new StringBuilder()).toString();\r\n-        } catch (IOException e) {\r\n-            // Cannot happen because StringBuilder does not throw IOException\r\n-            throw new IllegalArgumentException(e);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Renders the given input to the target Appendable.\r\n-     *\r\n-     * @param input\r\n-     *            source to render\r\n-     * @param target\r\n-     *            render onto this target Appendable.\r\n-     * @return the given Appendable\r\n-     * @throws IOException\r\n-     *             If an I/O error occurs\r\n-     */\r\n-    public static Appendable render(final String input, Appendable target) throws IOException {\r\n-\r\n-        int i = 0;\r\n-        int j, k;\r\n-\r\n-        while (true) {\r\n-            j = input.indexOf(BEGIN_TOKEN, i);\r\n-            if (j == -1) {\r\n-                if (i == 0) {\r\n-                    target.append(input);\r\n-                    return target;\r\n-                }\r\n-                target.append(input.substring(i));\r\n-                return target;\r\n-            }\r\n-            target.append(input.substring(i, j));\r\n-            k = input.indexOf(END_TOKEN, j);\r\n-\r\n-            if (k == -1) {\r\n-                target.append(input);\r\n-                return target;\r\n-            }\r\n-            j += BEGIN_TOKEN_LEN;\r\n-            String spec = input.substring(j, k);\r\n-\r\n-            String[] items = spec.split(CODE_TEXT_SEPARATOR, 2);\r\n-            if (items.length == 1) {\r\n-                target.append(input);\r\n-                return target;\r\n-            }\r\n-            String replacement = render(items[1], items[0].split(CODE_LIST_SEPARATOR));\r\n-\r\n-            target.append(replacement);\r\n-\r\n-            i = k + END_TOKEN_LEN;\r\n-        }\r\n-    }\r\n-\r\n-    public static String render(final String text, final String... codes) {\r\n-        return render(Ansi.ansi(), codes)\r\n-                .a(text).reset().toString();\r\n-    }\r\n-\r\n-    /**\r\n-     * Renders {@link Code} names as an ANSI escape string.\r\n-     * @param codes The code names to render\r\n-     * @return an ANSI escape string.\r\n-     */\r\n-    public static String renderCodes(final String... codes) {\r\n-        return render(Ansi.ansi(), codes).toString();\r\n-    }\r\n-\r\n-    /**\r\n-     * Renders {@link Code} names as an ANSI escape string.\r\n-     * @param codes A space separated list of code names to render\r\n-     * @return an ANSI escape string.\r\n-     */\r\n-    public static String renderCodes(final String codes) {\r\n-        return renderCodes(codes.split(\"\\\\s\"));\r\n-    }\r\n-\r\n-    private static Ansi render(Ansi ansi, String... names) {\r\n-        for (String name : names) {\r\n-            Code code = Code.valueOf(name.toUpperCase(Locale.ENGLISH));\r\n-            if (code.isColor()) {\r\n-                if (code.isBackground()) {\r\n-                    ansi.bg(code.getColor());\r\n-                } else {\r\n-                    ansi.fg(code.getColor());\r\n-                }\r\n-            } else if (code.isAttribute()) {\r\n-                ansi.a(code.getAttribute());\r\n-            }\r\n-        }\r\n-        return ansi;\r\n-    }\r\n-\r\n-    public static boolean test(final String text) {\r\n-        return text != null && text.contains(BEGIN_TOKEN);\r\n-    }\r\n-\r\n-    @SuppressWarnings(\"unused\")\r\n-    public enum Code {\r\n-        //\r\n-        // TODO: Find a better way to keep Code in sync with Color/Attribute/Erase\r\n-        //\r\n-\r\n-        // Colors\r\n-        BLACK(Color.BLACK),\r\n-        RED(Color.RED),\r\n-        GREEN(Color.GREEN),\r\n-        YELLOW(Color.YELLOW),\r\n-        BLUE(Color.BLUE),\r\n-        MAGENTA(Color.MAGENTA),\r\n-        CYAN(Color.CYAN),\r\n-        WHITE(Color.WHITE),\r\n-        DEFAULT(Color.DEFAULT),\r\n-\r\n-        // Foreground Colors\r\n-        FG_BLACK(Color.BLACK, false),\r\n-        FG_RED(Color.RED, false),\r\n-        FG_GREEN(Color.GREEN, false),\r\n-        FG_YELLOW(Color.YELLOW, false),\r\n-        FG_BLUE(Color.BLUE, false),\r\n-        FG_MAGENTA(Color.MAGENTA, false),\r\n-        FG_CYAN(Color.CYAN, false),\r\n-        FG_WHITE(Color.WHITE, false),\r\n-        FG_DEFAULT(Color.DEFAULT, false),\r\n-\r\n-        // Background Colors\r\n-        BG_BLACK(Color.BLACK, true),\r\n-        BG_RED(Color.RED, true),\r\n-        BG_GREEN(Color.GREEN, true),\r\n-        BG_YELLOW(Color.YELLOW, true),\r\n-        BG_BLUE(Color.BLUE, true),\r\n-        BG_MAGENTA(Color.MAGENTA, true),\r\n-        BG_CYAN(Color.CYAN, true),\r\n-        BG_WHITE(Color.WHITE, true),\r\n-        BG_DEFAULT(Color.DEFAULT, true),\r\n-\r\n-        // Attributes\r\n-        RESET(Attribute.RESET),\r\n-        INTENSITY_BOLD(Attribute.INTENSITY_BOLD),\r\n-        INTENSITY_FAINT(Attribute.INTENSITY_FAINT),\r\n-        ITALIC(Attribute.ITALIC),\r\n-        UNDERLINE(Attribute.UNDERLINE),\r\n-        BLINK_SLOW(Attribute.BLINK_SLOW),\r\n-        BLINK_FAST(Attribute.BLINK_FAST),\r\n-        BLINK_OFF(Attribute.BLINK_OFF),\r\n-        NEGATIVE_ON(Attribute.NEGATIVE_ON),\r\n-        NEGATIVE_OFF(Attribute.NEGATIVE_OFF),\r\n-        CONCEAL_ON(Attribute.CONCEAL_ON),\r\n-        CONCEAL_OFF(Attribute.CONCEAL_OFF),\r\n-        UNDERLINE_DOUBLE(Attribute.UNDERLINE_DOUBLE),\r\n-        UNDERLINE_OFF(Attribute.UNDERLINE_OFF),\r\n-\r\n-        // Aliases\r\n-        BOLD(Attribute.INTENSITY_BOLD),\r\n-        FAINT(Attribute.INTENSITY_FAINT),;\r\n-\r\n-        private final Enum<?> n;\r\n-\r\n-        private final boolean background;\r\n-\r\n-        Code(final Enum<?> n, boolean background) {\r\n-            this.n = n;\r\n-            this.background = background;\r\n-        }\r\n-\r\n-        Code(final Enum<?> n) {\r\n-            this(n, false);\r\n-        }\r\n-\r\n-        public boolean isColor() {\r\n-            return n instanceof Ansi.Color;\r\n-        }\r\n-\r\n-        public Ansi.Color getColor() {\r\n-            return (Ansi.Color) n;\r\n-        }\r\n-\r\n-        public boolean isAttribute() {\r\n-            return n instanceof Attribute;\r\n-        }\r\n-\r\n-        public Attribute getAttribute() {\r\n-            return (Attribute) n;\r\n-        }\r\n-\r\n-        public boolean isBackground() {\r\n-            return background;\r\n-        }\r\n-    }\r\n-\r\n-    private AnsiRenderer() {\r\n-    }\r\n-\r\n+/*\n+ * Copyright (C) 2009-2021 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.IOException;\n+import java.util.Locale;\n+\n+import org.fusesource.jansi.Ansi.Attribute;\n+import org.fusesource.jansi.Ansi.Color;\n+\n+/**\n+ * Renders ANSI color escape-codes in strings by parsing out some special syntax to pick up the correct fluff to use.\n+ *\n+ * The syntax for embedded ANSI codes is:\n+ *\n+ * <pre>\n+ *   &#64;|<em>code</em>(,<em>code</em>)* <em>text</em>|&#64;\n+ * </pre>\n+ *\n+ * Examples:\n+ *\n+ * <pre>\n+ *   &#64;|bold Hello|&#64;\n+ * </pre>\n+ *\n+ * <pre>\n+ *   &#64;|bold,red Warning!|&#64;\n+ * </pre>\n+ *\n+ * @since 2.2\n+ */\n+public class AnsiRenderer {\n+\n+    public static final String BEGIN_TOKEN = \"@|\";\n+\n+    public static final String END_TOKEN = \"|@\";\n+\n+    public static final String CODE_TEXT_SEPARATOR = \" \";\n+\n+    public static final String CODE_LIST_SEPARATOR = \",\";\n+\n+    private static final int BEGIN_TOKEN_LEN = 2;\n+\n+    private static final int END_TOKEN_LEN = 2;\n+\n+    public static String render(final String input) throws IllegalArgumentException {\n+        try {\n+            return render(input, new StringBuilder()).toString();\n+        } catch (IOException e) {\n+            // Cannot happen because StringBuilder does not throw IOException\n+            throw new IllegalArgumentException(e);\n+        }\n+    }\n+\n+    /**\n+     * Renders the given input to the target Appendable.\n+     *\n+     * @param input\n+     *            source to render\n+     * @param target\n+     *            render onto this target Appendable.\n+     * @return the given Appendable\n+     * @throws IOException\n+     *             If an I/O error occurs\n+     */\n+    public static Appendable render(final String input, Appendable target) throws IOException {\n+\n+        int i = 0;\n+        int j, k;\n+\n+        while (true) {\n+            j = input.indexOf(BEGIN_TOKEN, i);\n+            if (j == -1) {\n+                if (i == 0) {\n+                    target.append(input);\n+                    return target;\n+                }\n+                target.append(input.substring(i));\n+                return target;\n+            }\n+            target.append(input.substring(i, j));\n+            k = input.indexOf(END_TOKEN, j);\n+\n+            if (k == -1) {\n+                target.append(input);\n+                return target;\n+            }\n+            j += BEGIN_TOKEN_LEN;\n+            String spec = input.substring(j, k);\n+\n+            String[] items = spec.split(CODE_TEXT_SEPARATOR, 2);\n+            if (items.length == 1) {\n+                target.append(input);\n+                return target;\n+            }\n+            String replacement = render(items[1], items[0].split(CODE_LIST_SEPARATOR));\n+\n+            target.append(replacement);\n+\n+            i = k + END_TOKEN_LEN;\n+        }\n+    }\n+\n+    public static String render(final String text, final String... codes) {\n+        return render(Ansi.ansi(), codes)\n+                .a(text).reset().toString();\n+    }\n+\n+    /**\n+     * Renders {@link Code} names as an ANSI escape string.\n+     * @param codes The code names to render\n+     * @return an ANSI escape string.\n+     */\n+    public static String renderCodes(final String... codes) {\n+        return render(Ansi.ansi(), codes).toString();\n+    }\n+\n+    /**\n+     * Renders {@link Code} names as an ANSI escape string.\n+     * @param codes A space separated list of code names to render\n+     * @return an ANSI escape string.\n+     */\n+    public static String renderCodes(final String codes) {\n+        return renderCodes(codes.split(\"\\\\s\"));\n+    }\n+\n+    private static Ansi render(Ansi ansi, String... names) {\n+        for (String name : names) {\n+            Code code = Code.valueOf(name.toUpperCase(Locale.ENGLISH));\n+            if (code.isColor()) {\n+                if (code.isBackground()) {\n+                    ansi.bg(code.getColor());\n+                } else {\n+                    ansi.fg(code.getColor());\n+                }\n+            } else if (code.isAttribute()) {\n+                ansi.a(code.getAttribute());\n+            }\n+        }\n+        return ansi;\n+    }\n+\n+    public static boolean test(final String text) {\n+        return text != null && text.contains(BEGIN_TOKEN);\n+    }\n+\n+    @SuppressWarnings(\"unused\")\n+    public enum Code {\n+        //\n+        // TODO: Find a better way to keep Code in sync with Color/Attribute/Erase\n+        //\n+\n+        // Colors\n+        BLACK(Color.BLACK),\n+        RED(Color.RED),\n+        GREEN(Color.GREEN),\n+        YELLOW(Color.YELLOW),\n+        BLUE(Color.BLUE),\n+        MAGENTA(Color.MAGENTA),\n+        CYAN(Color.CYAN),\n+        WHITE(Color.WHITE),\n+        DEFAULT(Color.DEFAULT),\n+\n+        // Foreground Colors\n+        FG_BLACK(Color.BLACK, false),\n+        FG_RED(Color.RED, false),\n+        FG_GREEN(Color.GREEN, false),\n+        FG_YELLOW(Color.YELLOW, false),\n+        FG_BLUE(Color.BLUE, false),\n+        FG_MAGENTA(Color.MAGENTA, false),\n+        FG_CYAN(Color.CYAN, false),\n+        FG_WHITE(Color.WHITE, false),\n+        FG_DEFAULT(Color.DEFAULT, false),\n+\n+        // Background Colors\n+        BG_BLACK(Color.BLACK, true),\n+        BG_RED(Color.RED, true),\n+        BG_GREEN(Color.GREEN, true),\n+        BG_YELLOW(Color.YELLOW, true),\n+        BG_BLUE(Color.BLUE, true),\n+        BG_MAGENTA(Color.MAGENTA, true),\n+        BG_CYAN(Color.CYAN, true),\n+        BG_WHITE(Color.WHITE, true),\n+        BG_DEFAULT(Color.DEFAULT, true),\n+\n+        // Attributes\n+        RESET(Attribute.RESET),\n+        INTENSITY_BOLD(Attribute.INTENSITY_BOLD),\n+        INTENSITY_FAINT(Attribute.INTENSITY_FAINT),\n+        ITALIC(Attribute.ITALIC),\n+        UNDERLINE(Attribute.UNDERLINE),\n+        BLINK_SLOW(Attribute.BLINK_SLOW),\n+        BLINK_FAST(Attribute.BLINK_FAST),\n+        BLINK_OFF(Attribute.BLINK_OFF),\n+        NEGATIVE_ON(Attribute.NEGATIVE_ON),\n+        NEGATIVE_OFF(Attribute.NEGATIVE_OFF),\n+        CONCEAL_ON(Attribute.CONCEAL_ON),\n+        CONCEAL_OFF(Attribute.CONCEAL_OFF),\n+        UNDERLINE_DOUBLE(Attribute.UNDERLINE_DOUBLE),\n+        UNDERLINE_OFF(Attribute.UNDERLINE_OFF),\n+\n+        // Aliases\n+        BOLD(Attribute.INTENSITY_BOLD),\n+        FAINT(Attribute.INTENSITY_FAINT),;\n+\n+        private final Enum<?> n;\n+\n+        private final boolean background;\n+\n+        Code(final Enum<?> n, boolean background) {\n+            this.n = n;\n+            this.background = background;\n+        }\n+\n+        Code(final Enum<?> n) {\n+            this(n, false);\n+        }\n+\n+        public boolean isColor() {\n+            return n instanceof Ansi.Color;\n+        }\n+\n+        public Ansi.Color getColor() {\n+            return (Ansi.Color) n;\n+        }\n+\n+        public boolean isAttribute() {\n+            return n instanceof Attribute;\n+        }\n+\n+        public Attribute getAttribute() {\n+            return (Attribute) n;\n+        }\n+\n+        public boolean isBackground() {\n+            return background;\n+        }\n+    }\n+\n+    private AnsiRenderer() {\n+    }\n+\n }\n"}, {"source1": "org/fusesource/jansi/AnsiType.java", "source2": "org/fusesource/jansi/AnsiType.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,40 +1,40 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-/**\r\n- * Processor type.\r\n- *\r\n- * @since 2.1\r\n- */\r\n-public enum AnsiType {\r\n-\r\n-    Native(\"Supports ansi sequences natively\"),\r\n-    Unsupported(\"Ansi sequences are stripped out\"),\r\n-    VirtualTerminal(\"Supported through windows virtual terminal\"),\r\n-    Emulation(\"Emulated through using windows API console commands\"),\r\n-    Redirected(\"The stream is redirected to a file or a pipe\");\r\n-\r\n-    private final String description;\r\n-\r\n-    AnsiType(String description) {\r\n-        this.description = description;\r\n-    }\r\n-\r\n-    String getDescription() {\r\n-        return description;\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+/**\n+ * Processor type.\n+ *\n+ * @since 2.1\n+ */\n+public enum AnsiType {\n+\n+    Native(\"Supports ansi sequences natively\"),\n+    Unsupported(\"Ansi sequences are stripped out\"),\n+    VirtualTerminal(\"Supported through windows virtual terminal\"),\n+    Emulation(\"Emulated through using windows API console commands\"),\n+    Redirected(\"The stream is redirected to a file or a pipe\");\n+\n+    private final String description;\n+\n+    AnsiType(String description) {\n+        this.description = description;\n+    }\n+\n+    String getDescription() {\n+        return description;\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/WindowsSupport.java", "source2": "org/fusesource/jansi/WindowsSupport.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,42 +1,42 @@\n-/*\r\n- * Copyright (C) 2009-2019 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi;\r\n-\r\n-import java.io.UnsupportedEncodingException;\r\n-\r\n-import static org.fusesource.jansi.internal.Kernel32.FORMAT_MESSAGE_FROM_SYSTEM;\r\n-import static org.fusesource.jansi.internal.Kernel32.FormatMessageW;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetLastError;\r\n-\r\n-public class WindowsSupport {\r\n-\r\n-    public static String getLastErrorMessage() {\r\n-        int errorCode = GetLastError();\r\n-        return getErrorMessage(errorCode);\r\n-    }\r\n-\r\n-    public static String getErrorMessage(int errorCode) {\r\n-        int bufferSize = 160;\r\n-        byte data[] = new byte[bufferSize];\r\n-        FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, 0, errorCode, 0, data, bufferSize, null);\r\n-        try {\r\n-            return new String(data, \"UTF-16LE\").trim();\r\n-        } catch (UnsupportedEncodingException e) {\r\n-            throw new IllegalStateException(e);\r\n-        }\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2019 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi;\n+\n+import java.io.UnsupportedEncodingException;\n+\n+import static org.fusesource.jansi.internal.Kernel32.FORMAT_MESSAGE_FROM_SYSTEM;\n+import static org.fusesource.jansi.internal.Kernel32.FormatMessageW;\n+import static org.fusesource.jansi.internal.Kernel32.GetLastError;\n+\n+public class WindowsSupport {\n+\n+    public static String getLastErrorMessage() {\n+        int errorCode = GetLastError();\n+        return getErrorMessage(errorCode);\n+    }\n+\n+    public static String getErrorMessage(int errorCode) {\n+        int bufferSize = 160;\n+        byte data[] = new byte[bufferSize];\n+        FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, 0, errorCode, 0, data, bufferSize, null);\n+        try {\n+            return new String(data, \"UTF-16LE\").trim();\n+        } catch (UnsupportedEncodingException e) {\n+            throw new IllegalStateException(e);\n+        }\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/CLibrary.java", "source2": "org/fusesource/jansi/internal/CLibrary.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,171 +1,171 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-/**\r\n- * Interface to access some low level POSIX functions, loaded by\r\n- * <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\r\n- * as <code>jansi</code> library.\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @see JansiLoader\r\n- */\r\n-@SuppressWarnings(\"unused\")\r\n-public class CLibrary {\r\n-\r\n-    static {\r\n-        JansiLoader.initialize();\r\n-        init();\r\n-    }\r\n-\r\n-    private static native void init();\r\n-\r\n-    public static int STDOUT_FILENO = 1;\r\n-\r\n-    public static int STDERR_FILENO = 2;\r\n-\r\n-    public static boolean HAVE_ISATTY;\r\n-\r\n-    public static boolean HAVE_TTYNAME;\r\n-\r\n-    public static int TCSANOW;\r\n-    public static int TCSADRAIN;\r\n-    public static int TCSAFLUSH;\r\n-    public static long TIOCGETA;\r\n-    public static long TIOCSETA;\r\n-    public static long TIOCGETD;\r\n-    public static long TIOCSETD;\r\n-    public static long TIOCGWINSZ;\r\n-    public static long TIOCSWINSZ;\r\n-\r\n-    /**\r\n-     * test whether a file descriptor refers to a terminal\r\n-     *\r\n-     * @param fd file descriptor\r\n-     * @return isatty() returns 1 if fd is an open file descriptor referring to a\r\n-     * terminal; otherwise 0 is returned, and errno is set to indicate the\r\n-     * error\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3.html\">ISATTY(3) man-page</a>\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3p.html\">ISATTY(3P) man-page</a>\r\n-     */\r\n-    public static native int isatty(int fd);\r\n-\r\n-    public static native String ttyname(int filedes);\r\n-\r\n-    /**\r\n-     * The openpty() function finds an available pseudoterminal and returns\r\n-     * file descriptors for the master and slave in amaster and aslave.\r\n-     *\r\n-     * @param amaster master return value\r\n-     * @param aslave  slave return value\r\n-     * @param name    filename return value\r\n-     * @param termios optional pty attributes\r\n-     * @param winsize optional size\r\n-     * @return 0 on success\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/openpty.3.html\">OPENPTY(3) man-page</a>\r\n-     */\r\n-    public static native int openpty(\r\n-            int[] amaster,\r\n-            int[] aslave,\r\n-            byte[] name,\r\n-            Termios termios,\r\n-            WinSize winsize);\r\n-\r\n-    public static native int tcgetattr(\r\n-            int filedes,\r\n-            Termios termios);\r\n-\r\n-    public static native int tcsetattr(\r\n-            int filedes,\r\n-            int optional_actions,\r\n-            Termios termios);\r\n-\r\n-    /**\r\n-     * Control a STREAMS device.\r\n-     *\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/ioctl.3p.html\">IOCTL(3P) man-page</a>\r\n-     */\r\n-    public static native int ioctl(\r\n-            int filedes,\r\n-            long request,\r\n-            int[] params);\r\n-\r\n-    public static native int ioctl(\r\n-            int filedes,\r\n-            long request,\r\n-            WinSize params);\r\n-\r\n-    /**\r\n-     * Window sizes.\r\n-     *\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man4/tty_ioctl.4.html\">IOCTL_TTY(2) man-page</a>\r\n-     */\r\n-    public static class WinSize {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short ws_row;\r\n-        public short ws_col;\r\n-        public short ws_xpixel;\r\n-        public short ws_ypixel;\r\n-\r\n-        public WinSize() {\r\n-        }\r\n-\r\n-        public WinSize(short ws_row, short ws_col) {\r\n-            this.ws_row = ws_row;\r\n-            this.ws_col = ws_col;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * termios structure for termios functions, describing a general terminal interface that is\r\n-     * provided to control asynchronous communications ports\r\n-     *\r\n-     * @see <a href=\"http://man7.org/linux/man-pages/man3/termios.3.html\">TERMIOS(3) man-page</a>\r\n-     */\r\n-    public static class Termios {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public long c_iflag;\r\n-        public long c_oflag;\r\n-        public long c_cflag;\r\n-        public long c_lflag;\r\n-        public byte[] c_cc = new byte[32];\r\n-        public long c_ispeed;\r\n-        public long c_ospeed;\r\n-    }\r\n-\r\n-    public static native int setenv(String name, String value);\r\n-\r\n-    public static native int chdir(String path);\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.internal;\n+\n+/**\n+ * Interface to access some low level POSIX functions, loaded by\n+ * <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\n+ * as <code>jansi</code> library.\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @see JansiLoader\n+ */\n+@SuppressWarnings(\"unused\")\n+public class CLibrary {\n+\n+    static {\n+        JansiLoader.initialize();\n+        init();\n+    }\n+\n+    private static native void init();\n+\n+    public static int STDOUT_FILENO = 1;\n+\n+    public static int STDERR_FILENO = 2;\n+\n+    public static boolean HAVE_ISATTY;\n+\n+    public static boolean HAVE_TTYNAME;\n+\n+    public static int TCSANOW;\n+    public static int TCSADRAIN;\n+    public static int TCSAFLUSH;\n+    public static long TIOCGETA;\n+    public static long TIOCSETA;\n+    public static long TIOCGETD;\n+    public static long TIOCSETD;\n+    public static long TIOCGWINSZ;\n+    public static long TIOCSWINSZ;\n+\n+    /**\n+     * test whether a file descriptor refers to a terminal\n+     *\n+     * @param fd file descriptor\n+     * @return isatty() returns 1 if fd is an open file descriptor referring to a\n+     * terminal; otherwise 0 is returned, and errno is set to indicate the\n+     * error\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3.html\">ISATTY(3) man-page</a>\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/isatty.3p.html\">ISATTY(3P) man-page</a>\n+     */\n+    public static native int isatty(int fd);\n+\n+    public static native String ttyname(int filedes);\n+\n+    /**\n+     * The openpty() function finds an available pseudoterminal and returns\n+     * file descriptors for the master and slave in amaster and aslave.\n+     *\n+     * @param amaster master return value\n+     * @param aslave  slave return value\n+     * @param name    filename return value\n+     * @param termios optional pty attributes\n+     * @param winsize optional size\n+     * @return 0 on success\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/openpty.3.html\">OPENPTY(3) man-page</a>\n+     */\n+    public static native int openpty(\n+            int[] amaster,\n+            int[] aslave,\n+            byte[] name,\n+            Termios termios,\n+            WinSize winsize);\n+\n+    public static native int tcgetattr(\n+            int filedes,\n+            Termios termios);\n+\n+    public static native int tcsetattr(\n+            int filedes,\n+            int optional_actions,\n+            Termios termios);\n+\n+    /**\n+     * Control a STREAMS device.\n+     *\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/ioctl.3p.html\">IOCTL(3P) man-page</a>\n+     */\n+    public static native int ioctl(\n+            int filedes,\n+            long request,\n+            int[] params);\n+\n+    public static native int ioctl(\n+            int filedes,\n+            long request,\n+            WinSize params);\n+\n+    /**\n+     * Window sizes.\n+     *\n+     * @see <a href=\"http://man7.org/linux/man-pages/man4/tty_ioctl.4.html\">IOCTL_TTY(2) man-page</a>\n+     */\n+    public static class WinSize {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short ws_row;\n+        public short ws_col;\n+        public short ws_xpixel;\n+        public short ws_ypixel;\n+\n+        public WinSize() {\n+        }\n+\n+        public WinSize(short ws_row, short ws_col) {\n+            this.ws_row = ws_row;\n+            this.ws_col = ws_col;\n+        }\n+    }\n+\n+    /**\n+     * termios structure for termios functions, describing a general terminal interface that is\n+     * provided to control asynchronous communications ports\n+     *\n+     * @see <a href=\"http://man7.org/linux/man-pages/man3/termios.3.html\">TERMIOS(3) man-page</a>\n+     */\n+    public static class Termios {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public long c_iflag;\n+        public long c_oflag;\n+        public long c_cflag;\n+        public long c_lflag;\n+        public byte[] c_cc = new byte[32];\n+        public long c_ispeed;\n+        public long c_ospeed;\n+    }\n+\n+    public static native int setenv(String name, String value);\n+\n+    public static native int chdir(String path);\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/JansiLoader.java", "source2": "org/fusesource/jansi/internal/JansiLoader.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,393 +1,393 @@\n-/*--------------------------------------------------------------------------\r\n- *  Copyright 2007 Taro L. Saito\r\n- *\r\n- *  Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- *  you may not use this file except in compliance with the License.\r\n- *  You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- *  Unless required by applicable law or agreed to in writing, software\r\n- *  distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- *  See the License for the specific language governing permissions and\r\n- *  limitations under the License.\r\n- *--------------------------------------------------------------------------*/\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-import java.io.File;\r\n-import java.io.FileInputStream;\r\n-import java.io.FileOutputStream;\r\n-import java.io.FilenameFilter;\r\n-import java.io.IOException;\r\n-import java.io.InputStream;\r\n-import java.io.OutputStream;\r\n-import java.net.URL;\r\n-import java.util.Arrays;\r\n-import java.util.LinkedList;\r\n-import java.util.List;\r\n-import java.util.Properties;\r\n-import java.util.Random;\r\n-\r\n-/**\r\n- * Set the system properties, org.jansi.lib.path, org.jansi.lib.name,\r\n- * appropriately so that jansi can find *.dll, *.jnilib and\r\n- * *.so files, according to the current OS (win, linux, mac).\r\n- * <p>\r\n- * The library files are automatically extracted from this project's package\r\n- * (JAR).\r\n- * <p>\r\n- * usage: call {@link #initialize()} before using Jansi.\r\n- */\r\n-public class JansiLoader {\r\n-\r\n-    private static boolean extracted = false;\r\n-    private static String nativeLibraryPath;\r\n-    private static String nativeLibrarySourceUrl;\r\n-\r\n-    /**\r\n-     * Loads Jansi native library.\r\n-     *\r\n-     * @return True if jansi native library is successfully loaded; false\r\n-     * otherwise.\r\n-     */\r\n-    public static synchronized boolean initialize() {\r\n-        // only cleanup before the first extract\r\n-        if (!extracted) {\r\n-            cleanup();\r\n-        }\r\n-        try {\r\n-            loadJansiNativeLibrary();\r\n-        } catch (Exception e) {\r\n-            throw new RuntimeException(\"Unable to load jansi native library\", e);\r\n-        }\r\n-        return extracted;\r\n-    }\r\n-\r\n-    public static String getNativeLibraryPath() {\r\n-        return nativeLibraryPath;\r\n-    }\r\n-\r\n-    public static String getNativeLibrarySourceUrl() {\r\n-        return nativeLibrarySourceUrl;\r\n-    }\r\n-\r\n-    private static File getTempDir() {\r\n-        return new File(System.getProperty(\"jansi.tmpdir\", System.getProperty(\"java.io.tmpdir\")));\r\n-    }\r\n-\r\n-    /**\r\n-     * Deleted old native libraries e.g. on Windows the DLL file is not removed\r\n-     * on VM-Exit (bug #80)\r\n-     */\r\n-    static void cleanup() {\r\n-        String tempFolder = getTempDir().getAbsolutePath();\r\n-        File dir = new File(tempFolder);\r\n-\r\n-        File[] nativeLibFiles = dir.listFiles(new FilenameFilter() {\r\n-            private final String searchPattern = \"jansi-\" + getVersion();\r\n-\r\n-            public boolean accept(File dir, String name) {\r\n-                return name.startsWith(searchPattern) && !name.endsWith(\".lck\");\r\n-            }\r\n-        });\r\n-        if (nativeLibFiles != null) {\r\n-            for (File nativeLibFile : nativeLibFiles) {\r\n-                File lckFile = new File(nativeLibFile.getAbsolutePath() + \".lck\");\r\n-                if (!lckFile.exists()) {\r\n-                    try {\r\n-                        nativeLibFile.delete();\r\n-                    } catch (SecurityException e) {\r\n-                        System.err.println(\"Failed to delete old native lib\" + e.getMessage());\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    private static int readNBytes(InputStream in, byte[] b) throws IOException {\r\n-        int n = 0;\r\n-        int len = b.length;\r\n-        while (n < len) {\r\n-            int count = in.read(b, n, len - n);\r\n-            if (count <= 0)\r\n-                break;\r\n-            n += count;\r\n-        }\r\n-        return n;\r\n-    }\r\n-\r\n-    private static String contentsEquals(InputStream in1, InputStream in2) throws IOException {\r\n-        byte[] buffer1 = new byte[8192];\r\n-        byte[] buffer2 = new byte[8192];\r\n-        int numRead1;\r\n-        int numRead2;\r\n-        while (true) {\r\n-            numRead1 = readNBytes(in1, buffer1);\r\n-            numRead2 = readNBytes(in2, buffer2);\r\n-            if (numRead1 > 0) {\r\n-                if (numRead2 <= 0) {\r\n-                    return \"EOF on second stream but not first\";\r\n-                }\r\n-                if (numRead2 != numRead1) {\r\n-                    return \"Read size different (\" + numRead1 + \" vs \" + numRead2 + \")\";\r\n-                }\r\n-                // Otherwise same number of bytes read\r\n-                if (!Arrays.equals(buffer1, buffer2)) {\r\n-                    return \"Content differs\";\r\n-                }\r\n-                // Otherwise same bytes read, so continue ...\r\n-            } else {\r\n-                // Nothing more in stream 1 ...\r\n-                if (numRead2 > 0) {\r\n-                    return \"EOF on first stream but not second\";\r\n-                } else {\r\n-                    return null;\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Extracts and loads the specified library file to the target folder\r\n-     *\r\n-     * @param libFolderForCurrentOS Library path.\r\n-     * @param libraryFileName       Library name.\r\n-     * @param targetFolder          Target folder.\r\n-     * @return\r\n-     */\r\n-    private static boolean extractAndLoadLibraryFile(String libFolderForCurrentOS, String libraryFileName,\r\n-                                                     String targetFolder) {\r\n-        String nativeLibraryFilePath = libFolderForCurrentOS + \"/\" + libraryFileName;\r\n-        // Include architecture name in temporary filename in order to avoid conflicts\r\n-        // when multiple JVMs with different architectures running at the same time\r\n-        String uuid = randomUUID();\r\n-        String extractedLibFileName = String.format(\"jansi-%s-%s-%s\", getVersion(), uuid, libraryFileName);\r\n-        String extractedLckFileName = extractedLibFileName + \".lck\";\r\n-\r\n-        File extractedLibFile = new File(targetFolder, extractedLibFileName);\r\n-        File extractedLckFile = new File(targetFolder, extractedLckFileName);\r\n-\r\n-        try {\r\n-            // Extract a native library file into the target directory\r\n-            InputStream in = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\r\n-            try {\r\n-                if (!extractedLckFile.exists()) {\r\n-                    new FileOutputStream(extractedLckFile).close();\r\n-                }\r\n-                OutputStream out = new FileOutputStream(extractedLibFile);\r\n-                try {\r\n-                    copy(in, out);\r\n-                } finally {\r\n-                    out.close();\r\n-                }\r\n-            } finally {\r\n-                // Delete the extracted lib file on JVM exit.\r\n-                extractedLibFile.deleteOnExit();\r\n-                extractedLckFile.deleteOnExit();\r\n-                in.close();\r\n-            }\r\n-\r\n-            // Set executable (x) flag to enable Java to load the native library\r\n-            extractedLibFile.setReadable(true);\r\n-            extractedLibFile.setWritable(true, true);\r\n-            extractedLibFile.setExecutable(true);\r\n-\r\n-            // Check whether the contents are properly copied from the resource folder\r\n-            InputStream nativeIn = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\r\n-            try {\r\n-                InputStream extractedLibIn = new FileInputStream(extractedLibFile);\r\n-                try {\r\n-                    String eq = contentsEquals(nativeIn, extractedLibIn);\r\n-                    if (eq != null) {\r\n-                        throw new RuntimeException(String.format(\"Failed to write a native library file at %s because %s\", extractedLibFile, eq));\r\n-                    }\r\n-                } finally {\r\n-                    extractedLibIn.close();\r\n-                }\r\n-            } finally {\r\n-                nativeIn.close();\r\n-            }\r\n-\r\n-            // Load library\r\n-            if (loadNativeLibrary(extractedLibFile)) {\r\n-                nativeLibrarySourceUrl = JansiLoader.class.getResource(nativeLibraryFilePath).toExternalForm();\r\n-                return true;\r\n-            }\r\n-        } catch (IOException e) {\r\n-            System.err.println(e.getMessage());\r\n-        }\r\n-        return false;\r\n-    }\r\n-\r\n-    private static String randomUUID() {\r\n-        return Long.toHexString(new Random().nextLong());\r\n-    }\r\n-\r\n-    private static void copy(InputStream in, OutputStream out) throws IOException {\r\n-        byte[] buf = new byte[8192];\r\n-        int n;\r\n-        while ((n = in.read(buf)) > 0) {\r\n-            out.write(buf, 0, n);\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Loads native library using the given path and name of the library.\r\n-     *\r\n-     * @param libPath Path of the native library.\r\n-     * @return True for successfully loading; false otherwise.\r\n-     */\r\n-    private static boolean loadNativeLibrary(File libPath) {\r\n-        if (libPath.exists()) {\r\n-\r\n-            try {\r\n-                String path = libPath.getAbsolutePath();\r\n-                System.load(path);\r\n-                nativeLibraryPath = path;\r\n-                return true;\r\n-            } catch (UnsatisfiedLinkError e) {\r\n-                System.err.println(\"Failed to load native library:\" + libPath.getName() + \". osinfo: \" + OSInfo.getNativeLibFolderPathForCurrentOS());\r\n-                System.err.println(e);\r\n-                return false;\r\n-            }\r\n-\r\n-        } else {\r\n-            return false;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Loads jansi library using given path and name of the library.\r\n-     *\r\n-     * @throws\r\n-     */\r\n-    private static void loadJansiNativeLibrary() throws Exception {\r\n-        if (extracted) {\r\n-            return;\r\n-        }\r\n-\r\n-        List<String> triedPaths = new LinkedList<String>();\r\n-\r\n-        // Try loading library from library.jansi.path library path */\r\n-        String jansiNativeLibraryPath = System.getProperty(\"library.jansi.path\");\r\n-        String jansiNativeLibraryName = System.getProperty(\"library.jansi.name\");\r\n-        if (jansiNativeLibraryName == null) {\r\n-            jansiNativeLibraryName = System.mapLibraryName(\"jansi\");\r\n-            assert jansiNativeLibraryName != null;\r\n-            if (jansiNativeLibraryName.endsWith(\".dylib\")) {\r\n-                jansiNativeLibraryName = jansiNativeLibraryName.replace(\".dylib\", \".jnilib\");\r\n-            }\r\n-        }\r\n-\r\n-        if (jansiNativeLibraryPath != null) {\r\n-            String withOs = jansiNativeLibraryPath + \"/\" + OSInfo.getNativeLibFolderPathForCurrentOS();\r\n-            if (loadNativeLibrary(new File(withOs, jansiNativeLibraryName))) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(withOs);\r\n-            }\r\n-\r\n-            if (loadNativeLibrary(new File(jansiNativeLibraryPath, jansiNativeLibraryName))) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(jansiNativeLibraryPath);\r\n-            }\r\n-        }\r\n-\r\n-        // Load the os-dependent library from the jar file\r\n-        String packagePath = JansiLoader.class.getPackage().getName().replace('.', '/');\r\n-        jansiNativeLibraryPath = String.format(\"/%s/native/%s\", packagePath, OSInfo.getNativeLibFolderPathForCurrentOS());\r\n-        boolean hasNativeLib = hasResource(jansiNativeLibraryPath + \"/\" + jansiNativeLibraryName);\r\n-\r\n-\r\n-        if (hasNativeLib) {\r\n-            // temporary library folder\r\n-            String tempFolder = getTempDir().getAbsolutePath();\r\n-            // Try extracting the library from jar\r\n-            if (extractAndLoadLibraryFile(jansiNativeLibraryPath, jansiNativeLibraryName, tempFolder)) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(jansiNativeLibraryPath);\r\n-            }\r\n-        }\r\n-\r\n-        // As a last resort try from java.library.path\r\n-        String javaLibraryPath = System.getProperty(\"java.library.path\", \"\");\r\n-        for (String ldPath : javaLibraryPath.split(File.pathSeparator)) {\r\n-            if (ldPath.isEmpty()) {\r\n-                continue;\r\n-            }\r\n-            if (loadNativeLibrary(new File(ldPath, jansiNativeLibraryName))) {\r\n-                extracted = true;\r\n-                return;\r\n-            } else {\r\n-                triedPaths.add(ldPath);\r\n-            }\r\n-        }\r\n-\r\n-        extracted = false;\r\n-        throw new Exception(String.format(\"No native library found for os.name=%s, os.arch=%s, paths=[%s]\",\r\n-                OSInfo.getOSName(), OSInfo.getArchName(), join(triedPaths, File.pathSeparator)));\r\n-    }\r\n-\r\n-    private static boolean hasResource(String path) {\r\n-        return JansiLoader.class.getResource(path) != null;\r\n-    }\r\n-\r\n-\r\n-    /**\r\n-     * @return The major version of the jansi library.\r\n-     */\r\n-    public static int getMajorVersion() {\r\n-        String[] c = getVersion().split(\"\\\\.\");\r\n-        return (c.length > 0) ? Integer.parseInt(c[0]) : 1;\r\n-    }\r\n-\r\n-    /**\r\n-     * @return The minor version of the jansi library.\r\n-     */\r\n-    public static int getMinorVersion() {\r\n-        String[] c = getVersion().split(\"\\\\.\");\r\n-        return (c.length > 1) ? Integer.parseInt(c[1]) : 0;\r\n-    }\r\n-\r\n-    /**\r\n-     * @return The version of the jansi library.\r\n-     */\r\n-    public static String getVersion() {\r\n-\r\n-        URL versionFile = JansiLoader.class.getResource(\"/META-INF/maven/org.fusesource.jansi/jansi/pom.properties\");\r\n-\r\n-        String version = \"unknown\";\r\n-        try {\r\n-            if (versionFile != null) {\r\n-                Properties versionData = new Properties();\r\n-                versionData.load(versionFile.openStream());\r\n-                version = versionData.getProperty(\"version\", version);\r\n-                version = version.trim().replaceAll(\"[^0-9\\\\.]\", \"\");\r\n-            }\r\n-        } catch (IOException e) {\r\n-            System.err.println(e);\r\n-        }\r\n-        return version;\r\n-    }\r\n-\r\n-    private static String join(List<String> list, String separator) {\r\n-        StringBuilder sb = new StringBuilder();\r\n-        boolean first = true;\r\n-        for (String item : list) {\r\n-            if (first)\r\n-                first = false;\r\n-            else\r\n-                sb.append(separator);\r\n-\r\n-            sb.append(item);\r\n-        }\r\n-        return sb.toString();\r\n-    }\r\n-\r\n-}\r\n+/*--------------------------------------------------------------------------\n+ *  Copyright 2007 Taro L. Saito\n+ *\n+ *  Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *  you may not use this file except in compliance with the License.\n+ *  You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ *  Unless required by applicable law or agreed to in writing, software\n+ *  distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *  See the License for the specific language governing permissions and\n+ *  limitations under the License.\n+ *--------------------------------------------------------------------------*/\n+package org.fusesource.jansi.internal;\n+\n+import java.io.File;\n+import java.io.FileInputStream;\n+import java.io.FileOutputStream;\n+import java.io.FilenameFilter;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.OutputStream;\n+import java.net.URL;\n+import java.util.Arrays;\n+import java.util.LinkedList;\n+import java.util.List;\n+import java.util.Properties;\n+import java.util.Random;\n+\n+/**\n+ * Set the system properties, org.jansi.lib.path, org.jansi.lib.name,\n+ * appropriately so that jansi can find *.dll, *.jnilib and\n+ * *.so files, according to the current OS (win, linux, mac).\n+ * <p>\n+ * The library files are automatically extracted from this project's package\n+ * (JAR).\n+ * <p>\n+ * usage: call {@link #initialize()} before using Jansi.\n+ */\n+public class JansiLoader {\n+\n+    private static boolean extracted = false;\n+    private static String nativeLibraryPath;\n+    private static String nativeLibrarySourceUrl;\n+\n+    /**\n+     * Loads Jansi native library.\n+     *\n+     * @return True if jansi native library is successfully loaded; false\n+     * otherwise.\n+     */\n+    public static synchronized boolean initialize() {\n+        // only cleanup before the first extract\n+        if (!extracted) {\n+            cleanup();\n+        }\n+        try {\n+            loadJansiNativeLibrary();\n+        } catch (Exception e) {\n+            throw new RuntimeException(\"Unable to load jansi native library\", e);\n+        }\n+        return extracted;\n+    }\n+\n+    public static String getNativeLibraryPath() {\n+        return nativeLibraryPath;\n+    }\n+\n+    public static String getNativeLibrarySourceUrl() {\n+        return nativeLibrarySourceUrl;\n+    }\n+\n+    private static File getTempDir() {\n+        return new File(System.getProperty(\"jansi.tmpdir\", System.getProperty(\"java.io.tmpdir\")));\n+    }\n+\n+    /**\n+     * Deleted old native libraries e.g. on Windows the DLL file is not removed\n+     * on VM-Exit (bug #80)\n+     */\n+    static void cleanup() {\n+        String tempFolder = getTempDir().getAbsolutePath();\n+        File dir = new File(tempFolder);\n+\n+        File[] nativeLibFiles = dir.listFiles(new FilenameFilter() {\n+            private final String searchPattern = \"jansi-\" + getVersion();\n+\n+            public boolean accept(File dir, String name) {\n+                return name.startsWith(searchPattern) && !name.endsWith(\".lck\");\n+            }\n+        });\n+        if (nativeLibFiles != null) {\n+            for (File nativeLibFile : nativeLibFiles) {\n+                File lckFile = new File(nativeLibFile.getAbsolutePath() + \".lck\");\n+                if (!lckFile.exists()) {\n+                    try {\n+                        nativeLibFile.delete();\n+                    } catch (SecurityException e) {\n+                        System.err.println(\"Failed to delete old native lib\" + e.getMessage());\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+    private static int readNBytes(InputStream in, byte[] b) throws IOException {\n+        int n = 0;\n+        int len = b.length;\n+        while (n < len) {\n+            int count = in.read(b, n, len - n);\n+            if (count <= 0)\n+                break;\n+            n += count;\n+        }\n+        return n;\n+    }\n+\n+    private static String contentsEquals(InputStream in1, InputStream in2) throws IOException {\n+        byte[] buffer1 = new byte[8192];\n+        byte[] buffer2 = new byte[8192];\n+        int numRead1;\n+        int numRead2;\n+        while (true) {\n+            numRead1 = readNBytes(in1, buffer1);\n+            numRead2 = readNBytes(in2, buffer2);\n+            if (numRead1 > 0) {\n+                if (numRead2 <= 0) {\n+                    return \"EOF on second stream but not first\";\n+                }\n+                if (numRead2 != numRead1) {\n+                    return \"Read size different (\" + numRead1 + \" vs \" + numRead2 + \")\";\n+                }\n+                // Otherwise same number of bytes read\n+                if (!Arrays.equals(buffer1, buffer2)) {\n+                    return \"Content differs\";\n+                }\n+                // Otherwise same bytes read, so continue ...\n+            } else {\n+                // Nothing more in stream 1 ...\n+                if (numRead2 > 0) {\n+                    return \"EOF on first stream but not second\";\n+                } else {\n+                    return null;\n+                }\n+            }\n+        }\n+    }\n+\n+    /**\n+     * Extracts and loads the specified library file to the target folder\n+     *\n+     * @param libFolderForCurrentOS Library path.\n+     * @param libraryFileName       Library name.\n+     * @param targetFolder          Target folder.\n+     * @return\n+     */\n+    private static boolean extractAndLoadLibraryFile(String libFolderForCurrentOS, String libraryFileName,\n+                                                     String targetFolder) {\n+        String nativeLibraryFilePath = libFolderForCurrentOS + \"/\" + libraryFileName;\n+        // Include architecture name in temporary filename in order to avoid conflicts\n+        // when multiple JVMs with different architectures running at the same time\n+        String uuid = randomUUID();\n+        String extractedLibFileName = String.format(\"jansi-%s-%s-%s\", getVersion(), uuid, libraryFileName);\n+        String extractedLckFileName = extractedLibFileName + \".lck\";\n+\n+        File extractedLibFile = new File(targetFolder, extractedLibFileName);\n+        File extractedLckFile = new File(targetFolder, extractedLckFileName);\n+\n+        try {\n+            // Extract a native library file into the target directory\n+            InputStream in = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\n+            try {\n+                if (!extractedLckFile.exists()) {\n+                    new FileOutputStream(extractedLckFile).close();\n+                }\n+                OutputStream out = new FileOutputStream(extractedLibFile);\n+                try {\n+                    copy(in, out);\n+                } finally {\n+                    out.close();\n+                }\n+            } finally {\n+                // Delete the extracted lib file on JVM exit.\n+                extractedLibFile.deleteOnExit();\n+                extractedLckFile.deleteOnExit();\n+                in.close();\n+            }\n+\n+            // Set executable (x) flag to enable Java to load the native library\n+            extractedLibFile.setReadable(true);\n+            extractedLibFile.setWritable(true, true);\n+            extractedLibFile.setExecutable(true);\n+\n+            // Check whether the contents are properly copied from the resource folder\n+            InputStream nativeIn = JansiLoader.class.getResourceAsStream(nativeLibraryFilePath);\n+            try {\n+                InputStream extractedLibIn = new FileInputStream(extractedLibFile);\n+                try {\n+                    String eq = contentsEquals(nativeIn, extractedLibIn);\n+                    if (eq != null) {\n+                        throw new RuntimeException(String.format(\"Failed to write a native library file at %s because %s\", extractedLibFile, eq));\n+                    }\n+                } finally {\n+                    extractedLibIn.close();\n+                }\n+            } finally {\n+                nativeIn.close();\n+            }\n+\n+            // Load library\n+            if (loadNativeLibrary(extractedLibFile)) {\n+                nativeLibrarySourceUrl = JansiLoader.class.getResource(nativeLibraryFilePath).toExternalForm();\n+                return true;\n+            }\n+        } catch (IOException e) {\n+            System.err.println(e.getMessage());\n+        }\n+        return false;\n+    }\n+\n+    private static String randomUUID() {\n+        return Long.toHexString(new Random().nextLong());\n+    }\n+\n+    private static void copy(InputStream in, OutputStream out) throws IOException {\n+        byte[] buf = new byte[8192];\n+        int n;\n+        while ((n = in.read(buf)) > 0) {\n+            out.write(buf, 0, n);\n+        }\n+    }\n+\n+    /**\n+     * Loads native library using the given path and name of the library.\n+     *\n+     * @param libPath Path of the native library.\n+     * @return True for successfully loading; false otherwise.\n+     */\n+    private static boolean loadNativeLibrary(File libPath) {\n+        if (libPath.exists()) {\n+\n+            try {\n+                String path = libPath.getAbsolutePath();\n+                System.load(path);\n+                nativeLibraryPath = path;\n+                return true;\n+            } catch (UnsatisfiedLinkError e) {\n+                System.err.println(\"Failed to load native library:\" + libPath.getName() + \". osinfo: \" + OSInfo.getNativeLibFolderPathForCurrentOS());\n+                System.err.println(e);\n+                return false;\n+            }\n+\n+        } else {\n+            return false;\n+        }\n+    }\n+\n+    /**\n+     * Loads jansi library using given path and name of the library.\n+     *\n+     * @throws\n+     */\n+    private static void loadJansiNativeLibrary() throws Exception {\n+        if (extracted) {\n+            return;\n+        }\n+\n+        List<String> triedPaths = new LinkedList<String>();\n+\n+        // Try loading library from library.jansi.path library path */\n+        String jansiNativeLibraryPath = System.getProperty(\"library.jansi.path\");\n+        String jansiNativeLibraryName = System.getProperty(\"library.jansi.name\");\n+        if (jansiNativeLibraryName == null) {\n+            jansiNativeLibraryName = System.mapLibraryName(\"jansi\");\n+            assert jansiNativeLibraryName != null;\n+            if (jansiNativeLibraryName.endsWith(\".dylib\")) {\n+                jansiNativeLibraryName = jansiNativeLibraryName.replace(\".dylib\", \".jnilib\");\n+            }\n+        }\n+\n+        if (jansiNativeLibraryPath != null) {\n+            String withOs = jansiNativeLibraryPath + \"/\" + OSInfo.getNativeLibFolderPathForCurrentOS();\n+            if (loadNativeLibrary(new File(withOs, jansiNativeLibraryName))) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(withOs);\n+            }\n+\n+            if (loadNativeLibrary(new File(jansiNativeLibraryPath, jansiNativeLibraryName))) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(jansiNativeLibraryPath);\n+            }\n+        }\n+\n+        // Load the os-dependent library from the jar file\n+        String packagePath = JansiLoader.class.getPackage().getName().replace('.', '/');\n+        jansiNativeLibraryPath = String.format(\"/%s/native/%s\", packagePath, OSInfo.getNativeLibFolderPathForCurrentOS());\n+        boolean hasNativeLib = hasResource(jansiNativeLibraryPath + \"/\" + jansiNativeLibraryName);\n+\n+\n+        if (hasNativeLib) {\n+            // temporary library folder\n+            String tempFolder = getTempDir().getAbsolutePath();\n+            // Try extracting the library from jar\n+            if (extractAndLoadLibraryFile(jansiNativeLibraryPath, jansiNativeLibraryName, tempFolder)) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(jansiNativeLibraryPath);\n+            }\n+        }\n+\n+        // As a last resort try from java.library.path\n+        String javaLibraryPath = System.getProperty(\"java.library.path\", \"\");\n+        for (String ldPath : javaLibraryPath.split(File.pathSeparator)) {\n+            if (ldPath.isEmpty()) {\n+                continue;\n+            }\n+            if (loadNativeLibrary(new File(ldPath, jansiNativeLibraryName))) {\n+                extracted = true;\n+                return;\n+            } else {\n+                triedPaths.add(ldPath);\n+            }\n+        }\n+\n+        extracted = false;\n+        throw new Exception(String.format(\"No native library found for os.name=%s, os.arch=%s, paths=[%s]\",\n+                OSInfo.getOSName(), OSInfo.getArchName(), join(triedPaths, File.pathSeparator)));\n+    }\n+\n+    private static boolean hasResource(String path) {\n+        return JansiLoader.class.getResource(path) != null;\n+    }\n+\n+\n+    /**\n+     * @return The major version of the jansi library.\n+     */\n+    public static int getMajorVersion() {\n+        String[] c = getVersion().split(\"\\\\.\");\n+        return (c.length > 0) ? Integer.parseInt(c[0]) : 1;\n+    }\n+\n+    /**\n+     * @return The minor version of the jansi library.\n+     */\n+    public static int getMinorVersion() {\n+        String[] c = getVersion().split(\"\\\\.\");\n+        return (c.length > 1) ? Integer.parseInt(c[1]) : 0;\n+    }\n+\n+    /**\n+     * @return The version of the jansi library.\n+     */\n+    public static String getVersion() {\n+\n+        URL versionFile = JansiLoader.class.getResource(\"/META-INF/maven/org.fusesource.jansi/jansi/pom.properties\");\n+\n+        String version = \"unknown\";\n+        try {\n+            if (versionFile != null) {\n+                Properties versionData = new Properties();\n+                versionData.load(versionFile.openStream());\n+                version = versionData.getProperty(\"version\", version);\n+                version = version.trim().replaceAll(\"[^0-9\\\\.]\", \"\");\n+            }\n+        } catch (IOException e) {\n+            System.err.println(e);\n+        }\n+        return version;\n+    }\n+\n+    private static String join(List<String> list, String separator) {\n+        StringBuilder sb = new StringBuilder();\n+        boolean first = true;\n+        for (String item : list) {\n+            if (first)\n+                first = false;\n+            else\n+                sb.append(separator);\n+\n+            sb.append(item);\n+        }\n+        return sb.toString();\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/Kernel32.java", "source2": "org/fusesource/jansi/internal/Kernel32.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,578 +1,578 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-import java.io.IOException;\r\n-\r\n-import org.fusesource.jansi.WindowsSupport;\r\n-\r\n-/**\r\n- * Interface to access Win32 base APIs.\r\n- *\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @author Guillaume Nodet\r\n- * @see JansiLoader\r\n- */\r\n-@SuppressWarnings(\"unused\")\r\n-public class Kernel32 {\r\n-\r\n-    static {\r\n-        JansiLoader.initialize();\r\n-        init();\r\n-    }\r\n-\r\n-    private static native void init();\r\n-\r\n-    public static short FOREGROUND_BLUE;\r\n-    public static short FOREGROUND_GREEN;\r\n-    public static short FOREGROUND_RED;\r\n-    public static short FOREGROUND_INTENSITY;\r\n-    public static short BACKGROUND_BLUE;\r\n-    public static short BACKGROUND_GREEN;\r\n-    public static short BACKGROUND_RED;\r\n-    public static short BACKGROUND_INTENSITY;\r\n-    public static short COMMON_LVB_LEADING_BYTE;\r\n-    public static short COMMON_LVB_TRAILING_BYTE;\r\n-    public static short COMMON_LVB_GRID_HORIZONTAL;\r\n-    public static short COMMON_LVB_GRID_LVERTICAL;\r\n-    public static short COMMON_LVB_GRID_RVERTICAL;\r\n-    public static short COMMON_LVB_REVERSE_VIDEO;\r\n-    public static short COMMON_LVB_UNDERSCORE;\r\n-    public static int FORMAT_MESSAGE_FROM_SYSTEM;\r\n-    public static int STD_INPUT_HANDLE;\r\n-    public static int STD_OUTPUT_HANDLE;\r\n-    public static int STD_ERROR_HANDLE;\r\n-    public static int INVALID_HANDLE_VALUE;\r\n-\r\n-\r\n-    public static native long malloc(long size);\r\n-\r\n-    public static native void free(long ptr);\r\n-\r\n-    /**\r\n-     * http://msdn.microsoft.com/en-us/library/ms686311%28VS.85%29.aspx\r\n-     */\r\n-    static public class SMALL_RECT {\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short left;\r\n-        public short top;\r\n-        public short right;\r\n-        public short bottom;\r\n-\r\n-        public short width() {\r\n-            return (short) (right - left);\r\n-        }\r\n-\r\n-        public short height() {\r\n-            return (short) (bottom - top);\r\n-        }\r\n-\r\n-        public SMALL_RECT copy() {\r\n-            SMALL_RECT rc = new SMALL_RECT();\r\n-            rc.left = left;\r\n-            rc.top = top;\r\n-            rc.right = right;\r\n-            rc.bottom = bottom;\r\n-            return rc;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see http://msdn.microsoft.com/en-us/library/ms686047%28VS.85%29.aspx\r\n-     */\r\n-    public static native int SetConsoleTextAttribute(\r\n-            long consoleOutput,\r\n-            short attributes);\r\n-\r\n-    public static class COORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short x;\r\n-        public short y;\r\n-\r\n-        public COORD copy() {\r\n-            COORD rc = new COORD();\r\n-            rc.x = x;\r\n-            rc.y = y;\r\n-            return rc;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * http://msdn.microsoft.com/en-us/library/ms682093%28VS.85%29.aspx\r\n-     */\r\n-    public static class CONSOLE_SCREEN_BUFFER_INFO {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public COORD size = new COORD();\r\n-        public COORD cursorPosition = new COORD();\r\n-        public short attributes;\r\n-        public SMALL_RECT window = new SMALL_RECT();\r\n-        public COORD maximumWindowSize = new COORD();\r\n-\r\n-        public int windowWidth() {\r\n-            return window.width() + 1;\r\n-        }\r\n-\r\n-        public int windowHeight() {\r\n-            return window.height() + 1;\r\n-        }\r\n-    }\r\n-\r\n-\r\n-    // DWORD WINAPI WaitForSingleObject(\r\n-    //  _In_ HANDLE hHandle,\r\n-    //  _In_ DWORD  dwMilliseconds\r\n-    // );\r\n-    public static native int WaitForSingleObject(long hHandle, int dwMilliseconds);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms724211%28VS.85%29.aspx\r\n-     */\r\n-    public static native int CloseHandle(long handle);\r\n-\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx\r\n-     */\r\n-    public static native int GetLastError();\r\n-\r\n-    public static native int FormatMessageW(\r\n-            int flags,\r\n-            long source,\r\n-            int messageId,\r\n-            int languageId,\r\n-            byte[] buffer,\r\n-            int size,\r\n-            long[] args\r\n-    );\r\n-\r\n-\r\n-    /**\r\n-     * See: http://msdn.microsoft.com/en-us/library/ms683171%28VS.85%29.aspx\r\n-     */\r\n-    public static native int GetConsoleScreenBufferInfo(\r\n-            long consoleOutput,\r\n-            CONSOLE_SCREEN_BUFFER_INFO consoleScreenBufferInfo);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683231%28VS.85%29.aspx\r\n-     */\r\n-    public static native long GetStdHandle(int stdHandle);\r\n-\r\n-    /**\r\n-     * http://msdn.microsoft.com/en-us/library/ms686025%28VS.85%29.aspx\r\n-     */\r\n-    public static native int SetConsoleCursorPosition(\r\n-            long consoleOutput,\r\n-            COORD cursorPosition);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms682663%28VS.85%29.aspx\r\n-     */\r\n-    public static native int FillConsoleOutputCharacterW(\r\n-            long consoleOutput,\r\n-            char character,\r\n-            int length,\r\n-            COORD writeCoord,\r\n-            int[] numberOfCharsWritten);\r\n-\r\n-    /**\r\n-     * see: https://msdn.microsoft.com/en-us/library/ms682662%28VS.85%29.aspx\r\n-     */\r\n-    public static native int FillConsoleOutputAttribute(\r\n-            long consoleOutput,\r\n-            short attribute,\r\n-            int length,\r\n-            COORD writeCoord,\r\n-            int[] numberOfAttrsWritten);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms687401(v=VS.85).aspx\r\n-     */\r\n-    public static native int WriteConsoleW(\r\n-            long consoleOutput,\r\n-            char[] buffer,\r\n-            int numberOfCharsToWrite,\r\n-            int[] numberOfCharsWritten,\r\n-            long reserved);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683167%28VS.85%29.aspx\r\n-     */\r\n-    public static native int GetConsoleMode(\r\n-            long handle,\r\n-            int[] mode);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms686033%28VS.85%29.aspx\r\n-     */\r\n-    public static native int SetConsoleMode(\r\n-            long handle,\r\n-            int mode);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/078sfkak(VS.80).aspx\r\n-     */\r\n-    public static native int _getch();\r\n-\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms686050%28VS.85%29.aspx\r\n-     *\r\n-     * @return 0 if title was set successfully\r\n-     */\r\n-    public static native int SetConsoleTitle(\r\n-            String title);\r\n-\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683169(v=VS.85).aspx\r\n-     *\r\n-     * @return the current output code page\r\n-     */\r\n-    public static native int GetConsoleOutputCP();\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms686036(v=VS.85).aspx\r\n-     *\r\n-     * @return non 0 if code page was set\r\n-     */\r\n-    public static native int SetConsoleOutputCP(int codePageID);\r\n-\r\n-    /**\r\n-     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682013(v=vs.85).aspx\r\n-     */\r\n-    public static class CHAR_INFO {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public short attributes;\r\n-        public char unicodeChar;\r\n-    }\r\n-\r\n-    /**\r\n-     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms685107(v=vs.85).aspx\r\n-     */\r\n-    public static native int ScrollConsoleScreenBuffer(\r\n-            long consoleOutput,\r\n-            SMALL_RECT scrollRectangle,\r\n-            SMALL_RECT clipRectangle,\r\n-            COORD destinationOrigin,\r\n-            CHAR_INFO fill);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684166(v=VS.85).aspx\r\n-     */\r\n-    public static class KEY_EVENT_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public static int CAPSLOCK_ON;\r\n-        public static int NUMLOCK_ON;\r\n-        public static int SCROLLLOCK_ON;\r\n-        public static int ENHANCED_KEY;\r\n-        public static int LEFT_ALT_PRESSED;\r\n-        public static int LEFT_CTRL_PRESSED;\r\n-        public static int RIGHT_ALT_PRESSED;\r\n-        public static int RIGHT_CTRL_PRESSED;\r\n-        public static int SHIFT_PRESSED;\r\n-\r\n-        public boolean keyDown;\r\n-        public short repeatCount;\r\n-        public short keyCode;\r\n-        public short scanCode;\r\n-        public char uchar;\r\n-        public int controlKeyState;\r\n-\r\n-        public String toString() {\r\n-            return \"KEY_EVENT_RECORD{\" +\r\n-                    \"keyDown=\" + keyDown +\r\n-                    \", repeatCount=\" + repeatCount +\r\n-                    \", keyCode=\" + keyCode +\r\n-                    \", scanCode=\" + scanCode +\r\n-                    \", uchar=\" + uchar +\r\n-                    \", controlKeyState=\" + controlKeyState +\r\n-                    '}';\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684239(v=VS.85).aspx\r\n-     */\r\n-    public static class MOUSE_EVENT_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public static int FROM_LEFT_1ST_BUTTON_PRESSED;\r\n-        public static int FROM_LEFT_2ND_BUTTON_PRESSED;\r\n-        public static int FROM_LEFT_3RD_BUTTON_PRESSED;\r\n-        public static int FROM_LEFT_4TH_BUTTON_PRESSED;\r\n-        public static int RIGHTMOST_BUTTON_PRESSED;\r\n-\r\n-        public static int CAPSLOCK_ON;\r\n-        public static int NUMLOCK_ON;\r\n-        public static int SCROLLLOCK_ON;\r\n-        public static int ENHANCED_KEY;\r\n-        public static int LEFT_ALT_PRESSED;\r\n-        public static int LEFT_CTRL_PRESSED;\r\n-        public static int RIGHT_ALT_PRESSED;\r\n-        public static int RIGHT_CTRL_PRESSED;\r\n-        public static int SHIFT_PRESSED;\r\n-\r\n-        public static int DOUBLE_CLICK;\r\n-        public static int MOUSE_HWHEELED;\r\n-        public static int MOUSE_MOVED;\r\n-        public static int MOUSE_WHEELED;\r\n-\r\n-        public COORD mousePosition = new COORD();\r\n-        public int buttonState;\r\n-        public int controlKeyState;\r\n-        public int eventFlags;\r\n-\r\n-        public String toString() {\r\n-            return \"MOUSE_EVENT_RECORD{\" +\r\n-                    \"mousePosition=\" + mousePosition +\r\n-                    \", buttonState=\" + buttonState +\r\n-                    \", controlKeyState=\" + controlKeyState +\r\n-                    \", eventFlags=\" + eventFlags +\r\n-                    '}';\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms687093(v=VS.85).aspx\r\n-     */\r\n-    public static class WINDOW_BUFFER_SIZE_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-\r\n-        public COORD size = new COORD();\r\n-\r\n-        public String toString() {\r\n-            return \"WINDOW_BUFFER_SIZE_RECORD{size=\" + size + '}';\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683149(v=VS.85).aspx\r\n-     */\r\n-    public static class FOCUS_EVENT_RECORD {\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public boolean setFocus;\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684213(v=VS.85).aspx\r\n-     */\r\n-    public static class MENU_EVENT_RECORD {\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public int commandId;\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683499(v=VS.85).aspx\r\n-     */\r\n-    public static class INPUT_RECORD {\r\n-\r\n-        static {\r\n-            JansiLoader.initialize();\r\n-            init();\r\n-        }\r\n-\r\n-        private static native void init();\r\n-\r\n-        public static int SIZEOF;\r\n-        public static short KEY_EVENT;\r\n-        public static short MOUSE_EVENT;\r\n-        public static short WINDOW_BUFFER_SIZE_EVENT;\r\n-        public static short FOCUS_EVENT;\r\n-        public static short MENU_EVENT;\r\n-        public short eventType;\r\n-        public KEY_EVENT_RECORD keyEvent = new KEY_EVENT_RECORD();\r\n-        public MOUSE_EVENT_RECORD mouseEvent = new MOUSE_EVENT_RECORD();\r\n-        public WINDOW_BUFFER_SIZE_RECORD windowBufferSizeEvent = new WINDOW_BUFFER_SIZE_RECORD();\r\n-        public MENU_EVENT_RECORD menuEvent = new MENU_EVENT_RECORD();\r\n-        public FOCUS_EVENT_RECORD focusEvent = new FOCUS_EVENT_RECORD();\r\n-\r\n-        public static native void memmove(\r\n-                INPUT_RECORD dest,\r\n-                long src,\r\n-                long size);\r\n-\r\n-    }\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684961(v=VS.85).aspx\r\n-     */\r\n-    private static native int ReadConsoleInputW(\r\n-            long handle,\r\n-            long inputRecord,\r\n-            int length,\r\n-            int[] eventsCount);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms684344(v=VS.85).aspx\r\n-     */\r\n-    private static native int PeekConsoleInputW(\r\n-            long handle,\r\n-            long inputRecord,\r\n-            int length,\r\n-            int[] eventsCount);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683207(v=VS.85).aspx\r\n-     */\r\n-    public static native int GetNumberOfConsoleInputEvents(\r\n-            long handle,\r\n-            int[] numberOfEvents);\r\n-\r\n-    /**\r\n-     * see: http://msdn.microsoft.com/en-us/library/ms683147(v=VS.85).aspx\r\n-     */\r\n-    public static native int FlushConsoleInputBuffer(\r\n-            long handle);\r\n-\r\n-    /**\r\n-     * Return console input events.\r\n-     */\r\n-    public static INPUT_RECORD[] readConsoleInputHelper(\r\n-            long handle, int count, boolean peek) throws IOException {\r\n-        int[] length = new int[1];\r\n-        int res;\r\n-        long inputRecordPtr = 0;\r\n-        try {\r\n-            inputRecordPtr = malloc(INPUT_RECORD.SIZEOF * count);\r\n-            if (inputRecordPtr == 0) {\r\n-                throw new IOException(\"cannot allocate memory with JNI\");\r\n-            }\r\n-            res = peek ?\r\n-                    PeekConsoleInputW(handle, inputRecordPtr, count, length)\r\n-                    : ReadConsoleInputW(handle, inputRecordPtr, count, length);\r\n-            if (res == 0) {\r\n-                throw new IOException(\"ReadConsoleInputW failed: \" + WindowsSupport.getLastErrorMessage());\r\n-            }\r\n-            if (length[0] <= 0) {\r\n-                return new INPUT_RECORD[0];\r\n-            }\r\n-            INPUT_RECORD[] records = new INPUT_RECORD[length[0]];\r\n-            for (int i = 0; i < records.length; i++) {\r\n-                records[i] = new INPUT_RECORD();\r\n-                INPUT_RECORD.memmove(records[i], inputRecordPtr + i * INPUT_RECORD.SIZEOF, INPUT_RECORD.SIZEOF);\r\n-            }\r\n-            return records;\r\n-        } finally {\r\n-            if (inputRecordPtr != 0) {\r\n-                free(inputRecordPtr);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Return console input key events (discard other events).\r\n-     *\r\n-     * @param count requested number of events\r\n-     * @return array possibly of size smaller then count\r\n-     */\r\n-    public static INPUT_RECORD[] readConsoleKeyInput(long handle, int count, boolean peek)\r\n-            throws IOException {\r\n-        while (true) {\r\n-            // read events until we have keyboard events, the queue could be full\r\n-            // of mouse events.\r\n-            INPUT_RECORD[] evts = readConsoleInputHelper(handle, count, peek);\r\n-            int keyEvtCount = 0;\r\n-            for (INPUT_RECORD evt : evts) {\r\n-                if (evt.eventType == INPUT_RECORD.KEY_EVENT) keyEvtCount++;\r\n-            }\r\n-            if (keyEvtCount > 0) {\r\n-                INPUT_RECORD[] res = new INPUT_RECORD[keyEvtCount];\r\n-                int i = 0;\r\n-                for (INPUT_RECORD evt : evts) {\r\n-                    if (evt.eventType == INPUT_RECORD.KEY_EVENT) {\r\n-                        res[i++] = evt;\r\n-                    }\r\n-                }\r\n-                return res;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.internal;\n+\n+import java.io.IOException;\n+\n+import org.fusesource.jansi.WindowsSupport;\n+\n+/**\n+ * Interface to access Win32 base APIs.\n+ *\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @author Guillaume Nodet\n+ * @see JansiLoader\n+ */\n+@SuppressWarnings(\"unused\")\n+public class Kernel32 {\n+\n+    static {\n+        JansiLoader.initialize();\n+        init();\n+    }\n+\n+    private static native void init();\n+\n+    public static short FOREGROUND_BLUE;\n+    public static short FOREGROUND_GREEN;\n+    public static short FOREGROUND_RED;\n+    public static short FOREGROUND_INTENSITY;\n+    public static short BACKGROUND_BLUE;\n+    public static short BACKGROUND_GREEN;\n+    public static short BACKGROUND_RED;\n+    public static short BACKGROUND_INTENSITY;\n+    public static short COMMON_LVB_LEADING_BYTE;\n+    public static short COMMON_LVB_TRAILING_BYTE;\n+    public static short COMMON_LVB_GRID_HORIZONTAL;\n+    public static short COMMON_LVB_GRID_LVERTICAL;\n+    public static short COMMON_LVB_GRID_RVERTICAL;\n+    public static short COMMON_LVB_REVERSE_VIDEO;\n+    public static short COMMON_LVB_UNDERSCORE;\n+    public static int FORMAT_MESSAGE_FROM_SYSTEM;\n+    public static int STD_INPUT_HANDLE;\n+    public static int STD_OUTPUT_HANDLE;\n+    public static int STD_ERROR_HANDLE;\n+    public static int INVALID_HANDLE_VALUE;\n+\n+\n+    public static native long malloc(long size);\n+\n+    public static native void free(long ptr);\n+\n+    /**\n+     * http://msdn.microsoft.com/en-us/library/ms686311%28VS.85%29.aspx\n+     */\n+    static public class SMALL_RECT {\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short left;\n+        public short top;\n+        public short right;\n+        public short bottom;\n+\n+        public short width() {\n+            return (short) (right - left);\n+        }\n+\n+        public short height() {\n+            return (short) (bottom - top);\n+        }\n+\n+        public SMALL_RECT copy() {\n+            SMALL_RECT rc = new SMALL_RECT();\n+            rc.left = left;\n+            rc.top = top;\n+            rc.right = right;\n+            rc.bottom = bottom;\n+            return rc;\n+        }\n+    }\n+\n+    /**\n+     * see http://msdn.microsoft.com/en-us/library/ms686047%28VS.85%29.aspx\n+     */\n+    public static native int SetConsoleTextAttribute(\n+            long consoleOutput,\n+            short attributes);\n+\n+    public static class COORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short x;\n+        public short y;\n+\n+        public COORD copy() {\n+            COORD rc = new COORD();\n+            rc.x = x;\n+            rc.y = y;\n+            return rc;\n+        }\n+    }\n+\n+    /**\n+     * http://msdn.microsoft.com/en-us/library/ms682093%28VS.85%29.aspx\n+     */\n+    public static class CONSOLE_SCREEN_BUFFER_INFO {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public COORD size = new COORD();\n+        public COORD cursorPosition = new COORD();\n+        public short attributes;\n+        public SMALL_RECT window = new SMALL_RECT();\n+        public COORD maximumWindowSize = new COORD();\n+\n+        public int windowWidth() {\n+            return window.width() + 1;\n+        }\n+\n+        public int windowHeight() {\n+            return window.height() + 1;\n+        }\n+    }\n+\n+\n+    // DWORD WINAPI WaitForSingleObject(\n+    //  _In_ HANDLE hHandle,\n+    //  _In_ DWORD  dwMilliseconds\n+    // );\n+    public static native int WaitForSingleObject(long hHandle, int dwMilliseconds);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms724211%28VS.85%29.aspx\n+     */\n+    public static native int CloseHandle(long handle);\n+\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx\n+     */\n+    public static native int GetLastError();\n+\n+    public static native int FormatMessageW(\n+            int flags,\n+            long source,\n+            int messageId,\n+            int languageId,\n+            byte[] buffer,\n+            int size,\n+            long[] args\n+    );\n+\n+\n+    /**\n+     * See: http://msdn.microsoft.com/en-us/library/ms683171%28VS.85%29.aspx\n+     */\n+    public static native int GetConsoleScreenBufferInfo(\n+            long consoleOutput,\n+            CONSOLE_SCREEN_BUFFER_INFO consoleScreenBufferInfo);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683231%28VS.85%29.aspx\n+     */\n+    public static native long GetStdHandle(int stdHandle);\n+\n+    /**\n+     * http://msdn.microsoft.com/en-us/library/ms686025%28VS.85%29.aspx\n+     */\n+    public static native int SetConsoleCursorPosition(\n+            long consoleOutput,\n+            COORD cursorPosition);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms682663%28VS.85%29.aspx\n+     */\n+    public static native int FillConsoleOutputCharacterW(\n+            long consoleOutput,\n+            char character,\n+            int length,\n+            COORD writeCoord,\n+            int[] numberOfCharsWritten);\n+\n+    /**\n+     * see: https://msdn.microsoft.com/en-us/library/ms682662%28VS.85%29.aspx\n+     */\n+    public static native int FillConsoleOutputAttribute(\n+            long consoleOutput,\n+            short attribute,\n+            int length,\n+            COORD writeCoord,\n+            int[] numberOfAttrsWritten);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms687401(v=VS.85).aspx\n+     */\n+    public static native int WriteConsoleW(\n+            long consoleOutput,\n+            char[] buffer,\n+            int numberOfCharsToWrite,\n+            int[] numberOfCharsWritten,\n+            long reserved);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683167%28VS.85%29.aspx\n+     */\n+    public static native int GetConsoleMode(\n+            long handle,\n+            int[] mode);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms686033%28VS.85%29.aspx\n+     */\n+    public static native int SetConsoleMode(\n+            long handle,\n+            int mode);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/078sfkak(VS.80).aspx\n+     */\n+    public static native int _getch();\n+\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms686050%28VS.85%29.aspx\n+     *\n+     * @return 0 if title was set successfully\n+     */\n+    public static native int SetConsoleTitle(\n+            String title);\n+\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683169(v=VS.85).aspx\n+     *\n+     * @return the current output code page\n+     */\n+    public static native int GetConsoleOutputCP();\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms686036(v=VS.85).aspx\n+     *\n+     * @return non 0 if code page was set\n+     */\n+    public static native int SetConsoleOutputCP(int codePageID);\n+\n+    /**\n+     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682013(v=vs.85).aspx\n+     */\n+    public static class CHAR_INFO {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public short attributes;\n+        public char unicodeChar;\n+    }\n+\n+    /**\n+     * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms685107(v=vs.85).aspx\n+     */\n+    public static native int ScrollConsoleScreenBuffer(\n+            long consoleOutput,\n+            SMALL_RECT scrollRectangle,\n+            SMALL_RECT clipRectangle,\n+            COORD destinationOrigin,\n+            CHAR_INFO fill);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684166(v=VS.85).aspx\n+     */\n+    public static class KEY_EVENT_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public static int CAPSLOCK_ON;\n+        public static int NUMLOCK_ON;\n+        public static int SCROLLLOCK_ON;\n+        public static int ENHANCED_KEY;\n+        public static int LEFT_ALT_PRESSED;\n+        public static int LEFT_CTRL_PRESSED;\n+        public static int RIGHT_ALT_PRESSED;\n+        public static int RIGHT_CTRL_PRESSED;\n+        public static int SHIFT_PRESSED;\n+\n+        public boolean keyDown;\n+        public short repeatCount;\n+        public short keyCode;\n+        public short scanCode;\n+        public char uchar;\n+        public int controlKeyState;\n+\n+        public String toString() {\n+            return \"KEY_EVENT_RECORD{\" +\n+                    \"keyDown=\" + keyDown +\n+                    \", repeatCount=\" + repeatCount +\n+                    \", keyCode=\" + keyCode +\n+                    \", scanCode=\" + scanCode +\n+                    \", uchar=\" + uchar +\n+                    \", controlKeyState=\" + controlKeyState +\n+                    '}';\n+        }\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684239(v=VS.85).aspx\n+     */\n+    public static class MOUSE_EVENT_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public static int FROM_LEFT_1ST_BUTTON_PRESSED;\n+        public static int FROM_LEFT_2ND_BUTTON_PRESSED;\n+        public static int FROM_LEFT_3RD_BUTTON_PRESSED;\n+        public static int FROM_LEFT_4TH_BUTTON_PRESSED;\n+        public static int RIGHTMOST_BUTTON_PRESSED;\n+\n+        public static int CAPSLOCK_ON;\n+        public static int NUMLOCK_ON;\n+        public static int SCROLLLOCK_ON;\n+        public static int ENHANCED_KEY;\n+        public static int LEFT_ALT_PRESSED;\n+        public static int LEFT_CTRL_PRESSED;\n+        public static int RIGHT_ALT_PRESSED;\n+        public static int RIGHT_CTRL_PRESSED;\n+        public static int SHIFT_PRESSED;\n+\n+        public static int DOUBLE_CLICK;\n+        public static int MOUSE_HWHEELED;\n+        public static int MOUSE_MOVED;\n+        public static int MOUSE_WHEELED;\n+\n+        public COORD mousePosition = new COORD();\n+        public int buttonState;\n+        public int controlKeyState;\n+        public int eventFlags;\n+\n+        public String toString() {\n+            return \"MOUSE_EVENT_RECORD{\" +\n+                    \"mousePosition=\" + mousePosition +\n+                    \", buttonState=\" + buttonState +\n+                    \", controlKeyState=\" + controlKeyState +\n+                    \", eventFlags=\" + eventFlags +\n+                    '}';\n+        }\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms687093(v=VS.85).aspx\n+     */\n+    public static class WINDOW_BUFFER_SIZE_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+\n+        public COORD size = new COORD();\n+\n+        public String toString() {\n+            return \"WINDOW_BUFFER_SIZE_RECORD{size=\" + size + '}';\n+        }\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683149(v=VS.85).aspx\n+     */\n+    public static class FOCUS_EVENT_RECORD {\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public boolean setFocus;\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684213(v=VS.85).aspx\n+     */\n+    public static class MENU_EVENT_RECORD {\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public int commandId;\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683499(v=VS.85).aspx\n+     */\n+    public static class INPUT_RECORD {\n+\n+        static {\n+            JansiLoader.initialize();\n+            init();\n+        }\n+\n+        private static native void init();\n+\n+        public static int SIZEOF;\n+        public static short KEY_EVENT;\n+        public static short MOUSE_EVENT;\n+        public static short WINDOW_BUFFER_SIZE_EVENT;\n+        public static short FOCUS_EVENT;\n+        public static short MENU_EVENT;\n+        public short eventType;\n+        public KEY_EVENT_RECORD keyEvent = new KEY_EVENT_RECORD();\n+        public MOUSE_EVENT_RECORD mouseEvent = new MOUSE_EVENT_RECORD();\n+        public WINDOW_BUFFER_SIZE_RECORD windowBufferSizeEvent = new WINDOW_BUFFER_SIZE_RECORD();\n+        public MENU_EVENT_RECORD menuEvent = new MENU_EVENT_RECORD();\n+        public FOCUS_EVENT_RECORD focusEvent = new FOCUS_EVENT_RECORD();\n+\n+        public static native void memmove(\n+                INPUT_RECORD dest,\n+                long src,\n+                long size);\n+\n+    }\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684961(v=VS.85).aspx\n+     */\n+    private static native int ReadConsoleInputW(\n+            long handle,\n+            long inputRecord,\n+            int length,\n+            int[] eventsCount);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms684344(v=VS.85).aspx\n+     */\n+    private static native int PeekConsoleInputW(\n+            long handle,\n+            long inputRecord,\n+            int length,\n+            int[] eventsCount);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683207(v=VS.85).aspx\n+     */\n+    public static native int GetNumberOfConsoleInputEvents(\n+            long handle,\n+            int[] numberOfEvents);\n+\n+    /**\n+     * see: http://msdn.microsoft.com/en-us/library/ms683147(v=VS.85).aspx\n+     */\n+    public static native int FlushConsoleInputBuffer(\n+            long handle);\n+\n+    /**\n+     * Return console input events.\n+     */\n+    public static INPUT_RECORD[] readConsoleInputHelper(\n+            long handle, int count, boolean peek) throws IOException {\n+        int[] length = new int[1];\n+        int res;\n+        long inputRecordPtr = 0;\n+        try {\n+            inputRecordPtr = malloc(INPUT_RECORD.SIZEOF * count);\n+            if (inputRecordPtr == 0) {\n+                throw new IOException(\"cannot allocate memory with JNI\");\n+            }\n+            res = peek ?\n+                    PeekConsoleInputW(handle, inputRecordPtr, count, length)\n+                    : ReadConsoleInputW(handle, inputRecordPtr, count, length);\n+            if (res == 0) {\n+                throw new IOException(\"ReadConsoleInputW failed: \" + WindowsSupport.getLastErrorMessage());\n+            }\n+            if (length[0] <= 0) {\n+                return new INPUT_RECORD[0];\n+            }\n+            INPUT_RECORD[] records = new INPUT_RECORD[length[0]];\n+            for (int i = 0; i < records.length; i++) {\n+                records[i] = new INPUT_RECORD();\n+                INPUT_RECORD.memmove(records[i], inputRecordPtr + i * INPUT_RECORD.SIZEOF, INPUT_RECORD.SIZEOF);\n+            }\n+            return records;\n+        } finally {\n+            if (inputRecordPtr != 0) {\n+                free(inputRecordPtr);\n+            }\n+        }\n+    }\n+\n+    /**\n+     * Return console input key events (discard other events).\n+     *\n+     * @param count requested number of events\n+     * @return array possibly of size smaller then count\n+     */\n+    public static INPUT_RECORD[] readConsoleKeyInput(long handle, int count, boolean peek)\n+            throws IOException {\n+        while (true) {\n+            // read events until we have keyboard events, the queue could be full\n+            // of mouse events.\n+            INPUT_RECORD[] evts = readConsoleInputHelper(handle, count, peek);\n+            int keyEvtCount = 0;\n+            for (INPUT_RECORD evt : evts) {\n+                if (evt.eventType == INPUT_RECORD.KEY_EVENT) keyEvtCount++;\n+            }\n+            if (keyEvtCount > 0) {\n+                INPUT_RECORD[] res = new INPUT_RECORD[keyEvtCount];\n+                int i = 0;\n+                for (INPUT_RECORD evt : evts) {\n+                    if (evt.eventType == INPUT_RECORD.KEY_EVENT) {\n+                        res[i++] = evt;\n+                    }\n+                }\n+                return res;\n+            }\n+        }\n+    }\n+\n+\n+}\n"}, {"source1": "org/fusesource/jansi/internal/OSInfo.java", "source2": "org/fusesource/jansi/internal/OSInfo.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,214 +1,214 @@\n-/*--------------------------------------------------------------------------\r\n- *  Copyright 2008 Taro L. Saito\r\n- *\r\n- *  Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- *  you may not use this file except in compliance with the License.\r\n- *  You may obtain a copy of the License at\r\n- *\r\n- *     http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- *  Unless required by applicable law or agreed to in writing, software\r\n- *  distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- *  See the License for the specific language governing permissions and\r\n- *  limitations under the License.\r\n- *--------------------------------------------------------------------------*/\r\n-package org.fusesource.jansi.internal;\r\n-\r\n-import java.io.ByteArrayOutputStream;\r\n-import java.io.IOException;\r\n-import java.io.InputStream;\r\n-import java.util.HashMap;\r\n-import java.util.Locale;\r\n-\r\n-/**\r\n- * Provides OS name and architecture name.\r\n- *\r\n- * @author leo\r\n- */\r\n-public class OSInfo {\r\n-\r\n-    public static final String X86 = \"x86\";\r\n-    public static final String X86_64 = \"x86_64\";\r\n-    public static final String IA64_32 = \"ia64_32\";\r\n-    public static final String IA64 = \"ia64\";\r\n-    public static final String PPC = \"ppc\";\r\n-    public static final String PPC64 = \"ppc64\";\r\n-\r\n-    private static final HashMap<String, String> archMapping = new HashMap<String, String>();\r\n-    static {\r\n-        // x86 mappings\r\n-        archMapping.put(X86, X86);\r\n-        archMapping.put(\"i386\", X86);\r\n-        archMapping.put(\"i486\", X86);\r\n-        archMapping.put(\"i586\", X86);\r\n-        archMapping.put(\"i686\", X86);\r\n-        archMapping.put(\"pentium\", X86);\r\n-\r\n-        // x86_64 mappings\r\n-        archMapping.put(X86_64, X86_64);\r\n-        archMapping.put(\"amd64\", X86_64);\r\n-        archMapping.put(\"em64t\", X86_64);\r\n-        archMapping.put(\"universal\", X86_64); // Needed for openjdk7 in Mac\r\n-\r\n-        // Itenium 64-bit mappings\r\n-        archMapping.put(IA64, IA64);\r\n-        archMapping.put(\"ia64w\", IA64);\r\n-\r\n-        // Itenium 32-bit mappings, usually an HP-UX construct\r\n-        archMapping.put(IA64_32, IA64_32);\r\n-        archMapping.put(\"ia64n\", IA64_32);\r\n-\r\n-        // PowerPC mappings\r\n-        archMapping.put(PPC, PPC);\r\n-        archMapping.put(\"power\", PPC);\r\n-        archMapping.put(\"powerpc\", PPC);\r\n-        archMapping.put(\"power_pc\", PPC);\r\n-        archMapping.put(\"power_rs\", PPC);\r\n-\r\n-        // TODO: PowerPC 64bit mappings\r\n-        archMapping.put(PPC64, PPC64);\r\n-        archMapping.put(\"power64\", PPC64);\r\n-        archMapping.put(\"powerpc64\", PPC64);\r\n-        archMapping.put(\"power_pc64\", PPC64);\r\n-        archMapping.put(\"power_rs64\", PPC64);\r\n-    }\r\n-\r\n-\r\n-    public static void main(String[] args) {\r\n-        if (args.length >= 1) {\r\n-            if (\"--os\".equals(args[0])) {\r\n-                System.out.print(getOSName());\r\n-                return;\r\n-            } else if (\"--arch\".equals(args[0])) {\r\n-                System.out.print(getArchName());\r\n-                return;\r\n-            }\r\n-        }\r\n-\r\n-        System.out.print(getNativeLibFolderPathForCurrentOS());\r\n-    }\r\n-\r\n-    public static String getNativeLibFolderPathForCurrentOS() {\r\n-        return getOSName() + \"/\" + getArchName();\r\n-    }\r\n-\r\n-    public static String getOSName() {\r\n-        return translateOSNameToFolderName(System.getProperty(\"os.name\"));\r\n-    }\r\n-\r\n-    public static boolean isAndroid() {\r\n-        return System.getProperty(\"java.runtime.name\", \"\").toLowerCase().contains(\"android\");\r\n-    }\r\n-\r\n-    public static boolean isAlpine() {\r\n-        try {\r\n-            Process p = Runtime.getRuntime().exec(\"cat /etc/os-release | grep ^ID\");\r\n-            p.waitFor();\r\n-\r\n-            InputStream in = p.getInputStream();\r\n-            try {\r\n-                return readFully(in).toLowerCase().contains(\"alpine\");\r\n-            } finally {\r\n-                in.close();\r\n-            }\r\n-\r\n-        } catch (Throwable e) {\r\n-            return false;\r\n-        }\r\n-\r\n-    }\r\n-\r\n-    static String getHardwareName() {\r\n-        try {\r\n-            Process p = Runtime.getRuntime().exec(\"uname -m\");\r\n-            p.waitFor();\r\n-\r\n-            InputStream in = p.getInputStream();\r\n-            try {\r\n-                return readFully(in);\r\n-            } finally {\r\n-                in.close();\r\n-            }\r\n-        } catch (Throwable e) {\r\n-            System.err.println(\"Error while running uname -m: \" + e.getMessage());\r\n-            return \"unknown\";\r\n-        }\r\n-    }\r\n-\r\n-    private static String readFully(InputStream in) throws IOException {\r\n-        int readLen = 0;\r\n-        ByteArrayOutputStream b = new ByteArrayOutputStream();\r\n-        byte[] buf = new byte[32];\r\n-        while ((readLen = in.read(buf, 0, buf.length)) >= 0) {\r\n-            b.write(buf, 0, readLen);\r\n-        }\r\n-        return b.toString();\r\n-    }\r\n-\r\n-    static String resolveArmArchType() {\r\n-        if (System.getProperty(\"os.name\").contains(\"Linux\")) {\r\n-            String armType = getHardwareName();\r\n-            // armType (uname -m) can be armv5t, armv5te, armv5tej, armv5tejl, armv6, armv7, armv7l, aarch64, i686\r\n-            if (armType.startsWith(\"armv6\")) {\r\n-                // Raspberry PI\r\n-                return \"armv6\";\r\n-            } else if (armType.startsWith(\"armv7\")) {\r\n-                // Generic\r\n-                return \"armv7\";\r\n-            } else if (armType.startsWith(\"armv5\")) {\r\n-                // Use armv5, soft-float ABI\r\n-                return \"arm\";\r\n-            } else if (armType.equals(\"aarch64\")) {\r\n-                // Use arm64\r\n-                return \"arm64\";\r\n-            }\r\n-\r\n-            // Java 1.8 introduces a system property to determine armel or armhf\r\n-            // http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8005545\r\n-            String abi = System.getProperty(\"sun.arch.abi\");\r\n-            if (abi != null && abi.startsWith(\"gnueabihf\")) {\r\n-                return \"armv7\";\r\n-            }\r\n-        }\r\n-        // Use armv5, soft-float ABI\r\n-        return \"arm\";\r\n-    }\r\n-\r\n-    public static String getArchName() {\r\n-        String osArch = System.getProperty(\"os.arch\");\r\n-        // For Android\r\n-        if (isAndroid()) {\r\n-            return \"android-arm\";\r\n-        }\r\n-\r\n-        if (osArch.startsWith(\"arm\")) {\r\n-            osArch = resolveArmArchType();\r\n-        } else {\r\n-            String lc = osArch.toLowerCase(Locale.US);\r\n-            if (archMapping.containsKey(lc))\r\n-                return archMapping.get(lc);\r\n-        }\r\n-        return translateArchNameToFolderName(osArch);\r\n-    }\r\n-\r\n-    static String translateOSNameToFolderName(String osName) {\r\n-        if (osName.contains(\"Windows\")) {\r\n-            return \"Windows\";\r\n-        } else if (osName.contains(\"Mac\") || osName.contains(\"Darwin\")) {\r\n-            return \"Mac\";\r\n-//        } else if (isAlpine()) {\r\n-//            return \"Linux-Alpine\";\r\n-        } else if (osName.contains(\"Linux\")) {\r\n-            return \"Linux\";\r\n-        } else if (osName.contains(\"AIX\")) {\r\n-            return \"AIX\";\r\n-        } else {\r\n-            return osName.replaceAll(\"\\\\W\", \"\");\r\n-        }\r\n-    }\r\n-\r\n-    static String translateArchNameToFolderName(String archName) {\r\n-        return archName.replaceAll(\"\\\\W\", \"\");\r\n-    }\r\n-}\r\n+/*--------------------------------------------------------------------------\n+ *  Copyright 2008 Taro L. Saito\n+ *\n+ *  Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *  you may not use this file except in compliance with the License.\n+ *  You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ *  Unless required by applicable law or agreed to in writing, software\n+ *  distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *  See the License for the specific language governing permissions and\n+ *  limitations under the License.\n+ *--------------------------------------------------------------------------*/\n+package org.fusesource.jansi.internal;\n+\n+import java.io.ByteArrayOutputStream;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.util.HashMap;\n+import java.util.Locale;\n+\n+/**\n+ * Provides OS name and architecture name.\n+ *\n+ * @author leo\n+ */\n+public class OSInfo {\n+\n+    public static final String X86 = \"x86\";\n+    public static final String X86_64 = \"x86_64\";\n+    public static final String IA64_32 = \"ia64_32\";\n+    public static final String IA64 = \"ia64\";\n+    public static final String PPC = \"ppc\";\n+    public static final String PPC64 = \"ppc64\";\n+\n+    private static final HashMap<String, String> archMapping = new HashMap<String, String>();\n+    static {\n+        // x86 mappings\n+        archMapping.put(X86, X86);\n+        archMapping.put(\"i386\", X86);\n+        archMapping.put(\"i486\", X86);\n+        archMapping.put(\"i586\", X86);\n+        archMapping.put(\"i686\", X86);\n+        archMapping.put(\"pentium\", X86);\n+\n+        // x86_64 mappings\n+        archMapping.put(X86_64, X86_64);\n+        archMapping.put(\"amd64\", X86_64);\n+        archMapping.put(\"em64t\", X86_64);\n+        archMapping.put(\"universal\", X86_64); // Needed for openjdk7 in Mac\n+\n+        // Itenium 64-bit mappings\n+        archMapping.put(IA64, IA64);\n+        archMapping.put(\"ia64w\", IA64);\n+\n+        // Itenium 32-bit mappings, usually an HP-UX construct\n+        archMapping.put(IA64_32, IA64_32);\n+        archMapping.put(\"ia64n\", IA64_32);\n+\n+        // PowerPC mappings\n+        archMapping.put(PPC, PPC);\n+        archMapping.put(\"power\", PPC);\n+        archMapping.put(\"powerpc\", PPC);\n+        archMapping.put(\"power_pc\", PPC);\n+        archMapping.put(\"power_rs\", PPC);\n+\n+        // TODO: PowerPC 64bit mappings\n+        archMapping.put(PPC64, PPC64);\n+        archMapping.put(\"power64\", PPC64);\n+        archMapping.put(\"powerpc64\", PPC64);\n+        archMapping.put(\"power_pc64\", PPC64);\n+        archMapping.put(\"power_rs64\", PPC64);\n+    }\n+\n+\n+    public static void main(String[] args) {\n+        if (args.length >= 1) {\n+            if (\"--os\".equals(args[0])) {\n+                System.out.print(getOSName());\n+                return;\n+            } else if (\"--arch\".equals(args[0])) {\n+                System.out.print(getArchName());\n+                return;\n+            }\n+        }\n+\n+        System.out.print(getNativeLibFolderPathForCurrentOS());\n+    }\n+\n+    public static String getNativeLibFolderPathForCurrentOS() {\n+        return getOSName() + \"/\" + getArchName();\n+    }\n+\n+    public static String getOSName() {\n+        return translateOSNameToFolderName(System.getProperty(\"os.name\"));\n+    }\n+\n+    public static boolean isAndroid() {\n+        return System.getProperty(\"java.runtime.name\", \"\").toLowerCase().contains(\"android\");\n+    }\n+\n+    public static boolean isAlpine() {\n+        try {\n+            Process p = Runtime.getRuntime().exec(\"cat /etc/os-release | grep ^ID\");\n+            p.waitFor();\n+\n+            InputStream in = p.getInputStream();\n+            try {\n+                return readFully(in).toLowerCase().contains(\"alpine\");\n+            } finally {\n+                in.close();\n+            }\n+\n+        } catch (Throwable e) {\n+            return false;\n+        }\n+\n+    }\n+\n+    static String getHardwareName() {\n+        try {\n+            Process p = Runtime.getRuntime().exec(\"uname -m\");\n+            p.waitFor();\n+\n+            InputStream in = p.getInputStream();\n+            try {\n+                return readFully(in);\n+            } finally {\n+                in.close();\n+            }\n+        } catch (Throwable e) {\n+            System.err.println(\"Error while running uname -m: \" + e.getMessage());\n+            return \"unknown\";\n+        }\n+    }\n+\n+    private static String readFully(InputStream in) throws IOException {\n+        int readLen = 0;\n+        ByteArrayOutputStream b = new ByteArrayOutputStream();\n+        byte[] buf = new byte[32];\n+        while ((readLen = in.read(buf, 0, buf.length)) >= 0) {\n+            b.write(buf, 0, readLen);\n+        }\n+        return b.toString();\n+    }\n+\n+    static String resolveArmArchType() {\n+        if (System.getProperty(\"os.name\").contains(\"Linux\")) {\n+            String armType = getHardwareName();\n+            // armType (uname -m) can be armv5t, armv5te, armv5tej, armv5tejl, armv6, armv7, armv7l, aarch64, i686\n+            if (armType.startsWith(\"armv6\")) {\n+                // Raspberry PI\n+                return \"armv6\";\n+            } else if (armType.startsWith(\"armv7\")) {\n+                // Generic\n+                return \"armv7\";\n+            } else if (armType.startsWith(\"armv5\")) {\n+                // Use armv5, soft-float ABI\n+                return \"arm\";\n+            } else if (armType.equals(\"aarch64\")) {\n+                // Use arm64\n+                return \"arm64\";\n+            }\n+\n+            // Java 1.8 introduces a system property to determine armel or armhf\n+            // http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8005545\n+            String abi = System.getProperty(\"sun.arch.abi\");\n+            if (abi != null && abi.startsWith(\"gnueabihf\")) {\n+                return \"armv7\";\n+            }\n+        }\n+        // Use armv5, soft-float ABI\n+        return \"arm\";\n+    }\n+\n+    public static String getArchName() {\n+        String osArch = System.getProperty(\"os.arch\");\n+        // For Android\n+        if (isAndroid()) {\n+            return \"android-arm\";\n+        }\n+\n+        if (osArch.startsWith(\"arm\")) {\n+            osArch = resolveArmArchType();\n+        } else {\n+            String lc = osArch.toLowerCase(Locale.US);\n+            if (archMapping.containsKey(lc))\n+                return archMapping.get(lc);\n+        }\n+        return translateArchNameToFolderName(osArch);\n+    }\n+\n+    static String translateOSNameToFolderName(String osName) {\n+        if (osName.contains(\"Windows\")) {\n+            return \"Windows\";\n+        } else if (osName.contains(\"Mac\") || osName.contains(\"Darwin\")) {\n+            return \"Mac\";\n+//        } else if (isAlpine()) {\n+//            return \"Linux-Alpine\";\n+        } else if (osName.contains(\"Linux\")) {\n+            return \"Linux\";\n+        } else if (osName.contains(\"AIX\")) {\n+            return \"AIX\";\n+        } else {\n+            return osName.replaceAll(\"\\\\W\", \"\");\n+        }\n+    }\n+\n+    static String translateArchNameToFolderName(String archName) {\n+        return archName.replaceAll(\"\\\\W\", \"\");\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/io/AnsiOutputStream.java", "source2": "org/fusesource/jansi/io/AnsiOutputStream.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,350 +1,350 @@\n-/*\r\n- * Copyright (C) 2009-2020 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.FilterOutputStream;\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.nio.charset.Charset;\r\n-import java.util.ArrayList;\r\n-\r\n-import org.fusesource.jansi.AnsiColors;\r\n-import org.fusesource.jansi.AnsiMode;\r\n-import org.fusesource.jansi.AnsiType;\r\n-\r\n-/**\r\n- * A ANSI print stream extracts ANSI escape codes written to \r\n- * an output stream and calls corresponding <code>AnsiProcessor.process*</code> methods.\r\n- * This particular class is not synchronized for improved performances.\r\n- *\r\n- * <p>For more information about ANSI escape codes, see\r\n- * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\r\n- *\r\n- * @author Guillaume Nodet\r\n- * @since 1.0\r\n- * @see AnsiProcessor\r\n- */\r\n-public class AnsiOutputStream extends FilterOutputStream {\r\n-\r\n-    public static final byte[] RESET_CODE = \"\\033[0m\".getBytes();\r\n-\r\n-    public interface IoRunnable {\r\n-        void run() throws IOException;\r\n-    }\r\n-\r\n-    public interface WidthSupplier {\r\n-        int getTerminalWidth();\r\n-    }\r\n-\r\n-    public static class ZeroWidthSupplier implements WidthSupplier {\r\n-        @Override\r\n-        public int getTerminalWidth() {\r\n-            return 0;\r\n-        }\r\n-    }\r\n-\r\n-    private static final int LOOKING_FOR_FIRST_ESC_CHAR = 0;\r\n-    private static final int LOOKING_FOR_SECOND_ESC_CHAR = 1;\r\n-    private static final int LOOKING_FOR_NEXT_ARG = 2;\r\n-    private static final int LOOKING_FOR_STR_ARG_END = 3;\r\n-    private static final int LOOKING_FOR_INT_ARG_END = 4;\r\n-    private static final int LOOKING_FOR_OSC_COMMAND = 5;\r\n-    private static final int LOOKING_FOR_OSC_COMMAND_END = 6;\r\n-    private static final int LOOKING_FOR_OSC_PARAM = 7;\r\n-    private static final int LOOKING_FOR_ST = 8;\r\n-    private static final int LOOKING_FOR_CHARSET = 9;\r\n-\r\n-    private static final int FIRST_ESC_CHAR = 27;\r\n-    private static final int SECOND_ESC_CHAR = '[';\r\n-    private static final int SECOND_OSC_CHAR = ']';\r\n-    private static final int BEL = 7;\r\n-    private static final int SECOND_ST_CHAR = '\\\\';\r\n-    private static final int SECOND_CHARSET0_CHAR = '(';\r\n-    private static final int SECOND_CHARSET1_CHAR = ')';\r\n-\r\n-    private AnsiProcessor ap;\r\n-    private final static int MAX_ESCAPE_SEQUENCE_LENGTH = 100;\r\n-    private final byte[] buffer = new byte[MAX_ESCAPE_SEQUENCE_LENGTH];\r\n-    private int pos = 0;\r\n-    private int startOfValue;\r\n-    private final ArrayList<Object> options = new ArrayList<Object>();\r\n-    private int state = LOOKING_FOR_FIRST_ESC_CHAR;\r\n-    private final Charset cs;\r\n-\r\n-    private final WidthSupplier width;\r\n-    private final AnsiProcessor processor;\r\n-    private final AnsiType type;\r\n-    private final AnsiColors colors;\r\n-    private final IoRunnable installer;\r\n-    private final IoRunnable uninstaller;\r\n-    private AnsiMode mode;\r\n-    private boolean resetAtUninstall;\r\n-\r\n-    public AnsiOutputStream(OutputStream os, WidthSupplier width, AnsiMode mode,\r\n-                            AnsiProcessor processor, AnsiType type, AnsiColors colors,\r\n-                            Charset cs, IoRunnable installer, IoRunnable uninstaller, boolean resetAtUninstall) {\r\n-        super(os);\r\n-        this.width = width;\r\n-        this.processor = processor;\r\n-        this.type = type;\r\n-        this.colors = colors;\r\n-        this.installer = installer;\r\n-        this.uninstaller = uninstaller;\r\n-        this.resetAtUninstall = resetAtUninstall;\r\n-        this.cs = cs;\r\n-        setMode(mode);\r\n-    }\r\n-\r\n-    public int getTerminalWidth() {\r\n-        return width.getTerminalWidth();\r\n-    }\r\n-\r\n-    public AnsiType getType() {\r\n-        return type;\r\n-    }\r\n-\r\n-    public AnsiColors getColors() {\r\n-        return colors;\r\n-    }\r\n-\r\n-    public AnsiMode getMode() {\r\n-        return mode;\r\n-    }\r\n-\r\n-    public void setMode(AnsiMode mode) {\r\n-        ap = mode == AnsiMode.Strip\r\n-                ? new AnsiProcessor(out)\r\n-                : mode == AnsiMode.Force || processor == null ? new ColorsAnsiProcessor(out, colors) : processor;\r\n-        this.mode = mode;\r\n-    }\r\n-\r\n-    public boolean isResetAtUninstall() {\r\n-        return resetAtUninstall;\r\n-    }\r\n-\r\n-    public void setResetAtUninstall(boolean resetAtUninstall) {\r\n-        this.resetAtUninstall = resetAtUninstall;\r\n-    }\r\n-\r\n-    /**\r\n-     * {@inheritDoc}\r\n-     */\r\n-    @Override\r\n-    public void write(int data) throws IOException {\r\n-        switch (state) {\r\n-            case LOOKING_FOR_FIRST_ESC_CHAR:\r\n-                if (data == FIRST_ESC_CHAR) {\r\n-                    buffer[pos++] = (byte) data;\r\n-                    state = LOOKING_FOR_SECOND_ESC_CHAR;\r\n-                } else {\r\n-                    out.write(data);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_SECOND_ESC_CHAR:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (data == SECOND_ESC_CHAR) {\r\n-                    state = LOOKING_FOR_NEXT_ARG;\r\n-                } else if (data == SECOND_OSC_CHAR) {\r\n-                    state = LOOKING_FOR_OSC_COMMAND;\r\n-                } else if (data == SECOND_CHARSET0_CHAR) {\r\n-                    options.add(0);\r\n-                    state = LOOKING_FOR_CHARSET;\r\n-                } else if (data == SECOND_CHARSET1_CHAR) {\r\n-                    options.add(1);\r\n-                    state = LOOKING_FOR_CHARSET;\r\n-                } else {\r\n-                    reset(false);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_NEXT_ARG:\r\n-                buffer[pos++] = (byte) data;\r\n-                if ('\"' == data) {\r\n-                    startOfValue = pos - 1;\r\n-                    state = LOOKING_FOR_STR_ARG_END;\r\n-                } else if ('0' <= data && data <= '9') {\r\n-                    startOfValue = pos - 1;\r\n-                    state = LOOKING_FOR_INT_ARG_END;\r\n-                } else if (';' == data) {\r\n-                    options.add(null);\r\n-                } else if ('?' == data) {\r\n-                    options.add('?');\r\n-                } else if ('=' == data) {\r\n-                    options.add('=');\r\n-                } else {\r\n-                    processEscapeCommand(data);\r\n-                }\r\n-                break;\r\n-            default:\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_INT_ARG_END:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (!('0' <= data && data <= '9')) {\r\n-                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\r\n-                    Integer value = Integer.valueOf(strValue);\r\n-                    options.add(value);\r\n-                    if (data == ';') {\r\n-                        state = LOOKING_FOR_NEXT_ARG;\r\n-                    } else {\r\n-                        processEscapeCommand(data);\r\n-                    }\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_STR_ARG_END:\r\n-                buffer[pos++] = (byte) data;\r\n-                if ('\"' != data) {\r\n-                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\r\n-                    options.add(value);\r\n-                    if (data == ';') {\r\n-                        state = LOOKING_FOR_NEXT_ARG;\r\n-                    } else {\r\n-                        processEscapeCommand(data);\r\n-                    }\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_OSC_COMMAND:\r\n-                buffer[pos++] = (byte) data;\r\n-                if ('0' <= data && data <= '9') {\r\n-                    startOfValue = pos - 1;\r\n-                    state = LOOKING_FOR_OSC_COMMAND_END;\r\n-                } else {\r\n-                    reset(false);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_OSC_COMMAND_END:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (';' == data) {\r\n-                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\r\n-                    Integer value = Integer.valueOf(strValue);\r\n-                    options.add(value);\r\n-                    startOfValue = pos;\r\n-                    state = LOOKING_FOR_OSC_PARAM;\r\n-                } else if ('0' <= data && data <= '9') {\r\n-                    // already pushed digit to buffer, just keep looking\r\n-                } else {\r\n-                    // oops, did not expect this\r\n-                    reset(false);\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_OSC_PARAM:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (BEL == data) {\r\n-                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\r\n-                    options.add(value);\r\n-                    processOperatingSystemCommand();\r\n-                } else if (FIRST_ESC_CHAR == data) {\r\n-                    state = LOOKING_FOR_ST;\r\n-                } else {\r\n-                    // just keep looking while adding text\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_ST:\r\n-                buffer[pos++] = (byte) data;\r\n-                if (SECOND_ST_CHAR == data) {\r\n-                    String value = new String(buffer, startOfValue, (pos - 2) - startOfValue, cs);\r\n-                    options.add(value);\r\n-                    processOperatingSystemCommand();\r\n-                } else {\r\n-                    state = LOOKING_FOR_OSC_PARAM;\r\n-                }\r\n-                break;\r\n-\r\n-            case LOOKING_FOR_CHARSET:\r\n-                options.add((char) data);\r\n-                processCharsetSelect();\r\n-                break;\r\n-        }\r\n-\r\n-        // Is it just too long?\r\n-        if (pos >= buffer.length) {\r\n-            reset(false);\r\n-        }\r\n-    }\r\n-\r\n-    private void processCharsetSelect() throws IOException {\r\n-        try {\r\n-            reset(ap != null && ap.processCharsetSelect(options));\r\n-        } catch (RuntimeException e) {\r\n-            reset(true);\r\n-            throw e;\r\n-        }\r\n-    }\r\n-\r\n-    private void processOperatingSystemCommand() throws IOException {\r\n-        try {\r\n-            reset(ap != null && ap.processOperatingSystemCommand(options));\r\n-        } catch (RuntimeException e) {\r\n-            reset(true);\r\n-            throw e;\r\n-        }\r\n-    }\r\n-\r\n-    private void processEscapeCommand(int data) throws IOException {\r\n-        try {\r\n-            reset(ap != null && ap.processEscapeCommand(options, data));\r\n-        } catch (RuntimeException e) {\r\n-            reset(true);\r\n-            throw e;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * Resets all state to continue with regular parsing\r\n-     * @param skipBuffer if current buffer should be skipped or written to out\r\n-     * @throws IOException\r\n-     */\r\n-    private void reset(boolean skipBuffer) throws IOException {\r\n-        if (!skipBuffer) {\r\n-            out.write(buffer, 0, pos);\r\n-        }\r\n-        pos = 0;\r\n-        startOfValue = 0;\r\n-        options.clear();\r\n-        state = LOOKING_FOR_FIRST_ESC_CHAR;\r\n-    }\r\n-\r\n-    public void install() throws IOException {\r\n-        if (installer != null) {\r\n-            installer.run();\r\n-        }\r\n-    }\r\n-\r\n-    public void uninstall() throws IOException {\r\n-        if (resetAtUninstall\r\n-                && type != AnsiType.Redirected\r\n-                && type != AnsiType.Unsupported) {\r\n-            setMode(AnsiMode.Default);\r\n-            write(RESET_CODE);\r\n-            flush();\r\n-        }\r\n-        if (uninstaller != null) {\r\n-            uninstaller.run();\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    public void close() throws IOException {\r\n-        uninstall();\r\n-        super.close();\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2020 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.FilterOutputStream;\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.nio.charset.Charset;\n+import java.util.ArrayList;\n+\n+import org.fusesource.jansi.AnsiColors;\n+import org.fusesource.jansi.AnsiMode;\n+import org.fusesource.jansi.AnsiType;\n+\n+/**\n+ * A ANSI print stream extracts ANSI escape codes written to \n+ * an output stream and calls corresponding <code>AnsiProcessor.process*</code> methods.\n+ * This particular class is not synchronized for improved performances.\n+ *\n+ * <p>For more information about ANSI escape codes, see\n+ * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\n+ *\n+ * @author Guillaume Nodet\n+ * @since 1.0\n+ * @see AnsiProcessor\n+ */\n+public class AnsiOutputStream extends FilterOutputStream {\n+\n+    public static final byte[] RESET_CODE = \"\\033[0m\".getBytes();\n+\n+    public interface IoRunnable {\n+        void run() throws IOException;\n+    }\n+\n+    public interface WidthSupplier {\n+        int getTerminalWidth();\n+    }\n+\n+    public static class ZeroWidthSupplier implements WidthSupplier {\n+        @Override\n+        public int getTerminalWidth() {\n+            return 0;\n+        }\n+    }\n+\n+    private static final int LOOKING_FOR_FIRST_ESC_CHAR = 0;\n+    private static final int LOOKING_FOR_SECOND_ESC_CHAR = 1;\n+    private static final int LOOKING_FOR_NEXT_ARG = 2;\n+    private static final int LOOKING_FOR_STR_ARG_END = 3;\n+    private static final int LOOKING_FOR_INT_ARG_END = 4;\n+    private static final int LOOKING_FOR_OSC_COMMAND = 5;\n+    private static final int LOOKING_FOR_OSC_COMMAND_END = 6;\n+    private static final int LOOKING_FOR_OSC_PARAM = 7;\n+    private static final int LOOKING_FOR_ST = 8;\n+    private static final int LOOKING_FOR_CHARSET = 9;\n+\n+    private static final int FIRST_ESC_CHAR = 27;\n+    private static final int SECOND_ESC_CHAR = '[';\n+    private static final int SECOND_OSC_CHAR = ']';\n+    private static final int BEL = 7;\n+    private static final int SECOND_ST_CHAR = '\\\\';\n+    private static final int SECOND_CHARSET0_CHAR = '(';\n+    private static final int SECOND_CHARSET1_CHAR = ')';\n+\n+    private AnsiProcessor ap;\n+    private final static int MAX_ESCAPE_SEQUENCE_LENGTH = 100;\n+    private final byte[] buffer = new byte[MAX_ESCAPE_SEQUENCE_LENGTH];\n+    private int pos = 0;\n+    private int startOfValue;\n+    private final ArrayList<Object> options = new ArrayList<Object>();\n+    private int state = LOOKING_FOR_FIRST_ESC_CHAR;\n+    private final Charset cs;\n+\n+    private final WidthSupplier width;\n+    private final AnsiProcessor processor;\n+    private final AnsiType type;\n+    private final AnsiColors colors;\n+    private final IoRunnable installer;\n+    private final IoRunnable uninstaller;\n+    private AnsiMode mode;\n+    private boolean resetAtUninstall;\n+\n+    public AnsiOutputStream(OutputStream os, WidthSupplier width, AnsiMode mode,\n+                            AnsiProcessor processor, AnsiType type, AnsiColors colors,\n+                            Charset cs, IoRunnable installer, IoRunnable uninstaller, boolean resetAtUninstall) {\n+        super(os);\n+        this.width = width;\n+        this.processor = processor;\n+        this.type = type;\n+        this.colors = colors;\n+        this.installer = installer;\n+        this.uninstaller = uninstaller;\n+        this.resetAtUninstall = resetAtUninstall;\n+        this.cs = cs;\n+        setMode(mode);\n+    }\n+\n+    public int getTerminalWidth() {\n+        return width.getTerminalWidth();\n+    }\n+\n+    public AnsiType getType() {\n+        return type;\n+    }\n+\n+    public AnsiColors getColors() {\n+        return colors;\n+    }\n+\n+    public AnsiMode getMode() {\n+        return mode;\n+    }\n+\n+    public void setMode(AnsiMode mode) {\n+        ap = mode == AnsiMode.Strip\n+                ? new AnsiProcessor(out)\n+                : mode == AnsiMode.Force || processor == null ? new ColorsAnsiProcessor(out, colors) : processor;\n+        this.mode = mode;\n+    }\n+\n+    public boolean isResetAtUninstall() {\n+        return resetAtUninstall;\n+    }\n+\n+    public void setResetAtUninstall(boolean resetAtUninstall) {\n+        this.resetAtUninstall = resetAtUninstall;\n+    }\n+\n+    /**\n+     * {@inheritDoc}\n+     */\n+    @Override\n+    public void write(int data) throws IOException {\n+        switch (state) {\n+            case LOOKING_FOR_FIRST_ESC_CHAR:\n+                if (data == FIRST_ESC_CHAR) {\n+                    buffer[pos++] = (byte) data;\n+                    state = LOOKING_FOR_SECOND_ESC_CHAR;\n+                } else {\n+                    out.write(data);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_SECOND_ESC_CHAR:\n+                buffer[pos++] = (byte) data;\n+                if (data == SECOND_ESC_CHAR) {\n+                    state = LOOKING_FOR_NEXT_ARG;\n+                } else if (data == SECOND_OSC_CHAR) {\n+                    state = LOOKING_FOR_OSC_COMMAND;\n+                } else if (data == SECOND_CHARSET0_CHAR) {\n+                    options.add(0);\n+                    state = LOOKING_FOR_CHARSET;\n+                } else if (data == SECOND_CHARSET1_CHAR) {\n+                    options.add(1);\n+                    state = LOOKING_FOR_CHARSET;\n+                } else {\n+                    reset(false);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_NEXT_ARG:\n+                buffer[pos++] = (byte) data;\n+                if ('\"' == data) {\n+                    startOfValue = pos - 1;\n+                    state = LOOKING_FOR_STR_ARG_END;\n+                } else if ('0' <= data && data <= '9') {\n+                    startOfValue = pos - 1;\n+                    state = LOOKING_FOR_INT_ARG_END;\n+                } else if (';' == data) {\n+                    options.add(null);\n+                } else if ('?' == data) {\n+                    options.add('?');\n+                } else if ('=' == data) {\n+                    options.add('=');\n+                } else {\n+                    processEscapeCommand(data);\n+                }\n+                break;\n+            default:\n+                break;\n+\n+            case LOOKING_FOR_INT_ARG_END:\n+                buffer[pos++] = (byte) data;\n+                if (!('0' <= data && data <= '9')) {\n+                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\n+                    Integer value = Integer.valueOf(strValue);\n+                    options.add(value);\n+                    if (data == ';') {\n+                        state = LOOKING_FOR_NEXT_ARG;\n+                    } else {\n+                        processEscapeCommand(data);\n+                    }\n+                }\n+                break;\n+\n+            case LOOKING_FOR_STR_ARG_END:\n+                buffer[pos++] = (byte) data;\n+                if ('\"' != data) {\n+                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\n+                    options.add(value);\n+                    if (data == ';') {\n+                        state = LOOKING_FOR_NEXT_ARG;\n+                    } else {\n+                        processEscapeCommand(data);\n+                    }\n+                }\n+                break;\n+\n+            case LOOKING_FOR_OSC_COMMAND:\n+                buffer[pos++] = (byte) data;\n+                if ('0' <= data && data <= '9') {\n+                    startOfValue = pos - 1;\n+                    state = LOOKING_FOR_OSC_COMMAND_END;\n+                } else {\n+                    reset(false);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_OSC_COMMAND_END:\n+                buffer[pos++] = (byte) data;\n+                if (';' == data) {\n+                    String strValue = new String(buffer, startOfValue, (pos - 1) - startOfValue);\n+                    Integer value = Integer.valueOf(strValue);\n+                    options.add(value);\n+                    startOfValue = pos;\n+                    state = LOOKING_FOR_OSC_PARAM;\n+                } else if ('0' <= data && data <= '9') {\n+                    // already pushed digit to buffer, just keep looking\n+                } else {\n+                    // oops, did not expect this\n+                    reset(false);\n+                }\n+                break;\n+\n+            case LOOKING_FOR_OSC_PARAM:\n+                buffer[pos++] = (byte) data;\n+                if (BEL == data) {\n+                    String value = new String(buffer, startOfValue, (pos - 1) - startOfValue, cs);\n+                    options.add(value);\n+                    processOperatingSystemCommand();\n+                } else if (FIRST_ESC_CHAR == data) {\n+                    state = LOOKING_FOR_ST;\n+                } else {\n+                    // just keep looking while adding text\n+                }\n+                break;\n+\n+            case LOOKING_FOR_ST:\n+                buffer[pos++] = (byte) data;\n+                if (SECOND_ST_CHAR == data) {\n+                    String value = new String(buffer, startOfValue, (pos - 2) - startOfValue, cs);\n+                    options.add(value);\n+                    processOperatingSystemCommand();\n+                } else {\n+                    state = LOOKING_FOR_OSC_PARAM;\n+                }\n+                break;\n+\n+            case LOOKING_FOR_CHARSET:\n+                options.add((char) data);\n+                processCharsetSelect();\n+                break;\n+        }\n+\n+        // Is it just too long?\n+        if (pos >= buffer.length) {\n+            reset(false);\n+        }\n+    }\n+\n+    private void processCharsetSelect() throws IOException {\n+        try {\n+            reset(ap != null && ap.processCharsetSelect(options));\n+        } catch (RuntimeException e) {\n+            reset(true);\n+            throw e;\n+        }\n+    }\n+\n+    private void processOperatingSystemCommand() throws IOException {\n+        try {\n+            reset(ap != null && ap.processOperatingSystemCommand(options));\n+        } catch (RuntimeException e) {\n+            reset(true);\n+            throw e;\n+        }\n+    }\n+\n+    private void processEscapeCommand(int data) throws IOException {\n+        try {\n+            reset(ap != null && ap.processEscapeCommand(options, data));\n+        } catch (RuntimeException e) {\n+            reset(true);\n+            throw e;\n+        }\n+    }\n+\n+    /**\n+     * Resets all state to continue with regular parsing\n+     * @param skipBuffer if current buffer should be skipped or written to out\n+     * @throws IOException\n+     */\n+    private void reset(boolean skipBuffer) throws IOException {\n+        if (!skipBuffer) {\n+            out.write(buffer, 0, pos);\n+        }\n+        pos = 0;\n+        startOfValue = 0;\n+        options.clear();\n+        state = LOOKING_FOR_FIRST_ESC_CHAR;\n+    }\n+\n+    public void install() throws IOException {\n+        if (installer != null) {\n+            installer.run();\n+        }\n+    }\n+\n+    public void uninstall() throws IOException {\n+        if (resetAtUninstall\n+                && type != AnsiType.Redirected\n+                && type != AnsiType.Unsupported) {\n+            setMode(AnsiMode.Default);\n+            write(RESET_CODE);\n+            flush();\n+        }\n+        if (uninstaller != null) {\n+            uninstaller.run();\n+        }\n+    }\n+\n+    @Override\n+    public void close() throws IOException {\n+        uninstall();\n+        super.close();\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/io/AnsiProcessor.java", "source2": "org/fusesource/jansi/io/AnsiProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,598 +1,598 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.util.ArrayList;\r\n-import java.util.Iterator;\r\n-\r\n-/**\r\n- * ANSI processor providing <code>process*</code> corresponding to ANSI escape codes. \r\n- * This class methods implementations are empty: subclasses should actually perform the\r\n- * ANSI escape behaviors by implementing active code in <code>process*</code> methods.\r\n- * \r\n- * <p>For more information about ANSI escape codes, see\r\n- * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\r\n- *\r\n- * @since 1.19\r\n- */\r\n-@SuppressWarnings(\"unused\")\r\n-public class AnsiProcessor {\r\n-    protected final OutputStream os;\r\n-\r\n-    public AnsiProcessor(OutputStream os) {\r\n-        this.os = os;\r\n-    }\r\n-\r\n-    /**\r\n-     * Helper for processEscapeCommand() to iterate over integer options\r\n-     * @param  optionsIterator  the underlying iterator\r\n-     * @throws IOException      if no more non-null values left\r\n-     */\r\n-    protected int getNextOptionInt(Iterator<Object> optionsIterator) throws IOException {\r\n-        for (;;) {\r\n-            if (!optionsIterator.hasNext())\r\n-                throw new IllegalArgumentException();\r\n-            Object arg = optionsIterator.next();\r\n-            if (arg != null)\r\n-                return (Integer) arg;\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * @return true if the escape command was processed.\r\n-     */\r\n-    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\r\n-        try {\r\n-            switch (command) {\r\n-                case 'A':\r\n-                    processCursorUp(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'B':\r\n-                    processCursorDown(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'C':\r\n-                    processCursorRight(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'D':\r\n-                    processCursorLeft(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'E':\r\n-                    processCursorDownLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'F':\r\n-                    processCursorUpLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'G':\r\n-                    processCursorToColumn(optionInt(options, 0));\r\n-                    return true;\r\n-                case 'H':\r\n-                case 'f':\r\n-                    processCursorTo(optionInt(options, 0, 1), optionInt(options, 1, 1));\r\n-                    return true;\r\n-                case 'J':\r\n-                    processEraseScreen(optionInt(options, 0, 0));\r\n-                    return true;\r\n-                case 'K':\r\n-                    processEraseLine(optionInt(options, 0, 0));\r\n-                    return true;\r\n-                case 'L':\r\n-                    processInsertLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'M':\r\n-                    processDeleteLine(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'S':\r\n-                    processScrollUp(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'T':\r\n-                    processScrollDown(optionInt(options, 0, 1));\r\n-                    return true;\r\n-                case 'm':\r\n-                    // Validate all options are ints...\r\n-                    for (Object next : options) {\r\n-                        if (next != null && next.getClass() != Integer.class) {\r\n-                            throw new IllegalArgumentException();\r\n-                        }\r\n-                    }\r\n-\r\n-                    int count = 0;\r\n-                    Iterator<Object> optionsIterator = options.iterator();\r\n-                    while (optionsIterator.hasNext()) {\r\n-                        Object next = optionsIterator.next();\r\n-                        if (next != null) {\r\n-                            count++;\r\n-                            int value = (Integer) next;\r\n-                            if (30 <= value && value <= 37) {\r\n-                                processSetForegroundColor(value - 30);\r\n-                            } else if (40 <= value && value <= 47) {\r\n-                                processSetBackgroundColor(value - 40);\r\n-                            } else if (90 <= value && value <= 97) {\r\n-                                processSetForegroundColor(value - 90, true);\r\n-                            } else if (100 <= value && value <= 107) {\r\n-                                processSetBackgroundColor(value - 100, true);\r\n-                            } else if (value == 38 || value == 48) {\r\n-                                if (!optionsIterator.hasNext()) {\r\n-                                    continue;\r\n-                                }\r\n-                                // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\r\n-                                int arg2or5 = getNextOptionInt(optionsIterator);\r\n-                                if (arg2or5 == 2) {\r\n-                                    // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\r\n-                                    int r = getNextOptionInt(optionsIterator);\r\n-                                    int g = getNextOptionInt(optionsIterator);\r\n-                                    int b = getNextOptionInt(optionsIterator);\r\n-                                    if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) {\r\n-                                        if (value == 38)\r\n-                                            processSetForegroundColorExt(r, g, b);\r\n-                                        else\r\n-                                            processSetBackgroundColorExt(r, g, b);\r\n-                                    } else {\r\n-                                        throw new IllegalArgumentException();\r\n-                                    }\r\n-                                }\r\n-                                else if (arg2or5 == 5) {\r\n-                                    // 256 color style like `esc[38;5;<index>m`\r\n-                                    int paletteIndex = getNextOptionInt(optionsIterator);\r\n-                                    if (paletteIndex >= 0 && paletteIndex <= 255) {\r\n-                                        if (value == 38)\r\n-                                            processSetForegroundColorExt(paletteIndex);\r\n-                                        else\r\n-                                            processSetBackgroundColorExt(paletteIndex);\r\n-                                    } else {\r\n-                                        throw new IllegalArgumentException();\r\n-                                    }\r\n-                                }\r\n-                                else {\r\n-                                    throw new IllegalArgumentException();\r\n-                                }\r\n-                            } else {\r\n-                                switch (value) {\r\n-                                    case 39:\r\n-                                        processDefaultTextColor();\r\n-                                        break;\r\n-                                    case 49:\r\n-                                        processDefaultBackgroundColor();\r\n-                                        break;\r\n-                                    case 0:\r\n-                                        processAttributeReset();\r\n-                                        break;\r\n-                                    default:\r\n-                                        processSetAttribute(value);\r\n-                                }\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                    if (count == 0) {\r\n-                        processAttributeReset();\r\n-                    }\r\n-                    return true;\r\n-                case 's':\r\n-                    processSaveCursorPosition();\r\n-                    return true;\r\n-                case 'u':\r\n-                    processRestoreCursorPosition();\r\n-                    return true;\r\n-\r\n-                default:\r\n-                    if ('a' <= command && command <= 'z') {\r\n-                        processUnknownExtension(options, command);\r\n-                        return true;\r\n-                    }\r\n-                    if ('A' <= command && command <= 'Z') {\r\n-                        processUnknownExtension(options, command);\r\n-                        return true;\r\n-                    }\r\n-                    return false;\r\n-            }\r\n-        } catch (IllegalArgumentException ignore) {\r\n-        }\r\n-        return false;\r\n-    }\r\n-\r\n-    /**\r\n-     * @return true if the operating system command was processed.\r\n-     */\r\n-    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\r\n-        int command = optionInt(options, 0);\r\n-        String label = (String) options.get(1);\r\n-        // for command > 2 label could be composed (i.e. contain ';'), but we'll leave\r\n-        // it to processUnknownOperatingSystemCommand implementations to handle that\r\n-        try {\r\n-            switch (command) {\r\n-                case 0:\r\n-                    processChangeIconNameAndWindowTitle(label);\r\n-                    return true;\r\n-                case 1:\r\n-                    processChangeIconName(label);\r\n-                    return true;\r\n-                case 2:\r\n-                    processChangeWindowTitle(label);\r\n-                    return true;\r\n-\r\n-                default:\r\n-                    // not exactly unknown, but not supported through dedicated process methods:\r\n-                    processUnknownOperatingSystemCommand(command, label);\r\n-                    return true;\r\n-            }\r\n-        } catch (IllegalArgumentException ignore) {\r\n-        }\r\n-        return false;\r\n-    }\r\n-\r\n-    /**\r\n-     * Process character set sequence.\r\n-     * @param options options\r\n-     * @return true if the charcter set select command was processed.\r\n-     */\r\n-    protected boolean processCharsetSelect(ArrayList<Object> options) {\r\n-        int set = optionInt(options, 0);\r\n-        char seq = (Character) options.get(1);\r\n-        processCharsetSelect(set, seq);\r\n-        return true;\r\n-    }\r\n-\r\n-    private int optionInt(ArrayList<Object> options, int index) {\r\n-        if (options.size() <= index)\r\n-            throw new IllegalArgumentException();\r\n-        Object value = options.get(index);\r\n-        if (value == null)\r\n-            throw new IllegalArgumentException();\r\n-        if (!value.getClass().equals(Integer.class))\r\n-            throw new IllegalArgumentException();\r\n-        return (Integer) value;\r\n-    }\r\n-\r\n-    private int optionInt(ArrayList<Object> options, int index, int defaultValue) {\r\n-        if (options.size() > index) {\r\n-            Object value = options.get(index);\r\n-            if (value == null) {\r\n-                return defaultValue;\r\n-            }\r\n-            return (Integer) value;\r\n-        }\r\n-        return defaultValue;\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI u</code> ANSI code, corresponding to <code>RCP \u2013 Restore Cursor Position</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processRestoreCursorPosition() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI s</code> ANSI code, corresponding to <code>SCP \u2013 Save Cursor Position</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSaveCursorPosition() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI L</code> ANSI code, corresponding to <code>IL \u2013 Insert Line</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     * @since 1.16\r\n-     */\r\n-    protected void processInsertLine(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI M</code> ANSI code, corresponding to <code>DL \u2013 Delete Line</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     * @since 1.16\r\n-     */\r\n-    protected void processDeleteLine(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI n T</code> ANSI code, corresponding to <code>SD \u2013 Scroll Down</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processScrollDown(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process <code>CSI n U</code> ANSI code, corresponding to <code>SU \u2013 Scroll Up</code>\r\n-     * @param optionInt option\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processScrollUp(int optionInt) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int ERASE_SCREEN_TO_END = 0;\r\n-    protected static final int ERASE_SCREEN_TO_BEGINING = 1;\r\n-    protected static final int ERASE_SCREEN = 2;\r\n-\r\n-    /**\r\n-     * Process <code>CSI n J</code> ANSI code, corresponding to <code>ED \u2013 Erase in Display</code>\r\n-     * @param eraseOption eraseOption\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processEraseScreen(int eraseOption) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int ERASE_LINE_TO_END = 0;\r\n-    protected static final int ERASE_LINE_TO_BEGINING = 1;\r\n-    protected static final int ERASE_LINE = 2;\r\n-\r\n-    /**\r\n-     * Process <code>CSI n K</code> ANSI code, corresponding to <code>ED \u2013 Erase in Line</code>\r\n-     * @param eraseOption eraseOption\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processEraseLine(int eraseOption) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int ATTRIBUTE_INTENSITY_BOLD = 1; // \tIntensity: Bold\r\n-    protected static final int ATTRIBUTE_INTENSITY_FAINT = 2; // \tIntensity; Faint \tnot widely supported\r\n-    protected static final int ATTRIBUTE_ITALIC = 3; // \tItalic; on \tnot widely supported. Sometimes treated as inverse.\r\n-    protected static final int ATTRIBUTE_UNDERLINE = 4; // \tUnderline; Single\r\n-    protected static final int ATTRIBUTE_BLINK_SLOW = 5; // \tBlink; Slow \tless than 150 per minute\r\n-    protected static final int ATTRIBUTE_BLINK_FAST = 6; // \tBlink; Rapid \tMS-DOS ANSI.SYS; 150 per minute or more\r\n-    protected static final int ATTRIBUTE_NEGATIVE_ON = 7; // \tImage; Negative \tinverse or reverse; swap foreground and background\r\n-    protected static final int ATTRIBUTE_CONCEAL_ON = 8; // \tConceal on\r\n-    protected static final int ATTRIBUTE_UNDERLINE_DOUBLE = 21; // \tUnderline; Double \tnot widely supported\r\n-    protected static final int ATTRIBUTE_INTENSITY_NORMAL = 22; // \tIntensity; Normal \tnot bold and not faint\r\n-    protected static final int ATTRIBUTE_UNDERLINE_OFF = 24; // \tUnderline; None\r\n-    protected static final int ATTRIBUTE_BLINK_OFF = 25; // \tBlink; off\r\n-    protected static final int ATTRIBUTE_NEGATIVE_OFF = 27; // \tImage; Positive\r\n-    protected static final int ATTRIBUTE_CONCEAL_OFF = 28; // \tReveal \tconceal off\r\n-\r\n-    /**\r\n-     * process <code>SGR</code> other than <code>0</code> (reset), <code>30-39</code> (foreground),\r\n-     * <code>40-49</code> (background), <code>90-97</code> (foreground high intensity) or\r\n-     * <code>100-107</code> (background high intensity)\r\n-     * @param attribute attribute\r\n-     * @throws IOException IOException\r\n-     * @see #processAttributeReset()\r\n-     * @see #processSetForegroundColor(int)\r\n-     * @see #processSetForegroundColor(int, boolean)\r\n-     * @see #processSetForegroundColorExt(int)\r\n-     * @see #processSetForegroundColorExt(int, int, int)\r\n-     * @see #processDefaultTextColor()\r\n-     * @see #processDefaultBackgroundColor()\r\n-     */\r\n-    protected void processSetAttribute(int attribute) throws IOException {\r\n-    }\r\n-\r\n-    protected static final int BLACK = 0;\r\n-    protected static final int RED = 1;\r\n-    protected static final int GREEN = 2;\r\n-    protected static final int YELLOW = 3;\r\n-    protected static final int BLUE = 4;\r\n-    protected static final int MAGENTA = 5;\r\n-    protected static final int CYAN = 6;\r\n-    protected static final int WHITE = 7;\r\n-\r\n-    /**\r\n-     * process <code>SGR 30-37</code> corresponding to <code>Set text color (foreground)</code>.\r\n-     * @param color the text color\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColor(int color) throws IOException {\r\n-        processSetForegroundColor(color, false);\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 30-37</code> or <code>SGR 90-97</code> corresponding to\r\n-     * <code>Set text color (foreground)</code> either in normal mode or high intensity.\r\n-     * @param color the text color\r\n-     * @param bright is high intensity?\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\r\n-     * with a palette of 255 colors.\r\n-     * @param paletteIndex the text color in the palette\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\r\n-     * with a 24 bits RGB definition of the color.\r\n-     * @param r red\r\n-     * @param g green\r\n-     * @param b blue\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 40-47</code> corresponding to <code>Set background color</code>.\r\n-     * @param color the background color\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColor(int color) throws IOException {\r\n-        processSetBackgroundColor(color, false);\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 40-47</code> or <code>SGR 100-107</code> corresponding to\r\n-     * <code>Set background color</code> either in normal mode or high intensity.\r\n-     * @param color the background color\r\n-     * @param bright is high intensity?\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\r\n-     * with a palette of 255 colors.\r\n-     * @param paletteIndex the background color in the palette\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\r\n-     * with a 24 bits RGB definition of the color.\r\n-     * @param r red\r\n-     * @param g green\r\n-     * @param b blue\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 39</code> corresponding to <code>Default text color (foreground)</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processDefaultTextColor() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 49</code> corresponding to <code>Default background color</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processDefaultBackgroundColor() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>SGR 0</code> corresponding to <code>Reset / Normal</code>\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processAttributeReset() throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n ; m H</code> corresponding to <code>CUP \u2013 Cursor Position</code> or\r\n-     * <code>CSI n ; m f</code> corresponding to <code>HVP \u2013 Horizontal and Vertical Position</code>\r\n-     * @param row row\r\n-     * @param col col\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorTo(int row, int col) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n G</code> corresponding to <code>CHA \u2013 Cursor Horizontal Absolute</code>\r\n-     * @param x the column\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorToColumn(int x) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n F</code> corresponding to <code>CPL \u2013 Cursor Previous Line</code>\r\n-     * @param count line count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorUpLine(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n E</code> corresponding to <code>CNL \u2013 Cursor Next Line</code>\r\n-     * @param count line count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorDownLine(int count) throws IOException {\r\n-        // Poor mans impl..\r\n-        for (int i = 0; i < count; i++) {\r\n-            os.write('\\n');\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n D</code> corresponding to <code>CUB \u2013 Cursor Back</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorLeft(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n C</code> corresponding to <code>CUF \u2013 Cursor Forward</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorRight(int count) throws IOException {\r\n-        // Poor mans impl..\r\n-        for (int i = 0; i < count; i++) {\r\n-            os.write(' ');\r\n-        }\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n B</code> corresponding to <code>CUD \u2013 Cursor Down</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorDown(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>CSI n A</code> corresponding to <code>CUU \u2013 Cursor Up</code>\r\n-     * @param count count\r\n-     * @throws IOException IOException\r\n-     */\r\n-    protected void processCursorUp(int count) throws IOException {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process Unknown Extension\r\n-     * @param options options\r\n-     * @param command command\r\n-     */\r\n-    protected void processUnknownExtension(ArrayList<Object> options, int command) {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>OSC 0;text BEL</code> corresponding to <code>Change Window and Icon label</code>\r\n-     * @param label window title name\r\n-     */\r\n-    protected void processChangeIconNameAndWindowTitle(String label) {\r\n-        processChangeIconName(label);\r\n-        processChangeWindowTitle(label);\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>OSC 1;text BEL</code> corresponding to <code>Change Icon label</code>\r\n-     * @param label icon label\r\n-     */\r\n-    protected void processChangeIconName(String label) {\r\n-    }\r\n-\r\n-    /**\r\n-     * process <code>OSC 2;text BEL</code> corresponding to <code>Change Window title</code>\r\n-     * @param label window title text\r\n-     */\r\n-    protected void processChangeWindowTitle(String label) {\r\n-    }\r\n-\r\n-    /**\r\n-     * Process unknown <code>OSC</code> command.\r\n-     * @param command command\r\n-     * @param param param\r\n-     */\r\n-    protected void processUnknownOperatingSystemCommand(int command, String param) {\r\n-    }\r\n-\r\n-    protected void processCharsetSelect(int set, char seq) {\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.util.ArrayList;\n+import java.util.Iterator;\n+\n+/**\n+ * ANSI processor providing <code>process*</code> corresponding to ANSI escape codes. \n+ * This class methods implementations are empty: subclasses should actually perform the\n+ * ANSI escape behaviors by implementing active code in <code>process*</code> methods.\n+ * \n+ * <p>For more information about ANSI escape codes, see\n+ * <a href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\">Wikipedia article</a>\n+ *\n+ * @since 1.19\n+ */\n+@SuppressWarnings(\"unused\")\n+public class AnsiProcessor {\n+    protected final OutputStream os;\n+\n+    public AnsiProcessor(OutputStream os) {\n+        this.os = os;\n+    }\n+\n+    /**\n+     * Helper for processEscapeCommand() to iterate over integer options\n+     * @param  optionsIterator  the underlying iterator\n+     * @throws IOException      if no more non-null values left\n+     */\n+    protected int getNextOptionInt(Iterator<Object> optionsIterator) throws IOException {\n+        for (;;) {\n+            if (!optionsIterator.hasNext())\n+                throw new IllegalArgumentException();\n+            Object arg = optionsIterator.next();\n+            if (arg != null)\n+                return (Integer) arg;\n+        }\n+    }\n+\n+    /**\n+     * @return true if the escape command was processed.\n+     */\n+    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\n+        try {\n+            switch (command) {\n+                case 'A':\n+                    processCursorUp(optionInt(options, 0, 1));\n+                    return true;\n+                case 'B':\n+                    processCursorDown(optionInt(options, 0, 1));\n+                    return true;\n+                case 'C':\n+                    processCursorRight(optionInt(options, 0, 1));\n+                    return true;\n+                case 'D':\n+                    processCursorLeft(optionInt(options, 0, 1));\n+                    return true;\n+                case 'E':\n+                    processCursorDownLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'F':\n+                    processCursorUpLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'G':\n+                    processCursorToColumn(optionInt(options, 0));\n+                    return true;\n+                case 'H':\n+                case 'f':\n+                    processCursorTo(optionInt(options, 0, 1), optionInt(options, 1, 1));\n+                    return true;\n+                case 'J':\n+                    processEraseScreen(optionInt(options, 0, 0));\n+                    return true;\n+                case 'K':\n+                    processEraseLine(optionInt(options, 0, 0));\n+                    return true;\n+                case 'L':\n+                    processInsertLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'M':\n+                    processDeleteLine(optionInt(options, 0, 1));\n+                    return true;\n+                case 'S':\n+                    processScrollUp(optionInt(options, 0, 1));\n+                    return true;\n+                case 'T':\n+                    processScrollDown(optionInt(options, 0, 1));\n+                    return true;\n+                case 'm':\n+                    // Validate all options are ints...\n+                    for (Object next : options) {\n+                        if (next != null && next.getClass() != Integer.class) {\n+                            throw new IllegalArgumentException();\n+                        }\n+                    }\n+\n+                    int count = 0;\n+                    Iterator<Object> optionsIterator = options.iterator();\n+                    while (optionsIterator.hasNext()) {\n+                        Object next = optionsIterator.next();\n+                        if (next != null) {\n+                            count++;\n+                            int value = (Integer) next;\n+                            if (30 <= value && value <= 37) {\n+                                processSetForegroundColor(value - 30);\n+                            } else if (40 <= value && value <= 47) {\n+                                processSetBackgroundColor(value - 40);\n+                            } else if (90 <= value && value <= 97) {\n+                                processSetForegroundColor(value - 90, true);\n+                            } else if (100 <= value && value <= 107) {\n+                                processSetBackgroundColor(value - 100, true);\n+                            } else if (value == 38 || value == 48) {\n+                                if (!optionsIterator.hasNext()) {\n+                                    continue;\n+                                }\n+                                // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\n+                                int arg2or5 = getNextOptionInt(optionsIterator);\n+                                if (arg2or5 == 2) {\n+                                    // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\n+                                    int r = getNextOptionInt(optionsIterator);\n+                                    int g = getNextOptionInt(optionsIterator);\n+                                    int b = getNextOptionInt(optionsIterator);\n+                                    if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) {\n+                                        if (value == 38)\n+                                            processSetForegroundColorExt(r, g, b);\n+                                        else\n+                                            processSetBackgroundColorExt(r, g, b);\n+                                    } else {\n+                                        throw new IllegalArgumentException();\n+                                    }\n+                                }\n+                                else if (arg2or5 == 5) {\n+                                    // 256 color style like `esc[38;5;<index>m`\n+                                    int paletteIndex = getNextOptionInt(optionsIterator);\n+                                    if (paletteIndex >= 0 && paletteIndex <= 255) {\n+                                        if (value == 38)\n+                                            processSetForegroundColorExt(paletteIndex);\n+                                        else\n+                                            processSetBackgroundColorExt(paletteIndex);\n+                                    } else {\n+                                        throw new IllegalArgumentException();\n+                                    }\n+                                }\n+                                else {\n+                                    throw new IllegalArgumentException();\n+                                }\n+                            } else {\n+                                switch (value) {\n+                                    case 39:\n+                                        processDefaultTextColor();\n+                                        break;\n+                                    case 49:\n+                                        processDefaultBackgroundColor();\n+                                        break;\n+                                    case 0:\n+                                        processAttributeReset();\n+                                        break;\n+                                    default:\n+                                        processSetAttribute(value);\n+                                }\n+                            }\n+                        }\n+                    }\n+                    if (count == 0) {\n+                        processAttributeReset();\n+                    }\n+                    return true;\n+                case 's':\n+                    processSaveCursorPosition();\n+                    return true;\n+                case 'u':\n+                    processRestoreCursorPosition();\n+                    return true;\n+\n+                default:\n+                    if ('a' <= command && command <= 'z') {\n+                        processUnknownExtension(options, command);\n+                        return true;\n+                    }\n+                    if ('A' <= command && command <= 'Z') {\n+                        processUnknownExtension(options, command);\n+                        return true;\n+                    }\n+                    return false;\n+            }\n+        } catch (IllegalArgumentException ignore) {\n+        }\n+        return false;\n+    }\n+\n+    /**\n+     * @return true if the operating system command was processed.\n+     */\n+    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\n+        int command = optionInt(options, 0);\n+        String label = (String) options.get(1);\n+        // for command > 2 label could be composed (i.e. contain ';'), but we'll leave\n+        // it to processUnknownOperatingSystemCommand implementations to handle that\n+        try {\n+            switch (command) {\n+                case 0:\n+                    processChangeIconNameAndWindowTitle(label);\n+                    return true;\n+                case 1:\n+                    processChangeIconName(label);\n+                    return true;\n+                case 2:\n+                    processChangeWindowTitle(label);\n+                    return true;\n+\n+                default:\n+                    // not exactly unknown, but not supported through dedicated process methods:\n+                    processUnknownOperatingSystemCommand(command, label);\n+                    return true;\n+            }\n+        } catch (IllegalArgumentException ignore) {\n+        }\n+        return false;\n+    }\n+\n+    /**\n+     * Process character set sequence.\n+     * @param options options\n+     * @return true if the charcter set select command was processed.\n+     */\n+    protected boolean processCharsetSelect(ArrayList<Object> options) {\n+        int set = optionInt(options, 0);\n+        char seq = (Character) options.get(1);\n+        processCharsetSelect(set, seq);\n+        return true;\n+    }\n+\n+    private int optionInt(ArrayList<Object> options, int index) {\n+        if (options.size() <= index)\n+            throw new IllegalArgumentException();\n+        Object value = options.get(index);\n+        if (value == null)\n+            throw new IllegalArgumentException();\n+        if (!value.getClass().equals(Integer.class))\n+            throw new IllegalArgumentException();\n+        return (Integer) value;\n+    }\n+\n+    private int optionInt(ArrayList<Object> options, int index, int defaultValue) {\n+        if (options.size() > index) {\n+            Object value = options.get(index);\n+            if (value == null) {\n+                return defaultValue;\n+            }\n+            return (Integer) value;\n+        }\n+        return defaultValue;\n+    }\n+\n+    /**\n+     * Process <code>CSI u</code> ANSI code, corresponding to <code>RCP \u2013 Restore Cursor Position</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processRestoreCursorPosition() throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI s</code> ANSI code, corresponding to <code>SCP \u2013 Save Cursor Position</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processSaveCursorPosition() throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI L</code> ANSI code, corresponding to <code>IL \u2013 Insert Line</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     * @since 1.16\n+     */\n+    protected void processInsertLine(int optionInt) throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI M</code> ANSI code, corresponding to <code>DL \u2013 Delete Line</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     * @since 1.16\n+     */\n+    protected void processDeleteLine(int optionInt) throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI n T</code> ANSI code, corresponding to <code>SD \u2013 Scroll Down</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     */\n+    protected void processScrollDown(int optionInt) throws IOException {\n+    }\n+\n+    /**\n+     * Process <code>CSI n U</code> ANSI code, corresponding to <code>SU \u2013 Scroll Up</code>\n+     * @param optionInt option\n+     * @throws IOException IOException\n+     */\n+    protected void processScrollUp(int optionInt) throws IOException {\n+    }\n+\n+    protected static final int ERASE_SCREEN_TO_END = 0;\n+    protected static final int ERASE_SCREEN_TO_BEGINING = 1;\n+    protected static final int ERASE_SCREEN = 2;\n+\n+    /**\n+     * Process <code>CSI n J</code> ANSI code, corresponding to <code>ED \u2013 Erase in Display</code>\n+     * @param eraseOption eraseOption\n+     * @throws IOException IOException\n+     */\n+    protected void processEraseScreen(int eraseOption) throws IOException {\n+    }\n+\n+    protected static final int ERASE_LINE_TO_END = 0;\n+    protected static final int ERASE_LINE_TO_BEGINING = 1;\n+    protected static final int ERASE_LINE = 2;\n+\n+    /**\n+     * Process <code>CSI n K</code> ANSI code, corresponding to <code>ED \u2013 Erase in Line</code>\n+     * @param eraseOption eraseOption\n+     * @throws IOException IOException\n+     */\n+    protected void processEraseLine(int eraseOption) throws IOException {\n+    }\n+\n+    protected static final int ATTRIBUTE_INTENSITY_BOLD = 1; // \tIntensity: Bold\n+    protected static final int ATTRIBUTE_INTENSITY_FAINT = 2; // \tIntensity; Faint \tnot widely supported\n+    protected static final int ATTRIBUTE_ITALIC = 3; // \tItalic; on \tnot widely supported. Sometimes treated as inverse.\n+    protected static final int ATTRIBUTE_UNDERLINE = 4; // \tUnderline; Single\n+    protected static final int ATTRIBUTE_BLINK_SLOW = 5; // \tBlink; Slow \tless than 150 per minute\n+    protected static final int ATTRIBUTE_BLINK_FAST = 6; // \tBlink; Rapid \tMS-DOS ANSI.SYS; 150 per minute or more\n+    protected static final int ATTRIBUTE_NEGATIVE_ON = 7; // \tImage; Negative \tinverse or reverse; swap foreground and background\n+    protected static final int ATTRIBUTE_CONCEAL_ON = 8; // \tConceal on\n+    protected static final int ATTRIBUTE_UNDERLINE_DOUBLE = 21; // \tUnderline; Double \tnot widely supported\n+    protected static final int ATTRIBUTE_INTENSITY_NORMAL = 22; // \tIntensity; Normal \tnot bold and not faint\n+    protected static final int ATTRIBUTE_UNDERLINE_OFF = 24; // \tUnderline; None\n+    protected static final int ATTRIBUTE_BLINK_OFF = 25; // \tBlink; off\n+    protected static final int ATTRIBUTE_NEGATIVE_OFF = 27; // \tImage; Positive\n+    protected static final int ATTRIBUTE_CONCEAL_OFF = 28; // \tReveal \tconceal off\n+\n+    /**\n+     * process <code>SGR</code> other than <code>0</code> (reset), <code>30-39</code> (foreground),\n+     * <code>40-49</code> (background), <code>90-97</code> (foreground high intensity) or\n+     * <code>100-107</code> (background high intensity)\n+     * @param attribute attribute\n+     * @throws IOException IOException\n+     * @see #processAttributeReset()\n+     * @see #processSetForegroundColor(int)\n+     * @see #processSetForegroundColor(int, boolean)\n+     * @see #processSetForegroundColorExt(int)\n+     * @see #processSetForegroundColorExt(int, int, int)\n+     * @see #processDefaultTextColor()\n+     * @see #processDefaultBackgroundColor()\n+     */\n+    protected void processSetAttribute(int attribute) throws IOException {\n+    }\n+\n+    protected static final int BLACK = 0;\n+    protected static final int RED = 1;\n+    protected static final int GREEN = 2;\n+    protected static final int YELLOW = 3;\n+    protected static final int BLUE = 4;\n+    protected static final int MAGENTA = 5;\n+    protected static final int CYAN = 6;\n+    protected static final int WHITE = 7;\n+\n+    /**\n+     * process <code>SGR 30-37</code> corresponding to <code>Set text color (foreground)</code>.\n+     * @param color the text color\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColor(int color) throws IOException {\n+        processSetForegroundColor(color, false);\n+    }\n+\n+    /**\n+     * process <code>SGR 30-37</code> or <code>SGR 90-97</code> corresponding to\n+     * <code>Set text color (foreground)</code> either in normal mode or high intensity.\n+     * @param color the text color\n+     * @param bright is high intensity?\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\n+     * with a palette of 255 colors.\n+     * @param paletteIndex the text color in the palette\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 38</code> corresponding to <code>extended set text color (foreground)</code>\n+     * with a 24 bits RGB definition of the color.\n+     * @param r red\n+     * @param g green\n+     * @param b blue\n+     * @throws IOException IOException\n+     */\n+    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 40-47</code> corresponding to <code>Set background color</code>.\n+     * @param color the background color\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColor(int color) throws IOException {\n+        processSetBackgroundColor(color, false);\n+    }\n+\n+    /**\n+     * process <code>SGR 40-47</code> or <code>SGR 100-107</code> corresponding to\n+     * <code>Set background color</code> either in normal mode or high intensity.\n+     * @param color the background color\n+     * @param bright is high intensity?\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\n+     * with a palette of 255 colors.\n+     * @param paletteIndex the background color in the palette\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 48</code> corresponding to <code>extended set background color</code>\n+     * with a 24 bits RGB definition of the color.\n+     * @param r red\n+     * @param g green\n+     * @param b blue\n+     * @throws IOException IOException\n+     */\n+    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 39</code> corresponding to <code>Default text color (foreground)</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processDefaultTextColor() throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 49</code> corresponding to <code>Default background color</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processDefaultBackgroundColor() throws IOException {\n+    }\n+\n+    /**\n+     * process <code>SGR 0</code> corresponding to <code>Reset / Normal</code>\n+     * @throws IOException IOException\n+     */\n+    protected void processAttributeReset() throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n ; m H</code> corresponding to <code>CUP \u2013 Cursor Position</code> or\n+     * <code>CSI n ; m f</code> corresponding to <code>HVP \u2013 Horizontal and Vertical Position</code>\n+     * @param row row\n+     * @param col col\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorTo(int row, int col) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n G</code> corresponding to <code>CHA \u2013 Cursor Horizontal Absolute</code>\n+     * @param x the column\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorToColumn(int x) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n F</code> corresponding to <code>CPL \u2013 Cursor Previous Line</code>\n+     * @param count line count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorUpLine(int count) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n E</code> corresponding to <code>CNL \u2013 Cursor Next Line</code>\n+     * @param count line count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorDownLine(int count) throws IOException {\n+        // Poor mans impl..\n+        for (int i = 0; i < count; i++) {\n+            os.write('\\n');\n+        }\n+    }\n+\n+    /**\n+     * process <code>CSI n D</code> corresponding to <code>CUB \u2013 Cursor Back</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorLeft(int count) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n C</code> corresponding to <code>CUF \u2013 Cursor Forward</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorRight(int count) throws IOException {\n+        // Poor mans impl..\n+        for (int i = 0; i < count; i++) {\n+            os.write(' ');\n+        }\n+    }\n+\n+    /**\n+     * process <code>CSI n B</code> corresponding to <code>CUD \u2013 Cursor Down</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorDown(int count) throws IOException {\n+    }\n+\n+    /**\n+     * process <code>CSI n A</code> corresponding to <code>CUU \u2013 Cursor Up</code>\n+     * @param count count\n+     * @throws IOException IOException\n+     */\n+    protected void processCursorUp(int count) throws IOException {\n+    }\n+\n+    /**\n+     * Process Unknown Extension\n+     * @param options options\n+     * @param command command\n+     */\n+    protected void processUnknownExtension(ArrayList<Object> options, int command) {\n+    }\n+\n+    /**\n+     * process <code>OSC 0;text BEL</code> corresponding to <code>Change Window and Icon label</code>\n+     * @param label window title name\n+     */\n+    protected void processChangeIconNameAndWindowTitle(String label) {\n+        processChangeIconName(label);\n+        processChangeWindowTitle(label);\n+    }\n+\n+    /**\n+     * process <code>OSC 1;text BEL</code> corresponding to <code>Change Icon label</code>\n+     * @param label icon label\n+     */\n+    protected void processChangeIconName(String label) {\n+    }\n+\n+    /**\n+     * process <code>OSC 2;text BEL</code> corresponding to <code>Change Window title</code>\n+     * @param label window title text\n+     */\n+    protected void processChangeWindowTitle(String label) {\n+    }\n+\n+    /**\n+     * Process unknown <code>OSC</code> command.\n+     * @param command command\n+     * @param param param\n+     */\n+    protected void processUnknownOperatingSystemCommand(int command, String param) {\n+    }\n+\n+    protected void processCharsetSelect(int set, char seq) {\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/io/Colors.java", "source2": "org/fusesource/jansi/io/Colors.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,160 +1,160 @@\n-/*\r\n- * Copyright (c) 2002-2018, the original author or authors.\r\n- *\r\n- * This software is distributable under the BSD license. See the terms of the\r\n- * BSD license in the documentation provided with this software.\r\n- *\r\n- * https://opensource.org/licenses/BSD-3-Clause\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-/**\r\n- * Helper class for dealing with color rounding.\r\n- * This is a simplified version of the JLine's one at\r\n- *   https://github.com/jline/jline3/blob/a24636dc5de83baa6b65049e8215fb372433b3b1/terminal/src/main/java/org/jline/utils/Colors.java\r\n- */\r\n-public class Colors {\r\n-\r\n-    /**\r\n-     * Default 256 colors palette\r\n-     */\r\n-    public static final int[] DEFAULT_COLORS_256 = {\r\n-            // 16 ansi\r\n-            0x000000, 0x800000, 0x008000, 0x808000, 0x000080, 0x800080, 0x008080, 0xc0c0c0,\r\n-            0x808080, 0xff0000, 0x00ff00, 0xffff00, 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff,\r\n-\r\n-            // 6x6x6 color cube\r\n-            0x000000, 0x00005f, 0x000087, 0x0000af, 0x0000d7, 0x0000ff,\r\n-            0x005f00, 0x005f5f, 0x005f87, 0x005faf, 0x005fd7, 0x005fff,\r\n-            0x008700, 0x00875f, 0x008787, 0x0087af, 0x0087d7, 0x0087ff,\r\n-            0x00af00, 0x00af5f, 0x00af87, 0x00afaf, 0x00afd7, 0x00afff,\r\n-            0x00d700, 0x00d75f, 0x00d787, 0x00d7af, 0x00d7d7, 0x00d7ff,\r\n-            0x00ff00, 0x00ff5f, 0x00ff87, 0x00ffaf, 0x00ffd7, 0x00ffff,\r\n-\r\n-            0x5f0000, 0x5f005f, 0x5f0087, 0x5f00af, 0x5f00d7, 0x5f00ff,\r\n-            0x5f5f00, 0x5f5f5f, 0x5f5f87, 0x5f5faf, 0x5f5fd7, 0x5f5fff,\r\n-            0x5f8700, 0x5f875f, 0x5f8787, 0x5f87af, 0x5f87d7, 0x5f87ff,\r\n-            0x5faf00, 0x5faf5f, 0x5faf87, 0x5fafaf, 0x5fafd7, 0x5fafff,\r\n-            0x5fd700, 0x5fd75f, 0x5fd787, 0x5fd7af, 0x5fd7d7, 0x5fd7ff,\r\n-            0x5fff00, 0x5fff5f, 0x5fff87, 0x5fffaf, 0x5fffd7, 0x5fffff,\r\n-\r\n-            0x870000, 0x87005f, 0x870087, 0x8700af, 0x8700d7, 0x8700ff,\r\n-            0x875f00, 0x875f5f, 0x875f87, 0x875faf, 0x875fd7, 0x875fff,\r\n-            0x878700, 0x87875f, 0x878787, 0x8787af, 0x8787d7, 0x8787ff,\r\n-            0x87af00, 0x87af5f, 0x87af87, 0x87afaf, 0x87afd7, 0x87afff,\r\n-            0x87d700, 0x87d75f, 0x87d787, 0x87d7af, 0x87d7d7, 0x87d7ff,\r\n-            0x87ff00, 0x87ff5f, 0x87ff87, 0x87ffaf, 0x87ffd7, 0x87ffff,\r\n-\r\n-            0xaf0000, 0xaf005f, 0xaf0087, 0xaf00af, 0xaf00d7, 0xaf00ff,\r\n-            0xaf5f00, 0xaf5f5f, 0xaf5f87, 0xaf5faf, 0xaf5fd7, 0xaf5fff,\r\n-            0xaf8700, 0xaf875f, 0xaf8787, 0xaf87af, 0xaf87d7, 0xaf87ff,\r\n-            0xafaf00, 0xafaf5f, 0xafaf87, 0xafafaf, 0xafafd7, 0xafafff,\r\n-            0xafd700, 0xafd75f, 0xafd787, 0xafd7af, 0xafd7d7, 0xafd7ff,\r\n-            0xafff00, 0xafff5f, 0xafff87, 0xafffaf, 0xafffd7, 0xafffff,\r\n-\r\n-            0xd70000, 0xd7005f, 0xd70087, 0xd700af, 0xd700d7, 0xd700ff,\r\n-            0xd75f00, 0xd75f5f, 0xd75f87, 0xd75faf, 0xd75fd7, 0xd75fff,\r\n-            0xd78700, 0xd7875f, 0xd78787, 0xd787af, 0xd787d7, 0xd787ff,\r\n-            0xd7af00, 0xd7af5f, 0xd7af87, 0xd7afaf, 0xd7afd7, 0xd7afff,\r\n-            0xd7d700, 0xd7d75f, 0xd7d787, 0xd7d7af, 0xd7d7d7, 0xd7d7ff,\r\n-            0xd7ff00, 0xd7ff5f, 0xd7ff87, 0xd7ffaf, 0xd7ffd7, 0xd7ffff,\r\n-\r\n-            0xff0000, 0xff005f, 0xff0087, 0xff00af, 0xff00d7, 0xff00ff,\r\n-            0xff5f00, 0xff5f5f, 0xff5f87, 0xff5faf, 0xff5fd7, 0xff5fff,\r\n-            0xff8700, 0xff875f, 0xff8787, 0xff87af, 0xff87d7, 0xff87ff,\r\n-            0xffaf00, 0xffaf5f, 0xffaf87, 0xffafaf, 0xffafd7, 0xffafff,\r\n-            0xffd700, 0xffd75f, 0xffd787, 0xffd7af, 0xffd7d7, 0xffd7ff,\r\n-            0xffff00, 0xffff5f, 0xffff87, 0xffffaf, 0xffffd7, 0xffffff,\r\n-\r\n-            // 24 grey ramp\r\n-            0x080808, 0x121212, 0x1c1c1c, 0x262626, 0x303030, 0x3a3a3a, 0x444444, 0x4e4e4e,\r\n-            0x585858, 0x626262, 0x6c6c6c, 0x767676, 0x808080, 0x8a8a8a, 0x949494, 0x9e9e9e,\r\n-            0xa8a8a8, 0xb2b2b2, 0xbcbcbc, 0xc6c6c6, 0xd0d0d0, 0xdadada, 0xe4e4e4, 0xeeeeee,\r\n-    };\r\n-\r\n-    public static int roundColor(int col, int max) {\r\n-        if (col >= max) {\r\n-            int c = DEFAULT_COLORS_256[col];\r\n-            col = roundColor(c, DEFAULT_COLORS_256, max);\r\n-        }\r\n-        return col;\r\n-    }\r\n-\r\n-    public static int roundRgbColor(int r, int g, int b, int max) {\r\n-        return roundColor((r << 16) + (g << 8) + b, DEFAULT_COLORS_256, max);\r\n-    }\r\n-\r\n-    private static int roundColor(int color, int[] colors, int max) {\r\n-        double best_distance = Integer.MAX_VALUE;\r\n-        int best_index = Integer.MAX_VALUE;\r\n-        for (int idx = 0; idx < max; idx++) {\r\n-            double d = cie76(color, colors[idx]);\r\n-            if (d <= best_distance) {\r\n-                best_index = idx;\r\n-                best_distance = d;\r\n-            }\r\n-        }\r\n-        return best_index;\r\n-    }\r\n-\r\n-    private static double cie76(int c1, int c2) {\r\n-        return scalar(rgb2cielab(c1), rgb2cielab(c2));\r\n-    }\r\n-\r\n-    private static double scalar(double[] c1, double[] c2) {\r\n-        return sqr(c1[0] - c2[0])\r\n-             + sqr(c1[1] - c2[1])\r\n-             + sqr(c1[2] - c2[2]);\r\n-    }\r\n-\r\n-    private static double[] rgb(int color) {\r\n-        int r = (color >> 16) & 0xFF;\r\n-        int g = (color >>  8) & 0xFF;\r\n-        int b = (color >>  0) & 0xFF;\r\n-        return new double[] { r / 255.0, g / 255.0, b / 255.0 };\r\n-    }\r\n-\r\n-    private static double[] rgb2cielab(int color) {\r\n-        return rgb2cielab(rgb(color));\r\n-    }\r\n-\r\n-    private static double[] rgb2cielab(double[] rgb) {\r\n-        return xyz2lab(rgb2xyz(rgb));\r\n-    }\r\n-\r\n-    private static double[] rgb2xyz(double[] rgb) {\r\n-        double vr = pivotRgb(rgb[0]);\r\n-        double vg = pivotRgb(rgb[1]);\r\n-        double vb = pivotRgb(rgb[2]);\r\n-        // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\r\n-        double x = vr * 0.4124564 + vg * 0.3575761 + vb * 0.1804375;\r\n-        double y = vr * 0.2126729 + vg * 0.7151522 + vb * 0.0721750;\r\n-        double z = vr * 0.0193339 + vg * 0.1191920 + vb * 0.9503041;\r\n-        return new double[] { x, y, z };\r\n-    }\r\n-\r\n-    private static double pivotRgb(double n) {\r\n-        return n > 0.04045 ? Math.pow((n + 0.055) / 1.055, 2.4) : n / 12.92;\r\n-    }\r\n-\r\n-    private static double[] xyz2lab(double[] xyz) {\r\n-        double fx = pivotXyz(xyz[0]);\r\n-        double fy = pivotXyz(xyz[1]);\r\n-        double fz = pivotXyz(xyz[2]);\r\n-        double l = 116.0 * fy - 16.0;\r\n-        double a = 500.0 * (fx - fy);\r\n-        double b = 200.0 * (fy - fz);\r\n-        return new double[] { l, a, b };\r\n-    }\r\n-\r\n-    private static final double epsilon = 216.0 / 24389.0;\r\n-    private static final double kappa = 24389.0 / 27.0;\r\n-    private static double pivotXyz(double n) {\r\n-        return n > epsilon ? Math.cbrt(n) : (kappa * n + 16) / 116;\r\n-    }\r\n-\r\n-    private static double sqr(double n) {\r\n-        return n * n;\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (c) 2002-2018, the original author or authors.\n+ *\n+ * This software is distributable under the BSD license. See the terms of the\n+ * BSD license in the documentation provided with this software.\n+ *\n+ * https://opensource.org/licenses/BSD-3-Clause\n+ */\n+package org.fusesource.jansi.io;\n+\n+/**\n+ * Helper class for dealing with color rounding.\n+ * This is a simplified version of the JLine's one at\n+ *   https://github.com/jline/jline3/blob/a24636dc5de83baa6b65049e8215fb372433b3b1/terminal/src/main/java/org/jline/utils/Colors.java\n+ */\n+public class Colors {\n+\n+    /**\n+     * Default 256 colors palette\n+     */\n+    public static final int[] DEFAULT_COLORS_256 = {\n+            // 16 ansi\n+            0x000000, 0x800000, 0x008000, 0x808000, 0x000080, 0x800080, 0x008080, 0xc0c0c0,\n+            0x808080, 0xff0000, 0x00ff00, 0xffff00, 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff,\n+\n+            // 6x6x6 color cube\n+            0x000000, 0x00005f, 0x000087, 0x0000af, 0x0000d7, 0x0000ff,\n+            0x005f00, 0x005f5f, 0x005f87, 0x005faf, 0x005fd7, 0x005fff,\n+            0x008700, 0x00875f, 0x008787, 0x0087af, 0x0087d7, 0x0087ff,\n+            0x00af00, 0x00af5f, 0x00af87, 0x00afaf, 0x00afd7, 0x00afff,\n+            0x00d700, 0x00d75f, 0x00d787, 0x00d7af, 0x00d7d7, 0x00d7ff,\n+            0x00ff00, 0x00ff5f, 0x00ff87, 0x00ffaf, 0x00ffd7, 0x00ffff,\n+\n+            0x5f0000, 0x5f005f, 0x5f0087, 0x5f00af, 0x5f00d7, 0x5f00ff,\n+            0x5f5f00, 0x5f5f5f, 0x5f5f87, 0x5f5faf, 0x5f5fd7, 0x5f5fff,\n+            0x5f8700, 0x5f875f, 0x5f8787, 0x5f87af, 0x5f87d7, 0x5f87ff,\n+            0x5faf00, 0x5faf5f, 0x5faf87, 0x5fafaf, 0x5fafd7, 0x5fafff,\n+            0x5fd700, 0x5fd75f, 0x5fd787, 0x5fd7af, 0x5fd7d7, 0x5fd7ff,\n+            0x5fff00, 0x5fff5f, 0x5fff87, 0x5fffaf, 0x5fffd7, 0x5fffff,\n+\n+            0x870000, 0x87005f, 0x870087, 0x8700af, 0x8700d7, 0x8700ff,\n+            0x875f00, 0x875f5f, 0x875f87, 0x875faf, 0x875fd7, 0x875fff,\n+            0x878700, 0x87875f, 0x878787, 0x8787af, 0x8787d7, 0x8787ff,\n+            0x87af00, 0x87af5f, 0x87af87, 0x87afaf, 0x87afd7, 0x87afff,\n+            0x87d700, 0x87d75f, 0x87d787, 0x87d7af, 0x87d7d7, 0x87d7ff,\n+            0x87ff00, 0x87ff5f, 0x87ff87, 0x87ffaf, 0x87ffd7, 0x87ffff,\n+\n+            0xaf0000, 0xaf005f, 0xaf0087, 0xaf00af, 0xaf00d7, 0xaf00ff,\n+            0xaf5f00, 0xaf5f5f, 0xaf5f87, 0xaf5faf, 0xaf5fd7, 0xaf5fff,\n+            0xaf8700, 0xaf875f, 0xaf8787, 0xaf87af, 0xaf87d7, 0xaf87ff,\n+            0xafaf00, 0xafaf5f, 0xafaf87, 0xafafaf, 0xafafd7, 0xafafff,\n+            0xafd700, 0xafd75f, 0xafd787, 0xafd7af, 0xafd7d7, 0xafd7ff,\n+            0xafff00, 0xafff5f, 0xafff87, 0xafffaf, 0xafffd7, 0xafffff,\n+\n+            0xd70000, 0xd7005f, 0xd70087, 0xd700af, 0xd700d7, 0xd700ff,\n+            0xd75f00, 0xd75f5f, 0xd75f87, 0xd75faf, 0xd75fd7, 0xd75fff,\n+            0xd78700, 0xd7875f, 0xd78787, 0xd787af, 0xd787d7, 0xd787ff,\n+            0xd7af00, 0xd7af5f, 0xd7af87, 0xd7afaf, 0xd7afd7, 0xd7afff,\n+            0xd7d700, 0xd7d75f, 0xd7d787, 0xd7d7af, 0xd7d7d7, 0xd7d7ff,\n+            0xd7ff00, 0xd7ff5f, 0xd7ff87, 0xd7ffaf, 0xd7ffd7, 0xd7ffff,\n+\n+            0xff0000, 0xff005f, 0xff0087, 0xff00af, 0xff00d7, 0xff00ff,\n+            0xff5f00, 0xff5f5f, 0xff5f87, 0xff5faf, 0xff5fd7, 0xff5fff,\n+            0xff8700, 0xff875f, 0xff8787, 0xff87af, 0xff87d7, 0xff87ff,\n+            0xffaf00, 0xffaf5f, 0xffaf87, 0xffafaf, 0xffafd7, 0xffafff,\n+            0xffd700, 0xffd75f, 0xffd787, 0xffd7af, 0xffd7d7, 0xffd7ff,\n+            0xffff00, 0xffff5f, 0xffff87, 0xffffaf, 0xffffd7, 0xffffff,\n+\n+            // 24 grey ramp\n+            0x080808, 0x121212, 0x1c1c1c, 0x262626, 0x303030, 0x3a3a3a, 0x444444, 0x4e4e4e,\n+            0x585858, 0x626262, 0x6c6c6c, 0x767676, 0x808080, 0x8a8a8a, 0x949494, 0x9e9e9e,\n+            0xa8a8a8, 0xb2b2b2, 0xbcbcbc, 0xc6c6c6, 0xd0d0d0, 0xdadada, 0xe4e4e4, 0xeeeeee,\n+    };\n+\n+    public static int roundColor(int col, int max) {\n+        if (col >= max) {\n+            int c = DEFAULT_COLORS_256[col];\n+            col = roundColor(c, DEFAULT_COLORS_256, max);\n+        }\n+        return col;\n+    }\n+\n+    public static int roundRgbColor(int r, int g, int b, int max) {\n+        return roundColor((r << 16) + (g << 8) + b, DEFAULT_COLORS_256, max);\n+    }\n+\n+    private static int roundColor(int color, int[] colors, int max) {\n+        double best_distance = Integer.MAX_VALUE;\n+        int best_index = Integer.MAX_VALUE;\n+        for (int idx = 0; idx < max; idx++) {\n+            double d = cie76(color, colors[idx]);\n+            if (d <= best_distance) {\n+                best_index = idx;\n+                best_distance = d;\n+            }\n+        }\n+        return best_index;\n+    }\n+\n+    private static double cie76(int c1, int c2) {\n+        return scalar(rgb2cielab(c1), rgb2cielab(c2));\n+    }\n+\n+    private static double scalar(double[] c1, double[] c2) {\n+        return sqr(c1[0] - c2[0])\n+             + sqr(c1[1] - c2[1])\n+             + sqr(c1[2] - c2[2]);\n+    }\n+\n+    private static double[] rgb(int color) {\n+        int r = (color >> 16) & 0xFF;\n+        int g = (color >>  8) & 0xFF;\n+        int b = (color >>  0) & 0xFF;\n+        return new double[] { r / 255.0, g / 255.0, b / 255.0 };\n+    }\n+\n+    private static double[] rgb2cielab(int color) {\n+        return rgb2cielab(rgb(color));\n+    }\n+\n+    private static double[] rgb2cielab(double[] rgb) {\n+        return xyz2lab(rgb2xyz(rgb));\n+    }\n+\n+    private static double[] rgb2xyz(double[] rgb) {\n+        double vr = pivotRgb(rgb[0]);\n+        double vg = pivotRgb(rgb[1]);\n+        double vb = pivotRgb(rgb[2]);\n+        // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n+        double x = vr * 0.4124564 + vg * 0.3575761 + vb * 0.1804375;\n+        double y = vr * 0.2126729 + vg * 0.7151522 + vb * 0.0721750;\n+        double z = vr * 0.0193339 + vg * 0.1191920 + vb * 0.9503041;\n+        return new double[] { x, y, z };\n+    }\n+\n+    private static double pivotRgb(double n) {\n+        return n > 0.04045 ? Math.pow((n + 0.055) / 1.055, 2.4) : n / 12.92;\n+    }\n+\n+    private static double[] xyz2lab(double[] xyz) {\n+        double fx = pivotXyz(xyz[0]);\n+        double fy = pivotXyz(xyz[1]);\n+        double fz = pivotXyz(xyz[2]);\n+        double l = 116.0 * fy - 16.0;\n+        double a = 500.0 * (fx - fy);\n+        double b = 200.0 * (fy - fz);\n+        return new double[] { l, a, b };\n+    }\n+\n+    private static final double epsilon = 216.0 / 24389.0;\n+    private static final double kappa = 24389.0 / 27.0;\n+    private static double pivotXyz(double n) {\n+        return n > epsilon ? Math.cbrt(n) : (kappa * n + 16) / 116;\n+    }\n+\n+    private static double sqr(double n) {\n+        return n * n;\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/io/ColorsAnsiProcessor.java", "source2": "org/fusesource/jansi/io/ColorsAnsiProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,142 +1,142 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-import java.util.ArrayList;\r\n-import java.util.Iterator;\r\n-\r\n-import org.fusesource.jansi.AnsiColors;\r\n-\r\n-/**\r\n- * Ansi processor to process color conversion if needed.\r\n- */\r\n-public class ColorsAnsiProcessor extends AnsiProcessor {\r\n-\r\n-    private final AnsiColors colors;\r\n-\r\n-    public ColorsAnsiProcessor(OutputStream os, AnsiColors colors) {\r\n-        super(os);\r\n-        this.colors = colors;\r\n-    }\r\n-\r\n-    @Override\r\n-    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\r\n-        if (command == 'm' && (colors == AnsiColors.Colors256 || colors == AnsiColors.Colors16)) {\r\n-            // Validate all options are ints...\r\n-            boolean has38or48 = false;\r\n-            for (Object next : options) {\r\n-                if (next != null && next.getClass() != Integer.class) {\r\n-                    throw new IllegalArgumentException();\r\n-                }\r\n-                Integer value = (Integer) next;\r\n-                has38or48 |= value == 38 || value == 48;\r\n-            }\r\n-            // SGR commands do not contain an extended color, so just transfer the buffer\r\n-            if (!has38or48) {\r\n-                return false;\r\n-            }\r\n-            StringBuilder sb = new StringBuilder(32);\r\n-            sb.append('\\033').append('[');\r\n-            boolean first = true;\r\n-            Iterator<Object> optionsIterator = options.iterator();\r\n-            while (optionsIterator.hasNext()) {\r\n-                Object next = optionsIterator.next();\r\n-                if (next != null) {\r\n-                    int value = (Integer) next;\r\n-                    if (value == 38 || value == 48) {\r\n-                        // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\r\n-                        int arg2or5 = getNextOptionInt(optionsIterator);\r\n-                        if (arg2or5 == 2) {\r\n-                            // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\r\n-                            int r = getNextOptionInt(optionsIterator);\r\n-                            int g = getNextOptionInt(optionsIterator);\r\n-                            int b = getNextOptionInt(optionsIterator);\r\n-                            if (colors == AnsiColors.Colors256) {\r\n-                                int col = Colors.roundRgbColor(r, g, b, 256);\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value);\r\n-                                sb.append(';');\r\n-                                sb.append(5);\r\n-                                sb.append(';');\r\n-                                sb.append(col);\r\n-                            } else {\r\n-                                int col = Colors.roundRgbColor(r, g, b, 16);\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\r\n-                            }\r\n-                        }\r\n-                        else if (arg2or5 == 5) {\r\n-                            // 256 color style like `esc[38;5;<index>m`\r\n-                            int paletteIndex = getNextOptionInt(optionsIterator);\r\n-                            if (colors == AnsiColors.Colors256) {\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value);\r\n-                                sb.append(';');\r\n-                                sb.append(5);\r\n-                                sb.append(';');\r\n-                                sb.append(paletteIndex);\r\n-                            } else {\r\n-                                int col = Colors.roundColor(paletteIndex, 16);\r\n-                                if (!first) {\r\n-                                    sb.append(';');\r\n-                                }\r\n-                                first = false;\r\n-                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\r\n-                            }\r\n-                        }\r\n-                        else {\r\n-                            throw new IllegalArgumentException();\r\n-                        }\r\n-                    } else {\r\n-                        if (!first) {\r\n-                            sb.append(';');\r\n-                        }\r\n-                        first = false;\r\n-                        sb.append(value);\r\n-                    }\r\n-                }\r\n-            }\r\n-            sb.append('m');\r\n-            os.write(sb.toString().getBytes());\r\n-            return true;\r\n-\r\n-        } else {\r\n-            return false;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\r\n-        return false;\r\n-    }\r\n-\r\n-    @Override\r\n-    protected boolean processCharsetSelect(ArrayList<Object> options) {\r\n-        return false;\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.IOException;\n+import java.io.OutputStream;\n+import java.util.ArrayList;\n+import java.util.Iterator;\n+\n+import org.fusesource.jansi.AnsiColors;\n+\n+/**\n+ * Ansi processor to process color conversion if needed.\n+ */\n+public class ColorsAnsiProcessor extends AnsiProcessor {\n+\n+    private final AnsiColors colors;\n+\n+    public ColorsAnsiProcessor(OutputStream os, AnsiColors colors) {\n+        super(os);\n+        this.colors = colors;\n+    }\n+\n+    @Override\n+    protected boolean processEscapeCommand(ArrayList<Object> options, int command) throws IOException {\n+        if (command == 'm' && (colors == AnsiColors.Colors256 || colors == AnsiColors.Colors16)) {\n+            // Validate all options are ints...\n+            boolean has38or48 = false;\n+            for (Object next : options) {\n+                if (next != null && next.getClass() != Integer.class) {\n+                    throw new IllegalArgumentException();\n+                }\n+                Integer value = (Integer) next;\n+                has38or48 |= value == 38 || value == 48;\n+            }\n+            // SGR commands do not contain an extended color, so just transfer the buffer\n+            if (!has38or48) {\n+                return false;\n+            }\n+            StringBuilder sb = new StringBuilder(32);\n+            sb.append('\\033').append('[');\n+            boolean first = true;\n+            Iterator<Object> optionsIterator = options.iterator();\n+            while (optionsIterator.hasNext()) {\n+                Object next = optionsIterator.next();\n+                if (next != null) {\n+                    int value = (Integer) next;\n+                    if (value == 38 || value == 48) {\n+                        // extended color like `esc[38;5;<index>m` or `esc[38;2;<r>;<g>;<b>m`\n+                        int arg2or5 = getNextOptionInt(optionsIterator);\n+                        if (arg2or5 == 2) {\n+                            // 24 bit color style like `esc[38;2;<r>;<g>;<b>m`\n+                            int r = getNextOptionInt(optionsIterator);\n+                            int g = getNextOptionInt(optionsIterator);\n+                            int b = getNextOptionInt(optionsIterator);\n+                            if (colors == AnsiColors.Colors256) {\n+                                int col = Colors.roundRgbColor(r, g, b, 256);\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value);\n+                                sb.append(';');\n+                                sb.append(5);\n+                                sb.append(';');\n+                                sb.append(col);\n+                            } else {\n+                                int col = Colors.roundRgbColor(r, g, b, 16);\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\n+                            }\n+                        }\n+                        else if (arg2or5 == 5) {\n+                            // 256 color style like `esc[38;5;<index>m`\n+                            int paletteIndex = getNextOptionInt(optionsIterator);\n+                            if (colors == AnsiColors.Colors256) {\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value);\n+                                sb.append(';');\n+                                sb.append(5);\n+                                sb.append(';');\n+                                sb.append(paletteIndex);\n+                            } else {\n+                                int col = Colors.roundColor(paletteIndex, 16);\n+                                if (!first) {\n+                                    sb.append(';');\n+                                }\n+                                first = false;\n+                                sb.append(value == 38 ? col >= 8 ? 90 + col - 8 : 30 + col : col >= 8 ? 100 + col - 8 : 40 + col);\n+                            }\n+                        }\n+                        else {\n+                            throw new IllegalArgumentException();\n+                        }\n+                    } else {\n+                        if (!first) {\n+                            sb.append(';');\n+                        }\n+                        first = false;\n+                        sb.append(value);\n+                    }\n+                }\n+            }\n+            sb.append('m');\n+            os.write(sb.toString().getBytes());\n+            return true;\n+\n+        } else {\n+            return false;\n+        }\n+    }\n+\n+    @Override\n+    protected boolean processOperatingSystemCommand(ArrayList<Object> options) {\n+        return false;\n+    }\n+\n+    @Override\n+    protected boolean processCharsetSelect(ArrayList<Object> options) {\n+        return false;\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/io/FastBufferedOutputStream.java", "source2": "org/fusesource/jansi/io/FastBufferedOutputStream.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,69 +1,69 @@\n-/*\r\n- * Copyright (C) 2009-2020 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import java.io.FilterOutputStream;\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-\r\n-/**\r\n- * A simple buffering output stream with no synchronization.\r\n- */\r\n-public class FastBufferedOutputStream extends FilterOutputStream {\r\n-\r\n-    protected final byte buf[] = new byte[8192];\r\n-    protected int count;\r\n-\r\n-    public FastBufferedOutputStream(OutputStream out) {\r\n-        super(out);\r\n-    }\r\n-\r\n-    @Override\r\n-    public void write(int b) throws IOException {\r\n-        if (count >= buf.length) {\r\n-            flushBuffer();\r\n-        }\r\n-        buf[count++] = (byte) b;\r\n-    }\r\n-\r\n-    @Override\r\n-    public void write(byte b[], int off, int len) throws IOException {\r\n-        if (len >= buf.length) {\r\n-            flushBuffer();\r\n-            out.write(b, off, len);\r\n-            return;\r\n-        }\r\n-        if (len > buf.length - count) {\r\n-            flushBuffer();\r\n-        }\r\n-        System.arraycopy(b, off, buf, count, len);\r\n-        count += len;\r\n-    }\r\n-\r\n-    private void flushBuffer() throws IOException {\r\n-        if (count > 0) {\r\n-            out.write(buf, 0, count);\r\n-            count = 0;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    public void flush() throws IOException {\r\n-        flushBuffer();\r\n-        out.flush();\r\n-    }\r\n-\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2020 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import java.io.FilterOutputStream;\n+import java.io.IOException;\n+import java.io.OutputStream;\n+\n+/**\n+ * A simple buffering output stream with no synchronization.\n+ */\n+public class FastBufferedOutputStream extends FilterOutputStream {\n+\n+    protected final byte buf[] = new byte[8192];\n+    protected int count;\n+\n+    public FastBufferedOutputStream(OutputStream out) {\n+        super(out);\n+    }\n+\n+    @Override\n+    public void write(int b) throws IOException {\n+        if (count >= buf.length) {\n+            flushBuffer();\n+        }\n+        buf[count++] = (byte) b;\n+    }\n+\n+    @Override\n+    public void write(byte b[], int off, int len) throws IOException {\n+        if (len >= buf.length) {\n+            flushBuffer();\n+            out.write(b, off, len);\n+            return;\n+        }\n+        if (len > buf.length - count) {\n+            flushBuffer();\n+        }\n+        System.arraycopy(b, off, buf, count, len);\n+        count += len;\n+    }\n+\n+    private void flushBuffer() throws IOException {\n+        if (count > 0) {\n+            out.write(buf, 0, count);\n+            count = 0;\n+        }\n+    }\n+\n+    @Override\n+    public void flush() throws IOException {\n+        flushBuffer();\n+        out.flush();\n+    }\n+\n+}\n"}, {"source1": "org/fusesource/jansi/io/WindowsAnsiProcessor.java", "source2": "org/fusesource/jansi/io/WindowsAnsiProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,426 +1,426 @@\n-/*\r\n- * Copyright (C) 2009-2017 the original author(s).\r\n- *\r\n- * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n- * you may not use this file except in compliance with the License.\r\n- * You may obtain a copy of the License at\r\n- *\r\n- * http://www.apache.org/licenses/LICENSE-2.0\r\n- *\r\n- * Unless required by applicable law or agreed to in writing, software\r\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n- * See the License for the specific language governing permissions and\r\n- * limitations under the License.\r\n- */\r\n-package org.fusesource.jansi.io;\r\n-\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_BLUE;\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_GREEN;\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_INTENSITY;\r\n-import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_RED;\r\n-import static org.fusesource.jansi.internal.Kernel32.CHAR_INFO;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_BLUE;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_GREEN;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_INTENSITY;\r\n-import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_RED;\r\n-import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputAttribute;\r\n-import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputCharacterW;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\r\n-import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\r\n-import static org.fusesource.jansi.internal.Kernel32.SMALL_RECT;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\r\n-import static org.fusesource.jansi.internal.Kernel32.ScrollConsoleScreenBuffer;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleCursorPosition;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleTextAttribute;\r\n-import static org.fusesource.jansi.internal.Kernel32.SetConsoleTitle;\r\n-\r\n-import java.io.IOException;\r\n-import java.io.OutputStream;\r\n-\r\n-import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\r\n-import org.fusesource.jansi.internal.Kernel32.COORD;\r\n-import org.fusesource.jansi.WindowsSupport;\r\n-\r\n-/**\r\n- * A Windows ANSI escape processor, that uses JNA to access native platform\r\n- * API's to change the console attributes (see \r\n- * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/Kernel32.html\">Jansi native Kernel32</a>).\r\n- * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\r\n- * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\r\n- *\r\n- * @since 1.19\r\n- * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\r\n- * @author Joris Kuipers\r\n- */\r\n-public final class WindowsAnsiProcessor extends AnsiProcessor {\r\n-\r\n-    private final long console;\r\n-\r\n-    private static final short FOREGROUND_BLACK = 0;\r\n-    private static final short FOREGROUND_YELLOW = (short) (FOREGROUND_RED | FOREGROUND_GREEN);\r\n-    private static final short FOREGROUND_MAGENTA = (short) (FOREGROUND_BLUE | FOREGROUND_RED);\r\n-    private static final short FOREGROUND_CYAN = (short) (FOREGROUND_BLUE | FOREGROUND_GREEN);\r\n-    private static final short FOREGROUND_WHITE = (short) (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\r\n-\r\n-    private static final short BACKGROUND_BLACK = 0;\r\n-    private static final short BACKGROUND_YELLOW = (short) (BACKGROUND_RED | BACKGROUND_GREEN);\r\n-    private static final short BACKGROUND_MAGENTA = (short) (BACKGROUND_BLUE | BACKGROUND_RED);\r\n-    private static final short BACKGROUND_CYAN = (short) (BACKGROUND_BLUE | BACKGROUND_GREEN);\r\n-    private static final short BACKGROUND_WHITE = (short) (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);\r\n-\r\n-    private static final short[] ANSI_FOREGROUND_COLOR_MAP = {\r\n-            FOREGROUND_BLACK,\r\n-            FOREGROUND_RED,\r\n-            FOREGROUND_GREEN,\r\n-            FOREGROUND_YELLOW,\r\n-            FOREGROUND_BLUE,\r\n-            FOREGROUND_MAGENTA,\r\n-            FOREGROUND_CYAN,\r\n-            FOREGROUND_WHITE,\r\n-    };\r\n-\r\n-    private static final short[] ANSI_BACKGROUND_COLOR_MAP = {\r\n-            BACKGROUND_BLACK,\r\n-            BACKGROUND_RED,\r\n-            BACKGROUND_GREEN,\r\n-            BACKGROUND_YELLOW,\r\n-            BACKGROUND_BLUE,\r\n-            BACKGROUND_MAGENTA,\r\n-            BACKGROUND_CYAN,\r\n-            BACKGROUND_WHITE,\r\n-    };\r\n-\r\n-    private final CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\r\n-    private final short originalColors;\r\n-\r\n-    private boolean negative;\r\n-    private short savedX = -1;\r\n-    private short savedY = -1;\r\n-\r\n-    public WindowsAnsiProcessor(OutputStream ps, long console) throws IOException {\r\n-        super(ps);\r\n-        this.console = console;\r\n-        getConsoleInfo();\r\n-        originalColors = info.attributes;\r\n-    }\r\n-\r\n-    public WindowsAnsiProcessor(OutputStream ps, boolean stdout) throws IOException {\r\n-        this(ps, GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE));\r\n-    }\r\n-\r\n-    public WindowsAnsiProcessor(OutputStream ps) throws IOException {\r\n-        this(ps, true);\r\n-    }\r\n-\r\n-    private void getConsoleInfo() throws IOException {\r\n-        os.flush();\r\n-        if (GetConsoleScreenBufferInfo(console, info) == 0) {\r\n-            throw new IOException(\"Could not get the screen info: \" + WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-        if (negative) {\r\n-            info.attributes = invertAttributeColors(info.attributes);\r\n-        }\r\n-    }\r\n-\r\n-    private void applyAttribute() throws IOException {\r\n-        os.flush();\r\n-        short attributes = info.attributes;\r\n-        if (negative) {\r\n-            attributes = invertAttributeColors(attributes);\r\n-        }\r\n-        if (SetConsoleTextAttribute(console, attributes) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    private short invertAttributeColors(short attributes) {\r\n-        // Swap the the Foreground and Background bits.\r\n-        int fg = 0x000F & attributes;\r\n-        fg <<= 4;\r\n-        int bg = 0X00F0 & attributes;\r\n-        bg >>= 4;\r\n-        attributes = (short) ((attributes & 0xFF00) | fg | bg);\r\n-        return attributes;\r\n-    }\r\n-\r\n-    private void applyCursorPosition() throws IOException {\r\n-        if (SetConsoleCursorPosition(console, info.cursorPosition.copy()) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processEraseScreen(int eraseOption) throws IOException {\r\n-        getConsoleInfo();\r\n-        int[] written = new int[1];\r\n-        switch (eraseOption) {\r\n-            case ERASE_SCREEN:\r\n-                COORD topLeft = new COORD();\r\n-                topLeft.x = 0;\r\n-                topLeft.y = info.window.top;\r\n-                int screenLength = info.window.height() * info.size.x;\r\n-                FillConsoleOutputAttribute(console, info.attributes, screenLength, topLeft, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', screenLength, topLeft, written);\r\n-                break;\r\n-            case ERASE_SCREEN_TO_BEGINING:\r\n-                COORD topLeft2 = new COORD();\r\n-                topLeft2.x = 0;\r\n-                topLeft2.y = info.window.top;\r\n-                int lengthToCursor = (info.cursorPosition.y - info.window.top) * info.size.x\r\n-                        + info.cursorPosition.x;\r\n-                FillConsoleOutputAttribute(console, info.attributes, lengthToCursor, topLeft2, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', lengthToCursor, topLeft2, written);\r\n-                break;\r\n-            case ERASE_SCREEN_TO_END:\r\n-                int lengthToEnd = (info.window.bottom - info.cursorPosition.y) * info.size.x +\r\n-                        (info.size.x - info.cursorPosition.x);\r\n-                FillConsoleOutputAttribute(console, info.attributes, lengthToEnd, info.cursorPosition.copy(), written);\r\n-                FillConsoleOutputCharacterW(console, ' ', lengthToEnd, info.cursorPosition.copy(), written);\r\n-                break;\r\n-            default:\r\n-                break;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processEraseLine(int eraseOption) throws IOException {\r\n-        getConsoleInfo();\r\n-        int[] written = new int[1];\r\n-        switch (eraseOption) {\r\n-            case ERASE_LINE:\r\n-                COORD leftColCurrRow = info.cursorPosition.copy();\r\n-                leftColCurrRow.x = 0;\r\n-                FillConsoleOutputAttribute(console, info.attributes, info.size.x, leftColCurrRow, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', info.size.x, leftColCurrRow, written);\r\n-                break;\r\n-            case ERASE_LINE_TO_BEGINING:\r\n-                COORD leftColCurrRow2 = info.cursorPosition.copy();\r\n-                leftColCurrRow2.x = 0;\r\n-                FillConsoleOutputAttribute(console, info.attributes, info.cursorPosition.x, leftColCurrRow2, written);\r\n-                FillConsoleOutputCharacterW(console, ' ', info.cursorPosition.x, leftColCurrRow2, written);\r\n-                break;\r\n-            case ERASE_LINE_TO_END:\r\n-                int lengthToLastCol = info.size.x - info.cursorPosition.x;\r\n-                FillConsoleOutputAttribute(console, info.attributes, lengthToLastCol, info.cursorPosition.copy(), written);\r\n-                FillConsoleOutputCharacterW(console, ' ', lengthToLastCol, info.cursorPosition.copy(), written);\r\n-                break;\r\n-            default:\r\n-                break;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorLeft(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = (short) Math.max(0, info.cursorPosition.x - count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorRight(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = (short) Math.min(info.window.width(), info.cursorPosition.x + count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorDown(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.y = (short) Math.min(Math.max(0, info.size.y - 1), info.cursorPosition.y + count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorUp(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorTo(int row, int col) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, Math.min(info.size.y, info.window.top + row - 1));\r\n-        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), col - 1));\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorToColumn(int x) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), x - 1));\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorUpLine(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = 0;\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processCursorDownLine(int count) throws IOException {\r\n-        getConsoleInfo();\r\n-        info.cursorPosition.x = 0;\r\n-        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y + count);\r\n-        applyCursorPosition();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x0007) | ANSI_FOREGROUND_COLOR_MAP[color]);\r\n-        if (bright) {\r\n-            info.attributes |= FOREGROUND_INTENSITY;\r\n-        }\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\r\n-        int round = Colors.roundColor(paletteIndex, 16);\r\n-        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\r\n-        int round = Colors.roundRgbColor(r, g, b, 16);\r\n-        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x0070) | ANSI_BACKGROUND_COLOR_MAP[color]);\r\n-        if (bright) {\r\n-            info.attributes |= BACKGROUND_INTENSITY;\r\n-        }\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\r\n-        int round = Colors.roundColor(paletteIndex, 16);\r\n-        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\r\n-        int round = Colors.roundRgbColor(r, g, b, 16);\r\n-        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processDefaultTextColor() throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x000F) | (originalColors & 0xF));\r\n-        info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processDefaultBackgroundColor() throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x00F0) | (originalColors & 0xF0));\r\n-        info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processAttributeReset() throws IOException {\r\n-        info.attributes = (short) ((info.attributes & ~0x00FF) | originalColors);\r\n-        this.negative = false;\r\n-        applyAttribute();\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSetAttribute(int attribute) throws IOException {\r\n-        switch (attribute) {\r\n-            case ATTRIBUTE_INTENSITY_BOLD:\r\n-                info.attributes = (short) (info.attributes | FOREGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-            case ATTRIBUTE_INTENSITY_NORMAL:\r\n-                info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-\r\n-            // Yeah, setting the background intensity is not underlining.. but it's best we can do\r\n-            // using the Windows console API\r\n-            case ATTRIBUTE_UNDERLINE:\r\n-                info.attributes = (short) (info.attributes | BACKGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-            case ATTRIBUTE_UNDERLINE_OFF:\r\n-                info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\r\n-                applyAttribute();\r\n-                break;\r\n-\r\n-            case ATTRIBUTE_NEGATIVE_ON:\r\n-                negative = true;\r\n-                applyAttribute();\r\n-                break;\r\n-            case ATTRIBUTE_NEGATIVE_OFF:\r\n-                negative = false;\r\n-                applyAttribute();\r\n-                break;\r\n-            default:\r\n-                break;\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processSaveCursorPosition() throws IOException {\r\n-        getConsoleInfo();\r\n-        savedX = info.cursorPosition.x;\r\n-        savedY = info.cursorPosition.y;\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processRestoreCursorPosition() throws IOException {\r\n-        // restore only if there was a save operation first\r\n-        if (savedX != -1 && savedY != -1) {\r\n-            os.flush();\r\n-            info.cursorPosition.x = savedX;\r\n-            info.cursorPosition.y = savedY;\r\n-            applyCursorPosition();\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processInsertLine(int optionInt) throws IOException {\r\n-        getConsoleInfo();\r\n-        SMALL_RECT scroll = info.window.copy();\r\n-        scroll.top = info.cursorPosition.y;\r\n-        COORD org = new COORD();\r\n-        org.x = 0;\r\n-        org.y = (short)(info.cursorPosition.y + optionInt);\r\n-        CHAR_INFO info = new CHAR_INFO();\r\n-        info.attributes = originalColors;\r\n-        info.unicodeChar = ' ';\r\n-        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processDeleteLine(int optionInt) throws IOException {\r\n-        getConsoleInfo();\r\n-        SMALL_RECT scroll = info.window.copy();\r\n-        scroll.top = info.cursorPosition.y;\r\n-        COORD org = new COORD();\r\n-        org.x = 0;\r\n-        org.y = (short)(info.cursorPosition.y - optionInt);\r\n-        CHAR_INFO info = new CHAR_INFO();\r\n-        info.attributes = originalColors;\r\n-        info.unicodeChar = ' ';\r\n-        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\r\n-            throw new IOException(WindowsSupport.getLastErrorMessage());\r\n-        }\r\n-    }\r\n-\r\n-    @Override\r\n-    protected void processChangeWindowTitle(String label) {\r\n-        SetConsoleTitle(label);\r\n-    }\r\n-}\r\n+/*\n+ * Copyright (C) 2009-2017 the original author(s).\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.fusesource.jansi.io;\n+\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_BLUE;\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_GREEN;\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_INTENSITY;\n+import static org.fusesource.jansi.internal.Kernel32.BACKGROUND_RED;\n+import static org.fusesource.jansi.internal.Kernel32.CHAR_INFO;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_BLUE;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_GREEN;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_INTENSITY;\n+import static org.fusesource.jansi.internal.Kernel32.FOREGROUND_RED;\n+import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputAttribute;\n+import static org.fusesource.jansi.internal.Kernel32.FillConsoleOutputCharacterW;\n+import static org.fusesource.jansi.internal.Kernel32.GetConsoleScreenBufferInfo;\n+import static org.fusesource.jansi.internal.Kernel32.GetStdHandle;\n+import static org.fusesource.jansi.internal.Kernel32.SMALL_RECT;\n+import static org.fusesource.jansi.internal.Kernel32.STD_OUTPUT_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.STD_ERROR_HANDLE;\n+import static org.fusesource.jansi.internal.Kernel32.ScrollConsoleScreenBuffer;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleCursorPosition;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleTextAttribute;\n+import static org.fusesource.jansi.internal.Kernel32.SetConsoleTitle;\n+\n+import java.io.IOException;\n+import java.io.OutputStream;\n+\n+import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;\n+import org.fusesource.jansi.internal.Kernel32.COORD;\n+import org.fusesource.jansi.WindowsSupport;\n+\n+/**\n+ * A Windows ANSI escape processor, that uses JNA to access native platform\n+ * API's to change the console attributes (see \n+ * <a href=\"http://fusesource.github.io/jansi/documentation/native-api/index.html?org/fusesource/jansi/internal/Kernel32.html\">Jansi native Kernel32</a>).\n+ * <p>The native library used is named <code>jansi</code> and is loaded using <a href=\"http://fusesource.github.io/hawtjni/\">HawtJNI</a> Runtime\n+ * <a href=\"http://fusesource.github.io/hawtjni/documentation/api/index.html?org/fusesource/hawtjni/runtime/Library.html\"><code>Library</code></a>\n+ *\n+ * @since 1.19\n+ * @author <a href=\"http://hiramchirino.com\">Hiram Chirino</a>\n+ * @author Joris Kuipers\n+ */\n+public final class WindowsAnsiProcessor extends AnsiProcessor {\n+\n+    private final long console;\n+\n+    private static final short FOREGROUND_BLACK = 0;\n+    private static final short FOREGROUND_YELLOW = (short) (FOREGROUND_RED | FOREGROUND_GREEN);\n+    private static final short FOREGROUND_MAGENTA = (short) (FOREGROUND_BLUE | FOREGROUND_RED);\n+    private static final short FOREGROUND_CYAN = (short) (FOREGROUND_BLUE | FOREGROUND_GREEN);\n+    private static final short FOREGROUND_WHITE = (short) (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);\n+\n+    private static final short BACKGROUND_BLACK = 0;\n+    private static final short BACKGROUND_YELLOW = (short) (BACKGROUND_RED | BACKGROUND_GREEN);\n+    private static final short BACKGROUND_MAGENTA = (short) (BACKGROUND_BLUE | BACKGROUND_RED);\n+    private static final short BACKGROUND_CYAN = (short) (BACKGROUND_BLUE | BACKGROUND_GREEN);\n+    private static final short BACKGROUND_WHITE = (short) (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);\n+\n+    private static final short[] ANSI_FOREGROUND_COLOR_MAP = {\n+            FOREGROUND_BLACK,\n+            FOREGROUND_RED,\n+            FOREGROUND_GREEN,\n+            FOREGROUND_YELLOW,\n+            FOREGROUND_BLUE,\n+            FOREGROUND_MAGENTA,\n+            FOREGROUND_CYAN,\n+            FOREGROUND_WHITE,\n+    };\n+\n+    private static final short[] ANSI_BACKGROUND_COLOR_MAP = {\n+            BACKGROUND_BLACK,\n+            BACKGROUND_RED,\n+            BACKGROUND_GREEN,\n+            BACKGROUND_YELLOW,\n+            BACKGROUND_BLUE,\n+            BACKGROUND_MAGENTA,\n+            BACKGROUND_CYAN,\n+            BACKGROUND_WHITE,\n+    };\n+\n+    private final CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();\n+    private final short originalColors;\n+\n+    private boolean negative;\n+    private short savedX = -1;\n+    private short savedY = -1;\n+\n+    public WindowsAnsiProcessor(OutputStream ps, long console) throws IOException {\n+        super(ps);\n+        this.console = console;\n+        getConsoleInfo();\n+        originalColors = info.attributes;\n+    }\n+\n+    public WindowsAnsiProcessor(OutputStream ps, boolean stdout) throws IOException {\n+        this(ps, GetStdHandle(stdout ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE));\n+    }\n+\n+    public WindowsAnsiProcessor(OutputStream ps) throws IOException {\n+        this(ps, true);\n+    }\n+\n+    private void getConsoleInfo() throws IOException {\n+        os.flush();\n+        if (GetConsoleScreenBufferInfo(console, info) == 0) {\n+            throw new IOException(\"Could not get the screen info: \" + WindowsSupport.getLastErrorMessage());\n+        }\n+        if (negative) {\n+            info.attributes = invertAttributeColors(info.attributes);\n+        }\n+    }\n+\n+    private void applyAttribute() throws IOException {\n+        os.flush();\n+        short attributes = info.attributes;\n+        if (negative) {\n+            attributes = invertAttributeColors(attributes);\n+        }\n+        if (SetConsoleTextAttribute(console, attributes) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    private short invertAttributeColors(short attributes) {\n+        // Swap the the Foreground and Background bits.\n+        int fg = 0x000F & attributes;\n+        fg <<= 4;\n+        int bg = 0X00F0 & attributes;\n+        bg >>= 4;\n+        attributes = (short) ((attributes & 0xFF00) | fg | bg);\n+        return attributes;\n+    }\n+\n+    private void applyCursorPosition() throws IOException {\n+        if (SetConsoleCursorPosition(console, info.cursorPosition.copy()) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    @Override\n+    protected void processEraseScreen(int eraseOption) throws IOException {\n+        getConsoleInfo();\n+        int[] written = new int[1];\n+        switch (eraseOption) {\n+            case ERASE_SCREEN:\n+                COORD topLeft = new COORD();\n+                topLeft.x = 0;\n+                topLeft.y = info.window.top;\n+                int screenLength = info.window.height() * info.size.x;\n+                FillConsoleOutputAttribute(console, info.attributes, screenLength, topLeft, written);\n+                FillConsoleOutputCharacterW(console, ' ', screenLength, topLeft, written);\n+                break;\n+            case ERASE_SCREEN_TO_BEGINING:\n+                COORD topLeft2 = new COORD();\n+                topLeft2.x = 0;\n+                topLeft2.y = info.window.top;\n+                int lengthToCursor = (info.cursorPosition.y - info.window.top) * info.size.x\n+                        + info.cursorPosition.x;\n+                FillConsoleOutputAttribute(console, info.attributes, lengthToCursor, topLeft2, written);\n+                FillConsoleOutputCharacterW(console, ' ', lengthToCursor, topLeft2, written);\n+                break;\n+            case ERASE_SCREEN_TO_END:\n+                int lengthToEnd = (info.window.bottom - info.cursorPosition.y) * info.size.x +\n+                        (info.size.x - info.cursorPosition.x);\n+                FillConsoleOutputAttribute(console, info.attributes, lengthToEnd, info.cursorPosition.copy(), written);\n+                FillConsoleOutputCharacterW(console, ' ', lengthToEnd, info.cursorPosition.copy(), written);\n+                break;\n+            default:\n+                break;\n+        }\n+    }\n+\n+    @Override\n+    protected void processEraseLine(int eraseOption) throws IOException {\n+        getConsoleInfo();\n+        int[] written = new int[1];\n+        switch (eraseOption) {\n+            case ERASE_LINE:\n+                COORD leftColCurrRow = info.cursorPosition.copy();\n+                leftColCurrRow.x = 0;\n+                FillConsoleOutputAttribute(console, info.attributes, info.size.x, leftColCurrRow, written);\n+                FillConsoleOutputCharacterW(console, ' ', info.size.x, leftColCurrRow, written);\n+                break;\n+            case ERASE_LINE_TO_BEGINING:\n+                COORD leftColCurrRow2 = info.cursorPosition.copy();\n+                leftColCurrRow2.x = 0;\n+                FillConsoleOutputAttribute(console, info.attributes, info.cursorPosition.x, leftColCurrRow2, written);\n+                FillConsoleOutputCharacterW(console, ' ', info.cursorPosition.x, leftColCurrRow2, written);\n+                break;\n+            case ERASE_LINE_TO_END:\n+                int lengthToLastCol = info.size.x - info.cursorPosition.x;\n+                FillConsoleOutputAttribute(console, info.attributes, lengthToLastCol, info.cursorPosition.copy(), written);\n+                FillConsoleOutputCharacterW(console, ' ', lengthToLastCol, info.cursorPosition.copy(), written);\n+                break;\n+            default:\n+                break;\n+        }\n+    }\n+\n+    @Override\n+    protected void processCursorLeft(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = (short) Math.max(0, info.cursorPosition.x - count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorRight(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = (short) Math.min(info.window.width(), info.cursorPosition.x + count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorDown(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.y = (short) Math.min(Math.max(0, info.size.y - 1), info.cursorPosition.y + count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorUp(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorTo(int row, int col) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.y = (short) Math.max(info.window.top, Math.min(info.size.y, info.window.top + row - 1));\n+        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), col - 1));\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorToColumn(int x) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = (short) Math.max(0, Math.min(info.window.width(), x - 1));\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorUpLine(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = 0;\n+        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y - count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processCursorDownLine(int count) throws IOException {\n+        getConsoleInfo();\n+        info.cursorPosition.x = 0;\n+        info.cursorPosition.y = (short) Math.max(info.window.top, info.cursorPosition.y + count);\n+        applyCursorPosition();\n+    }\n+\n+    @Override\n+    protected void processSetForegroundColor(int color, boolean bright) throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x0007) | ANSI_FOREGROUND_COLOR_MAP[color]);\n+        if (bright) {\n+            info.attributes |= FOREGROUND_INTENSITY;\n+        }\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processSetForegroundColorExt(int paletteIndex) throws IOException {\n+        int round = Colors.roundColor(paletteIndex, 16);\n+        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processSetForegroundColorExt(int r, int g, int b) throws IOException {\n+        int round = Colors.roundRgbColor(r, g, b, 16);\n+        processSetForegroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processSetBackgroundColor(int color, boolean bright) throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x0070) | ANSI_BACKGROUND_COLOR_MAP[color]);\n+        if (bright) {\n+            info.attributes |= BACKGROUND_INTENSITY;\n+        }\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processSetBackgroundColorExt(int paletteIndex) throws IOException {\n+        int round = Colors.roundColor(paletteIndex, 16);\n+        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processSetBackgroundColorExt(int r, int g, int b) throws IOException {\n+        int round = Colors.roundRgbColor(r, g, b, 16);\n+        processSetBackgroundColor(round >= 8 ? round - 8 : round, round >= 8);\n+    }\n+\n+    @Override\n+    protected void processDefaultTextColor() throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x000F) | (originalColors & 0xF));\n+        info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processDefaultBackgroundColor() throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x00F0) | (originalColors & 0xF0));\n+        info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processAttributeReset() throws IOException {\n+        info.attributes = (short) ((info.attributes & ~0x00FF) | originalColors);\n+        this.negative = false;\n+        applyAttribute();\n+    }\n+\n+    @Override\n+    protected void processSetAttribute(int attribute) throws IOException {\n+        switch (attribute) {\n+            case ATTRIBUTE_INTENSITY_BOLD:\n+                info.attributes = (short) (info.attributes | FOREGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+            case ATTRIBUTE_INTENSITY_NORMAL:\n+                info.attributes = (short) (info.attributes & ~FOREGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+\n+            // Yeah, setting the background intensity is not underlining.. but it's best we can do\n+            // using the Windows console API\n+            case ATTRIBUTE_UNDERLINE:\n+                info.attributes = (short) (info.attributes | BACKGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+            case ATTRIBUTE_UNDERLINE_OFF:\n+                info.attributes = (short) (info.attributes & ~BACKGROUND_INTENSITY);\n+                applyAttribute();\n+                break;\n+\n+            case ATTRIBUTE_NEGATIVE_ON:\n+                negative = true;\n+                applyAttribute();\n+                break;\n+            case ATTRIBUTE_NEGATIVE_OFF:\n+                negative = false;\n+                applyAttribute();\n+                break;\n+            default:\n+                break;\n+        }\n+    }\n+\n+    @Override\n+    protected void processSaveCursorPosition() throws IOException {\n+        getConsoleInfo();\n+        savedX = info.cursorPosition.x;\n+        savedY = info.cursorPosition.y;\n+    }\n+\n+    @Override\n+    protected void processRestoreCursorPosition() throws IOException {\n+        // restore only if there was a save operation first\n+        if (savedX != -1 && savedY != -1) {\n+            os.flush();\n+            info.cursorPosition.x = savedX;\n+            info.cursorPosition.y = savedY;\n+            applyCursorPosition();\n+        }\n+    }\n+\n+    @Override\n+    protected void processInsertLine(int optionInt) throws IOException {\n+        getConsoleInfo();\n+        SMALL_RECT scroll = info.window.copy();\n+        scroll.top = info.cursorPosition.y;\n+        COORD org = new COORD();\n+        org.x = 0;\n+        org.y = (short)(info.cursorPosition.y + optionInt);\n+        CHAR_INFO info = new CHAR_INFO();\n+        info.attributes = originalColors;\n+        info.unicodeChar = ' ';\n+        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    @Override\n+    protected void processDeleteLine(int optionInt) throws IOException {\n+        getConsoleInfo();\n+        SMALL_RECT scroll = info.window.copy();\n+        scroll.top = info.cursorPosition.y;\n+        COORD org = new COORD();\n+        org.x = 0;\n+        org.y = (short)(info.cursorPosition.y - optionInt);\n+        CHAR_INFO info = new CHAR_INFO();\n+        info.attributes = originalColors;\n+        info.unicodeChar = ' ';\n+        if (ScrollConsoleScreenBuffer(console, scroll, scroll, org, info) == 0) {\n+            throw new IOException(WindowsSupport.getLastErrorMessage());\n+        }\n+    }\n+\n+    @Override\n+    protected void processChangeWindowTitle(String label) {\n+        SetConsoleTitle(label);\n+    }\n+}\n"}, {"source1": "org/fusesource/jansi/jansi.properties", "source2": "org/fusesource/jansi/jansi.properties", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1 +1 @@\n-version=${project.version}\r\n+version=${project.version}\n"}]}
