{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,8 +1,8 @@\n-Zip file size: 26801 bytes, number of entries: 34\n+Zip file size: 26932 bytes, number of entries: 34\n -rw-r--r--  2.0 unx       64 b- defN 20-Apr-01 08:04 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/rpc/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/\n@@ -12,25 +12,25 @@\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/dubbo/internal/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-grpc/\n -rw-r--r--  2.0 unx    11543 b- defN 20-Apr-01 08:04 META-INF/DEPENDENCIES\n -rw-r--r--  2.0 unx    11358 b- defN 20-Apr-01 08:04 META-INF/LICENSE\n -rw-r--r--  2.0 unx      171 b- defN 20-Apr-01 08:04 META-INF/NOTICE\n--rw-r--r--  2.0 unx     2649 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/DubboHandlerRegistry.java\n--rw-r--r--  2.0 unx      876 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcConfig.java\n--rw-r--r--  2.0 unx     1950 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcConstants.java\n--rw-r--r--  2.0 unx     4069 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcInvoker.java\n--rw-r--r--  2.0 unx    10459 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java\n--rw-r--r--  2.0 unx     8464 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java\n--rw-r--r--  2.0 unx     2622 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/ReferenceCountManagedChannel.java\n--rw-r--r--  2.0 unx     1094 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/ClientInterceptor.java\n--rw-r--r--  2.0 unx     1458 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/GrpcConfigurator.java\n--rw-r--r--  2.0 unx     4384 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/RpcContextInterceptor.java\n--rw-r--r--  2.0 unx     1094 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerInterceptor.java\n--rw-r--r--  2.0 unx     1121 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerTransportFilter.java\n+-rw-r--r--  2.0 unx     2722 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/DubboHandlerRegistry.java\n+-rw-r--r--  2.0 unx      897 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcConfig.java\n+-rw-r--r--  2.0 unx     1991 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcConstants.java\n+-rw-r--r--  2.0 unx     4187 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcInvoker.java\n+-rw-r--r--  2.0 unx    10684 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java\n+-rw-r--r--  2.0 unx     8699 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java\n+-rw-r--r--  2.0 unx     2707 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/ReferenceCountManagedChannel.java\n+-rw-r--r--  2.0 unx     1120 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/ClientInterceptor.java\n+-rw-r--r--  2.0 unx     1499 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/GrpcConfigurator.java\n+-rw-r--r--  2.0 unx     4484 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/RpcContextInterceptor.java\n+-rw-r--r--  2.0 unx     1120 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerInterceptor.java\n+-rw-r--r--  2.0 unx     1148 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerTransportFilter.java\n -rw-r--r--  2.0 unx       52 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\n -rw-r--r--  2.0 unx       77 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.grpc.interceptors.ClientInterceptor\n -rw-r--r--  2.0 unx       77 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerInterceptor\n--rw-r--r--  2.0 unx     2755 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-grpc/pom.xml\n+-rw-r--r--  2.0 unx     2681 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-grpc/pom.xml\n -rw-r--r--  2.0 unx       69 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-grpc/pom.properties\n-34 files, 66406 bytes uncompressed, 21249 bytes compressed:  68.0%\n+34 files, 67350 bytes uncompressed, 21380 bytes compressed:  68.3%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -317,716 +317,648 @@\n 1BC9 Extract Zip Spec      14 (20) '2.0'\n 1BCA Extract OS            00 (0) 'MS-DOS'\n 1BCB General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n 1BCD Compression Method    0008 (8) 'Deflated'\n 1BCF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1BD3 CRC                   210B2AE8 (554380008)\n-1BD7 Compressed Size       00000406 (1030)\n-1BDB Uncompressed Size     00000A59 (2649)\n+1BD3 CRC                   01526E5B (22179419)\n+1BD7 Compressed Size       00000413 (1043)\n+1BDB Uncompressed Size     00000AA2 (2722)\n 1BDF Filename Length       003C (60)\n 1BE1 Extra Length          0000 (0)\n 1BE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x1BE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 1C1F PAYLOAD\n \n-2025 LOCAL HEADER #19      04034B50 (67324752)\n-2029 Extract Zip Spec      14 (20) '2.0'\n-202A Extract OS            00 (0) 'MS-DOS'\n-202B General Purpose Flag  0800 (2048)\n+2032 LOCAL HEADER #19      04034B50 (67324752)\n+2036 Extract Zip Spec      14 (20) '2.0'\n+2037 Extract OS            00 (0) 'MS-DOS'\n+2038 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-202D Compression Method    0008 (8) 'Deflated'\n-202F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2033 CRC                   C1CD2495 (3251446933)\n-2037 Compressed Size       000001F9 (505)\n-203B Uncompressed Size     0000036C (876)\n-203F Filename Length       0032 (50)\n-2041 Extra Length          0000 (0)\n-2043 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+203A Compression Method    0008 (8) 'Deflated'\n+203C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2040 CRC                   D457458D (3562489229)\n+2044 Compressed Size       000001FF (511)\n+2048 Uncompressed Size     00000381 (897)\n+204C Filename Length       0032 (50)\n+204E Extra Length          0000 (0)\n+2050 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2043: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2050: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2075 PAYLOAD\n+2082 PAYLOAD\n \n-226E LOCAL HEADER #20      04034B50 (67324752)\n-2272 Extract Zip Spec      14 (20) '2.0'\n-2273 Extract OS            00 (0) 'MS-DOS'\n-2274 General Purpose Flag  0800 (2048)\n+2281 LOCAL HEADER #20      04034B50 (67324752)\n+2285 Extract Zip Spec      14 (20) '2.0'\n+2286 Extract OS            00 (0) 'MS-DOS'\n+2287 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2276 Compression Method    0008 (8) 'Deflated'\n-2278 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-227C CRC                   C06931B4 (3228119476)\n-2280 Compressed Size       00000365 (869)\n-2284 Uncompressed Size     0000079E (1950)\n-2288 Filename Length       0035 (53)\n-228A Extra Length          0000 (0)\n-228C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2289 Compression Method    0008 (8) 'Deflated'\n+228B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+228F CRC                   73B49906 (1941215494)\n+2293 Compressed Size       0000036F (879)\n+2297 Uncompressed Size     000007C7 (1991)\n+229B Filename Length       0035 (53)\n+229D Extra Length          0000 (0)\n+229F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x228C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x229F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-22C1 PAYLOAD\n+22D4 PAYLOAD\n \n-2626 LOCAL HEADER #21      04034B50 (67324752)\n-262A Extract Zip Spec      14 (20) '2.0'\n-262B Extract OS            00 (0) 'MS-DOS'\n-262C General Purpose Flag  0800 (2048)\n+2643 LOCAL HEADER #21      04034B50 (67324752)\n+2647 Extract Zip Spec      14 (20) '2.0'\n+2648 Extract OS            00 (0) 'MS-DOS'\n+2649 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-262E Compression Method    0008 (8) 'Deflated'\n-2630 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2634 CRC                   89D2048F (2312242319)\n-2638 Compressed Size       000005A4 (1444)\n-263C Uncompressed Size     00000FE5 (4069)\n-2640 Filename Length       0033 (51)\n-2642 Extra Length          0000 (0)\n-2644 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+264B Compression Method    0008 (8) 'Deflated'\n+264D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2651 CRC                   7E6F88F1 (2121238769)\n+2655 Compressed Size       000005B1 (1457)\n+2659 Uncompressed Size     0000105B (4187)\n+265D Filename Length       0033 (51)\n+265F Extra Length          0000 (0)\n+2661 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2644: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2661: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2677 PAYLOAD\n+2694 PAYLOAD\n \n-2C1B LOCAL HEADER #22      04034B50 (67324752)\n-2C1F Extract Zip Spec      14 (20) '2.0'\n-2C20 Extract OS            00 (0) 'MS-DOS'\n-2C21 General Purpose Flag  0800 (2048)\n+2C45 LOCAL HEADER #22      04034B50 (67324752)\n+2C49 Extract Zip Spec      14 (20) '2.0'\n+2C4A Extract OS            00 (0) 'MS-DOS'\n+2C4B General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2C23 Compression Method    0008 (8) 'Deflated'\n-2C25 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2C29 CRC                   8EC3CE19 (2395196953)\n-2C2D Compressed Size       0000099A (2458)\n-2C31 Uncompressed Size     000028DB (10459)\n-2C35 Filename Length       0038 (56)\n-2C37 Extra Length          0000 (0)\n-2C39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C4D Compression Method    0008 (8) 'Deflated'\n+2C4F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2C53 CRC                   65B11F2E (1706106670)\n+2C57 Compressed Size       000009A9 (2473)\n+2C5B Uncompressed Size     000029BC (10684)\n+2C5F Filename Length       0038 (56)\n+2C61 Extra Length          0000 (0)\n+2C63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2C71 PAYLOAD\n+2C9B PAYLOAD\n \n-360B LOCAL HEADER #23      04034B50 (67324752)\n-360F Extract Zip Spec      14 (20) '2.0'\n-3610 Extract OS            00 (0) 'MS-DOS'\n-3611 General Purpose Flag  0800 (2048)\n+3644 LOCAL HEADER #23      04034B50 (67324752)\n+3648 Extract Zip Spec      14 (20) '2.0'\n+3649 Extract OS            00 (0) 'MS-DOS'\n+364A General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3613 Compression Method    0008 (8) 'Deflated'\n-3615 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3619 CRC                   672528B3 (1730488499)\n-361D Compressed Size       000009FC (2556)\n-3621 Uncompressed Size     00002110 (8464)\n-3625 Filename Length       0034 (52)\n-3627 Extra Length          0000 (0)\n-3629 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+364C Compression Method    0008 (8) 'Deflated'\n+364E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3652 CRC                   ECC477BE (3972298686)\n+3656 Compressed Size       00000A0E (2574)\n+365A Uncompressed Size     000021FB (8699)\n+365E Filename Length       0034 (52)\n+3660 Extra Length          0000 (0)\n+3662 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3629: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3662: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-365D PAYLOAD\n+3696 PAYLOAD\n \n-4059 LOCAL HEADER #24      04034B50 (67324752)\n-405D Extract Zip Spec      14 (20) '2.0'\n-405E Extract OS            00 (0) 'MS-DOS'\n-405F General Purpose Flag  0800 (2048)\n+40A4 LOCAL HEADER #24      04034B50 (67324752)\n+40A8 Extract Zip Spec      14 (20) '2.0'\n+40A9 Extract OS            00 (0) 'MS-DOS'\n+40AA General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-4061 Compression Method    0008 (8) 'Deflated'\n-4063 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-4067 CRC                   5C1106B9 (1544619705)\n-406B Compressed Size       000003EE (1006)\n-406F Uncompressed Size     00000A3E (2622)\n-4073 Filename Length       0044 (68)\n-4075 Extra Length          0000 (0)\n-4077 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+40AC Compression Method    0008 (8) 'Deflated'\n+40AE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+40B2 CRC                   67A5A923 (1738909987)\n+40B6 Compressed Size       000003FA (1018)\n+40BA Uncompressed Size     00000A93 (2707)\n+40BE Filename Length       0044 (68)\n+40C0 Extra Length          0000 (0)\n+40C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4077: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x40C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-40BB PAYLOAD\n+4106 PAYLOAD\n \n-44A9 LOCAL HEADER #25      04034B50 (67324752)\n-44AD Extract Zip Spec      14 (20) '2.0'\n-44AE Extract OS            00 (0) 'MS-DOS'\n-44AF General Purpose Flag  0800 (2048)\n+4500 LOCAL HEADER #25      04034B50 (67324752)\n+4504 Extract Zip Spec      14 (20) '2.0'\n+4505 Extract OS            00 (0) 'MS-DOS'\n+4506 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-44B1 Compression Method    0008 (8) 'Deflated'\n-44B3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-44B7 CRC                   1C86279A (478554010)\n-44BB Compressed Size       00000258 (600)\n-44BF Uncompressed Size     00000446 (1094)\n-44C3 Filename Length       0046 (70)\n-44C5 Extra Length          0000 (0)\n-44C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4508 Compression Method    0008 (8) 'Deflated'\n+450A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+450E CRC                   63B2617E (1672634750)\n+4512 Compressed Size       00000263 (611)\n+4516 Uncompressed Size     00000460 (1120)\n+451A Filename Length       0046 (70)\n+451C Extra Length          0000 (0)\n+451E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x44C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x451E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-450D PAYLOAD\n+4564 PAYLOAD\n \n-4765 LOCAL HEADER #26      04034B50 (67324752)\n-4769 Extract Zip Spec      14 (20) '2.0'\n-476A Extract OS            00 (0) 'MS-DOS'\n-476B General Purpose Flag  0800 (2048)\n+47C7 LOCAL HEADER #26      04034B50 (67324752)\n+47CB Extract Zip Spec      14 (20) '2.0'\n+47CC Extract OS            00 (0) 'MS-DOS'\n+47CD General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-476D Compression Method    0008 (8) 'Deflated'\n-476F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-4773 CRC                   E37CC454 (3816604756)\n-4777 Compressed Size       0000029A (666)\n-477B Uncompressed Size     000005B2 (1458)\n-477F Filename Length       0045 (69)\n-4781 Extra Length          0000 (0)\n-4783 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+47CF Compression Method    0008 (8) 'Deflated'\n+47D1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+47D5 CRC                   1AFA4B4D (452610893)\n+47D9 Compressed Size       000002A1 (673)\n+47DD Uncompressed Size     000005DB (1499)\n+47E1 Filename Length       0045 (69)\n+47E3 Extra Length          0000 (0)\n+47E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4783: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x47E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-47C8 PAYLOAD\n+482A PAYLOAD\n \n-4A62 LOCAL HEADER #27      04034B50 (67324752)\n-4A66 Extract Zip Spec      14 (20) '2.0'\n-4A67 Extract OS            00 (0) 'MS-DOS'\n-4A68 General Purpose Flag  0800 (2048)\n+4ACB LOCAL HEADER #27      04034B50 (67324752)\n+4ACF Extract Zip Spec      14 (20) '2.0'\n+4AD0 Extract OS            00 (0) 'MS-DOS'\n+4AD1 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-4A6A Compression Method    0008 (8) 'Deflated'\n-4A6C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-4A70 CRC                   2C4E86BA (743343802)\n-4A74 Compressed Size       000005DE (1502)\n-4A78 Uncompressed Size     00001120 (4384)\n-4A7C Filename Length       004A (74)\n-4A7E Extra Length          0000 (0)\n-4A80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4AD3 Compression Method    0008 (8) 'Deflated'\n+4AD5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+4AD9 CRC                   25DC5E62 (635199074)\n+4ADD Compressed Size       000005EC (1516)\n+4AE1 Uncompressed Size     00001184 (4484)\n+4AE5 Filename Length       004A (74)\n+4AE7 Extra Length          0000 (0)\n+4AE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4A80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4AE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4ACA PAYLOAD\n+4B33 PAYLOAD\n \n-50A8 LOCAL HEADER #28      04034B50 (67324752)\n-50AC Extract Zip Spec      14 (20) '2.0'\n-50AD Extract OS            00 (0) 'MS-DOS'\n-50AE General Purpose Flag  0800 (2048)\n+511F LOCAL HEADER #28      04034B50 (67324752)\n+5123 Extract Zip Spec      14 (20) '2.0'\n+5124 Extract OS            00 (0) 'MS-DOS'\n+5125 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-50B0 Compression Method    0008 (8) 'Deflated'\n-50B2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-50B6 CRC                   592F92C2 (1496289986)\n-50BA Compressed Size       00000258 (600)\n-50BE Uncompressed Size     00000446 (1094)\n-50C2 Filename Length       0046 (70)\n-50C4 Extra Length          0000 (0)\n-50C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5127 Compression Method    0008 (8) 'Deflated'\n+5129 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+512D CRC                   AADBB488 (2866525320)\n+5131 Compressed Size       00000262 (610)\n+5135 Uncompressed Size     00000460 (1120)\n+5139 Filename Length       0046 (70)\n+513B Extra Length          0000 (0)\n+513D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x50C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x513D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-510C PAYLOAD\n+5183 PAYLOAD\n \n-5364 LOCAL HEADER #29      04034B50 (67324752)\n-5368 Extract Zip Spec      14 (20) '2.0'\n-5369 Extract OS            00 (0) 'MS-DOS'\n-536A General Purpose Flag  0800 (2048)\n+53E5 LOCAL HEADER #29      04034B50 (67324752)\n+53E9 Extract Zip Spec      14 (20) '2.0'\n+53EA Extract OS            00 (0) 'MS-DOS'\n+53EB General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-536C Compression Method    0008 (8) 'Deflated'\n-536E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5372 CRC                   7BC2ED93 (2076372371)\n-5376 Compressed Size       00000265 (613)\n-537A Uncompressed Size     00000461 (1121)\n-537E Filename Length       004A (74)\n-5380 Extra Length          0000 (0)\n-5382 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+53ED Compression Method    0008 (8) 'Deflated'\n+53EF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+53F3 CRC                   BEF6AA62 (3203836514)\n+53F7 Compressed Size       0000026E (622)\n+53FB Uncompressed Size     0000047C (1148)\n+53FF Filename Length       004A (74)\n+5401 Extra Length          0000 (0)\n+5403 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5382: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5403: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53CC PAYLOAD\n+544D PAYLOAD\n \n-5631 LOCAL HEADER #30      04034B50 (67324752)\n-5635 Extract Zip Spec      14 (20) '2.0'\n-5636 Extract OS            00 (0) 'MS-DOS'\n-5637 General Purpose Flag  0800 (2048)\n+56BB LOCAL HEADER #30      04034B50 (67324752)\n+56BF Extract Zip Spec      14 (20) '2.0'\n+56C0 Extract OS            00 (0) 'MS-DOS'\n+56C1 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-5639 Compression Method    0008 (8) 'Deflated'\n-563B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-563F CRC                   5B557C1B (1532328987)\n-5643 Compressed Size       0000002C (44)\n-5647 Uncompressed Size     00000034 (52)\n-564B Filename Length       0035 (53)\n-564D Extra Length          0000 (0)\n-564F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+56C3 Compression Method    0008 (8) 'Deflated'\n+56C5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+56C9 CRC                   5B557C1B (1532328987)\n+56CD Compressed Size       0000002C (44)\n+56D1 Uncompressed Size     00000034 (52)\n+56D5 Filename Length       0035 (53)\n+56D7 Extra Length          0000 (0)\n+56D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x564F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x56D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5684 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+570E PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-56B0 LOCAL HEADER #31      04034B50 (67324752)\n-56B4 Extract Zip Spec      14 (20) '2.0'\n-56B5 Extract OS            00 (0) 'MS-DOS'\n-56B6 General Purpose Flag  0800 (2048)\n+573A LOCAL HEADER #31      04034B50 (67324752)\n+573E Extract Zip Spec      14 (20) '2.0'\n+573F Extract OS            00 (0) 'MS-DOS'\n+5740 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-56B8 Compression Method    0008 (8) 'Deflated'\n-56BA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-56BE CRC                   6F1FEDD0 (1864363472)\n-56C2 Compressed Size       0000003F (63)\n-56C6 Uncompressed Size     0000004D (77)\n-56CA Filename Length       0059 (89)\n-56CC Extra Length          0000 (0)\n-56CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5742 Compression Method    0008 (8) 'Deflated'\n+5744 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5748 CRC                   6F1FEDD0 (1864363472)\n+574C Compressed Size       0000003F (63)\n+5750 Uncompressed Size     0000004D (77)\n+5754 Filename Length       0059 (89)\n+5756 Extra Length          0000 (0)\n+5758 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x56CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5758: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5727 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+57B1 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-5766 LOCAL HEADER #32      04034B50 (67324752)\n-576A Extract Zip Spec      14 (20) '2.0'\n-576B Extract OS            00 (0) 'MS-DOS'\n-576C General Purpose Flag  0800 (2048)\n+57F0 LOCAL HEADER #32      04034B50 (67324752)\n+57F4 Extract Zip Spec      14 (20) '2.0'\n+57F5 Extract OS            00 (0) 'MS-DOS'\n+57F6 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-576E Compression Method    0008 (8) 'Deflated'\n-5770 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5774 CRC                   6F1FEDD0 (1864363472)\n-5778 Compressed Size       0000003F (63)\n-577C Uncompressed Size     0000004D (77)\n-5780 Filename Length       0059 (89)\n-5782 Extra Length          0000 (0)\n-5784 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+57F8 Compression Method    0008 (8) 'Deflated'\n+57FA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+57FE CRC                   6F1FEDD0 (1864363472)\n+5802 Compressed Size       0000003F (63)\n+5806 Uncompressed Size     0000004D (77)\n+580A Filename Length       0059 (89)\n+580C Extra Length          0000 (0)\n+580E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5784: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x580E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-57DD PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5867 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-581C LOCAL HEADER #33      04034B50 (67324752)\n-5820 Extract Zip Spec      14 (20) '2.0'\n-5821 Extract OS            00 (0) 'MS-DOS'\n-5822 General Purpose Flag  0800 (2048)\n+58A6 LOCAL HEADER #33      04034B50 (67324752)\n+58AA Extract Zip Spec      14 (20) '2.0'\n+58AB Extract OS            00 (0) 'MS-DOS'\n+58AC General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-5824 Compression Method    0008 (8) 'Deflated'\n-5826 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-582A CRC                   6EE94123 (1860780323)\n-582E Compressed Size       000003B2 (946)\n-5832 Uncompressed Size     00000AC3 (2755)\n-5836 Filename Length       0036 (54)\n-5838 Extra Length          0000 (0)\n-583A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+58AE Compression Method    0008 (8) 'Deflated'\n+58B0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+58B4 CRC                   C105B8EB (3238377707)\n+58B8 Compressed Size       000003AB (939)\n+58BC Uncompressed Size     00000A79 (2681)\n+58C0 Filename Length       0036 (54)\n+58C2 Extra Length          0000 (0)\n+58C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x583A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x58C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5870 PAYLOAD\n+58FA PAYLOAD\n \n-5C22 LOCAL HEADER #34      04034B50 (67324752)\n-5C26 Extract Zip Spec      14 (20) '2.0'\n-5C27 Extract OS            00 (0) 'MS-DOS'\n-5C28 General Purpose Flag  0800 (2048)\n+5CA5 LOCAL HEADER #34      04034B50 (67324752)\n+5CA9 Extract Zip Spec      14 (20) '2.0'\n+5CAA Extract OS            00 (0) 'MS-DOS'\n+5CAB General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-5C2A Compression Method    0008 (8) 'Deflated'\n-5C2C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5C30 CRC                   86FC6C16 (2264689686)\n-5C34 Compressed Size       00000041 (65)\n-5C38 Uncompressed Size     00000045 (69)\n-5C3C Filename Length       003D (61)\n-5C3E Extra Length          0000 (0)\n-5C40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5CAD Compression Method    0008 (8) 'Deflated'\n+5CAF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5CB3 CRC                   86FC6C16 (2264689686)\n+5CB7 Compressed Size       00000041 (65)\n+5CBB Uncompressed Size     00000045 (69)\n+5CBF Filename Length       003D (61)\n+5CC1 Extra Length          0000 (0)\n+5CC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5C40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5CC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5C7D PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5D00 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-5CBE CENTRAL HEADER #1     02014B50 (33639248)\n-5CC2 Created Zip Spec      14 (20) '2.0'\n-5CC3 Created OS            03 (3) 'Unix'\n-5CC4 Extract Zip Spec      14 (20) '2.0'\n-5CC5 Extract OS            00 (0) 'MS-DOS'\n-5CC6 General Purpose Flag  0800 (2048)\n+5D41 CENTRAL HEADER #1     02014B50 (33639248)\n+5D45 Created Zip Spec      14 (20) '2.0'\n+5D46 Created OS            03 (3) 'Unix'\n+5D47 Extract Zip Spec      14 (20) '2.0'\n+5D48 Extract OS            00 (0) 'MS-DOS'\n+5D49 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-5CC8 Compression Method    0008 (8) 'Deflated'\n-5CCA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5CCE CRC                   A689EB18 (2794056472)\n-5CD2 Compressed Size       00000042 (66)\n-5CD6 Uncompressed Size     00000040 (64)\n-5CDA Filename Length       0014 (20)\n-5CDC Extra Length          0000 (0)\n-5CDE Comment Length        0000 (0)\n-5CE0 Disk Start            0000 (0)\n-5CE2 Int File Attributes   0000 (0)\n+5D4B Compression Method    0008 (8) 'Deflated'\n+5D4D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5D51 CRC                   A689EB18 (2794056472)\n+5D55 Compressed Size       00000042 (66)\n+5D59 Uncompressed Size     00000040 (64)\n+5D5D Filename Length       0014 (20)\n+5D5F Extra Length          0000 (0)\n+5D61 Comment Length        0000 (0)\n+5D63 Disk Start            0000 (0)\n+5D65 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5CE4 Ext File Attributes   81A40000 (2175008768)\n+5D67 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-5CE8 Local Header Offset   00000000 (0)\n-5CEC Filename              'XXXXXXXXXXXXXXXXXXXX'\n+5D6B Local Header Offset   00000000 (0)\n+5D6F Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5CEC: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5D6F: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-5D00 CENTRAL HEADER #2     02014B50 (33639248)\n-5D04 Created Zip Spec      14 (20) '2.0'\n-5D05 Created OS            03 (3) 'Unix'\n-5D06 Extract Zip Spec      0A (10) '1.0'\n-5D07 Extract OS            00 (0) 'MS-DOS'\n-5D08 General Purpose Flag  0800 (2048)\n+5D83 CENTRAL HEADER #2     02014B50 (33639248)\n+5D87 Created Zip Spec      14 (20) '2.0'\n+5D88 Created OS            03 (3) 'Unix'\n+5D89 Extract Zip Spec      0A (10) '1.0'\n+5D8A Extract OS            00 (0) 'MS-DOS'\n+5D8B General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-5D0A Compression Method    0000 (0) 'Stored'\n-5D0C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5D10 CRC                   00000000 (0)\n-5D14 Compressed Size       00000000 (0)\n-5D18 Uncompressed Size     00000000 (0)\n-5D1C Filename Length       0009 (9)\n-5D1E Extra Length          0000 (0)\n-5D20 Comment Length        0000 (0)\n-5D22 Disk Start            0000 (0)\n-5D24 Int File Attributes   0000 (0)\n+5D8D Compression Method    0000 (0) 'Stored'\n+5D8F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5D93 CRC                   00000000 (0)\n+5D97 Compressed Size       00000000 (0)\n+5D9B Uncompressed Size     00000000 (0)\n+5D9F Filename Length       0009 (9)\n+5DA1 Extra Length          0000 (0)\n+5DA3 Comment Length        0000 (0)\n+5DA5 Disk Start            0000 (0)\n+5DA7 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5D26 Ext File Attributes   41ED0010 (1106051088)\n+5DA9 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5D2A Local Header Offset   00000074 (116)\n-5D2E Filename              'XXXXXXXXX'\n+5DAD Local Header Offset   00000074 (116)\n+5DB1 Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0x5D2E: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0x5DB1: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5D2E: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x5DB1: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5D06: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0x5D89: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-5D37 CENTRAL HEADER #3     02014B50 (33639248)\n-5D3B Created Zip Spec      14 (20) '2.0'\n-5D3C Created OS            03 (3) 'Unix'\n-5D3D Extract Zip Spec      0A (10) '1.0'\n-5D3E Extract OS            00 (0) 'MS-DOS'\n-5D3F General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5D41 Compression Method    0000 (0) 'Stored'\n-5D43 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5D47 CRC                   00000000 (0)\n-5D4B Compressed Size       00000000 (0)\n-5D4F Uncompressed Size     00000000 (0)\n-5D53 Filename Length       0004 (4)\n-5D55 Extra Length          0000 (0)\n-5D57 Comment Length        0000 (0)\n-5D59 Disk Start            0000 (0)\n-5D5B Int File Attributes   0000 (0)\n+5DBA CENTRAL HEADER #3     02014B50 (33639248)\n+5DBE Created Zip Spec      14 (20) '2.0'\n+5DBF Created OS            03 (3) 'Unix'\n+5DC0 Extract Zip Spec      0A (10) '1.0'\n+5DC1 Extract OS            00 (0) 'MS-DOS'\n+5DC2 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+5DC4 Compression Method    0000 (0) 'Stored'\n+5DC6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5DCA CRC                   00000000 (0)\n+5DCE Compressed Size       00000000 (0)\n+5DD2 Uncompressed Size     00000000 (0)\n+5DD6 Filename Length       0004 (4)\n+5DD8 Extra Length          0000 (0)\n+5DDA Comment Length        0000 (0)\n+5DDC Disk Start            0000 (0)\n+5DDE Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5D5D Ext File Attributes   41ED0010 (1106051088)\n+5DE0 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5D61 Local Header Offset   0000009B (155)\n-5D65 Filename              'XXXX'\n+5DE4 Local Header Offset   0000009B (155)\n+5DE8 Filename              'XXXX'\n #\n-# WARNING: Offset 0x5D65: Filename 'XXXX'\n+# WARNING: Offset 0x5DE8: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5D65: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x5DE8: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5D3D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x5DC0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-5D69 CENTRAL HEADER #4     02014B50 (33639248)\n-5D6D Created Zip Spec      14 (20) '2.0'\n-5D6E Created OS            03 (3) 'Unix'\n-5D6F Extract Zip Spec      0A (10) '1.0'\n-5D70 Extract OS            00 (0) 'MS-DOS'\n-5D71 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5D73 Compression Method    0000 (0) 'Stored'\n-5D75 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5D79 CRC                   00000000 (0)\n-5D7D Compressed Size       00000000 (0)\n-5D81 Uncompressed Size     00000000 (0)\n-5D85 Filename Length       000B (11)\n-5D87 Extra Length          0000 (0)\n-5D89 Comment Length        0000 (0)\n-5D8B Disk Start            0000 (0)\n-5D8D Int File Attributes   0000 (0)\n+5DEC CENTRAL HEADER #4     02014B50 (33639248)\n+5DF0 Created Zip Spec      14 (20) '2.0'\n+5DF1 Created OS            03 (3) 'Unix'\n+5DF2 Extract Zip Spec      0A (10) '1.0'\n+5DF3 Extract OS            00 (0) 'MS-DOS'\n+5DF4 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+5DF6 Compression Method    0000 (0) 'Stored'\n+5DF8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5DFC CRC                   00000000 (0)\n+5E00 Compressed Size       00000000 (0)\n+5E04 Uncompressed Size     00000000 (0)\n+5E08 Filename Length       000B (11)\n+5E0A Extra Length          0000 (0)\n+5E0C Comment Length        0000 (0)\n+5E0E Disk Start            0000 (0)\n+5E10 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5D8F Ext File Attributes   41ED0010 (1106051088)\n+5E12 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5D93 Local Header Offset   000000BD (189)\n-5D97 Filename              'XXXXXXXXXXX'\n+5E16 Local Header Offset   000000BD (189)\n+5E1A Filename              'XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5D97: Filename 'XXXXXXXXXXX'\n+# WARNING: Offset 0x5E1A: Filename 'XXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5D97: Directory 'XXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x5E1A: Directory 'XXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5D6F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+# WARNING: Offset 0x5DF2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n #\n \n-5DA2 CENTRAL HEADER #5     02014B50 (33639248)\n-5DA6 Created Zip Spec      14 (20) '2.0'\n-5DA7 Created OS            03 (3) 'Unix'\n-5DA8 Extract Zip Spec      0A (10) '1.0'\n-5DA9 Extract OS            00 (0) 'MS-DOS'\n-5DAA General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5DAC Compression Method    0000 (0) 'Stored'\n-5DAE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5DB2 CRC                   00000000 (0)\n-5DB6 Compressed Size       00000000 (0)\n-5DBA Uncompressed Size     00000000 (0)\n-5DBE Filename Length       0011 (17)\n-5DC0 Extra Length          0000 (0)\n-5DC2 Comment Length        0000 (0)\n-5DC4 Disk Start            0000 (0)\n-5DC6 Int File Attributes   0000 (0)\n+5E25 CENTRAL HEADER #5     02014B50 (33639248)\n+5E29 Created Zip Spec      14 (20) '2.0'\n+5E2A Created OS            03 (3) 'Unix'\n+5E2B Extract Zip Spec      0A (10) '1.0'\n+5E2C Extract OS            00 (0) 'MS-DOS'\n+5E2D General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+5E2F Compression Method    0000 (0) 'Stored'\n+5E31 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5E35 CRC                   00000000 (0)\n+5E39 Compressed Size       00000000 (0)\n+5E3D Uncompressed Size     00000000 (0)\n+5E41 Filename Length       0011 (17)\n+5E43 Extra Length          0000 (0)\n+5E45 Comment Length        0000 (0)\n+5E47 Disk Start            0000 (0)\n+5E49 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5DC8 Ext File Attributes   41ED0010 (1106051088)\n+5E4B Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5DCC Local Header Offset   000000E6 (230)\n-5DD0 Filename              'XXXXXXXXXXXXXXXXX'\n+5E4F Local Header Offset   000000E6 (230)\n+5E53 Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5DD0: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5E53: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5DD0: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x5E53: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5DA8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5E2B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-5DE1 CENTRAL HEADER #6     02014B50 (33639248)\n-5DE5 Created Zip Spec      14 (20) '2.0'\n-5DE6 Created OS            03 (3) 'Unix'\n-5DE7 Extract Zip Spec      0A (10) '1.0'\n-5DE8 Extract OS            00 (0) 'MS-DOS'\n-5DE9 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5DEB Compression Method    0000 (0) 'Stored'\n-5DED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5DF1 CRC                   00000000 (0)\n-5DF5 Compressed Size       00000000 (0)\n-5DF9 Uncompressed Size     00000000 (0)\n-5DFD Filename Length       0015 (21)\n-5DFF Extra Length          0000 (0)\n-5E01 Comment Length        0000 (0)\n-5E03 Disk Start            0000 (0)\n-5E05 Int File Attributes   0000 (0)\n+5E64 CENTRAL HEADER #6     02014B50 (33639248)\n+5E68 Created Zip Spec      14 (20) '2.0'\n+5E69 Created OS            03 (3) 'Unix'\n+5E6A Extract Zip Spec      0A (10) '1.0'\n+5E6B Extract OS            00 (0) 'MS-DOS'\n+5E6C General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+5E6E Compression Method    0000 (0) 'Stored'\n+5E70 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5E74 CRC                   00000000 (0)\n+5E78 Compressed Size       00000000 (0)\n+5E7C Uncompressed Size     00000000 (0)\n+5E80 Filename Length       0015 (21)\n+5E82 Extra Length          0000 (0)\n+5E84 Comment Length        0000 (0)\n+5E86 Disk Start            0000 (0)\n+5E88 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5E07 Ext File Attributes   41ED0010 (1106051088)\n+5E8A Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5E0B Local Header Offset   00000115 (277)\n-5E0F Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+5E8E Local Header Offset   00000115 (277)\n+5E92 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5E0F: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5E92: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5E0F: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x5E92: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5DE7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5E6A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n #\n \n-5E24 CENTRAL HEADER #7     02014B50 (33639248)\n-5E28 Created Zip Spec      14 (20) '2.0'\n-5E29 Created OS            03 (3) 'Unix'\n-5E2A Extract Zip Spec      0A (10) '1.0'\n-5E2B Extract OS            00 (0) 'MS-DOS'\n-5E2C General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5E2E Compression Method    0000 (0) 'Stored'\n-5E30 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5E34 CRC                   00000000 (0)\n-5E38 Compressed Size       00000000 (0)\n-5E3C Uncompressed Size     00000000 (0)\n-5E40 Filename Length       001E (30)\n-5E42 Extra Length          0000 (0)\n-5E44 Comment Length        0000 (0)\n-5E46 Disk Start            0000 (0)\n-5E48 Int File Attributes   0000 (0)\n+5EA7 CENTRAL HEADER #7     02014B50 (33639248)\n+5EAB Created Zip Spec      14 (20) '2.0'\n+5EAC Created OS            03 (3) 'Unix'\n+5EAD Extract Zip Spec      0A (10) '1.0'\n+5EAE Extract OS            00 (0) 'MS-DOS'\n+5EAF General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+5EB1 Compression Method    0000 (0) 'Stored'\n+5EB3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5EB7 CRC                   00000000 (0)\n+5EBB Compressed Size       00000000 (0)\n+5EBF Uncompressed Size     00000000 (0)\n+5EC3 Filename Length       001E (30)\n+5EC5 Extra Length          0000 (0)\n+5EC7 Comment Length        0000 (0)\n+5EC9 Disk Start            0000 (0)\n+5ECB Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5E4A Ext File Attributes   41ED0010 (1106051088)\n+5ECD Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5E4E Local Header Offset   00000148 (328)\n-5E52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5ED1 Local Header Offset   00000148 (328)\n+5ED5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5E52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5ED5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5E52: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x5ED5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5E2A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5EAD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-5E70 CENTRAL HEADER #8     02014B50 (33639248)\n-5E74 Created Zip Spec      14 (20) '2.0'\n-5E75 Created OS            03 (3) 'Unix'\n-5E76 Extract Zip Spec      0A (10) '1.0'\n-5E77 Extract OS            00 (0) 'MS-DOS'\n-5E78 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5E7A Compression Method    0000 (0) 'Stored'\n-5E7C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5E80 CRC                   00000000 (0)\n-5E84 Compressed Size       00000000 (0)\n-5E88 Uncompressed Size     00000000 (0)\n-5E8C Filename Length       0023 (35)\n-5E8E Extra Length          0000 (0)\n-5E90 Comment Length        0000 (0)\n-5E92 Disk Start            0000 (0)\n-5E94 Int File Attributes   0000 (0)\n+5EF3 CENTRAL HEADER #8     02014B50 (33639248)\n+5EF7 Created Zip Spec      14 (20) '2.0'\n+5EF8 Created OS            03 (3) 'Unix'\n+5EF9 Extract Zip Spec      0A (10) '1.0'\n+5EFA Extract OS            00 (0) 'MS-DOS'\n+5EFB General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+5EFD Compression Method    0000 (0) 'Stored'\n+5EFF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5F03 CRC                   00000000 (0)\n+5F07 Compressed Size       00000000 (0)\n+5F0B Uncompressed Size     00000000 (0)\n+5F0F Filename Length       0023 (35)\n+5F11 Extra Length          0000 (0)\n+5F13 Comment Length        0000 (0)\n+5F15 Disk Start            0000 (0)\n+5F17 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5E96 Ext File Attributes   41ED0010 (1106051088)\n+5F19 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5E9A Local Header Offset   00000184 (388)\n-5E9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F1D Local Header Offset   00000184 (388)\n+5F21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5E9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5E9E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x5F21: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5E76: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5EF9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-5EC1 CENTRAL HEADER #9     02014B50 (33639248)\n-5EC5 Created Zip Spec      14 (20) '2.0'\n-5EC6 Created OS            03 (3) 'Unix'\n-5EC7 Extract Zip Spec      0A (10) '1.0'\n-5EC8 Extract OS            00 (0) 'MS-DOS'\n-5EC9 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5ECB Compression Method    0000 (0) 'Stored'\n-5ECD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5ED1 CRC                   00000000 (0)\n-5ED5 Compressed Size       00000000 (0)\n-5ED9 Uncompressed Size     00000000 (0)\n-5EDD Filename Length       0030 (48)\n-5EDF Extra Length          0000 (0)\n-5EE1 Comment Length        0000 (0)\n-5EE3 Disk Start            0000 (0)\n-5EE5 Int File Attributes   0000 (0)\n+5F44 CENTRAL HEADER #9     02014B50 (33639248)\n+5F48 Created Zip Spec      14 (20) '2.0'\n+5F49 Created OS            03 (3) 'Unix'\n+5F4A Extract Zip Spec      0A (10) '1.0'\n+5F4B Extract OS            00 (0) 'MS-DOS'\n+5F4C General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+5F4E Compression Method    0000 (0) 'Stored'\n+5F50 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5F54 CRC                   00000000 (0)\n+5F58 Compressed Size       00000000 (0)\n+5F5C Uncompressed Size     00000000 (0)\n+5F60 Filename Length       0030 (48)\n+5F62 Extra Length          0000 (0)\n+5F64 Comment Length        0000 (0)\n+5F66 Disk Start            0000 (0)\n+5F68 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-5EE7 Ext File Attributes   41ED0010 (1106051088)\n+5F6A Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5EEB Local Header Offset   000001C5 (453)\n-5EEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5F6E Local Header Offset   000001C5 (453)\n+5F72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5EEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x5EEF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x5F72: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5EC7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F4A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-5F1F CENTRAL HEADER #10    02014B50 (33639248)\n-5F23 Created Zip Spec      14 (20) '2.0'\n-5F24 Created OS            03 (3) 'Unix'\n-5F25 Extract Zip Spec      0A (10) '1.0'\n-5F26 Extract OS            00 (0) 'MS-DOS'\n-5F27 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5F29 Compression Method    0000 (0) 'Stored'\n-5F2B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5F2F CRC                   00000000 (0)\n-5F33 Compressed Size       00000000 (0)\n-5F37 Uncompressed Size     00000000 (0)\n-5F3B Filename Length       000F (15)\n-5F3D Extra Length          0000 (0)\n-5F3F Comment Length        0000 (0)\n-5F41 Disk Start            0000 (0)\n-5F43 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-5F45 Ext File Attributes   41ED0010 (1106051088)\n-     [Bit 4]               Directory\n-     [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n-     [Bits 28-31]          04 (4) 'Directory'\n-5F49 Local Header Offset   00000213 (531)\n-5F4D Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F4D: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-# ERROR: Offset 0x5F4D: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n-#        'External Attributes' flag this as a directory\n-#\n-# WARNING: Offset 0x5F25: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n-#\n-\n-5F5C CENTRAL HEADER #11    02014B50 (33639248)\n-5F60 Created Zip Spec      14 (20) '2.0'\n-5F61 Created OS            03 (3) 'Unix'\n-5F62 Extract Zip Spec      0A (10) '1.0'\n-5F63 Extract OS            00 (0) 'MS-DOS'\n-5F64 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-5F66 Compression Method    0000 (0) 'Stored'\n-5F68 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5F6C CRC                   00000000 (0)\n-5F70 Compressed Size       00000000 (0)\n-5F74 Uncompressed Size     00000000 (0)\n-5F78 Filename Length       0018 (24)\n-5F7A Extra Length          0000 (0)\n-5F7C Comment Length        0000 (0)\n-5F7E Disk Start            0000 (0)\n-5F80 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-5F82 Ext File Attributes   41ED0010 (1106051088)\n-     [Bit 4]               Directory\n-     [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n-     [Bits 28-31]          04 (4) 'Directory'\n-5F86 Local Header Offset   00000240 (576)\n-5F8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-# ERROR: Offset 0x5F8A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n-#        'External Attributes' flag this as a directory\n-#\n-# WARNING: Offset 0x5F62: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-\n-5FA2 CENTRAL HEADER #12    02014B50 (33639248)\n+5FA2 CENTRAL HEADER #10    02014B50 (33639248)\n 5FA6 Created Zip Spec      14 (20) '2.0'\n 5FA7 Created OS            03 (3) 'Unix'\n 5FA8 Extract Zip Spec      0A (10) '1.0'\n 5FA9 Extract OS            00 (0) 'MS-DOS'\n 5FAA General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n 5FAC Compression Method    0000 (0) 'Stored'\n@@ -1040,680 +972,748 @@\n 5FC4 Disk Start            0000 (0)\n 5FC6 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n 5FC8 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-5FCC Local Header Offset   00000276 (630)\n+5FCC Local Header Offset   00000213 (531)\n 5FD0 Filename              'XXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x5FD0: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n # ERROR: Offset 0x5FD0: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n # WARNING: Offset 0x5FA8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-5FDF CENTRAL HEADER #13    02014B50 (33639248)\n+5FDF CENTRAL HEADER #11    02014B50 (33639248)\n 5FE3 Created Zip Spec      14 (20) '2.0'\n 5FE4 Created OS            03 (3) 'Unix'\n 5FE5 Extract Zip Spec      0A (10) '1.0'\n 5FE6 Extract OS            00 (0) 'MS-DOS'\n 5FE7 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n 5FE9 Compression Method    0000 (0) 'Stored'\n 5FEB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n 5FEF CRC                   00000000 (0)\n 5FF3 Compressed Size       00000000 (0)\n 5FF7 Uncompressed Size     00000000 (0)\n-5FFB Filename Length       0020 (32)\n+5FFB Filename Length       0018 (24)\n 5FFD Extra Length          0000 (0)\n 5FFF Comment Length        0000 (0)\n 6001 Disk Start            0000 (0)\n 6003 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n 6005 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-6009 Local Header Offset   000002A3 (675)\n-600D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6009 Local Header Offset   00000240 (576)\n+600D Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x600D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+# ERROR: Offset 0x600D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+#        'External Attributes' flag this as a directory\n+#\n+# WARNING: Offset 0x5FE5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+\n+6025 CENTRAL HEADER #12    02014B50 (33639248)\n+6029 Created Zip Spec      14 (20) '2.0'\n+602A Created OS            03 (3) 'Unix'\n+602B Extract Zip Spec      0A (10) '1.0'\n+602C Extract OS            00 (0) 'MS-DOS'\n+602D General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+602F Compression Method    0000 (0) 'Stored'\n+6031 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6035 CRC                   00000000 (0)\n+6039 Compressed Size       00000000 (0)\n+603D Uncompressed Size     00000000 (0)\n+6041 Filename Length       000F (15)\n+6043 Extra Length          0000 (0)\n+6045 Comment Length        0000 (0)\n+6047 Disk Start            0000 (0)\n+6049 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+604B Ext File Attributes   41ED0010 (1106051088)\n+     [Bit 4]               Directory\n+     [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n+     [Bits 28-31]          04 (4) 'Directory'\n+604F Local Header Offset   00000276 (630)\n+6053 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6053: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+# ERROR: Offset 0x6053: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+#        'External Attributes' flag this as a directory\n+#\n+# WARNING: Offset 0x602B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+#\n+\n+6062 CENTRAL HEADER #13    02014B50 (33639248)\n+6066 Created Zip Spec      14 (20) '2.0'\n+6067 Created OS            03 (3) 'Unix'\n+6068 Extract Zip Spec      0A (10) '1.0'\n+6069 Extract OS            00 (0) 'MS-DOS'\n+606A General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+606C Compression Method    0000 (0) 'Stored'\n+606E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6072 CRC                   00000000 (0)\n+6076 Compressed Size       00000000 (0)\n+607A Uncompressed Size     00000000 (0)\n+607E Filename Length       0020 (32)\n+6080 Extra Length          0000 (0)\n+6082 Comment Length        0000 (0)\n+6084 Disk Start            0000 (0)\n+6086 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+6088 Ext File Attributes   41ED0010 (1106051088)\n+     [Bit 4]               Directory\n+     [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n+     [Bits 28-31]          04 (4) 'Directory'\n+608C Local Header Offset   000002A3 (675)\n+6090 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x600D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6090: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x600D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x6090: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x5FE5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6068: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-602D CENTRAL HEADER #14    02014B50 (33639248)\n-6031 Created Zip Spec      14 (20) '2.0'\n-6032 Created OS            03 (3) 'Unix'\n-6033 Extract Zip Spec      0A (10) '1.0'\n-6034 Extract OS            00 (0) 'MS-DOS'\n-6035 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-6037 Compression Method    0000 (0) 'Stored'\n-6039 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-603D CRC                   00000000 (0)\n-6041 Compressed Size       00000000 (0)\n-6045 Uncompressed Size     00000000 (0)\n-6049 Filename Length       002F (47)\n-604B Extra Length          0000 (0)\n-604D Comment Length        0000 (0)\n-604F Disk Start            0000 (0)\n-6051 Int File Attributes   0000 (0)\n+60B0 CENTRAL HEADER #14    02014B50 (33639248)\n+60B4 Created Zip Spec      14 (20) '2.0'\n+60B5 Created OS            03 (3) 'Unix'\n+60B6 Extract Zip Spec      0A (10) '1.0'\n+60B7 Extract OS            00 (0) 'MS-DOS'\n+60B8 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+60BA Compression Method    0000 (0) 'Stored'\n+60BC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+60C0 CRC                   00000000 (0)\n+60C4 Compressed Size       00000000 (0)\n+60C8 Uncompressed Size     00000000 (0)\n+60CC Filename Length       002F (47)\n+60CE Extra Length          0000 (0)\n+60D0 Comment Length        0000 (0)\n+60D2 Disk Start            0000 (0)\n+60D4 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6053 Ext File Attributes   41ED0010 (1106051088)\n+60D6 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-6057 Local Header Offset   000002E1 (737)\n-605B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+60DA Local Header Offset   000002E1 (737)\n+60DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x605B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x60DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x605B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x60DE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x6033: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x60B6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-608A CENTRAL HEADER #15    02014B50 (33639248)\n-608E Created Zip Spec      14 (20) '2.0'\n-608F Created OS            03 (3) 'Unix'\n-6090 Extract Zip Spec      14 (20) '2.0'\n-6091 Extract OS            00 (0) 'MS-DOS'\n-6092 General Purpose Flag  0800 (2048)\n+610D CENTRAL HEADER #15    02014B50 (33639248)\n+6111 Created Zip Spec      14 (20) '2.0'\n+6112 Created OS            03 (3) 'Unix'\n+6113 Extract Zip Spec      14 (20) '2.0'\n+6114 Extract OS            00 (0) 'MS-DOS'\n+6115 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6094 Compression Method    0008 (8) 'Deflated'\n-6096 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-609A CRC                   964AE9D3 (2521491923)\n-609E Compressed Size       00000820 (2080)\n-60A2 Uncompressed Size     00002D17 (11543)\n-60A6 Filename Length       0015 (21)\n-60A8 Extra Length          0000 (0)\n-60AA Comment Length        0000 (0)\n-60AC Disk Start            0000 (0)\n-60AE Int File Attributes   0000 (0)\n+6117 Compression Method    0008 (8) 'Deflated'\n+6119 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+611D CRC                   964AE9D3 (2521491923)\n+6121 Compressed Size       00000820 (2080)\n+6125 Uncompressed Size     00002D17 (11543)\n+6129 Filename Length       0015 (21)\n+612B Extra Length          0000 (0)\n+612D Comment Length        0000 (0)\n+612F Disk Start            0000 (0)\n+6131 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-60B0 Ext File Attributes   81A40000 (2175008768)\n+6133 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-60B4 Local Header Offset   0000032E (814)\n-60B8 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+6137 Local Header Offset   0000032E (814)\n+613B Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x60B8: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x613B: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-60CD CENTRAL HEADER #16    02014B50 (33639248)\n-60D1 Created Zip Spec      14 (20) '2.0'\n-60D2 Created OS            03 (3) 'Unix'\n-60D3 Extract Zip Spec      14 (20) '2.0'\n-60D4 Extract OS            00 (0) 'MS-DOS'\n-60D5 General Purpose Flag  0800 (2048)\n+6150 CENTRAL HEADER #16    02014B50 (33639248)\n+6154 Created Zip Spec      14 (20) '2.0'\n+6155 Created OS            03 (3) 'Unix'\n+6156 Extract Zip Spec      14 (20) '2.0'\n+6157 Extract OS            00 (0) 'MS-DOS'\n+6158 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-60D7 Compression Method    0008 (8) 'Deflated'\n-60D9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-60DD CRC                   86E2B4B4 (2263004340)\n-60E1 Compressed Size       00000F6D (3949)\n-60E5 Uncompressed Size     00002C5E (11358)\n-60E9 Filename Length       0010 (16)\n-60EB Extra Length          0000 (0)\n-60ED Comment Length        0000 (0)\n-60EF Disk Start            0000 (0)\n-60F1 Int File Attributes   0000 (0)\n+615A Compression Method    0008 (8) 'Deflated'\n+615C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6160 CRC                   86E2B4B4 (2263004340)\n+6164 Compressed Size       00000F6D (3949)\n+6168 Uncompressed Size     00002C5E (11358)\n+616C Filename Length       0010 (16)\n+616E Extra Length          0000 (0)\n+6170 Comment Length        0000 (0)\n+6172 Disk Start            0000 (0)\n+6174 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-60F3 Ext File Attributes   81A40000 (2175008768)\n+6176 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-60F7 Local Header Offset   00000B81 (2945)\n-60FB Filename              'XXXXXXXXXXXXXXXX'\n+617A Local Header Offset   00000B81 (2945)\n+617E Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x60FB: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x617E: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-610B CENTRAL HEADER #17    02014B50 (33639248)\n-610F Created Zip Spec      14 (20) '2.0'\n-6110 Created OS            03 (3) 'Unix'\n-6111 Extract Zip Spec      14 (20) '2.0'\n-6112 Extract OS            00 (0) 'MS-DOS'\n-6113 General Purpose Flag  0800 (2048)\n+618E CENTRAL HEADER #17    02014B50 (33639248)\n+6192 Created Zip Spec      14 (20) '2.0'\n+6193 Created OS            03 (3) 'Unix'\n+6194 Extract Zip Spec      14 (20) '2.0'\n+6195 Extract OS            00 (0) 'MS-DOS'\n+6196 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6115 Compression Method    0008 (8) 'Deflated'\n-6117 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-611B CRC                   52A344C7 (1386431687)\n-611F Compressed Size       0000007C (124)\n-6123 Uncompressed Size     000000AB (171)\n-6127 Filename Length       000F (15)\n-6129 Extra Length          0000 (0)\n-612B Comment Length        0000 (0)\n-612D Disk Start            0000 (0)\n-612F Int File Attributes   0000 (0)\n+6198 Compression Method    0008 (8) 'Deflated'\n+619A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+619E CRC                   52A344C7 (1386431687)\n+61A2 Compressed Size       0000007C (124)\n+61A6 Uncompressed Size     000000AB (171)\n+61AA Filename Length       000F (15)\n+61AC Extra Length          0000 (0)\n+61AE Comment Length        0000 (0)\n+61B0 Disk Start            0000 (0)\n+61B2 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6131 Ext File Attributes   81A40000 (2175008768)\n+61B4 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-6135 Local Header Offset   00001B1C (6940)\n-6139 Filename              'XXXXXXXXXXXXXXX'\n+61B8 Local Header Offset   00001B1C (6940)\n+61BC Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6139: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x61BC: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-6148 CENTRAL HEADER #18    02014B50 (33639248)\n-614C Created Zip Spec      14 (20) '2.0'\n-614D Created OS            03 (3) 'Unix'\n-614E Extract Zip Spec      14 (20) '2.0'\n-614F Extract OS            00 (0) 'MS-DOS'\n-6150 General Purpose Flag  0800 (2048)\n+61CB CENTRAL HEADER #18    02014B50 (33639248)\n+61CF Created Zip Spec      14 (20) '2.0'\n+61D0 Created OS            03 (3) 'Unix'\n+61D1 Extract Zip Spec      14 (20) '2.0'\n+61D2 Extract OS            00 (0) 'MS-DOS'\n+61D3 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6152 Compression Method    0008 (8) 'Deflated'\n-6154 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6158 CRC                   210B2AE8 (554380008)\n-615C Compressed Size       00000406 (1030)\n-6160 Uncompressed Size     00000A59 (2649)\n-6164 Filename Length       003C (60)\n-6166 Extra Length          0000 (0)\n-6168 Comment Length        0000 (0)\n-616A Disk Start            0000 (0)\n-616C Int File Attributes   0000 (0)\n+61D5 Compression Method    0008 (8) 'Deflated'\n+61D7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+61DB CRC                   01526E5B (22179419)\n+61DF Compressed Size       00000413 (1043)\n+61E3 Uncompressed Size     00000AA2 (2722)\n+61E7 Filename Length       003C (60)\n+61E9 Extra Length          0000 (0)\n+61EB Comment Length        0000 (0)\n+61ED Disk Start            0000 (0)\n+61EF Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-616E Ext File Attributes   81A40000 (2175008768)\n+61F1 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-6172 Local Header Offset   00001BC5 (7109)\n-6176 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+61F5 Local Header Offset   00001BC5 (7109)\n+61F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6176: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x61F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-61B2 CENTRAL HEADER #19    02014B50 (33639248)\n-61B6 Created Zip Spec      14 (20) '2.0'\n-61B7 Created OS            03 (3) 'Unix'\n-61B8 Extract Zip Spec      14 (20) '2.0'\n-61B9 Extract OS            00 (0) 'MS-DOS'\n-61BA General Purpose Flag  0800 (2048)\n+6235 CENTRAL HEADER #19    02014B50 (33639248)\n+6239 Created Zip Spec      14 (20) '2.0'\n+623A Created OS            03 (3) 'Unix'\n+623B Extract Zip Spec      14 (20) '2.0'\n+623C Extract OS            00 (0) 'MS-DOS'\n+623D General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-61BC Compression Method    0008 (8) 'Deflated'\n-61BE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-61C2 CRC                   C1CD2495 (3251446933)\n-61C6 Compressed Size       000001F9 (505)\n-61CA Uncompressed Size     0000036C (876)\n-61CE Filename Length       0032 (50)\n-61D0 Extra Length          0000 (0)\n-61D2 Comment Length        0000 (0)\n-61D4 Disk Start            0000 (0)\n-61D6 Int File Attributes   0000 (0)\n+623F Compression Method    0008 (8) 'Deflated'\n+6241 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6245 CRC                   D457458D (3562489229)\n+6249 Compressed Size       000001FF (511)\n+624D Uncompressed Size     00000381 (897)\n+6251 Filename Length       0032 (50)\n+6253 Extra Length          0000 (0)\n+6255 Comment Length        0000 (0)\n+6257 Disk Start            0000 (0)\n+6259 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-61D8 Ext File Attributes   81A40000 (2175008768)\n+625B Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-61DC Local Header Offset   00002025 (8229)\n-61E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+625F Local Header Offset   00002032 (8242)\n+6263 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x61E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6263: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-6212 CENTRAL HEADER #20    02014B50 (33639248)\n-6216 Created Zip Spec      14 (20) '2.0'\n-6217 Created OS            03 (3) 'Unix'\n-6218 Extract Zip Spec      14 (20) '2.0'\n-6219 Extract OS            00 (0) 'MS-DOS'\n-621A General Purpose Flag  0800 (2048)\n+6295 CENTRAL HEADER #20    02014B50 (33639248)\n+6299 Created Zip Spec      14 (20) '2.0'\n+629A Created OS            03 (3) 'Unix'\n+629B Extract Zip Spec      14 (20) '2.0'\n+629C Extract OS            00 (0) 'MS-DOS'\n+629D General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-621C Compression Method    0008 (8) 'Deflated'\n-621E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6222 CRC                   C06931B4 (3228119476)\n-6226 Compressed Size       00000365 (869)\n-622A Uncompressed Size     0000079E (1950)\n-622E Filename Length       0035 (53)\n-6230 Extra Length          0000 (0)\n-6232 Comment Length        0000 (0)\n-6234 Disk Start            0000 (0)\n-6236 Int File Attributes   0000 (0)\n+629F Compression Method    0008 (8) 'Deflated'\n+62A1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+62A5 CRC                   73B49906 (1941215494)\n+62A9 Compressed Size       0000036F (879)\n+62AD Uncompressed Size     000007C7 (1991)\n+62B1 Filename Length       0035 (53)\n+62B3 Extra Length          0000 (0)\n+62B5 Comment Length        0000 (0)\n+62B7 Disk Start            0000 (0)\n+62B9 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6238 Ext File Attributes   81A40000 (2175008768)\n+62BB Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-623C Local Header Offset   0000226E (8814)\n-6240 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+62BF Local Header Offset   00002281 (8833)\n+62C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6240: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x62C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-6275 CENTRAL HEADER #21    02014B50 (33639248)\n-6279 Created Zip Spec      14 (20) '2.0'\n-627A Created OS            03 (3) 'Unix'\n-627B Extract Zip Spec      14 (20) '2.0'\n-627C Extract OS            00 (0) 'MS-DOS'\n-627D General Purpose Flag  0800 (2048)\n+62F8 CENTRAL HEADER #21    02014B50 (33639248)\n+62FC Created Zip Spec      14 (20) '2.0'\n+62FD Created OS            03 (3) 'Unix'\n+62FE Extract Zip Spec      14 (20) '2.0'\n+62FF Extract OS            00 (0) 'MS-DOS'\n+6300 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-627F Compression Method    0008 (8) 'Deflated'\n-6281 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6285 CRC                   89D2048F (2312242319)\n-6289 Compressed Size       000005A4 (1444)\n-628D Uncompressed Size     00000FE5 (4069)\n-6291 Filename Length       0033 (51)\n-6293 Extra Length          0000 (0)\n-6295 Comment Length        0000 (0)\n-6297 Disk Start            0000 (0)\n-6299 Int File Attributes   0000 (0)\n+6302 Compression Method    0008 (8) 'Deflated'\n+6304 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6308 CRC                   7E6F88F1 (2121238769)\n+630C Compressed Size       000005B1 (1457)\n+6310 Uncompressed Size     0000105B (4187)\n+6314 Filename Length       0033 (51)\n+6316 Extra Length          0000 (0)\n+6318 Comment Length        0000 (0)\n+631A Disk Start            0000 (0)\n+631C Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-629B Ext File Attributes   81A40000 (2175008768)\n+631E Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-629F Local Header Offset   00002626 (9766)\n-62A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6322 Local Header Offset   00002643 (9795)\n+6326 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x62A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6326: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-62D6 CENTRAL HEADER #22    02014B50 (33639248)\n-62DA Created Zip Spec      14 (20) '2.0'\n-62DB Created OS            03 (3) 'Unix'\n-62DC Extract Zip Spec      14 (20) '2.0'\n-62DD Extract OS            00 (0) 'MS-DOS'\n-62DE General Purpose Flag  0800 (2048)\n+6359 CENTRAL HEADER #22    02014B50 (33639248)\n+635D Created Zip Spec      14 (20) '2.0'\n+635E Created OS            03 (3) 'Unix'\n+635F Extract Zip Spec      14 (20) '2.0'\n+6360 Extract OS            00 (0) 'MS-DOS'\n+6361 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-62E0 Compression Method    0008 (8) 'Deflated'\n-62E2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-62E6 CRC                   8EC3CE19 (2395196953)\n-62EA Compressed Size       0000099A (2458)\n-62EE Uncompressed Size     000028DB (10459)\n-62F2 Filename Length       0038 (56)\n-62F4 Extra Length          0000 (0)\n-62F6 Comment Length        0000 (0)\n-62F8 Disk Start            0000 (0)\n-62FA Int File Attributes   0000 (0)\n+6363 Compression Method    0008 (8) 'Deflated'\n+6365 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6369 CRC                   65B11F2E (1706106670)\n+636D Compressed Size       000009A9 (2473)\n+6371 Uncompressed Size     000029BC (10684)\n+6375 Filename Length       0038 (56)\n+6377 Extra Length          0000 (0)\n+6379 Comment Length        0000 (0)\n+637B Disk Start            0000 (0)\n+637D Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-62FC Ext File Attributes   81A40000 (2175008768)\n+637F Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-6300 Local Header Offset   00002C1B (11291)\n-6304 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6383 Local Header Offset   00002C45 (11333)\n+6387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6304: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-633C CENTRAL HEADER #23    02014B50 (33639248)\n-6340 Created Zip Spec      14 (20) '2.0'\n-6341 Created OS            03 (3) 'Unix'\n-6342 Extract Zip Spec      14 (20) '2.0'\n-6343 Extract OS            00 (0) 'MS-DOS'\n-6344 General Purpose Flag  0800 (2048)\n+63BF CENTRAL HEADER #23    02014B50 (33639248)\n+63C3 Created Zip Spec      14 (20) '2.0'\n+63C4 Created OS            03 (3) 'Unix'\n+63C5 Extract Zip Spec      14 (20) '2.0'\n+63C6 Extract OS            00 (0) 'MS-DOS'\n+63C7 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6346 Compression Method    0008 (8) 'Deflated'\n-6348 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-634C CRC                   672528B3 (1730488499)\n-6350 Compressed Size       000009FC (2556)\n-6354 Uncompressed Size     00002110 (8464)\n-6358 Filename Length       0034 (52)\n-635A Extra Length          0000 (0)\n-635C Comment Length        0000 (0)\n-635E Disk Start            0000 (0)\n-6360 Int File Attributes   0000 (0)\n+63C9 Compression Method    0008 (8) 'Deflated'\n+63CB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+63CF CRC                   ECC477BE (3972298686)\n+63D3 Compressed Size       00000A0E (2574)\n+63D7 Uncompressed Size     000021FB (8699)\n+63DB Filename Length       0034 (52)\n+63DD Extra Length          0000 (0)\n+63DF Comment Length        0000 (0)\n+63E1 Disk Start            0000 (0)\n+63E3 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6362 Ext File Attributes   81A40000 (2175008768)\n+63E5 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-6366 Local Header Offset   0000360B (13835)\n-636A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+63E9 Local Header Offset   00003644 (13892)\n+63ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x636A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x63ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-639E CENTRAL HEADER #24    02014B50 (33639248)\n-63A2 Created Zip Spec      14 (20) '2.0'\n-63A3 Created OS            03 (3) 'Unix'\n-63A4 Extract Zip Spec      14 (20) '2.0'\n-63A5 Extract OS            00 (0) 'MS-DOS'\n-63A6 General Purpose Flag  0800 (2048)\n+6421 CENTRAL HEADER #24    02014B50 (33639248)\n+6425 Created Zip Spec      14 (20) '2.0'\n+6426 Created OS            03 (3) 'Unix'\n+6427 Extract Zip Spec      14 (20) '2.0'\n+6428 Extract OS            00 (0) 'MS-DOS'\n+6429 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-63A8 Compression Method    0008 (8) 'Deflated'\n-63AA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-63AE CRC                   5C1106B9 (1544619705)\n-63B2 Compressed Size       000003EE (1006)\n-63B6 Uncompressed Size     00000A3E (2622)\n-63BA Filename Length       0044 (68)\n-63BC Extra Length          0000 (0)\n-63BE Comment Length        0000 (0)\n-63C0 Disk Start            0000 (0)\n-63C2 Int File Attributes   0000 (0)\n+642B Compression Method    0008 (8) 'Deflated'\n+642D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6431 CRC                   67A5A923 (1738909987)\n+6435 Compressed Size       000003FA (1018)\n+6439 Uncompressed Size     00000A93 (2707)\n+643D Filename Length       0044 (68)\n+643F Extra Length          0000 (0)\n+6441 Comment Length        0000 (0)\n+6443 Disk Start            0000 (0)\n+6445 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-63C4 Ext File Attributes   81A40000 (2175008768)\n+6447 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-63C8 Local Header Offset   00004059 (16473)\n-63CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+644B Local Header Offset   000040A4 (16548)\n+644F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x63CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x644F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-6410 CENTRAL HEADER #25    02014B50 (33639248)\n-6414 Created Zip Spec      14 (20) '2.0'\n-6415 Created OS            03 (3) 'Unix'\n-6416 Extract Zip Spec      14 (20) '2.0'\n-6417 Extract OS            00 (0) 'MS-DOS'\n-6418 General Purpose Flag  0800 (2048)\n+6493 CENTRAL HEADER #25    02014B50 (33639248)\n+6497 Created Zip Spec      14 (20) '2.0'\n+6498 Created OS            03 (3) 'Unix'\n+6499 Extract Zip Spec      14 (20) '2.0'\n+649A Extract OS            00 (0) 'MS-DOS'\n+649B General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-641A Compression Method    0008 (8) 'Deflated'\n-641C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6420 CRC                   1C86279A (478554010)\n-6424 Compressed Size       00000258 (600)\n-6428 Uncompressed Size     00000446 (1094)\n-642C Filename Length       0046 (70)\n-642E Extra Length          0000 (0)\n-6430 Comment Length        0000 (0)\n-6432 Disk Start            0000 (0)\n-6434 Int File Attributes   0000 (0)\n+649D Compression Method    0008 (8) 'Deflated'\n+649F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+64A3 CRC                   63B2617E (1672634750)\n+64A7 Compressed Size       00000263 (611)\n+64AB Uncompressed Size     00000460 (1120)\n+64AF Filename Length       0046 (70)\n+64B1 Extra Length          0000 (0)\n+64B3 Comment Length        0000 (0)\n+64B5 Disk Start            0000 (0)\n+64B7 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6436 Ext File Attributes   81A40000 (2175008768)\n+64B9 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-643A Local Header Offset   000044A9 (17577)\n-643E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+64BD Local Header Offset   00004500 (17664)\n+64C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x643E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x64C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-6484 CENTRAL HEADER #26    02014B50 (33639248)\n-6488 Created Zip Spec      14 (20) '2.0'\n-6489 Created OS            03 (3) 'Unix'\n-648A Extract Zip Spec      14 (20) '2.0'\n-648B Extract OS            00 (0) 'MS-DOS'\n-648C General Purpose Flag  0800 (2048)\n+6507 CENTRAL HEADER #26    02014B50 (33639248)\n+650B Created Zip Spec      14 (20) '2.0'\n+650C Created OS            03 (3) 'Unix'\n+650D Extract Zip Spec      14 (20) '2.0'\n+650E Extract OS            00 (0) 'MS-DOS'\n+650F General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-648E Compression Method    0008 (8) 'Deflated'\n-6490 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6494 CRC                   E37CC454 (3816604756)\n-6498 Compressed Size       0000029A (666)\n-649C Uncompressed Size     000005B2 (1458)\n-64A0 Filename Length       0045 (69)\n-64A2 Extra Length          0000 (0)\n-64A4 Comment Length        0000 (0)\n-64A6 Disk Start            0000 (0)\n-64A8 Int File Attributes   0000 (0)\n+6511 Compression Method    0008 (8) 'Deflated'\n+6513 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6517 CRC                   1AFA4B4D (452610893)\n+651B Compressed Size       000002A1 (673)\n+651F Uncompressed Size     000005DB (1499)\n+6523 Filename Length       0045 (69)\n+6525 Extra Length          0000 (0)\n+6527 Comment Length        0000 (0)\n+6529 Disk Start            0000 (0)\n+652B Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-64AA Ext File Attributes   81A40000 (2175008768)\n+652D Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-64AE Local Header Offset   00004765 (18277)\n-64B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6531 Local Header Offset   000047C7 (18375)\n+6535 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x64B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6535: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-64F7 CENTRAL HEADER #27    02014B50 (33639248)\n-64FB Created Zip Spec      14 (20) '2.0'\n-64FC Created OS            03 (3) 'Unix'\n-64FD Extract Zip Spec      14 (20) '2.0'\n-64FE Extract OS            00 (0) 'MS-DOS'\n-64FF General Purpose Flag  0800 (2048)\n+657A CENTRAL HEADER #27    02014B50 (33639248)\n+657E Created Zip Spec      14 (20) '2.0'\n+657F Created OS            03 (3) 'Unix'\n+6580 Extract Zip Spec      14 (20) '2.0'\n+6581 Extract OS            00 (0) 'MS-DOS'\n+6582 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6501 Compression Method    0008 (8) 'Deflated'\n-6503 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6507 CRC                   2C4E86BA (743343802)\n-650B Compressed Size       000005DE (1502)\n-650F Uncompressed Size     00001120 (4384)\n-6513 Filename Length       004A (74)\n-6515 Extra Length          0000 (0)\n-6517 Comment Length        0000 (0)\n-6519 Disk Start            0000 (0)\n-651B Int File Attributes   0000 (0)\n+6584 Compression Method    0008 (8) 'Deflated'\n+6586 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+658A CRC                   25DC5E62 (635199074)\n+658E Compressed Size       000005EC (1516)\n+6592 Uncompressed Size     00001184 (4484)\n+6596 Filename Length       004A (74)\n+6598 Extra Length          0000 (0)\n+659A Comment Length        0000 (0)\n+659C Disk Start            0000 (0)\n+659E Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-651D Ext File Attributes   81A40000 (2175008768)\n+65A0 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-6521 Local Header Offset   00004A62 (19042)\n-6525 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+65A4 Local Header Offset   00004ACB (19147)\n+65A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6525: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x65A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-656F CENTRAL HEADER #28    02014B50 (33639248)\n-6573 Created Zip Spec      14 (20) '2.0'\n-6574 Created OS            03 (3) 'Unix'\n-6575 Extract Zip Spec      14 (20) '2.0'\n-6576 Extract OS            00 (0) 'MS-DOS'\n-6577 General Purpose Flag  0800 (2048)\n+65F2 CENTRAL HEADER #28    02014B50 (33639248)\n+65F6 Created Zip Spec      14 (20) '2.0'\n+65F7 Created OS            03 (3) 'Unix'\n+65F8 Extract Zip Spec      14 (20) '2.0'\n+65F9 Extract OS            00 (0) 'MS-DOS'\n+65FA General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6579 Compression Method    0008 (8) 'Deflated'\n-657B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-657F CRC                   592F92C2 (1496289986)\n-6583 Compressed Size       00000258 (600)\n-6587 Uncompressed Size     00000446 (1094)\n-658B Filename Length       0046 (70)\n-658D Extra Length          0000 (0)\n-658F Comment Length        0000 (0)\n-6591 Disk Start            0000 (0)\n-6593 Int File Attributes   0000 (0)\n+65FC Compression Method    0008 (8) 'Deflated'\n+65FE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6602 CRC                   AADBB488 (2866525320)\n+6606 Compressed Size       00000262 (610)\n+660A Uncompressed Size     00000460 (1120)\n+660E Filename Length       0046 (70)\n+6610 Extra Length          0000 (0)\n+6612 Comment Length        0000 (0)\n+6614 Disk Start            0000 (0)\n+6616 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6595 Ext File Attributes   81A40000 (2175008768)\n+6618 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-6599 Local Header Offset   000050A8 (20648)\n-659D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+661C Local Header Offset   0000511F (20767)\n+6620 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x659D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6620: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-65E3 CENTRAL HEADER #29    02014B50 (33639248)\n-65E7 Created Zip Spec      14 (20) '2.0'\n-65E8 Created OS            03 (3) 'Unix'\n-65E9 Extract Zip Spec      14 (20) '2.0'\n-65EA Extract OS            00 (0) 'MS-DOS'\n-65EB General Purpose Flag  0800 (2048)\n+6666 CENTRAL HEADER #29    02014B50 (33639248)\n+666A Created Zip Spec      14 (20) '2.0'\n+666B Created OS            03 (3) 'Unix'\n+666C Extract Zip Spec      14 (20) '2.0'\n+666D Extract OS            00 (0) 'MS-DOS'\n+666E General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-65ED Compression Method    0008 (8) 'Deflated'\n-65EF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-65F3 CRC                   7BC2ED93 (2076372371)\n-65F7 Compressed Size       00000265 (613)\n-65FB Uncompressed Size     00000461 (1121)\n-65FF Filename Length       004A (74)\n-6601 Extra Length          0000 (0)\n-6603 Comment Length        0000 (0)\n-6605 Disk Start            0000 (0)\n-6607 Int File Attributes   0000 (0)\n+6670 Compression Method    0008 (8) 'Deflated'\n+6672 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6676 CRC                   BEF6AA62 (3203836514)\n+667A Compressed Size       0000026E (622)\n+667E Uncompressed Size     0000047C (1148)\n+6682 Filename Length       004A (74)\n+6684 Extra Length          0000 (0)\n+6686 Comment Length        0000 (0)\n+6688 Disk Start            0000 (0)\n+668A Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6609 Ext File Attributes   81A40000 (2175008768)\n+668C Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-660D Local Header Offset   00005364 (21348)\n-6611 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6690 Local Header Offset   000053E5 (21477)\n+6694 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6611: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6694: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-665B CENTRAL HEADER #30    02014B50 (33639248)\n-665F Created Zip Spec      14 (20) '2.0'\n-6660 Created OS            03 (3) 'Unix'\n-6661 Extract Zip Spec      14 (20) '2.0'\n-6662 Extract OS            00 (0) 'MS-DOS'\n-6663 General Purpose Flag  0800 (2048)\n+66DE CENTRAL HEADER #30    02014B50 (33639248)\n+66E2 Created Zip Spec      14 (20) '2.0'\n+66E3 Created OS            03 (3) 'Unix'\n+66E4 Extract Zip Spec      14 (20) '2.0'\n+66E5 Extract OS            00 (0) 'MS-DOS'\n+66E6 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6665 Compression Method    0008 (8) 'Deflated'\n-6667 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-666B CRC                   5B557C1B (1532328987)\n-666F Compressed Size       0000002C (44)\n-6673 Uncompressed Size     00000034 (52)\n-6677 Filename Length       0035 (53)\n-6679 Extra Length          0000 (0)\n-667B Comment Length        0000 (0)\n-667D Disk Start            0000 (0)\n-667F Int File Attributes   0000 (0)\n+66E8 Compression Method    0008 (8) 'Deflated'\n+66EA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+66EE CRC                   5B557C1B (1532328987)\n+66F2 Compressed Size       0000002C (44)\n+66F6 Uncompressed Size     00000034 (52)\n+66FA Filename Length       0035 (53)\n+66FC Extra Length          0000 (0)\n+66FE Comment Length        0000 (0)\n+6700 Disk Start            0000 (0)\n+6702 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6681 Ext File Attributes   81A40000 (2175008768)\n+6704 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-6685 Local Header Offset   00005631 (22065)\n-6689 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6708 Local Header Offset   000056BB (22203)\n+670C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6689: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x670C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-66BE CENTRAL HEADER #31    02014B50 (33639248)\n-66C2 Created Zip Spec      14 (20) '2.0'\n-66C3 Created OS            03 (3) 'Unix'\n-66C4 Extract Zip Spec      14 (20) '2.0'\n-66C5 Extract OS            00 (0) 'MS-DOS'\n-66C6 General Purpose Flag  0800 (2048)\n+6741 CENTRAL HEADER #31    02014B50 (33639248)\n+6745 Created Zip Spec      14 (20) '2.0'\n+6746 Created OS            03 (3) 'Unix'\n+6747 Extract Zip Spec      14 (20) '2.0'\n+6748 Extract OS            00 (0) 'MS-DOS'\n+6749 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-66C8 Compression Method    0008 (8) 'Deflated'\n-66CA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-66CE CRC                   6F1FEDD0 (1864363472)\n-66D2 Compressed Size       0000003F (63)\n-66D6 Uncompressed Size     0000004D (77)\n-66DA Filename Length       0059 (89)\n-66DC Extra Length          0000 (0)\n-66DE Comment Length        0000 (0)\n-66E0 Disk Start            0000 (0)\n-66E2 Int File Attributes   0000 (0)\n+674B Compression Method    0008 (8) 'Deflated'\n+674D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6751 CRC                   6F1FEDD0 (1864363472)\n+6755 Compressed Size       0000003F (63)\n+6759 Uncompressed Size     0000004D (77)\n+675D Filename Length       0059 (89)\n+675F Extra Length          0000 (0)\n+6761 Comment Length        0000 (0)\n+6763 Disk Start            0000 (0)\n+6765 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-66E4 Ext File Attributes   81A40000 (2175008768)\n+6767 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-66E8 Local Header Offset   000056B0 (22192)\n-66EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+676B Local Header Offset   0000573A (22330)\n+676F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x66EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x676F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-6745 CENTRAL HEADER #32    02014B50 (33639248)\n-6749 Created Zip Spec      14 (20) '2.0'\n-674A Created OS            03 (3) 'Unix'\n-674B Extract Zip Spec      14 (20) '2.0'\n-674C Extract OS            00 (0) 'MS-DOS'\n-674D General Purpose Flag  0800 (2048)\n+67C8 CENTRAL HEADER #32    02014B50 (33639248)\n+67CC Created Zip Spec      14 (20) '2.0'\n+67CD Created OS            03 (3) 'Unix'\n+67CE Extract Zip Spec      14 (20) '2.0'\n+67CF Extract OS            00 (0) 'MS-DOS'\n+67D0 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-674F Compression Method    0008 (8) 'Deflated'\n-6751 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6755 CRC                   6F1FEDD0 (1864363472)\n-6759 Compressed Size       0000003F (63)\n-675D Uncompressed Size     0000004D (77)\n-6761 Filename Length       0059 (89)\n-6763 Extra Length          0000 (0)\n-6765 Comment Length        0000 (0)\n-6767 Disk Start            0000 (0)\n-6769 Int File Attributes   0000 (0)\n+67D2 Compression Method    0008 (8) 'Deflated'\n+67D4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+67D8 CRC                   6F1FEDD0 (1864363472)\n+67DC Compressed Size       0000003F (63)\n+67E0 Uncompressed Size     0000004D (77)\n+67E4 Filename Length       0059 (89)\n+67E6 Extra Length          0000 (0)\n+67E8 Comment Length        0000 (0)\n+67EA Disk Start            0000 (0)\n+67EC Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-676B Ext File Attributes   81A40000 (2175008768)\n+67EE Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-676F Local Header Offset   00005766 (22374)\n-6773 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+67F2 Local Header Offset   000057F0 (22512)\n+67F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6773: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x67F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-67CC CENTRAL HEADER #33    02014B50 (33639248)\n-67D0 Created Zip Spec      14 (20) '2.0'\n-67D1 Created OS            03 (3) 'Unix'\n-67D2 Extract Zip Spec      14 (20) '2.0'\n-67D3 Extract OS            00 (0) 'MS-DOS'\n-67D4 General Purpose Flag  0800 (2048)\n+684F CENTRAL HEADER #33    02014B50 (33639248)\n+6853 Created Zip Spec      14 (20) '2.0'\n+6854 Created OS            03 (3) 'Unix'\n+6855 Extract Zip Spec      14 (20) '2.0'\n+6856 Extract OS            00 (0) 'MS-DOS'\n+6857 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-67D6 Compression Method    0008 (8) 'Deflated'\n-67D8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-67DC CRC                   6EE94123 (1860780323)\n-67E0 Compressed Size       000003B2 (946)\n-67E4 Uncompressed Size     00000AC3 (2755)\n-67E8 Filename Length       0036 (54)\n-67EA Extra Length          0000 (0)\n-67EC Comment Length        0000 (0)\n-67EE Disk Start            0000 (0)\n-67F0 Int File Attributes   0000 (0)\n+6859 Compression Method    0008 (8) 'Deflated'\n+685B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+685F CRC                   C105B8EB (3238377707)\n+6863 Compressed Size       000003AB (939)\n+6867 Uncompressed Size     00000A79 (2681)\n+686B Filename Length       0036 (54)\n+686D Extra Length          0000 (0)\n+686F Comment Length        0000 (0)\n+6871 Disk Start            0000 (0)\n+6873 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-67F2 Ext File Attributes   81A40000 (2175008768)\n+6875 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-67F6 Local Header Offset   0000581C (22556)\n-67FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6879 Local Header Offset   000058A6 (22694)\n+687D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x67FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x687D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-6830 CENTRAL HEADER #34    02014B50 (33639248)\n-6834 Created Zip Spec      14 (20) '2.0'\n-6835 Created OS            03 (3) 'Unix'\n-6836 Extract Zip Spec      14 (20) '2.0'\n-6837 Extract OS            00 (0) 'MS-DOS'\n-6838 General Purpose Flag  0800 (2048)\n+68B3 CENTRAL HEADER #34    02014B50 (33639248)\n+68B7 Created Zip Spec      14 (20) '2.0'\n+68B8 Created OS            03 (3) 'Unix'\n+68B9 Extract Zip Spec      14 (20) '2.0'\n+68BA Extract OS            00 (0) 'MS-DOS'\n+68BB General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-683A Compression Method    0008 (8) 'Deflated'\n-683C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6840 CRC                   86FC6C16 (2264689686)\n-6844 Compressed Size       00000041 (65)\n-6848 Uncompressed Size     00000045 (69)\n-684C Filename Length       003D (61)\n-684E Extra Length          0000 (0)\n-6850 Comment Length        0000 (0)\n-6852 Disk Start            0000 (0)\n-6854 Int File Attributes   0000 (0)\n+68BD Compression Method    0008 (8) 'Deflated'\n+68BF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+68C3 CRC                   86FC6C16 (2264689686)\n+68C7 Compressed Size       00000041 (65)\n+68CB Uncompressed Size     00000045 (69)\n+68CF Filename Length       003D (61)\n+68D1 Extra Length          0000 (0)\n+68D3 Comment Length        0000 (0)\n+68D5 Disk Start            0000 (0)\n+68D7 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-6856 Ext File Attributes   81A40000 (2175008768)\n+68D9 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-685A Local Header Offset   00005C22 (23586)\n-685E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+68DD Local Header Offset   00005CA5 (23717)\n+68E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x685E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x68E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-689B END CENTRAL HEADER    06054B50 (101010256)\n-689F Number of this disk   0000 (0)\n-68A1 Central Dir Disk no   0000 (0)\n-68A3 Entries in this disk  0022 (34)\n-68A5 Total Entries         0022 (34)\n-68A7 Size of Central Dir   00000BDD (3037)\n-68AB Offset to Central Dir 00005CBE (23742)\n-68AF Comment Length        0000 (0)\n+691E END CENTRAL HEADER    06054B50 (101010256)\n+6922 Number of this disk   0000 (0)\n+6924 Central Dir Disk no   0000 (0)\n+6926 Entries in this disk  0022 (34)\n+6928 Total Entries         0022 (34)\n+692A Size of Central Dir   00000BDD (3037)\n+692E Offset to Central Dir 00005D41 (23873)\n+6932 Comment Length        0000 (0)\n #\n # Error Count: 13\n # Warning Count: 81\n #\n # Done\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/DubboHandlerRegistry.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/DubboHandlerRegistry.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,73 +1,73 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc;\n-\n-import io.grpc.BindableService;\n-import io.grpc.HandlerRegistry;\n-import io.grpc.ServerMethodDefinition;\n-import io.grpc.ServerServiceDefinition;\n-\n-import javax.annotation.Nullable;\n-import java.util.ArrayList;\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-/**\n- *\n- */\n-public class DubboHandlerRegistry extends HandlerRegistry {\n-\n-    private final Map<String, ServerServiceDefinition> services = new ConcurrentHashMap<>();\n-    private final Map<String, ServerMethodDefinition<?, ?>> methods = new ConcurrentHashMap<>();\n-\n-    public DubboHandlerRegistry() {\n-    }\n-\n-    /**\n-     * Returns the service definitions in this registry.\n-     */\n-    @Override\n-    public List<ServerServiceDefinition> getServices() {\n-        return Collections.unmodifiableList(new ArrayList<>(services.values()));\n-    }\n-\n-    @Nullable\n-    @Override\n-    public ServerMethodDefinition<?, ?> lookupMethod(String methodName, @Nullable String authority) {\n-        // TODO (carl-mastrangelo): honor authority header.\n-        return methods.get(methodName);\n-    }\n-\n-    void addService(BindableService bindableService, String key) {\n-        ServerServiceDefinition service = bindableService.bindService();\n-        services.put(key, service);\n-        for (ServerMethodDefinition<?, ?> method : service.getMethods()) {\n-            methods.put(method.getMethodDescriptor().getFullMethodName(), method);\n-        }\n-    }\n-\n-    void removeService(String serviceKey) {\n-        ServerServiceDefinition service = services.remove(serviceKey);\n-        if (null != service) {\n-            for (ServerMethodDefinition<?, ?> method : service.getMethods()) {\n-                methods.remove(method.getMethodDescriptor().getFullMethodName(), method);\n-            }\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc;\r\n+\r\n+import io.grpc.BindableService;\r\n+import io.grpc.HandlerRegistry;\r\n+import io.grpc.ServerMethodDefinition;\r\n+import io.grpc.ServerServiceDefinition;\r\n+\r\n+import javax.annotation.Nullable;\r\n+import java.util.ArrayList;\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+public class DubboHandlerRegistry extends HandlerRegistry {\r\n+\r\n+    private final Map<String, ServerServiceDefinition> services = new ConcurrentHashMap<>();\r\n+    private final Map<String, ServerMethodDefinition<?, ?>> methods = new ConcurrentHashMap<>();\r\n+\r\n+    public DubboHandlerRegistry() {\r\n+    }\r\n+\r\n+    /**\r\n+     * Returns the service definitions in this registry.\r\n+     */\r\n+    @Override\r\n+    public List<ServerServiceDefinition> getServices() {\r\n+        return Collections.unmodifiableList(new ArrayList<>(services.values()));\r\n+    }\r\n+\r\n+    @Nullable\r\n+    @Override\r\n+    public ServerMethodDefinition<?, ?> lookupMethod(String methodName, @Nullable String authority) {\r\n+        // TODO (carl-mastrangelo): honor authority header.\r\n+        return methods.get(methodName);\r\n+    }\r\n+\r\n+    void addService(BindableService bindableService, String key) {\r\n+        ServerServiceDefinition service = bindableService.bindService();\r\n+        services.put(key, service);\r\n+        for (ServerMethodDefinition<?, ?> method : service.getMethods()) {\r\n+            methods.put(method.getMethodDescriptor().getFullMethodName(), method);\r\n+        }\r\n+    }\r\n+\r\n+    void removeService(String serviceKey) {\r\n+        ServerServiceDefinition service = services.remove(serviceKey);\r\n+        if (null != service) {\r\n+            for (ServerMethodDefinition<?, ?> method : service.getMethods()) {\r\n+                methods.remove(method.getMethodDescriptor().getFullMethodName(), method);\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/GrpcConfig.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/GrpcConfig.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,21 +1,21 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc;\n-\n-public class GrpcConfig {\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc;\r\n+\r\n+public class GrpcConfig {\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/GrpcConstants.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/GrpcConstants.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,41 +1,41 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc;\n-\n-\n-public class GrpcConstants {\n-\n-    public static final String DIERCTOR_KEY = \"grpc.director\";\n-    public static final String HANDSHAKE_TIMEOUT = \"grpc.handshakeTimeout\";\n-    public static final String MAX_INBOUND_MESSAGE_SIZE = \"grpc.maxInboundMessageSize\";\n-    public static final String MAX_INBOUND_METADATA_SIZE = \"grpc.maxOutboundMessageSize\";\n-    public static final String FLOWCONTROL_WINDOW = \"grpc.flowControlWindow\";\n-    public static final String MAX_CONCURRENT_CALLS_PER_CONNECTION = \"grpc.maxConcurrentCallsPerConnection\";\n-\n-    public static final String WORKER_THREAD_NUM = \"grpc.io.num\";\n-    public static final String BOSS_THREAD_NUM = \"grpc.boss.num\";\n-    public static final String CHANNEL_TYPE = \"grpc.channel.type\";\n-\n-    public static final String SERVER_INTERCEPTORS = \"grpc.serverInterceptors\";\n-    public static final String CLIENT_INTERCEPTORS = \"grpc.clientInterceptors\";\n-    public static final String TRANSPORT_FILTERS = \"grpc.transportFilters\";\n-\n-    public static final String EXECUTOR = \"grpc.executor\";\n-\n-    public static final String CONFIGURATOR = \"grpc.configurator\";\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc;\r\n+\r\n+\r\n+public class GrpcConstants {\r\n+\r\n+    public static final String DIERCTOR_KEY = \"grpc.director\";\r\n+    public static final String HANDSHAKE_TIMEOUT = \"grpc.handshakeTimeout\";\r\n+    public static final String MAX_INBOUND_MESSAGE_SIZE = \"grpc.maxInboundMessageSize\";\r\n+    public static final String MAX_INBOUND_METADATA_SIZE = \"grpc.maxOutboundMessageSize\";\r\n+    public static final String FLOWCONTROL_WINDOW = \"grpc.flowControlWindow\";\r\n+    public static final String MAX_CONCURRENT_CALLS_PER_CONNECTION = \"grpc.maxConcurrentCallsPerConnection\";\r\n+\r\n+    public static final String WORKER_THREAD_NUM = \"grpc.io.num\";\r\n+    public static final String BOSS_THREAD_NUM = \"grpc.boss.num\";\r\n+    public static final String CHANNEL_TYPE = \"grpc.channel.type\";\r\n+\r\n+    public static final String SERVER_INTERCEPTORS = \"grpc.serverInterceptors\";\r\n+    public static final String CLIENT_INTERCEPTORS = \"grpc.clientInterceptors\";\r\n+    public static final String TRANSPORT_FILTERS = \"grpc.transportFilters\";\r\n+\r\n+    public static final String EXECUTOR = \"grpc.executor\";\r\n+\r\n+    public static final String CONFIGURATOR = \"grpc.configurator\";\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/GrpcInvoker.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/GrpcInvoker.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,118 +1,118 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.Result;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.protocol.AbstractInvoker;\n-\n-import io.grpc.Status;\n-import io.grpc.StatusException;\n-\n-import java.util.concurrent.locks.ReentrantLock;\n-\n-public class GrpcInvoker<T> extends AbstractInvoker<T> {\n-    private final ReentrantLock destroyLock = new ReentrantLock();\n-\n-    private final Invoker<T> target;\n-    private ReferenceCountManagedChannel channel;\n-\n-//    private static List<Exception> grpcExceptions = new ArrayList<>();\n-//    static {\n-//        grpcExceptions.add();\n-//    }\n-\n-    public GrpcInvoker(Class<T> type, URL url, Invoker<T> target, ReferenceCountManagedChannel channel) {\n-        super(type, url);\n-        this.target = target;\n-        this.channel = channel;\n-    }\n-\n-    @Override\n-    protected Result doInvoke(Invocation invocation) throws Throwable {\n-        try {\n-            Result result = target.invoke(invocation);\n-            // FIXME result is an AsyncRpcResult instance.\n-            Throwable e = result.getException();\n-            if (e != null) {\n-                throw getRpcException(getInterface(), getUrl(), invocation, e);\n-            }\n-            return result;\n-        } catch (RpcException e) {\n-            if (e.getCode() == RpcException.UNKNOWN_EXCEPTION) {\n-                e.setCode(getErrorCode(e.getCause()));\n-            }\n-            throw e;\n-        } catch (Throwable e) {\n-            throw getRpcException(getInterface(), getUrl(), invocation, e);\n-        }\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return super.isAvailable() && !channel.isShutdown() && !channel.isTerminated();\n-    }\n-\n-    @Override\n-    public boolean isDestroyed() {\n-        return super.isDestroyed() || channel.isShutdown() || channel.isTerminated();\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        if (!super.isDestroyed()) {\n-            // double check to avoid dup close\n-            destroyLock.lock();\n-            try {\n-                if (super.isDestroyed()) {\n-                    return;\n-                }\n-                super.destroy();\n-                channel.shutdown();\n-            } finally {\n-                destroyLock.unlock();\n-            }\n-        }\n-    }\n-\n-    private RpcException getRpcException(Class<?> type, URL url, Invocation invocation, Throwable e) {\n-        RpcException re = new RpcException(\"Failed to invoke remote service: \" + type + \", method: \"\n-                + invocation.getMethodName() + \", cause: \" + e.getMessage(), e);\n-        re.setCode(getErrorCode(e));\n-        return re;\n-    }\n-\n-    /**\n-     * FIXME, convert gRPC exceptions to equivalent Dubbo exceptions.\n-     *\n-     * @param e\n-     * @return\n-     */\n-    private int getErrorCode(Throwable e) {\n-        if (e instanceof StatusException) {\n-            StatusException statusException = (StatusException) e;\n-            Status status = statusException.getStatus();\n-            if (status.getCode() == Status.Code.DEADLINE_EXCEEDED) {\n-                return RpcException.TIMEOUT_EXCEPTION;\n-            }\n-        }\n-        return RpcException.UNKNOWN_EXCEPTION;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.Result;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.protocol.AbstractInvoker;\r\n+\r\n+import io.grpc.Status;\r\n+import io.grpc.StatusException;\r\n+\r\n+import java.util.concurrent.locks.ReentrantLock;\r\n+\r\n+public class GrpcInvoker<T> extends AbstractInvoker<T> {\r\n+    private final ReentrantLock destroyLock = new ReentrantLock();\r\n+\r\n+    private final Invoker<T> target;\r\n+    private ReferenceCountManagedChannel channel;\r\n+\r\n+//    private static List<Exception> grpcExceptions = new ArrayList<>();\r\n+//    static {\r\n+//        grpcExceptions.add();\r\n+//    }\r\n+\r\n+    public GrpcInvoker(Class<T> type, URL url, Invoker<T> target, ReferenceCountManagedChannel channel) {\r\n+        super(type, url);\r\n+        this.target = target;\r\n+        this.channel = channel;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected Result doInvoke(Invocation invocation) throws Throwable {\r\n+        try {\r\n+            Result result = target.invoke(invocation);\r\n+            // FIXME result is an AsyncRpcResult instance.\r\n+            Throwable e = result.getException();\r\n+            if (e != null) {\r\n+                throw getRpcException(getInterface(), getUrl(), invocation, e);\r\n+            }\r\n+            return result;\r\n+        } catch (RpcException e) {\r\n+            if (e.getCode() == RpcException.UNKNOWN_EXCEPTION) {\r\n+                e.setCode(getErrorCode(e.getCause()));\r\n+            }\r\n+            throw e;\r\n+        } catch (Throwable e) {\r\n+            throw getRpcException(getInterface(), getUrl(), invocation, e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return super.isAvailable() && !channel.isShutdown() && !channel.isTerminated();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isDestroyed() {\r\n+        return super.isDestroyed() || channel.isShutdown() || channel.isTerminated();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        if (!super.isDestroyed()) {\r\n+            // double check to avoid dup close\r\n+            destroyLock.lock();\r\n+            try {\r\n+                if (super.isDestroyed()) {\r\n+                    return;\r\n+                }\r\n+                super.destroy();\r\n+                channel.shutdown();\r\n+            } finally {\r\n+                destroyLock.unlock();\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private RpcException getRpcException(Class<?> type, URL url, Invocation invocation, Throwable e) {\r\n+        RpcException re = new RpcException(\"Failed to invoke remote service: \" + type + \", method: \"\r\n+                + invocation.getMethodName() + \", cause: \" + e.getMessage(), e);\r\n+        re.setCode(getErrorCode(e));\r\n+        return re;\r\n+    }\r\n+\r\n+    /**\r\n+     * FIXME, convert gRPC exceptions to equivalent Dubbo exceptions.\r\n+     *\r\n+     * @param e\r\n+     * @return\r\n+     */\r\n+    private int getErrorCode(Throwable e) {\r\n+        if (e instanceof StatusException) {\r\n+            StatusException statusException = (StatusException) e;\r\n+            Status status = statusException.getStatus();\r\n+            if (status.getCode() == Status.Code.DEADLINE_EXCEEDED) {\r\n+                return RpcException.TIMEOUT_EXCEPTION;\r\n+            }\r\n+        }\r\n+        return RpcException.UNKNOWN_EXCEPTION;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/GrpcOptionsUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,225 +1,225 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.threadpool.ThreadPool;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.config.SslConfig;\n-import org.apache.dubbo.config.context.ConfigManager;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.protocol.grpc.interceptors.ClientInterceptor;\n-import org.apache.dubbo.rpc.protocol.grpc.interceptors.GrpcConfigurator;\n-import org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerInterceptor;\n-import org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerTransportFilter;\n-\n-import io.grpc.CallOptions;\n-import io.grpc.ManagedChannel;\n-import io.grpc.ServerBuilder;\n-import io.grpc.netty.GrpcSslContexts;\n-import io.grpc.netty.NettyChannelBuilder;\n-import io.grpc.netty.NettyServerBuilder;\n-import io.netty.handler.ssl.ClientAuth;\n-import io.netty.handler.ssl.SslContext;\n-import io.netty.handler.ssl.SslContextBuilder;\n-\n-import javax.net.ssl.SSLException;\n-import java.io.InputStream;\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.Optional;\n-import java.util.Set;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.SSL_ENABLED_KEY;\n-import static org.apache.dubbo.remoting.Constants.DISPATCHER_KEY;\n-import static org.apache.dubbo.rpc.Constants.EXECUTES_KEY;\n-import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.CLIENT_INTERCEPTORS;\n-import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.EXECUTOR;\n-import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.MAX_CONCURRENT_CALLS_PER_CONNECTION;\n-import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.MAX_INBOUND_MESSAGE_SIZE;\n-import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.MAX_INBOUND_METADATA_SIZE;\n-import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.SERVER_INTERCEPTORS;\n-import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.TRANSPORT_FILTERS;\n-\n-/**\n- * Support gRPC configs in a Dubbo specific way.\n- */\n-public class GrpcOptionsUtils {\n-\n-    static ServerBuilder buildServerBuilder(URL url, NettyServerBuilder builder) {\n-\n-        int maxInboundMessageSize = url.getParameter(MAX_INBOUND_MESSAGE_SIZE, 0);\n-        if (maxInboundMessageSize > 0) {\n-            builder.maxInboundMessageSize(maxInboundMessageSize);\n-        }\n-\n-        int maxInboundMetadataSize = url.getParameter(MAX_INBOUND_METADATA_SIZE, 0);\n-        if (maxInboundMetadataSize > 0) {\n-            builder.maxInboundMetadataSize(maxInboundMetadataSize);\n-        }\n-\n-        if (url.getParameter(SSL_ENABLED_KEY, false)) {\n-            builder.sslContext(buildServerSslContext(url));\n-        }\n-\n-        int flowControlWindow = url.getParameter(MAX_INBOUND_MESSAGE_SIZE, 0);\n-        if (flowControlWindow > 0) {\n-            builder.flowControlWindow(flowControlWindow);\n-        }\n-\n-        int maxCalls = url.getParameter(MAX_CONCURRENT_CALLS_PER_CONNECTION, url.getParameter(EXECUTES_KEY, 0));\n-        if (maxCalls > 0) {\n-            builder.maxConcurrentCallsPerConnection(maxCalls);\n-        }\n-\n-        // server interceptors\n-        List<ServerInterceptor> serverInterceptors = ExtensionLoader.getExtensionLoader(ServerInterceptor.class)\n-                .getActivateExtension(url, SERVER_INTERCEPTORS, PROVIDER_SIDE);\n-        for (ServerInterceptor serverInterceptor : serverInterceptors) {\n-            builder.intercept(serverInterceptor);\n-        }\n-\n-        // server filters\n-        List<ServerTransportFilter> transportFilters = ExtensionLoader.getExtensionLoader(ServerTransportFilter.class)\n-                .getActivateExtension(url, TRANSPORT_FILTERS, PROVIDER_SIDE);\n-        for (ServerTransportFilter transportFilter : transportFilters) {\n-            builder.addTransportFilter(transportFilter.grpcTransportFilter());\n-        }\n-\n-        String thread = url.getParameter(EXECUTOR, url.getParameter(DISPATCHER_KEY));\n-        if (\"direct\".equals(thread)) {\n-            builder.directExecutor();\n-        } else {\n-            builder.executor(ExtensionLoader.getExtensionLoader(ThreadPool.class).getAdaptiveExtension().getExecutor(url));\n-        }\n-\n-        // Give users the chance to customize ServerBuilder\n-        return getConfigurator()\n-                .map(configurator -> configurator.configureServerBuilder(builder, url))\n-                .orElse(builder);\n-    }\n-\n-    static ManagedChannel buildManagedChannel(URL url) {\n-\n-        NettyChannelBuilder builder = NettyChannelBuilder.forAddress(url.getHost(), url.getPort());\n-        if (url.getParameter(SSL_ENABLED_KEY, false)) {\n-            builder.sslContext(buildClientSslContext(url));\n-        } else {\n-            builder.usePlaintext();\n-        }\n-\n-        builder.disableRetry();\n-//        builder.directExecutor();\n-\n-        // client interceptors\n-        List<io.grpc.ClientInterceptor> interceptors = new ArrayList<>(\n-                ExtensionLoader.getExtensionLoader(ClientInterceptor.class)\n-                        .getActivateExtension(url, CLIENT_INTERCEPTORS, CONSUMER_SIDE)\n-        );\n-\n-        builder.intercept(interceptors);\n-\n-        return getConfigurator()\n-                .map(configurator -> configurator.configureChannelBuilder(builder, url))\n-                .orElse(builder)\n-                .build();\n-    }\n-\n-    static CallOptions buildCallOptions(URL url) {\n-        // gRPC Deadline starts counting when it's created, so we need to create and add a new Deadline for each RPC call.\n-//        CallOptions callOptions = CallOptions.DEFAULT\n-//                .withDeadline(Deadline.after(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS));\n-        CallOptions callOptions = CallOptions.DEFAULT;\n-        return getConfigurator()\n-                .map(configurator -> configurator.configureCallOptions(callOptions, url))\n-                .orElse(callOptions);\n-    }\n-\n-    private static SslContext buildServerSslContext(URL url) {\n-        ConfigManager globalConfigManager = ApplicationModel.getConfigManager();\n-        SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> new IllegalStateException(\"Ssl enabled, but no ssl cert information provided!\"));\n-\n-        SslContextBuilder sslClientContextBuilder = null;\n-        try {\n-            String password = sslConfig.getServerKeyPassword();\n-            if (password != null) {\n-                sslClientContextBuilder = GrpcSslContexts.forServer(sslConfig.getServerKeyCertChainPathStream(),\n-                        sslConfig.getServerPrivateKeyPathStream(), password);\n-            } else {\n-                sslClientContextBuilder = GrpcSslContexts.forServer(sslConfig.getServerKeyCertChainPathStream(),\n-                        sslConfig.getServerPrivateKeyPathStream());\n-            }\n-\n-            InputStream trustCertCollectionFilePath = sslConfig.getServerTrustCertCollectionPathStream();\n-            if (trustCertCollectionFilePath != null) {\n-                sslClientContextBuilder.trustManager(trustCertCollectionFilePath);\n-                sslClientContextBuilder.clientAuth(ClientAuth.REQUIRE);\n-            }\n-        } catch (Exception e) {\n-            throw new IllegalArgumentException(\"Could not find certificate file or the certificate is invalid.\", e);\n-        }\n-        try {\n-            return sslClientContextBuilder.build();\n-        } catch (SSLException e) {\n-            throw new IllegalStateException(\"Build SslSession failed.\", e);\n-        }\n-    }\n-\n-    private static SslContext buildClientSslContext(URL url) {\n-        ConfigManager globalConfigManager = ApplicationModel.getConfigManager();\n-        SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> new IllegalStateException(\"Ssl enabled, but no ssl cert information provided!\"));\n-\n-\n-        SslContextBuilder builder = GrpcSslContexts.forClient();\n-        try {\n-            InputStream trustCertCollectionFilePath = sslConfig.getClientTrustCertCollectionPathStream();\n-            if (trustCertCollectionFilePath != null) {\n-                builder.trustManager(trustCertCollectionFilePath);\n-            }\n-            InputStream clientCertChainFilePath = sslConfig.getClientKeyCertChainPathStream();\n-            InputStream clientPrivateKeyFilePath = sslConfig.getClientPrivateKeyPathStream();\n-            if (clientCertChainFilePath != null && clientPrivateKeyFilePath != null) {\n-                String password = sslConfig.getClientKeyPassword();\n-                if (password != null) {\n-                    builder.keyManager(clientCertChainFilePath, clientPrivateKeyFilePath, password);\n-                } else {\n-                    builder.keyManager(clientCertChainFilePath, clientPrivateKeyFilePath);\n-                }\n-            }\n-        } catch (Exception e) {\n-            throw new IllegalArgumentException(\"Could not find certificate file or find invalid certificate.\", e);\n-        }\n-        try {\n-            return builder.build();\n-        } catch (SSLException e) {\n-            throw new IllegalStateException(\"Build SslSession failed.\", e);\n-        }\n-    }\n-\n-    private static Optional<GrpcConfigurator> getConfigurator() {\n-        // Give users the chance to customize ServerBuilder\n-        Set<GrpcConfigurator> configurators = ExtensionLoader.getExtensionLoader(GrpcConfigurator.class)\n-                .getSupportedExtensionInstances();\n-        if (CollectionUtils.isNotEmpty(configurators)) {\n-            return Optional.of(configurators.iterator().next());\n-        }\n-        return Optional.empty();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.threadpool.ThreadPool;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.config.SslConfig;\r\n+import org.apache.dubbo.config.context.ConfigManager;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.protocol.grpc.interceptors.ClientInterceptor;\r\n+import org.apache.dubbo.rpc.protocol.grpc.interceptors.GrpcConfigurator;\r\n+import org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerInterceptor;\r\n+import org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerTransportFilter;\r\n+\r\n+import io.grpc.CallOptions;\r\n+import io.grpc.ManagedChannel;\r\n+import io.grpc.ServerBuilder;\r\n+import io.grpc.netty.GrpcSslContexts;\r\n+import io.grpc.netty.NettyChannelBuilder;\r\n+import io.grpc.netty.NettyServerBuilder;\r\n+import io.netty.handler.ssl.ClientAuth;\r\n+import io.netty.handler.ssl.SslContext;\r\n+import io.netty.handler.ssl.SslContextBuilder;\r\n+\r\n+import javax.net.ssl.SSLException;\r\n+import java.io.InputStream;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SSL_ENABLED_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.DISPATCHER_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.EXECUTES_KEY;\r\n+import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.CLIENT_INTERCEPTORS;\r\n+import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.EXECUTOR;\r\n+import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.MAX_CONCURRENT_CALLS_PER_CONNECTION;\r\n+import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.MAX_INBOUND_MESSAGE_SIZE;\r\n+import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.MAX_INBOUND_METADATA_SIZE;\r\n+import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.SERVER_INTERCEPTORS;\r\n+import static org.apache.dubbo.rpc.protocol.grpc.GrpcConstants.TRANSPORT_FILTERS;\r\n+\r\n+/**\r\n+ * Support gRPC configs in a Dubbo specific way.\r\n+ */\r\n+public class GrpcOptionsUtils {\r\n+\r\n+    static ServerBuilder buildServerBuilder(URL url, NettyServerBuilder builder) {\r\n+\r\n+        int maxInboundMessageSize = url.getParameter(MAX_INBOUND_MESSAGE_SIZE, 0);\r\n+        if (maxInboundMessageSize > 0) {\r\n+            builder.maxInboundMessageSize(maxInboundMessageSize);\r\n+        }\r\n+\r\n+        int maxInboundMetadataSize = url.getParameter(MAX_INBOUND_METADATA_SIZE, 0);\r\n+        if (maxInboundMetadataSize > 0) {\r\n+            builder.maxInboundMetadataSize(maxInboundMetadataSize);\r\n+        }\r\n+\r\n+        if (url.getParameter(SSL_ENABLED_KEY, false)) {\r\n+            builder.sslContext(buildServerSslContext(url));\r\n+        }\r\n+\r\n+        int flowControlWindow = url.getParameter(MAX_INBOUND_MESSAGE_SIZE, 0);\r\n+        if (flowControlWindow > 0) {\r\n+            builder.flowControlWindow(flowControlWindow);\r\n+        }\r\n+\r\n+        int maxCalls = url.getParameter(MAX_CONCURRENT_CALLS_PER_CONNECTION, url.getParameter(EXECUTES_KEY, 0));\r\n+        if (maxCalls > 0) {\r\n+            builder.maxConcurrentCallsPerConnection(maxCalls);\r\n+        }\r\n+\r\n+        // server interceptors\r\n+        List<ServerInterceptor> serverInterceptors = ExtensionLoader.getExtensionLoader(ServerInterceptor.class)\r\n+                .getActivateExtension(url, SERVER_INTERCEPTORS, PROVIDER_SIDE);\r\n+        for (ServerInterceptor serverInterceptor : serverInterceptors) {\r\n+            builder.intercept(serverInterceptor);\r\n+        }\r\n+\r\n+        // server filters\r\n+        List<ServerTransportFilter> transportFilters = ExtensionLoader.getExtensionLoader(ServerTransportFilter.class)\r\n+                .getActivateExtension(url, TRANSPORT_FILTERS, PROVIDER_SIDE);\r\n+        for (ServerTransportFilter transportFilter : transportFilters) {\r\n+            builder.addTransportFilter(transportFilter.grpcTransportFilter());\r\n+        }\r\n+\r\n+        String thread = url.getParameter(EXECUTOR, url.getParameter(DISPATCHER_KEY));\r\n+        if (\"direct\".equals(thread)) {\r\n+            builder.directExecutor();\r\n+        } else {\r\n+            builder.executor(ExtensionLoader.getExtensionLoader(ThreadPool.class).getAdaptiveExtension().getExecutor(url));\r\n+        }\r\n+\r\n+        // Give users the chance to customize ServerBuilder\r\n+        return getConfigurator()\r\n+                .map(configurator -> configurator.configureServerBuilder(builder, url))\r\n+                .orElse(builder);\r\n+    }\r\n+\r\n+    static ManagedChannel buildManagedChannel(URL url) {\r\n+\r\n+        NettyChannelBuilder builder = NettyChannelBuilder.forAddress(url.getHost(), url.getPort());\r\n+        if (url.getParameter(SSL_ENABLED_KEY, false)) {\r\n+            builder.sslContext(buildClientSslContext(url));\r\n+        } else {\r\n+            builder.usePlaintext();\r\n+        }\r\n+\r\n+        builder.disableRetry();\r\n+//        builder.directExecutor();\r\n+\r\n+        // client interceptors\r\n+        List<io.grpc.ClientInterceptor> interceptors = new ArrayList<>(\r\n+                ExtensionLoader.getExtensionLoader(ClientInterceptor.class)\r\n+                        .getActivateExtension(url, CLIENT_INTERCEPTORS, CONSUMER_SIDE)\r\n+        );\r\n+\r\n+        builder.intercept(interceptors);\r\n+\r\n+        return getConfigurator()\r\n+                .map(configurator -> configurator.configureChannelBuilder(builder, url))\r\n+                .orElse(builder)\r\n+                .build();\r\n+    }\r\n+\r\n+    static CallOptions buildCallOptions(URL url) {\r\n+        // gRPC Deadline starts counting when it's created, so we need to create and add a new Deadline for each RPC call.\r\n+//        CallOptions callOptions = CallOptions.DEFAULT\r\n+//                .withDeadline(Deadline.after(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT), TimeUnit.MILLISECONDS));\r\n+        CallOptions callOptions = CallOptions.DEFAULT;\r\n+        return getConfigurator()\r\n+                .map(configurator -> configurator.configureCallOptions(callOptions, url))\r\n+                .orElse(callOptions);\r\n+    }\r\n+\r\n+    private static SslContext buildServerSslContext(URL url) {\r\n+        ConfigManager globalConfigManager = ApplicationModel.getConfigManager();\r\n+        SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> new IllegalStateException(\"Ssl enabled, but no ssl cert information provided!\"));\r\n+\r\n+        SslContextBuilder sslClientContextBuilder = null;\r\n+        try {\r\n+            String password = sslConfig.getServerKeyPassword();\r\n+            if (password != null) {\r\n+                sslClientContextBuilder = GrpcSslContexts.forServer(sslConfig.getServerKeyCertChainPathStream(),\r\n+                        sslConfig.getServerPrivateKeyPathStream(), password);\r\n+            } else {\r\n+                sslClientContextBuilder = GrpcSslContexts.forServer(sslConfig.getServerKeyCertChainPathStream(),\r\n+                        sslConfig.getServerPrivateKeyPathStream());\r\n+            }\r\n+\r\n+            InputStream trustCertCollectionFilePath = sslConfig.getServerTrustCertCollectionPathStream();\r\n+            if (trustCertCollectionFilePath != null) {\r\n+                sslClientContextBuilder.trustManager(trustCertCollectionFilePath);\r\n+                sslClientContextBuilder.clientAuth(ClientAuth.REQUIRE);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            throw new IllegalArgumentException(\"Could not find certificate file or the certificate is invalid.\", e);\r\n+        }\r\n+        try {\r\n+            return sslClientContextBuilder.build();\r\n+        } catch (SSLException e) {\r\n+            throw new IllegalStateException(\"Build SslSession failed.\", e);\r\n+        }\r\n+    }\r\n+\r\n+    private static SslContext buildClientSslContext(URL url) {\r\n+        ConfigManager globalConfigManager = ApplicationModel.getConfigManager();\r\n+        SslConfig sslConfig = globalConfigManager.getSsl().orElseThrow(() -> new IllegalStateException(\"Ssl enabled, but no ssl cert information provided!\"));\r\n+\r\n+\r\n+        SslContextBuilder builder = GrpcSslContexts.forClient();\r\n+        try {\r\n+            InputStream trustCertCollectionFilePath = sslConfig.getClientTrustCertCollectionPathStream();\r\n+            if (trustCertCollectionFilePath != null) {\r\n+                builder.trustManager(trustCertCollectionFilePath);\r\n+            }\r\n+            InputStream clientCertChainFilePath = sslConfig.getClientKeyCertChainPathStream();\r\n+            InputStream clientPrivateKeyFilePath = sslConfig.getClientPrivateKeyPathStream();\r\n+            if (clientCertChainFilePath != null && clientPrivateKeyFilePath != null) {\r\n+                String password = sslConfig.getClientKeyPassword();\r\n+                if (password != null) {\r\n+                    builder.keyManager(clientCertChainFilePath, clientPrivateKeyFilePath, password);\r\n+                } else {\r\n+                    builder.keyManager(clientCertChainFilePath, clientPrivateKeyFilePath);\r\n+                }\r\n+            }\r\n+        } catch (Exception e) {\r\n+            throw new IllegalArgumentException(\"Could not find certificate file or find invalid certificate.\", e);\r\n+        }\r\n+        try {\r\n+            return builder.build();\r\n+        } catch (SSLException e) {\r\n+            throw new IllegalStateException(\"Build SslSession failed.\", e);\r\n+        }\r\n+    }\r\n+\r\n+    private static Optional<GrpcConfigurator> getConfigurator() {\r\n+        // Give users the chance to customize ServerBuilder\r\n+        Set<GrpcConfigurator> configurators = ExtensionLoader.getExtensionLoader(GrpcConfigurator.class)\r\n+                .getSupportedExtensionInstances();\r\n+        if (CollectionUtils.isNotEmpty(configurators)) {\r\n+            return Optional.of(configurators.iterator().next());\r\n+        }\r\n+        return Optional.empty();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/GrpcProtocol.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,235 +1,235 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.config.ReferenceConfigBase;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-import org.apache.dubbo.rpc.model.ServiceRepository;\n-import org.apache.dubbo.rpc.protocol.AbstractProxyProtocol;\n-\n-import io.grpc.BindableService;\n-import io.grpc.CallOptions;\n-import io.grpc.Channel;\n-import io.grpc.ManagedChannel;\n-import io.grpc.Server;\n-import io.grpc.netty.NettyServerBuilder;\n-\n-import java.io.IOException;\n-import java.lang.reflect.InvocationTargetException;\n-import java.lang.reflect.Method;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-/**\n- *\n- */\n-public class GrpcProtocol extends AbstractProxyProtocol {\n-\n-    public final static int DEFAULT_PORT = 50051;\n-\n-    /* <address, gRPC channels> */\n-    private final ConcurrentMap<String, ReferenceCountManagedChannel> channelMap = new ConcurrentHashMap<>();\n-    private final Object lock = new Object();\n-\n-    @Override\n-    protected <T> Runnable doExport(T proxiedImpl, Class<T> type, URL url) throws RpcException {\n-        String key = url.getAddress();\n-        ProtocolServer protocolServer = serverMap.computeIfAbsent(key, k -> {\n-            DubboHandlerRegistry registry = new DubboHandlerRegistry();\n-\n-            NettyServerBuilder builder =\n-                    NettyServerBuilder\n-                    .forPort(url.getPort())\n-                            .fallbackHandlerRegistry(registry);\n-\n-            Server originalServer = GrpcOptionsUtils.buildServerBuilder(url, builder).build();\n-            GrpcRemotingServer remotingServer = new GrpcRemotingServer(originalServer, registry);\n-            return new ProxyProtocolServer(remotingServer);\n-        });\n-\n-        GrpcRemotingServer grpcServer = (GrpcRemotingServer) protocolServer.getRemotingServer();\n-\n-        ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\n-        ProviderModel providerModel = serviceRepository.lookupExportedService(url.getServiceKey());\n-        if (providerModel == null) {\n-            throw new IllegalStateException(\"Service \" + url.getServiceKey() + \"should have already been stored in service repository, \" +\n-                    \"but failed to find it.\");\n-        }\n-        Object originalImpl = providerModel.getServiceInstance();\n-\n-        Class<?> implClass = originalImpl.getClass();\n-        try {\n-            Method method = implClass.getMethod(\"setProxiedImpl\", type);\n-            method.invoke(originalImpl, proxiedImpl);\n-        } catch (Exception e) {\n-            throw new IllegalStateException(\"Failed to set dubbo proxied service impl to stub, please make sure your stub \" +\n-                    \"was generated by the dubbo-protoc-compiler.\", e);\n-        }\n-        grpcServer.getRegistry().addService((BindableService) originalImpl, url.getServiceKey());\n-\n-        if (!grpcServer.isStarted()) {\n-            grpcServer.start();\n-        }\n-\n-        return () -> grpcServer.getRegistry().removeService(url.getServiceKey());\n-    }\n-\n-    @Override\n-    protected <T> Invoker<T> protocolBindingRefer(final Class<T> type, final URL url) throws RpcException {\n-        Class<?> enclosingClass = type.getEnclosingClass();\n-\n-        if (enclosingClass == null) {\n-            throw new IllegalArgumentException(type.getName() + \" must be declared inside protobuf generated classes, \" +\n-                    \"should be something like ServiceNameGrpc.IServiceName.\");\n-        }\n-\n-        final Method dubboStubMethod;\n-        try {\n-            dubboStubMethod = enclosingClass.getDeclaredMethod(\"getDubboStub\", Channel.class, CallOptions.class,\n-                    URL.class, ReferenceConfigBase.class);\n-        } catch (NoSuchMethodException e) {\n-            throw new IllegalArgumentException(\"Does not find getDubboStub in \" + enclosingClass.getName() + \", please use the customized protoc-gen-dubbo-java to update the generated classes.\");\n-        }\n-\n-        // Channel\n-        ReferenceCountManagedChannel channel = getSharedChannel(url);\n-\n-        // CallOptions\n-        try {\n-            @SuppressWarnings(\"unchecked\") final T stub = (T) dubboStubMethod.invoke(null,\n-                    channel,\n-                    GrpcOptionsUtils.buildCallOptions(url),\n-                    url,\n-                    ApplicationModel.getConsumerModel(url.getServiceKey()).getReferenceConfig()\n-            );\n-            final Invoker<T> target = proxyFactory.getInvoker(stub, type, url);\n-            GrpcInvoker<T> grpcInvoker = new GrpcInvoker<>(type, url, target, channel);\n-            invokers.add(grpcInvoker);\n-            return grpcInvoker;\n-        } catch (IllegalAccessException | InvocationTargetException e) {\n-            throw new IllegalStateException(\"Could not create stub through reflection.\", e);\n-        }\n-    }\n-\n-    /**\n-     * not used\n-     *\n-     * @param type\n-     * @param url\n-     * @param <T>\n-     * @return\n-     * @throws RpcException\n-     */\n-    @Override\n-    protected <T> T doRefer(Class<T> type, URL url) throws RpcException {\n-        throw new UnsupportedOperationException(\"not used\");\n-    }\n-\n-    /**\n-     * Get shared channel connection\n-     */\n-    private ReferenceCountManagedChannel getSharedChannel(URL url) {\n-        String key = url.getAddress();\n-        ReferenceCountManagedChannel channel = channelMap.get(key);\n-\n-        if (channel != null && !channel.isTerminated()) {\n-            channel.incrementAndGetCount();\n-            return channel;\n-        }\n-\n-        synchronized (lock) {\n-            channel = channelMap.get(key);\n-            // dubbo check\n-            if (channel != null && !channel.isTerminated()) {\n-                channel.incrementAndGetCount();\n-            } else {\n-                channel = new ReferenceCountManagedChannel(initChannel(url));\n-                channelMap.put(key, channel);\n-            }\n-        }\n-\n-        return channel;\n-    }\n-\n-    /**\n-     * Create new connection\n-     *\n-     * @param url\n-     */\n-    private ManagedChannel initChannel(URL url) {\n-        return GrpcOptionsUtils.buildManagedChannel(url);\n-    }\n-\n-    @Override\n-    public int getDefaultPort() {\n-        return DEFAULT_PORT;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        serverMap.values().forEach(ProtocolServer::close);\n-        channelMap.values().forEach(ReferenceCountManagedChannel::shutdown);\n-        serverMap.clear();\n-        channelMap.clear();\n-        super.destroy();\n-    }\n-\n-    public class GrpcRemotingServer extends RemotingServerAdapter {\n-\n-        private Server originalServer;\n-        private DubboHandlerRegistry handlerRegistry;\n-        private volatile boolean started;\n-\n-        public GrpcRemotingServer(Server server, DubboHandlerRegistry handlerRegistry) {\n-            this.originalServer = server;\n-            this.handlerRegistry = handlerRegistry;\n-        }\n-\n-        public void start() throws RpcException {\n-            try {\n-                originalServer.start();\n-                started = true;\n-            } catch (IOException e) {\n-                throw new RpcException(\"Starting gRPC server failed. \", e);\n-            }\n-        }\n-\n-        public DubboHandlerRegistry getRegistry() {\n-            return handlerRegistry;\n-        }\n-\n-        @Override\n-        public Object getDelegateServer() {\n-            return originalServer;\n-        }\n-\n-        public boolean isStarted() {\n-            return started;\n-        }\n-\n-        @Override\n-        public void close() {\n-            originalServer.shutdown();\n-        }\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.config.ReferenceConfigBase;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+import org.apache.dubbo.rpc.model.ServiceRepository;\r\n+import org.apache.dubbo.rpc.protocol.AbstractProxyProtocol;\r\n+\r\n+import io.grpc.BindableService;\r\n+import io.grpc.CallOptions;\r\n+import io.grpc.Channel;\r\n+import io.grpc.ManagedChannel;\r\n+import io.grpc.Server;\r\n+import io.grpc.netty.NettyServerBuilder;\r\n+\r\n+import java.io.IOException;\r\n+import java.lang.reflect.InvocationTargetException;\r\n+import java.lang.reflect.Method;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+public class GrpcProtocol extends AbstractProxyProtocol {\r\n+\r\n+    public final static int DEFAULT_PORT = 50051;\r\n+\r\n+    /* <address, gRPC channels> */\r\n+    private final ConcurrentMap<String, ReferenceCountManagedChannel> channelMap = new ConcurrentHashMap<>();\r\n+    private final Object lock = new Object();\r\n+\r\n+    @Override\r\n+    protected <T> Runnable doExport(T proxiedImpl, Class<T> type, URL url) throws RpcException {\r\n+        String key = url.getAddress();\r\n+        ProtocolServer protocolServer = serverMap.computeIfAbsent(key, k -> {\r\n+            DubboHandlerRegistry registry = new DubboHandlerRegistry();\r\n+\r\n+            NettyServerBuilder builder =\r\n+                    NettyServerBuilder\r\n+                    .forPort(url.getPort())\r\n+                            .fallbackHandlerRegistry(registry);\r\n+\r\n+            Server originalServer = GrpcOptionsUtils.buildServerBuilder(url, builder).build();\r\n+            GrpcRemotingServer remotingServer = new GrpcRemotingServer(originalServer, registry);\r\n+            return new ProxyProtocolServer(remotingServer);\r\n+        });\r\n+\r\n+        GrpcRemotingServer grpcServer = (GrpcRemotingServer) protocolServer.getRemotingServer();\r\n+\r\n+        ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\r\n+        ProviderModel providerModel = serviceRepository.lookupExportedService(url.getServiceKey());\r\n+        if (providerModel == null) {\r\n+            throw new IllegalStateException(\"Service \" + url.getServiceKey() + \"should have already been stored in service repository, \" +\r\n+                    \"but failed to find it.\");\r\n+        }\r\n+        Object originalImpl = providerModel.getServiceInstance();\r\n+\r\n+        Class<?> implClass = originalImpl.getClass();\r\n+        try {\r\n+            Method method = implClass.getMethod(\"setProxiedImpl\", type);\r\n+            method.invoke(originalImpl, proxiedImpl);\r\n+        } catch (Exception e) {\r\n+            throw new IllegalStateException(\"Failed to set dubbo proxied service impl to stub, please make sure your stub \" +\r\n+                    \"was generated by the dubbo-protoc-compiler.\", e);\r\n+        }\r\n+        grpcServer.getRegistry().addService((BindableService) originalImpl, url.getServiceKey());\r\n+\r\n+        if (!grpcServer.isStarted()) {\r\n+            grpcServer.start();\r\n+        }\r\n+\r\n+        return () -> grpcServer.getRegistry().removeService(url.getServiceKey());\r\n+    }\r\n+\r\n+    @Override\r\n+    protected <T> Invoker<T> protocolBindingRefer(final Class<T> type, final URL url) throws RpcException {\r\n+        Class<?> enclosingClass = type.getEnclosingClass();\r\n+\r\n+        if (enclosingClass == null) {\r\n+            throw new IllegalArgumentException(type.getName() + \" must be declared inside protobuf generated classes, \" +\r\n+                    \"should be something like ServiceNameGrpc.IServiceName.\");\r\n+        }\r\n+\r\n+        final Method dubboStubMethod;\r\n+        try {\r\n+            dubboStubMethod = enclosingClass.getDeclaredMethod(\"getDubboStub\", Channel.class, CallOptions.class,\r\n+                    URL.class, ReferenceConfigBase.class);\r\n+        } catch (NoSuchMethodException e) {\r\n+            throw new IllegalArgumentException(\"Does not find getDubboStub in \" + enclosingClass.getName() + \", please use the customized protoc-gen-dubbo-java to update the generated classes.\");\r\n+        }\r\n+\r\n+        // Channel\r\n+        ReferenceCountManagedChannel channel = getSharedChannel(url);\r\n+\r\n+        // CallOptions\r\n+        try {\r\n+            @SuppressWarnings(\"unchecked\") final T stub = (T) dubboStubMethod.invoke(null,\r\n+                    channel,\r\n+                    GrpcOptionsUtils.buildCallOptions(url),\r\n+                    url,\r\n+                    ApplicationModel.getConsumerModel(url.getServiceKey()).getReferenceConfig()\r\n+            );\r\n+            final Invoker<T> target = proxyFactory.getInvoker(stub, type, url);\r\n+            GrpcInvoker<T> grpcInvoker = new GrpcInvoker<>(type, url, target, channel);\r\n+            invokers.add(grpcInvoker);\r\n+            return grpcInvoker;\r\n+        } catch (IllegalAccessException | InvocationTargetException e) {\r\n+            throw new IllegalStateException(\"Could not create stub through reflection.\", e);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * not used\r\n+     *\r\n+     * @param type\r\n+     * @param url\r\n+     * @param <T>\r\n+     * @return\r\n+     * @throws RpcException\r\n+     */\r\n+    @Override\r\n+    protected <T> T doRefer(Class<T> type, URL url) throws RpcException {\r\n+        throw new UnsupportedOperationException(\"not used\");\r\n+    }\r\n+\r\n+    /**\r\n+     * Get shared channel connection\r\n+     */\r\n+    private ReferenceCountManagedChannel getSharedChannel(URL url) {\r\n+        String key = url.getAddress();\r\n+        ReferenceCountManagedChannel channel = channelMap.get(key);\r\n+\r\n+        if (channel != null && !channel.isTerminated()) {\r\n+            channel.incrementAndGetCount();\r\n+            return channel;\r\n+        }\r\n+\r\n+        synchronized (lock) {\r\n+            channel = channelMap.get(key);\r\n+            // dubbo check\r\n+            if (channel != null && !channel.isTerminated()) {\r\n+                channel.incrementAndGetCount();\r\n+            } else {\r\n+                channel = new ReferenceCountManagedChannel(initChannel(url));\r\n+                channelMap.put(key, channel);\r\n+            }\r\n+        }\r\n+\r\n+        return channel;\r\n+    }\r\n+\r\n+    /**\r\n+     * Create new connection\r\n+     *\r\n+     * @param url\r\n+     */\r\n+    private ManagedChannel initChannel(URL url) {\r\n+        return GrpcOptionsUtils.buildManagedChannel(url);\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getDefaultPort() {\r\n+        return DEFAULT_PORT;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        serverMap.values().forEach(ProtocolServer::close);\r\n+        channelMap.values().forEach(ReferenceCountManagedChannel::shutdown);\r\n+        serverMap.clear();\r\n+        channelMap.clear();\r\n+        super.destroy();\r\n+    }\r\n+\r\n+    public class GrpcRemotingServer extends RemotingServerAdapter {\r\n+\r\n+        private Server originalServer;\r\n+        private DubboHandlerRegistry handlerRegistry;\r\n+        private volatile boolean started;\r\n+\r\n+        public GrpcRemotingServer(Server server, DubboHandlerRegistry handlerRegistry) {\r\n+            this.originalServer = server;\r\n+            this.handlerRegistry = handlerRegistry;\r\n+        }\r\n+\r\n+        public void start() throws RpcException {\r\n+            try {\r\n+                originalServer.start();\r\n+                started = true;\r\n+            } catch (IOException e) {\r\n+                throw new RpcException(\"Starting gRPC server failed. \", e);\r\n+            }\r\n+        }\r\n+\r\n+        public DubboHandlerRegistry getRegistry() {\r\n+            return handlerRegistry;\r\n+        }\r\n+\r\n+        @Override\r\n+        public Object getDelegateServer() {\r\n+            return originalServer;\r\n+        }\r\n+\r\n+        public boolean isStarted() {\r\n+            return started;\r\n+        }\r\n+\r\n+        @Override\r\n+        public void close() {\r\n+            originalServer.shutdown();\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/ReferenceCountManagedChannel.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/ReferenceCountManagedChannel.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,85 +1,85 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc;\n-\n-import io.grpc.CallOptions;\n-import io.grpc.ClientCall;\n-import io.grpc.ManagedChannel;\n-import io.grpc.MethodDescriptor;\n-\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.atomic.AtomicInteger;\n-\n-/**\n- * Also see ReferenceCountExchangeClient\n- */\n-public class ReferenceCountManagedChannel extends ManagedChannel {\n-\n-    private final AtomicInteger referenceCount = new AtomicInteger(0);\n-\n-    private ManagedChannel grpcChannel;\n-\n-    public ReferenceCountManagedChannel(ManagedChannel delegated) {\n-        this.grpcChannel = delegated;\n-    }\n-\n-    /**\n-     * The reference count of current ExchangeClient, connection will be closed if all invokers destroyed.\n-     */\n-    public void incrementAndGetCount() {\n-        referenceCount.incrementAndGet();\n-    }\n-\n-    @Override\n-    public ManagedChannel shutdown() {\n-        if (referenceCount.decrementAndGet() <= 0) {\n-            return grpcChannel.shutdown();\n-        }\n-        return grpcChannel;\n-    }\n-\n-    @Override\n-    public boolean isShutdown() {\n-        return grpcChannel.isShutdown();\n-    }\n-\n-    @Override\n-    public boolean isTerminated() {\n-        return grpcChannel.isTerminated();\n-    }\n-\n-    @Override\n-    public ManagedChannel shutdownNow() {\n-        // TODO\n-        return shutdown();\n-    }\n-\n-    @Override\n-    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {\n-        return grpcChannel.awaitTermination(timeout, unit);\n-    }\n-\n-    @Override\n-    public <RequestT, ResponseT> ClientCall<RequestT, ResponseT> newCall(MethodDescriptor<RequestT, ResponseT> methodDescriptor, CallOptions callOptions) {\n-        return grpcChannel.newCall(methodDescriptor, callOptions);\n-    }\n-\n-    @Override\n-    public String authority() {\n-        return grpcChannel.authority();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc;\r\n+\r\n+import io.grpc.CallOptions;\r\n+import io.grpc.ClientCall;\r\n+import io.grpc.ManagedChannel;\r\n+import io.grpc.MethodDescriptor;\r\n+\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+\r\n+/**\r\n+ * Also see ReferenceCountExchangeClient\r\n+ */\r\n+public class ReferenceCountManagedChannel extends ManagedChannel {\r\n+\r\n+    private final AtomicInteger referenceCount = new AtomicInteger(0);\r\n+\r\n+    private ManagedChannel grpcChannel;\r\n+\r\n+    public ReferenceCountManagedChannel(ManagedChannel delegated) {\r\n+        this.grpcChannel = delegated;\r\n+    }\r\n+\r\n+    /**\r\n+     * The reference count of current ExchangeClient, connection will be closed if all invokers destroyed.\r\n+     */\r\n+    public void incrementAndGetCount() {\r\n+        referenceCount.incrementAndGet();\r\n+    }\r\n+\r\n+    @Override\r\n+    public ManagedChannel shutdown() {\r\n+        if (referenceCount.decrementAndGet() <= 0) {\r\n+            return grpcChannel.shutdown();\r\n+        }\r\n+        return grpcChannel;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isShutdown() {\r\n+        return grpcChannel.isShutdown();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isTerminated() {\r\n+        return grpcChannel.isTerminated();\r\n+    }\r\n+\r\n+    @Override\r\n+    public ManagedChannel shutdownNow() {\r\n+        // TODO\r\n+        return shutdown();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {\r\n+        return grpcChannel.awaitTermination(timeout, unit);\r\n+    }\r\n+\r\n+    @Override\r\n+    public <RequestT, ResponseT> ClientCall<RequestT, ResponseT> newCall(MethodDescriptor<RequestT, ResponseT> methodDescriptor, CallOptions callOptions) {\r\n+        return grpcChannel.newCall(methodDescriptor, callOptions);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String authority() {\r\n+        return grpcChannel.authority();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/interceptors/ClientInterceptor.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/interceptors/ClientInterceptor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,26 +1,26 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-/**\n- * Adapt to the standard Dubbo SPI, so that we can leverage the advantages of Dubbo ExtensionLoader.\n- */\n-@SPI\n-public interface ClientInterceptor extends io.grpc.ClientInterceptor {\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+/**\r\n+ * Adapt to the standard Dubbo SPI, so that we can leverage the advantages of Dubbo ExtensionLoader.\r\n+ */\r\n+@SPI\r\n+public interface ClientInterceptor extends io.grpc.ClientInterceptor {\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/interceptors/GrpcConfigurator.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/interceptors/GrpcConfigurator.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,41 +1,41 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import io.grpc.CallOptions;\n-import io.grpc.netty.NettyChannelBuilder;\n-import io.grpc.netty.NettyServerBuilder;\n-\n-@SPI\n-public interface GrpcConfigurator {\n-\n-    default NettyServerBuilder configureServerBuilder(NettyServerBuilder builder, URL url) {\n-        return builder;\n-    }\n-\n-    default NettyChannelBuilder configureChannelBuilder(NettyChannelBuilder builder, URL url) {\n-        return builder;\n-    }\n-\n-    default CallOptions configureCallOptions(CallOptions options, URL url) {\n-        return options;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import io.grpc.CallOptions;\r\n+import io.grpc.netty.NettyChannelBuilder;\r\n+import io.grpc.netty.NettyServerBuilder;\r\n+\r\n+@SPI\r\n+public interface GrpcConfigurator {\r\n+\r\n+    default NettyServerBuilder configureServerBuilder(NettyServerBuilder builder, URL url) {\r\n+        return builder;\r\n+    }\r\n+\r\n+    default NettyChannelBuilder configureChannelBuilder(NettyChannelBuilder builder, URL url) {\r\n+        return builder;\r\n+    }\r\n+\r\n+    default CallOptions configureCallOptions(CallOptions options, URL url) {\r\n+        return options;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/interceptors/RpcContextInterceptor.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/interceptors/RpcContextInterceptor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,100 +1,100 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\n-\n-import io.grpc.CallOptions;\n-import io.grpc.Channel;\n-import io.grpc.ClientCall;\n-import io.grpc.ForwardingClientCall;\n-import io.grpc.ForwardingServerCallListener;\n-import io.grpc.Metadata;\n-import io.grpc.MethodDescriptor;\n-import io.grpc.ServerCall;\n-import io.grpc.ServerCallHandler;\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.rpc.RpcContext;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.Set;\n-\n-import static io.grpc.Metadata.ASCII_STRING_MARSHALLER;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\n-\n-/**\n- * Hand over context information from Dubbo to gRPC.\n- */\n-@Activate(group = {PROVIDER, CONSUMER})\n-public class RpcContextInterceptor implements ClientInterceptor, ServerInterceptor {\n-\n-    private static final String DUBBO = \"D-\";\n-\n-    @Override\n-    public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {\n-        RpcContext rpcContext = RpcContext.getContext();\n-        Map<String, Object> attachments = new HashMap<>(rpcContext.getObjectAttachments());\n-\n-        return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) {\n-            @Override\n-            public void start(Listener<RespT> responseListener, Metadata headers) {\n-                if (!attachments.isEmpty()) {\n-                    for (Map.Entry<String, Object> entry : attachments.entrySet()) {\n-                        // only used for string\n-                        if (entry.getValue() instanceof String) {\n-                            headers.put(Metadata.Key.of(DUBBO + entry.getKey(), ASCII_STRING_MARSHALLER), ((String) entry.getValue()));\n-                        }\n-                    }\n-                }\n-                super.start(responseListener, headers);\n-            }\n-        };\n-    }\n-\n-    @Override\n-    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) {\n-        Set<String> keys = headers.keys();\n-        Map<String, Object> attachments = new HashMap<>();\n-        // filter out all dubbo attachments and save in map\n-        if (keys != null) {\n-            keys.stream().filter(k -> k.toUpperCase().startsWith(DUBBO)).forEach(k ->\n-                    attachments.put(k.substring(DUBBO.length()), headers.get(Metadata.Key.of(k, Metadata.ASCII_STRING_MARSHALLER)))\n-            );\n-        }\n-\n-        return new ForwardingServerCallListener.SimpleForwardingServerCallListener<ReqT>(next.startCall(call, headers)) {\n-            @Override\n-            public void onHalfClose() {\n-                // the client completed all message sending and server will call the biz method if client is not the streaming\n-                if (call.getMethodDescriptor().getType().clientSendsOneMessage()) {\n-                    RpcContext.getContext().setObjectAttachments(attachments);\n-                }\n-                super.onHalfClose();\n-            }\n-\n-            @Override\n-            public void onMessage(ReqT message) {\n-                //server receive the request from client and call the biz method if client is streaming\n-                if (!call.getMethodDescriptor().getType().clientSendsOneMessage()) {\n-                    RpcContext.getContext().setObjectAttachments(attachments);\n-                }\n-                super.onMessage(message);\n-            }\n-        };\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\r\n+\r\n+import io.grpc.CallOptions;\r\n+import io.grpc.Channel;\r\n+import io.grpc.ClientCall;\r\n+import io.grpc.ForwardingClientCall;\r\n+import io.grpc.ForwardingServerCallListener;\r\n+import io.grpc.Metadata;\r\n+import io.grpc.MethodDescriptor;\r\n+import io.grpc.ServerCall;\r\n+import io.grpc.ServerCallHandler;\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+import static io.grpc.Metadata.ASCII_STRING_MARSHALLER;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\r\n+\r\n+/**\r\n+ * Hand over context information from Dubbo to gRPC.\r\n+ */\r\n+@Activate(group = {PROVIDER, CONSUMER})\r\n+public class RpcContextInterceptor implements ClientInterceptor, ServerInterceptor {\r\n+\r\n+    private static final String DUBBO = \"D-\";\r\n+\r\n+    @Override\r\n+    public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {\r\n+        RpcContext rpcContext = RpcContext.getContext();\r\n+        Map<String, Object> attachments = new HashMap<>(rpcContext.getObjectAttachments());\r\n+\r\n+        return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) {\r\n+            @Override\r\n+            public void start(Listener<RespT> responseListener, Metadata headers) {\r\n+                if (!attachments.isEmpty()) {\r\n+                    for (Map.Entry<String, Object> entry : attachments.entrySet()) {\r\n+                        // only used for string\r\n+                        if (entry.getValue() instanceof String) {\r\n+                            headers.put(Metadata.Key.of(DUBBO + entry.getKey(), ASCII_STRING_MARSHALLER), ((String) entry.getValue()));\r\n+                        }\r\n+                    }\r\n+                }\r\n+                super.start(responseListener, headers);\r\n+            }\r\n+        };\r\n+    }\r\n+\r\n+    @Override\r\n+    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) {\r\n+        Set<String> keys = headers.keys();\r\n+        Map<String, Object> attachments = new HashMap<>();\r\n+        // filter out all dubbo attachments and save in map\r\n+        if (keys != null) {\r\n+            keys.stream().filter(k -> k.toUpperCase().startsWith(DUBBO)).forEach(k ->\r\n+                    attachments.put(k.substring(DUBBO.length()), headers.get(Metadata.Key.of(k, Metadata.ASCII_STRING_MARSHALLER)))\r\n+            );\r\n+        }\r\n+\r\n+        return new ForwardingServerCallListener.SimpleForwardingServerCallListener<ReqT>(next.startCall(call, headers)) {\r\n+            @Override\r\n+            public void onHalfClose() {\r\n+                // the client completed all message sending and server will call the biz method if client is not the streaming\r\n+                if (call.getMethodDescriptor().getType().clientSendsOneMessage()) {\r\n+                    RpcContext.getContext().setObjectAttachments(attachments);\r\n+                }\r\n+                super.onHalfClose();\r\n+            }\r\n+\r\n+            @Override\r\n+            public void onMessage(ReqT message) {\r\n+                //server receive the request from client and call the biz method if client is streaming\r\n+                if (!call.getMethodDescriptor().getType().clientSendsOneMessage()) {\r\n+                    RpcContext.getContext().setObjectAttachments(attachments);\r\n+                }\r\n+                super.onMessage(message);\r\n+            }\r\n+        };\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerInterceptor.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerInterceptor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,26 +1,26 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-/**\n- * Adapt to the standard Dubbo SPI, so that we can leverage the advantages of Dubbo ExtensionLoader.\n- */\n-@SPI\n-public interface ServerInterceptor extends io.grpc.ServerInterceptor {\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+/**\r\n+ * Adapt to the standard Dubbo SPI, so that we can leverage the advantages of Dubbo ExtensionLoader.\r\n+ */\r\n+@SPI\r\n+public interface ServerInterceptor extends io.grpc.ServerInterceptor {\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerTransportFilter.java", "source2": "org/apache/dubbo/rpc/protocol/grpc/interceptors/ServerTransportFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,27 +1,27 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-/**\n- * Adapt to the standard Dubbo SPI, so that we can leverage the advantages of Dubbo ExtensionLoader.\n- */\n-@SPI\n-public interface ServerTransportFilter {\n-    io.grpc.ServerTransportFilter grpcTransportFilter();\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  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.apache.dubbo.rpc.protocol.grpc.interceptors;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+/**\r\n+ * Adapt to the standard Dubbo SPI, so that we can leverage the advantages of Dubbo ExtensionLoader.\r\n+ */\r\n+@SPI\r\n+public interface ServerTransportFilter {\r\n+    io.grpc.ServerTransportFilter grpcTransportFilter();\r\n+}\r\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-rpc-grpc/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-rpc-grpc/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,173 +1,168 @@\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: 4c69 6365 6e73 6564 2074 6f20 7468 6520  Licensed to the \n-00000040: 4170 6163 6865 2053 6f66 7477 6172 6520  Apache Software \n-00000050: 466f 756e 6461 7469 6f6e 2028 4153 4629  Foundation (ASF)\n-00000060: 2075 6e64 6572 206f 6e65 206f 7220 6d6f   under one or mo\n-00000070: 7265 0d0a 2020 636f 6e74 7269 6275 746f  re..  contributo\n-00000080: 7220 6c69 6365 6e73 6520 6167 7265 656d  r license agreem\n-00000090: 656e 7473 2e20 2053 6565 2074 6865 204e  ents.  See the N\n-000000a0: 4f54 4943 4520 6669 6c65 2064 6973 7472  OTICE file distr\n-000000b0: 6962 7574 6564 2077 6974 680d 0a20 2074  ibuted with..  t\n-000000c0: 6869 7320 776f 726b 2066 6f72 2061 6464  his work for add\n-000000d0: 6974 696f 6e61 6c20 696e 666f 726d 6174  itional informat\n-000000e0: 696f 6e20 7265 6761 7264 696e 6720 636f  ion regarding co\n-000000f0: 7079 7269 6768 7420 6f77 6e65 7273 6869  pyright ownershi\n-00000100: 702e 0d0a 2020 5468 6520 4153 4620 6c69  p...  The ASF li\n-00000110: 6365 6e73 6573 2074 6869 7320 6669 6c65  censes this file\n-00000120: 2074 6f20 596f 7520 756e 6465 7220 7468   to You under th\n-00000130: 6520 4170 6163 6865 204c 6963 656e 7365  e Apache License\n-00000140: 2c20 5665 7273 696f 6e20 322e 300d 0a20  , Version 2.0.. \n-00000150: 2028 7468 6520 224c 6963 656e 7365 2229   (the \"License\")\n-00000160: 3b20 796f 7520 6d61 7920 6e6f 7420 7573  ; you may not us\n-00000170: 6520 7468 6973 2066 696c 6520 6578 6365  e this file exce\n-00000180: 7074 2069 6e20 636f 6d70 6c69 616e 6365  pt in compliance\n-00000190: 2077 6974 680d 0a20 2074 6865 204c 6963   with..  the Lic\n-000001a0: 656e 7365 2e20 2059 6f75 206d 6179 206f  ense.  You may o\n-000001b0: 6274 6169 6e20 6120 636f 7079 206f 6620  btain a copy of \n-000001c0: 7468 6520 4c69 6365 6e73 6520 6174 0d0a  the License at..\n-000001d0: 0d0a 2020 2020 2020 6874 7470 3a2f 2f77  ..      http://w\n-000001e0: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-000001f0: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000200: 2e30 0d0a 0d0a 2020 556e 6c65 7373 2072  .0....  Unless r\n-00000210: 6571 7569 7265 6420 6279 2061 7070 6c69  equired by appli\n-00000220: 6361 626c 6520 6c61 7720 6f72 2061 6772  cable law or agr\n-00000230: 6565 6420 746f 2069 6e20 7772 6974 696e  eed to in writin\n-00000240: 672c 2073 6f66 7477 6172 650d 0a20 2064  g, software..  d\n-00000250: 6973 7472 6962 7574 6564 2075 6e64 6572  istributed under\n-00000260: 2074 6865 204c 6963 656e 7365 2069 7320   the License is \n-00000270: 6469 7374 7269 6275 7465 6420 6f6e 2061  distributed on a\n-00000280: 6e20 2241 5320 4953 2220 4241 5349 532c  n \"AS IS\" BASIS,\n-00000290: 0d0a 2020 5749 5448 4f55 5420 5741 5252  ..  WITHOUT WARR\n-000002a0: 414e 5449 4553 204f 5220 434f 4e44 4954  ANTIES OR CONDIT\n-000002b0: 494f 4e53 204f 4620 414e 5920 4b49 4e44  IONS OF ANY KIND\n-000002c0: 2c20 6569 7468 6572 2065 7870 7265 7373  , either express\n-000002d0: 206f 7220 696d 706c 6965 642e 0d0a 2020   or implied...  \n-000002e0: 5365 6520 7468 6520 4c69 6365 6e73 6520  See the License \n-000002f0: 666f 7220 7468 6520 7370 6563 6966 6963  for the specific\n-00000300: 206c 616e 6775 6167 6520 676f 7665 726e   language govern\n-00000310: 696e 6720 7065 726d 6973 7369 6f6e 7320  ing permissions \n-00000320: 616e 640d 0a20 206c 696d 6974 6174 696f  and..  limitatio\n-00000330: 6e73 2075 6e64 6572 2074 6865 204c 6963  ns under the Lic\n-00000340: 656e 7365 2e0d 0a20 202d 2d3e 0d0a 3c70  ense...  -->..<p\n-00000350: 726f 6a65 6374 2078 7369 3a73 6368 656d  roject xsi:schem\n-00000360: 614c 6f63 6174 696f 6e3d 2268 7474 703a  aLocation=\"http:\n-00000370: 2f2f 6d61 7665 6e2e 6170 6163 6865 2e6f  //maven.apache.o\n-00000380: 7267 2f50 4f4d 2f34 2e30 2e30 2068 7474  rg/POM/4.0.0 htt\n-00000390: 7073 3a2f 2f6d 6176 656e 2e61 7061 6368  ps://maven.apach\n-000003a0: 652e 6f72 672f 7873 642f 6d61 7665 6e2d  e.org/xsd/maven-\n-000003b0: 342e 302e 302e 7873 6422 2078 6d6c 6e73  4.0.0.xsd\" xmlns\n-000003c0: 3d22 6874 7470 3a2f 2f6d 6176 656e 2e61  =\"http://maven.a\n-000003d0: 7061 6368 652e 6f72 672f 504f 4d2f 342e  pache.org/POM/4.\n-000003e0: 302e 3022 0d0a 2020 2020 786d 6c6e 733a  0.0\"..    xmlns:\n-000003f0: 7873 693d 2268 7474 703a 2f2f 7777 772e  xsi=\"http://www.\n-00000400: 7733 2e6f 7267 2f32 3030 312f 584d 4c53  w3.org/2001/XMLS\n-00000410: 6368 656d 612d 696e 7374 616e 6365 223e  chema-instance\">\n-00000420: 0d0a 2020 3c6d 6f64 656c 5665 7273 696f  ..  <modelVersio\n-00000430: 6e3e 342e 302e 303c 2f6d 6f64 656c 5665  n>4.0.0</modelVe\n-00000440: 7273 696f 6e3e 0d0a 2020 3c70 6172 656e  rsion>..  <paren\n-00000450: 743e 0d0a 2020 2020 3c67 726f 7570 4964  t>..    <groupId\n-00000460: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-00000470: 6f3c 2f67 726f 7570 4964 3e0d 0a20 2020  o</groupId>..   \n-00000480: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-00000490: 626f 2d72 7063 3c2f 6172 7469 6661 6374  bo-rpc</artifact\n-000004a0: 4964 3e0d 0a20 2020 203c 7665 7273 696f  Id>..    <versio\n-000004b0: 6e3e 322e 372e 3130 3c2f 7665 7273 696f  n>2.7.10</versio\n-000004c0: 6e3e 0d0a 2020 3c2f 7061 7265 6e74 3e0d  n>..  </parent>.\n-000004d0: 0a20 203c 6772 6f75 7049 643e 6f72 672e  .  <groupId>org.\n-000004e0: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n-000004f0: 6f75 7049 643e 0d0a 2020 3c61 7274 6966  oupId>..  <artif\n-00000500: 6163 7449 643e 6475 6262 6f2d 7270 632d  actId>dubbo-rpc-\n-00000510: 6772 7063 3c2f 6172 7469 6661 6374 4964  grpc</artifactId\n-00000520: 3e0d 0a20 203c 7665 7273 696f 6e3e 322e  >..  <version>2.\n-00000530: 372e 3130 3c2f 7665 7273 696f 6e3e 0d0a  7.10</version>..\n-00000540: 2020 3c6e 616d 653e 247b 7072 6f6a 6563    <name>${projec\n-00000550: 742e 6172 7469 6661 6374 4964 7d3c 2f6e  t.artifactId}</n\n-00000560: 616d 653e 0d0a 2020 3c64 6573 6372 6970  ame>..  <descrip\n-00000570: 7469 6f6e 3e54 6865 2067 5250 4320 696e  tion>The gRPC in\n-00000580: 7465 6772 6174 696f 6e20 6d6f 6475 6c65  tegration module\n-00000590: 3c2f 6465 7363 7269 7074 696f 6e3e 0d0a  </description>..\n-000005a0: 2020 3c6c 6963 656e 7365 733e 0d0a 2020    <licenses>..  \n-000005b0: 2020 3c6c 6963 656e 7365 3e0d 0a20 2020    <license>..   \n-000005c0: 2020 203c 6e61 6d65 3e41 7061 6368 6520     <name>Apache \n-000005d0: 4c69 6365 6e73 652c 2056 6572 7369 6f6e  License, Version\n-000005e0: 2032 2e30 3c2f 6e61 6d65 3e0d 0a20 2020   2.0</name>..   \n-000005f0: 2020 203c 7572 6c3e 6874 7470 3a2f 2f77     <url>http://w\n-00000600: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-00000610: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000620: 2e30 3c2f 7572 6c3e 0d0a 2020 2020 2020  .0</url>..      \n-00000630: 3c64 6973 7472 6962 7574 696f 6e3e 7265  <distribution>re\n-00000640: 706f 3c2f 6469 7374 7269 6275 7469 6f6e  po</distribution\n-00000650: 3e0d 0a20 2020 203c 2f6c 6963 656e 7365  >..    </license\n-00000660: 3e0d 0a20 203c 2f6c 6963 656e 7365 733e  >..  </licenses>\n-00000670: 0d0a 2020 3c70 726f 7065 7274 6965 733e  ..  <properties>\n-00000680: 0d0a 2020 2020 3c73 6b69 705f 6d61 7665  ..    <skip_mave\n-00000690: 6e5f 6465 706c 6f79 3e66 616c 7365 3c2f  n_deploy>false</\n-000006a0: 736b 6970 5f6d 6176 656e 5f64 6570 6c6f  skip_maven_deplo\n-000006b0: 793e 0d0a 2020 3c2f 7072 6f70 6572 7469  y>..  </properti\n-000006c0: 6573 3e0d 0a20 203c 6465 7065 6e64 656e  es>..  <dependen\n-000006d0: 6369 6573 3e0d 0a20 2020 203c 6465 7065  cies>..    <depe\n-000006e0: 6e64 656e 6379 3e0d 0a20 2020 2020 203c  ndency>..      <\n-000006f0: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n-00000700: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n-00000710: 643e 0d0a 2020 2020 2020 3c61 7274 6966  d>..      <artif\n-00000720: 6163 7449 643e 6475 6262 6f2d 7270 632d  actId>dubbo-rpc-\n-00000730: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n-00000740: 0d0a 2020 2020 2020 3c76 6572 7369 6f6e  ..      <version\n-00000750: 3e24 7b70 726f 6a65 6374 2e70 6172 656e  >${project.paren\n-00000760: 742e 7665 7273 696f 6e7d 3c2f 7665 7273  t.version}</vers\n-00000770: 696f 6e3e 0d0a 2020 2020 3c2f 6465 7065  ion>..    </depe\n-00000780: 6e64 656e 6379 3e0d 0a20 2020 203c 6465  ndency>..    <de\n-00000790: 7065 6e64 656e 6379 3e0d 0a20 2020 2020  pendency>..     \n-000007a0: 203c 6772 6f75 7049 643e 6f72 672e 6170   <groupId>org.ap\n-000007b0: 6163 6865 2e64 7562 626f 3c2f 6772 6f75  ache.dubbo</grou\n-000007c0: 7049 643e 0d0a 2020 2020 2020 3c61 7274  pId>..      <art\n-000007d0: 6966 6163 7449 643e 6475 6262 6f2d 7265  ifactId>dubbo-re\n-000007e0: 6d6f 7469 6e67 2d68 7474 703c 2f61 7274  moting-http</art\n-000007f0: 6966 6163 7449 643e 0d0a 2020 2020 2020  ifactId>..      \n-00000800: 3c76 6572 7369 6f6e 3e24 7b70 726f 6a65  <version>${proje\n-00000810: 6374 2e70 6172 656e 742e 7665 7273 696f  ct.parent.versio\n-00000820: 6e7d 3c2f 7665 7273 696f 6e3e 0d0a 2020  n}</version>..  \n-00000830: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000840: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-00000850: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-00000860: 643e 696f 2e67 7270 633c 2f67 726f 7570  d>io.grpc</group\n-00000870: 4964 3e0d 0a20 2020 2020 203c 6172 7469  Id>..      <arti\n-00000880: 6661 6374 4964 3e67 7270 632d 6e65 7474  factId>grpc-nett\n-00000890: 793c 2f61 7274 6966 6163 7449 643e 0d0a  y</artifactId>..\n-000008a0: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n-000008b0: 3e0d 0a20 2020 203c 6465 7065 6e64 656e  >..    <dependen\n-000008c0: 6379 3e0d 0a20 2020 2020 203c 6772 6f75  cy>..      <grou\n-000008d0: 7049 643e 696f 2e67 7270 633c 2f67 726f  pId>io.grpc</gro\n-000008e0: 7570 4964 3e0d 0a20 2020 2020 203c 6172  upId>..      <ar\n-000008f0: 7469 6661 6374 4964 3e67 7270 632d 7072  tifactId>grpc-pr\n-00000900: 6f74 6f62 7566 3c2f 6172 7469 6661 6374  otobuf</artifact\n-00000910: 4964 3e0d 0a20 2020 203c 2f64 6570 656e  Id>..    </depen\n-00000920: 6465 6e63 793e 0d0a 2020 2020 3c64 6570  dency>..    <dep\n-00000930: 656e 6465 6e63 793e 0d0a 2020 2020 2020  endency>..      \n-00000940: 3c67 726f 7570 4964 3e69 6f2e 6772 7063  <groupId>io.grpc\n-00000950: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-00000960: 2020 3c61 7274 6966 6163 7449 643e 6772    <artifactId>gr\n-00000970: 7063 2d73 7475 623c 2f61 7274 6966 6163  pc-stub</artifac\n-00000980: 7449 643e 0d0a 2020 2020 3c2f 6465 7065  tId>..    </depe\n-00000990: 6e64 656e 6379 3e0d 0a20 2020 203c 6465  ndency>..    <de\n-000009a0: 7065 6e64 656e 6379 3e0d 0a20 2020 2020  pendency>..     \n-000009b0: 203c 6772 6f75 7049 643e 696f 2e67 7270   <groupId>io.grp\n-000009c0: 633c 2f67 726f 7570 4964 3e0d 0a20 2020  c</groupId>..   \n-000009d0: 2020 203c 6172 7469 6661 6374 4964 3e67     <artifactId>g\n-000009e0: 7270 632d 636f 7265 3c2f 6172 7469 6661  rpc-core</artifa\n-000009f0: 6374 4964 3e0d 0a20 2020 203c 2f64 6570  ctId>..    </dep\n-00000a00: 656e 6465 6e63 793e 0d0a 2020 2020 3c64  endency>..    <d\n-00000a10: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-00000a20: 2020 3c67 726f 7570 4964 3e6f 7267 2e73    <groupId>org.s\n-00000a30: 7072 696e 6766 7261 6d65 776f 726b 3c2f  pringframework</\n-00000a40: 6772 6f75 7049 643e 0d0a 2020 2020 2020  groupId>..      \n-00000a50: 3c61 7274 6966 6163 7449 643e 7370 7269  <artifactId>spri\n-00000a60: 6e67 2d74 6573 743c 2f61 7274 6966 6163  ng-test</artifac\n-00000a70: 7449 643e 0d0a 2020 2020 2020 3c73 636f  tId>..      <sco\n-00000a80: 7065 3e74 6573 743c 2f73 636f 7065 3e0d  pe>test</scope>.\n-00000a90: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n-00000aa0: 793e 0d0a 2020 3c2f 6465 7065 6e64 656e  y>..  </dependen\n-00000ab0: 6369 6573 3e0d 0a3c 2f70 726f 6a65 6374  cies>..</project\n-00000ac0: 3e0d 0a                                  >..\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 4c69  F-8\"?>.<!--.  Li\n+00000030: 6365 6e73 6564 2074 6f20 7468 6520 4170  censed to the Ap\n+00000040: 6163 6865 2053 6f66 7477 6172 6520 466f  ache Software Fo\n+00000050: 756e 6461 7469 6f6e 2028 4153 4629 2075  undation (ASF) u\n+00000060: 6e64 6572 206f 6e65 206f 7220 6d6f 7265  nder one or more\n+00000070: 0a20 2063 6f6e 7472 6962 7574 6f72 206c  .  contributor l\n+00000080: 6963 656e 7365 2061 6772 6565 6d65 6e74  icense agreement\n+00000090: 732e 2020 5365 6520 7468 6520 4e4f 5449  s.  See the NOTI\n+000000a0: 4345 2066 696c 6520 6469 7374 7269 6275  CE file distribu\n+000000b0: 7465 6420 7769 7468 0a20 2074 6869 7320  ted with.  this \n+000000c0: 776f 726b 2066 6f72 2061 6464 6974 696f  work for additio\n+000000d0: 6e61 6c20 696e 666f 726d 6174 696f 6e20  nal information \n+000000e0: 7265 6761 7264 696e 6720 636f 7079 7269  regarding copyri\n+000000f0: 6768 7420 6f77 6e65 7273 6869 702e 0a20  ght ownership.. \n+00000100: 2054 6865 2041 5346 206c 6963 656e 7365   The ASF license\n+00000110: 7320 7468 6973 2066 696c 6520 746f 2059  s this file to Y\n+00000120: 6f75 2075 6e64 6572 2074 6865 2041 7061  ou under the Apa\n+00000130: 6368 6520 4c69 6365 6e73 652c 2056 6572  che License, Ver\n+00000140: 7369 6f6e 2032 2e30 0a20 2028 7468 6520  sion 2.0.  (the \n+00000150: 224c 6963 656e 7365 2229 3b20 796f 7520  \"License\"); you \n+00000160: 6d61 7920 6e6f 7420 7573 6520 7468 6973  may not use this\n+00000170: 2066 696c 6520 6578 6365 7074 2069 6e20   file except in \n+00000180: 636f 6d70 6c69 616e 6365 2077 6974 680a  compliance with.\n+00000190: 2020 7468 6520 4c69 6365 6e73 652e 2020    the License.  \n+000001a0: 596f 7520 6d61 7920 6f62 7461 696e 2061  You may obtain a\n+000001b0: 2063 6f70 7920 6f66 2074 6865 204c 6963   copy of the Lic\n+000001c0: 656e 7365 2061 740a 0a20 2020 2020 2068  ense at..      h\n+000001d0: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+000001e0: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+000001f0: 4345 4e53 452d 322e 300a 0a20 2055 6e6c  CENSE-2.0..  Unl\n+00000200: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n+00000210: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n+00000220: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n+00000230: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n+00000240: 0a20 2064 6973 7472 6962 7574 6564 2075  .  distributed u\n+00000250: 6e64 6572 2074 6865 204c 6963 656e 7365  nder the License\n+00000260: 2069 7320 6469 7374 7269 6275 7465 6420   is distributed \n+00000270: 6f6e 2061 6e20 2241 5320 4953 2220 4241  on an \"AS IS\" BA\n+00000280: 5349 532c 0a20 2057 4954 484f 5554 2057  SIS,.  WITHOUT W\n+00000290: 4152 5241 4e54 4945 5320 4f52 2043 4f4e  ARRANTIES OR CON\n+000002a0: 4449 5449 4f4e 5320 4f46 2041 4e59 204b  DITIONS OF ANY K\n+000002b0: 494e 442c 2065 6974 6865 7220 6578 7072  IND, either expr\n+000002c0: 6573 7320 6f72 2069 6d70 6c69 6564 2e0a  ess or implied..\n+000002d0: 2020 5365 6520 7468 6520 4c69 6365 6e73    See the Licens\n+000002e0: 6520 666f 7220 7468 6520 7370 6563 6966  e for the specif\n+000002f0: 6963 206c 616e 6775 6167 6520 676f 7665  ic language gove\n+00000300: 726e 696e 6720 7065 726d 6973 7369 6f6e  rning permission\n+00000310: 7320 616e 640a 2020 6c69 6d69 7461 7469  s and.  limitati\n+00000320: 6f6e 7320 756e 6465 7220 7468 6520 4c69  ons under the Li\n+00000330: 6365 6e73 652e 0a20 202d 2d3e 0a3c 7072  cense..  -->.<pr\n+00000340: 6f6a 6563 7420 7873 693a 7363 6865 6d61  oject xsi:schema\n+00000350: 4c6f 6361 7469 6f6e 3d22 6874 7470 3a2f  Location=\"http:/\n+00000360: 2f6d 6176 656e 2e61 7061 6368 652e 6f72  /maven.apache.or\n+00000370: 672f 504f 4d2f 342e 302e 3020 6874 7470  g/POM/4.0.0 http\n+00000380: 733a 2f2f 6d61 7665 6e2e 6170 6163 6865  s://maven.apache\n+00000390: 2e6f 7267 2f78 7364 2f6d 6176 656e 2d34  .org/xsd/maven-4\n+000003a0: 2e30 2e30 2e78 7364 2220 786d 6c6e 733d  .0.0.xsd\" xmlns=\n+000003b0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n+000003c0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n+000003d0: 2e30 220a 2020 2020 786d 6c6e 733a 7873  .0\".    xmlns:xs\n+000003e0: 693d 2268 7474 703a 2f2f 7777 772e 7733  i=\"http://www.w3\n+000003f0: 2e6f 7267 2f32 3030 312f 584d 4c53 6368  .org/2001/XMLSch\n+00000400: 656d 612d 696e 7374 616e 6365 223e 0a20  ema-instance\">. \n+00000410: 203c 6d6f 6465 6c56 6572 7369 6f6e 3e34   <modelVersion>4\n+00000420: 2e30 2e30 3c2f 6d6f 6465 6c56 6572 7369  .0.0</modelVersi\n+00000430: 6f6e 3e0a 2020 3c70 6172 656e 743e 0a20  on>.  <parent>. \n+00000440: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000450: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n+00000460: 6f75 7049 643e 0a20 2020 203c 6172 7469  oupId>.    <arti\n+00000470: 6661 6374 4964 3e64 7562 626f 2d72 7063  factId>dubbo-rpc\n+00000480: 3c2f 6172 7469 6661 6374 4964 3e0a 2020  </artifactId>.  \n+00000490: 2020 3c76 6572 7369 6f6e 3e32 2e37 2e31    <version>2.7.1\n+000004a0: 303c 2f76 6572 7369 6f6e 3e0a 2020 3c2f  0</version>.  </\n+000004b0: 7061 7265 6e74 3e0a 2020 3c67 726f 7570  parent>.  <group\n+000004c0: 4964 3e6f 7267 2e61 7061 6368 652e 6475  Id>org.apache.du\n+000004d0: 6262 6f3c 2f67 726f 7570 4964 3e0a 2020  bbo</groupId>.  \n+000004e0: 3c61 7274 6966 6163 7449 643e 6475 6262  <artifactId>dubb\n+000004f0: 6f2d 7270 632d 6772 7063 3c2f 6172 7469  o-rpc-grpc</arti\n+00000500: 6661 6374 4964 3e0a 2020 3c76 6572 7369  factId>.  <versi\n+00000510: 6f6e 3e32 2e37 2e31 303c 2f76 6572 7369  on>2.7.10</versi\n+00000520: 6f6e 3e0a 2020 3c6e 616d 653e 247b 7072  on>.  <name>${pr\n+00000530: 6f6a 6563 742e 6172 7469 6661 6374 4964  oject.artifactId\n+00000540: 7d3c 2f6e 616d 653e 0a20 203c 6465 7363  }</name>.  <desc\n+00000550: 7269 7074 696f 6e3e 5468 6520 6752 5043  ription>The gRPC\n+00000560: 2069 6e74 6567 7261 7469 6f6e 206d 6f64   integration mod\n+00000570: 756c 653c 2f64 6573 6372 6970 7469 6f6e  ule</description\n+00000580: 3e0a 2020 3c6c 6963 656e 7365 733e 0a20  >.  <licenses>. \n+00000590: 2020 203c 6c69 6365 6e73 653e 0a20 2020     <license>.   \n+000005a0: 2020 203c 6e61 6d65 3e41 7061 6368 6520     <name>Apache \n+000005b0: 4c69 6365 6e73 652c 2056 6572 7369 6f6e  License, Version\n+000005c0: 2032 2e30 3c2f 6e61 6d65 3e0a 2020 2020   2.0</name>.    \n+000005d0: 2020 3c75 726c 3e68 7474 703a 2f2f 7777    <url>http://ww\n+000005e0: 772e 6170 6163 6865 2e6f 7267 2f6c 6963  w.apache.org/lic\n+000005f0: 656e 7365 732f 4c49 4345 4e53 452d 322e  enses/LICENSE-2.\n+00000600: 303c 2f75 726c 3e0a 2020 2020 2020 3c64  0</url>.      <d\n+00000610: 6973 7472 6962 7574 696f 6e3e 7265 706f  istribution>repo\n+00000620: 3c2f 6469 7374 7269 6275 7469 6f6e 3e0a  </distribution>.\n+00000630: 2020 2020 3c2f 6c69 6365 6e73 653e 0a20      </license>. \n+00000640: 203c 2f6c 6963 656e 7365 733e 0a20 203c   </licenses>.  <\n+00000650: 7072 6f70 6572 7469 6573 3e0a 2020 2020  properties>.    \n+00000660: 3c73 6b69 705f 6d61 7665 6e5f 6465 706c  <skip_maven_depl\n+00000670: 6f79 3e66 616c 7365 3c2f 736b 6970 5f6d  oy>false</skip_m\n+00000680: 6176 656e 5f64 6570 6c6f 793e 0a20 203c  aven_deploy>.  <\n+00000690: 2f70 726f 7065 7274 6965 733e 0a20 203c  /properties>.  <\n+000006a0: 6465 7065 6e64 656e 6369 6573 3e0a 2020  dependencies>.  \n+000006b0: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+000006c0: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n+000006d0: 672e 6170 6163 6865 2e64 7562 626f 3c2f  g.apache.dubbo</\n+000006e0: 6772 6f75 7049 643e 0a20 2020 2020 203c  groupId>.      <\n+000006f0: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n+00000700: 2d72 7063 2d61 7069 3c2f 6172 7469 6661  -rpc-api</artifa\n+00000710: 6374 4964 3e0a 2020 2020 2020 3c76 6572  ctId>.      <ver\n+00000720: 7369 6f6e 3e24 7b70 726f 6a65 6374 2e70  sion>${project.p\n+00000730: 6172 656e 742e 7665 7273 696f 6e7d 3c2f  arent.version}</\n+00000740: 7665 7273 696f 6e3e 0a20 2020 203c 2f64  version>.    </d\n+00000750: 6570 656e 6465 6e63 793e 0a20 2020 203c  ependency>.    <\n+00000760: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000770: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n+00000780: 7061 6368 652e 6475 6262 6f3c 2f67 726f  pache.dubbo</gro\n+00000790: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+000007a0: 6966 6163 7449 643e 6475 6262 6f2d 7265  ifactId>dubbo-re\n+000007b0: 6d6f 7469 6e67 2d68 7474 703c 2f61 7274  moting-http</art\n+000007c0: 6966 6163 7449 643e 0a20 2020 2020 203c  ifactId>.      <\n+000007d0: 7665 7273 696f 6e3e 247b 7072 6f6a 6563  version>${projec\n+000007e0: 742e 7061 7265 6e74 2e76 6572 7369 6f6e  t.parent.version\n+000007f0: 7d3c 2f76 6572 7369 6f6e 3e0a 2020 2020  }</version>.    \n+00000800: 3c2f 6465 7065 6e64 656e 6379 3e0a 2020  </dependency>.  \n+00000810: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+00000820: 2020 2020 203c 6772 6f75 7049 643e 696f       <groupId>io\n+00000830: 2e67 7270 633c 2f67 726f 7570 4964 3e0a  .grpc</groupId>.\n+00000840: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n+00000850: 643e 6772 7063 2d6e 6574 7479 3c2f 6172  d>grpc-netty</ar\n+00000860: 7469 6661 6374 4964 3e0a 2020 2020 3c2f  tifactId>.    </\n+00000870: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000880: 3c64 6570 656e 6465 6e63 793e 0a20 2020  <dependency>.   \n+00000890: 2020 203c 6772 6f75 7049 643e 696f 2e67     <groupId>io.g\n+000008a0: 7270 633c 2f67 726f 7570 4964 3e0a 2020  rpc</groupId>.  \n+000008b0: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+000008c0: 6772 7063 2d70 726f 746f 6275 663c 2f61  grpc-protobuf</a\n+000008d0: 7274 6966 6163 7449 643e 0a20 2020 203c  rtifactId>.    <\n+000008e0: 2f64 6570 656e 6465 6e63 793e 0a20 2020  /dependency>.   \n+000008f0: 203c 6465 7065 6e64 656e 6379 3e0a 2020   <dependency>.  \n+00000900: 2020 2020 3c67 726f 7570 4964 3e69 6f2e      <groupId>io.\n+00000910: 6772 7063 3c2f 6772 6f75 7049 643e 0a20  grpc</groupId>. \n+00000920: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00000930: 3e67 7270 632d 7374 7562 3c2f 6172 7469  >grpc-stub</arti\n+00000940: 6661 6374 4964 3e0a 2020 2020 3c2f 6465  factId>.    </de\n+00000950: 7065 6e64 656e 6379 3e0a 2020 2020 3c64  pendency>.    <d\n+00000960: 6570 656e 6465 6e63 793e 0a20 2020 2020  ependency>.     \n+00000970: 203c 6772 6f75 7049 643e 696f 2e67 7270   <groupId>io.grp\n+00000980: 633c 2f67 726f 7570 4964 3e0a 2020 2020  c</groupId>.    \n+00000990: 2020 3c61 7274 6966 6163 7449 643e 6772    <artifactId>gr\n+000009a0: 7063 2d63 6f72 653c 2f61 7274 6966 6163  pc-core</artifac\n+000009b0: 7449 643e 0a20 2020 203c 2f64 6570 656e  tId>.    </depen\n+000009c0: 6465 6e63 793e 0a20 2020 203c 6465 7065  dency>.    <depe\n+000009d0: 6e64 656e 6379 3e0a 2020 2020 2020 3c67  ndency>.      <g\n+000009e0: 726f 7570 4964 3e6f 7267 2e73 7072 696e  roupId>org.sprin\n+000009f0: 6766 7261 6d65 776f 726b 3c2f 6772 6f75  gframework</grou\n+00000a00: 7049 643e 0a20 2020 2020 203c 6172 7469  pId>.      <arti\n+00000a10: 6661 6374 4964 3e73 7072 696e 672d 7465  factId>spring-te\n+00000a20: 7374 3c2f 6172 7469 6661 6374 4964 3e0a  st</artifactId>.\n+00000a30: 2020 2020 2020 3c73 636f 7065 3e74 6573        <scope>tes\n+00000a40: 743c 2f73 636f 7065 3e0a 2020 2020 3c2f  t</scope>.    </\n+00000a50: 6465 7065 6e64 656e 6379 3e0a 2020 3c2f  dependency>.  </\n+00000a60: 6465 7065 6e64 656e 6369 6573 3e0a 3c2f  dependencies>.</\n+00000a70: 7072 6f6a 6563 743e 0a                   project>.\n"}]}
